Received: by 2002:a89:48b:0:b0:1f5:f2ab:c469 with SMTP id a11csp957386lqd; Thu, 25 Apr 2024 01:36:28 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVYmluSH7jczqh/LoiBQJx5zPZKC5C1L2/J0VCVft1i6SZf+KdroN47R4hArQgIpqr9ipK5gRPXFYHWwFdVMs1dMre2JD3t3s52lpMhkg== X-Google-Smtp-Source: AGHT+IFNab0NvGsvWh+JWvzstJlWMvJyONDgTlgIgSfc3O4rHD4MTeFh7TCqB2guH3MmXoi4p4OH X-Received: by 2002:a05:6808:f0d:b0:3c8:44b7:650a with SMTP id m13-20020a0568080f0d00b003c844b7650amr4775292oiw.12.1714034187910; Thu, 25 Apr 2024 01:36:27 -0700 (PDT) Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id d19-20020a630e13000000b005dc491389a5si13229843pgl.812.2024.04.25.01.36.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Apr 2024 01:36:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-158201-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=hj3PlsXm; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-158201-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-158201-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7100A285E33 for ; Thu, 25 Apr 2024 08:36:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B4A987E59F; Thu, 25 Apr 2024 08:36:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="hj3PlsXm" Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2056.outbound.protection.outlook.com [40.107.20.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1931757E1; Thu, 25 Apr 2024 08:36:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.20.56 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714034180; cv=fail; b=ke7wSZA9VTAQIOkW2ny4QQkm1gZcoHAYXwBYD5ZgSD3F76OZE8L3nvnZhqtxNOT4BZyjV2G5YHRAJTt//VjvcuN0+JiTtf7n/kSvnYQt9CL6/xvCe2cZ/dF7ZLNKcVQrDe3dgEji73PC5DKqDxcnClS0u90RGXMK/NxzCakpVKs= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714034180; c=relaxed/simple; bh=0QsDhh0Xf7ECxREop6eg2ZAobRb5l6eWI4Ev8yLd3oE=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=HjTHRKHuJpVmIAt4/jOVPlNXbE0+faPsv9ybb3NeMEC7FYbc3GWA9ksXNYywgKaRPw//q1zDSj0/YFKtRHLE+KAVq6+zMXgVQZWBQKWnaUBhYOQCfTDc+I23JDCD3/nPuyxoiSmkFMZYMyPehpHmSDI25RIsMaCOeQ7g+H/4ABg= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b=hj3PlsXm; arc=fail smtp.client-ip=40.107.20.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dhaOnFOhACSCXqz3gCh2MblTBb/FYSzfvzmhmlqSp8FhrTq35o5wLeLdzpvqtjGAHe72i1rJlPSskMD1K/Ub1k633XJysEEZhBJLwI0MlSRnq5upC+C+V39aVmwJdWmXWhVN9klD4n97t8NqsagnmYtUTENB4+8IAEr/DkXag21YvE4Zmu9l9CEzt6QORvDCtRDe/GPP4fqzPrK8p1eChHSKGx7HhvMU8wNiwt/K3RLzh94v0BuHiEnsWt9cXVKF2A+vGODXx0NwTqN25LjjoI6/aVfoCVC+njprhONDBREoS/0NpGEzXFuDFzYN2vY1/lzwcMUyXI89h1PKTUzDXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0QsDhh0Xf7ECxREop6eg2ZAobRb5l6eWI4Ev8yLd3oE=; b=T7iIyVeAk+lYkLWSIr3DIms/uwK5ZIWjyBK4DWIwFLAhIHLzjIb1+3GpR49An9rdx2vw1CNm3xUr8hoqfOvS7ipdkAOwag5AgY2nF9OT+mWI0D6DhtqnHypiVDJ7bdIfGP10Wfq0xFYTBH4y1S9GGyH+lZcRGYM+8bmG2K2CyVSzxa/iy4U5PLwpSvEVnph9hqwQHjNbjcE7bbF2UJxbtY5L5fqvka5bZVXLn8yG94kGaJVB3BM1UEFYODR/eGvxLitNwtOT91BLNEHbqsAoUoL5M5fZomhsh3uBwP09Uq0eA4adwZds5wJEqlMDG1mK4wcrnJwi2kmicYa3besYrw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0QsDhh0Xf7ECxREop6eg2ZAobRb5l6eWI4Ev8yLd3oE=; b=hj3PlsXmBUkpKUCELwDZqlQudnWdq566EBJ574A47wPsokZJrsXr2LkzOmbD3xG4UVaG2igaq1LiyAbXR/oDsfAnmdoeiG5Q8y8+zcL6SqLNL6S4YM17GDQo11zMv98TDktVLiK5W4lJHgSrlUZ3BxKxUGf8zIVcpjTf0yCAJoI= Received: from DU2PR04MB8677.eurprd04.prod.outlook.com (2603:10a6:10:2dc::14) by DUZPR04MB9917.eurprd04.prod.outlook.com (2603:10a6:10:4d8::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Thu, 25 Apr 2024 08:36:14 +0000 Received: from DU2PR04MB8677.eurprd04.prod.outlook.com ([fe80::13a3:8937:4e42:19b9]) by DU2PR04MB8677.eurprd04.prod.outlook.com ([fe80::13a3:8937:4e42:19b9%4]) with mapi id 15.20.7472.044; Thu, 25 Apr 2024 08:36:13 +0000 From: Hongxing Zhu To: Rob Herring CC: "conor@kernel.org" , "vkoul@kernel.org" , "kishon@kernel.org" , "krzysztof.kozlowski+dt@linaro.org" , Frank Li , "conor+dt@kernel.org" , "linux-phy@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "kernel@pengutronix.de" , "imx@lists.linux.dev" Subject: RE: [PATCH v3 3/3] phy: freescale: imx8qm-hsio: Add i.MX8QM HSIO PHY driver support Thread-Topic: [PATCH v3 3/3] phy: freescale: imx8qm-hsio: Add i.MX8QM HSIO PHY driver support Thread-Index: AQHalhIzYEa9tPRmt0ipQ+ozfHj6nLF39r+AgACkTdA= Date: Thu, 25 Apr 2024 08:36:13 +0000 Message-ID: References: <1713939683-15328-1-git-send-email-hongxing.zhu@nxp.com> <1713939683-15328-4-git-send-email-hongxing.zhu@nxp.com> <20240424215039.GA460126-robh@kernel.org> In-Reply-To: <20240424215039.GA460126-robh@kernel.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DU2PR04MB8677:EE_|DUZPR04MB9917:EE_ x-ms-office365-filtering-correlation-id: b757b6de-9b6a-4eee-0f44-08dc6502c46b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: =?gb2312?B?UGZNUmdsWlV5WUdjRjBxZlhpWml4aUw5VlB5OGRUZjhtb3FHOWdIVjN3Nzh4?= =?gb2312?B?blJYZkRPdmNUeVltUEQ2ZS9jMlh4SVd4VGVJSjZnUGVHcGJkdWN2VXhQczBO?= =?gb2312?B?ZktSWTU0TVgrczU0eWJ2MlpSZ3drWk9JaVJqK1d2Qkkyc002Rk02Q0F4K2NQ?= =?gb2312?B?Q3hjWDN2djFucGxxNWtDa2ZRMXpBQkhzeE5yY1FxZjZSKzdZaHhUMjdaazN3?= =?gb2312?B?bDNCZncwUDVGWW9VdlhZalFISEY0b3NzdTdNKzRzKytCemM0MDJuL2orSUpZ?= =?gb2312?B?RWVQRUVndGsvak5RRG9BY2o1eFFrSVFOYnYzV0JxUUdBWkpwRHlyMTBwRld3?= =?gb2312?B?UmJrUkJjUWl3aW9TQkEvMGdRaGFkZlVxeWczakhNREZXNSt2cGJNRkwyMXFO?= =?gb2312?B?aUlUMWhQQko1Zlk5Njlad1V3a1loTDY1ZklDTlhWemtoVmVySWMydHZrWjdi?= =?gb2312?B?Q0ZCN0tHWGc3TzNlMDYyUTYvS3F1T3NUT3VMczd2NU5EMXRxVFluRmJvVStZ?= =?gb2312?B?QUd2R2VraC92TVgya0hIZ1plWmFVZXNicFF1MDdBRlFLbnpVNVRwamk4QmRo?= =?gb2312?B?ZGdIbXAwNWZXQ2FmdnZaaklXc1ZjTDEwS2EzREIyZEhFWGpxNUh6WW83WmlZ?= =?gb2312?B?V1gxcy80SUUyWjZaRkR3K2ZSMG8rbnptMDNjWmtYVEgxWGJzOW0rSWhDUGVk?= =?gb2312?B?VEd3NC96WlBMay9iY1EzZGRkcUduaURIeHA2TmtSeUNWU1NHNzlWNUtYSkE3?= =?gb2312?B?TTBSd1lnTWhRakNld1RtUW9TNmVEZkhzczBidkV5UXFkNWxpMjJSYWZFVmtV?= =?gb2312?B?YmdnSk5Vd3hwWTFOeFdPRVNhN09Zb3R4ek1NeXk1VmovVkU4TzJOM3BDOW00?= =?gb2312?B?T1pjdWpPTldOZFZrbm03Zm9HNG44UEE3dUZhTGlsWHZIM3pNajNTK0xpUzVX?= =?gb2312?B?UnQxM1RWY0JuR2FrMDlycVJkNjRNekFibFdGODRVNldRZXFHYXBzaWpLTUJk?= =?gb2312?B?SC9rT242ZFhLNUN6M2xOQ3Ezc3Y0ajQwMGE2cXc5SGxlU1Q2MzN0TWpZc01u?= =?gb2312?B?OGlsMGREclJKSWZyQW1Mb1R0eGZoSkowY3lBK3ZqcVVmcFBUSWZGS2xudFRO?= =?gb2312?B?K1A3MkZZOHZvU1RvajJIanEwRFdLRHFQZk12QWhWY1oweVp2RWxxNnBxWTNR?= =?gb2312?B?UlAyNnFTYU84YkU0cHp2elU5TStFTFN0cE9TWVI4bmRCejY0V25IK3NGejJo?= =?gb2312?B?M3JOSGdocy9kU05PVk1pMlBDdm50bUw3VXNhZUMzSkJaMG56VXZsRzhxY292?= =?gb2312?B?Z2FOcWVTeE53SDVxOEd4S3QrRStMMlFIUHVjY2d2Q2w4T3QzY0czc3RaVi9x?= =?gb2312?B?ejBqSW5LMWNibEZYYkFwQy95Wms2aWdIazJvSE1jNGh4QmNEbmF1RmlKa0k4?= =?gb2312?B?ZE5CUUd2NTdtdmROL2pra2dCYnZXYU1RUkxzUndGYzdQMTZ2VVRwTlVVWU0z?= =?gb2312?B?U2RCUCtEOXh4UHIyTVdzRFVBYkJYTlZ0eXQ2Q3V2bFdhZnozejhjd200Zi8w?= =?gb2312?B?dHFsUWNNWkNmbXJQaEg5U09yeDZGNVdpdk1zaUVoZEZEWktmdkpxeXA5YTJz?= =?gb2312?B?NHliU3IzL2hYcWV3d3lUVHVLZXBYbmZlTS9wT2VCRXMxenArVjlCVFZWc0tp?= =?gb2312?B?ajlpM2tLTkFLMjd3RFovem52QStyVlF6bE9uNWpCK0JWdUUyMVNRVXEzTHBF?= =?gb2312?B?ejBYRU5xcm53cytEcCtieHJKejdHQk5IN1lNY0tGeWtTRVlZZTZOc2hUempM?= =?gb2312?B?SFVvZW5oZVlKcGpyZ1hiZz09?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:zh-cn;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8677.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(1800799015)(7416005)(376005)(366007)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?T3EwQVhEcjB0UXFZenBSc2tZQlExMTd5UUl4aEI5Tnl4SW9JZW9QL2pQVmMy?= =?gb2312?B?OS9pQWlrcVd0L2pXTWxyaDFRNmtMZ0c4QVNwaUxmZmVHQ3RPVXNqbzJGN0x6?= =?gb2312?B?Y0paNFBlSExwdC80dGIvZEZuM1l5cHNZcytyQUlBNjAyTitnbkJKbEJLUkQ3?= =?gb2312?B?RnYzbFgzeitmdGlzTDlTR3krbldMMlNCOERyWVAwQWgxVm8yR21TZ3B1akg1?= =?gb2312?B?UVdaZVRocmFVVXZ6UWUxalNmQUNweGErdjJ5S1NiK1pKS05qMlRzdExJWmZ1?= =?gb2312?B?SXdiZlNaMjVxa04vTFA3MTFHdi9RY2ppY3lVbzdFbXF0VWhPVkdSbTRtQmg3?= =?gb2312?B?Lzh3YWZscWo2aU01T2FSekRMeVB2ZjVWRkduNVZ5TE1HVDJHT1IrbWhJK0pm?= =?gb2312?B?MzNrVlFCL2N2UmEwQTJxYk0zdmcwOEVaeEI5NDJVQWNZWWcxNUU1N25UZWg2?= =?gb2312?B?QUYxc0NqWURSSllUNFVHQjBrbTFqNGVHdVp2c0pGL0Y1Myt0dTJ5TFN6bUdS?= =?gb2312?B?VHFhRlhRaXF2cmVMUjQ2a1U0TVFtZXVHcFRSV1MvdVRweGxjbW1qclRQd0pF?= =?gb2312?B?WFovTUxKZmhhS2FKYTlmSUZpUUtSZ09GVGo0cjdiVExpaWhKaDBpbkVPWHY1?= =?gb2312?B?cFAxSU9uV01oYjY2MjJPZ2FDbFRDSVdBQTNtMlU5Skx5OUkxS1pPSTgzT2pZ?= =?gb2312?B?S2U4RGhweDF6aHFtUktYM3A5TXdjcU51VDRmblFwcm95NlhZcGVxbTZMZXd0?= =?gb2312?B?QzZ4bndsOWhaaHA5eCtKRnFUMzdXbTZKbW1GT2RWaGk3OUN3Nnd4Mm9yWHJT?= =?gb2312?B?YmhVcjJHcXRpU1VsTVFYd1lmc2xrZFVLVEVCenNZWGdHbkZ3ZnJ1VjVDalZ1?= =?gb2312?B?Q25JWDdYV09uTWxPcThtai9XbVZIdWF6M2ViZGRzdzdYRXZMK21KK05OMVAy?= =?gb2312?B?SWYrQ3Q0YmU4amV0TEhyck05K3htWkhFTThFVFFMRURGbDlYYVBmTVYrdlZH?= =?gb2312?B?aU9JUnFDd3UrU2dEd0hFZThUSGxFREpVWDNVNmRtWW5BWDRBRTBTVmFPYnov?= =?gb2312?B?c0hWY01DOHdUbUYzK1VGd1c5TWE5OVJLS2NtUVZIUklZVllHTzdkVkYzdUJr?= =?gb2312?B?bXJpcjlNMEt6eUtWcVJHRkRQTTJBZ3FXdU5DMDBwejNJN2pMQTdDZG9mQjg2?= =?gb2312?B?SjNFM1QrNDhlazVVdkVibVVOdk1UczMvelh6TUxSR212ZXZSYzgvd0pBcTQ3?= =?gb2312?B?aFNWVHVyVFdRMjVuY3luaG1GZDBDTUxITTZ6SnFqTXlXaXhEQ3pwdFdwOWRa?= =?gb2312?B?YjEyZU02bnk2enlkbjRqelo1Nnh5OTBvbXJxRTk2WVphU2xGeUxyV2dtSVpl?= =?gb2312?B?Y1NiN1JUSDFHVmNsa0xjdUFCK21ReFdDeU5pY29mUWc0T1p1emFuOGNCZm95?= =?gb2312?B?R0JNeExXOXdjSVhaR2J3RHFFYjI5ZTBZOVdiWE1uZlJtU1lpNDZDcGp6QkNs?= =?gb2312?B?K3NrYUNIaEJOM3hZN1ZWNmRkTzBVSWZ3WWlLdlV1ZkkwTkppRnNMWWxveFBh?= =?gb2312?B?b2FFRVdxVytJeFhJaU5zb1RJdmpNenFvbFQ5UFR5ZlVRN1dtNXRRL3E5alBF?= =?gb2312?B?NUI0SFoxNzI1bnpielFEV1Z2Ry9uWDVhNlR0b0l2TjNUV2Z4bXVBMlMzaUpK?= =?gb2312?B?VGUvYzBYTTg1THNqTWxNVk9FNkdjWVRZajFpVFpCejEzKzVkMHNBZzVqZDRN?= =?gb2312?B?RWJUMTFlQncxQng0TTFVL2N0cFBSZ2VvR3JoNnpkQ2NZOFovTSswOVhJVlIz?= =?gb2312?B?eHQwS2g5bVhOYUU4TTJwcDFjWElBcEZSNVVGaUg3SkJIWjZvbnB2NmlSQ2Yx?= =?gb2312?B?Qm8rV3ZHWWdWVitxN0dxak1GUTMzZktzbmJ1TERxeWdlT1hRY1ZOK1dzN1h5?= =?gb2312?B?QmlCclgydTRBQzlsdmtQTTV5UkRGOUR1UjBhN05zTTU2Tms4S1VIcVpzQ1Vn?= =?gb2312?B?dGZhYXczaHJZN3FTY3hZZU9aU01zRG1SOXIxa2NSc2drVndRNG5FRDA1ak1M?= =?gb2312?B?UHpOZlhKMWZwVGVaZHpmQ3hwRXJ2MzlRWnZGcHFWMFBMZTJvUGJwK0tkNVh3?= =?gb2312?Q?KbTDoUyTkId6LIISDJZoe7OZJ?= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8677.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b757b6de-9b6a-4eee-0f44-08dc6502c46b X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Apr 2024 08:36:13.9358 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MojfWU+a4Cko1Szf+ZtBIZluecKW0pogtG/cyYgMQWBIgXFNxXlBaXkTLELfc5u4NOHddV54i2G7qjo9pFUCIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUZPR04MB9917 DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFJvYiBIZXJyaW5nIDxyb2Jo QGtlcm5lbC5vcmc+DQo+IFNlbnQ6IDIwMjTE6jTUwjI1yNUgNTo1MQ0KPiBUbzogSG9uZ3hpbmcg Wmh1IDxob25neGluZy56aHVAbnhwLmNvbT4NCj4gQ2M6IGNvbm9yQGtlcm5lbC5vcmc7IHZrb3Vs QGtlcm5lbC5vcmc7IGtpc2hvbkBrZXJuZWwub3JnOw0KPiBrcnp5c3p0b2Yua296bG93c2tpK2R0 QGxpbmFyby5vcmc7IEZyYW5rIExpIDxmcmFuay5saUBueHAuY29tPjsNCj4gY29ub3IrZHRAa2Vy bmVsLm9yZzsgbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmc7IGRldmljZXRyZWVAdmdlci5r ZXJuZWwub3JnOw0KPiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4 LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IGtlcm5lbEBwZW5ndXRyb25peC5kZTsgaW14QGxp c3RzLmxpbnV4LmRldg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYzIDMvM10gcGh5OiBmcmVlc2Nh bGU6IGlteDhxbS1oc2lvOiBBZGQgaS5NWDhRTSBIU0lPDQo+IFBIWSBkcml2ZXIgc3VwcG9ydA0K PiANCj4gT24gV2VkLCBBcHIgMjQsIDIwMjQgYXQgMDI6MjE6MjNQTSArMDgwMCwgUmljaGFyZCBa aHUgd3JvdGU6DQo+ID4gQWRkIGkuTVg4UU0gSFNJTyBQSFkgZHJpdmVyIHN1cHBvcnQuDQo+ID4N Cj4gPiBTaWduZWQtb2ZmLWJ5OiBSaWNoYXJkIFpodSA8aG9uZ3hpbmcuemh1QG54cC5jb20+DQo+ ID4gLS0tDQo+ID4gIGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnICAgICAgICAgICAgICAg fCAgIDggKw0KPiA+ICBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFrZWZpbGUgICAgICAgICAgICAg IHwgICAxICsNCj4gPiAgZHJpdmVycy9waHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OHFtLWhzaW8u YyB8IDYwNw0KPiA+ICsrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwg NjE2IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L2Zy ZWVzY2FsZS9waHktZnNsLWlteDhxbS1oc2lvLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZw0KPiA+IGIvZHJpdmVycy9waHkvZnJlZXNjYWxlL0tj b25maWcgaW5kZXggODUzOTU4ZmIyYzA2Li5jOWVlNDhhZWVhOWUNCj4gPiAxMDA2NDQNCj4gPiAt LS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvcGh5 L2ZyZWVzY2FsZS9LY29uZmlnDQo+ID4gQEAgLTM1LDYgKzM1LDE0IEBAIGNvbmZpZyBQSFlfRlNM X0lNWDhNX1BDSUUNCj4gPiAgCSAgRW5hYmxlIHRoaXMgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBQ Q0lFIFBIWSBhcyBmb3VuZCBvbg0KPiA+ICAJICBpLk1YOE0gZmFtaWx5IG9mIFNPQ3MuDQo+ID4N Cj4gPiArY29uZmlnIFBIWV9GU0xfSU1YOFFNX0hTSU8NCj4gPiArCXRyaXN0YXRlICJGcmVlc2Nh bGUgaS5NWDhRTSBIU0lPIFBIWSINCj4gPiArCWRlcGVuZHMgb24gT0YgJiYgSEFTX0lPTUVNDQo+ ID4gKwlzZWxlY3QgR0VORVJJQ19QSFkNCj4gPiArCWhlbHANCj4gPiArCSAgRW5hYmxlIHRoaXMg dG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBIU0lPIFBIWSBhcyBmb3VuZCBvbg0KPiA+ICsJICBpLk1Y OFFNIGZhbWlseSBvZiBTT0NzLg0KPiA+ICsNCj4gPiAgZW5kaWYNCj4gPg0KPiA+ICBjb25maWcg UEhZX0ZTTF9MWU5YXzI4Rw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUv TWFrZWZpbGUNCj4gPiBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZSBpbmRleCBjZWRi MzI4YmM0ZDIuLmI1NmI0ZDVjMThlYQ0KPiA+IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGh5 L2ZyZWVzY2FsZS9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtl ZmlsZQ0KPiA+IEBAIC0zLDQgKzMsNSBAQCBvYmotJChDT05GSUdfUEhZX0ZTTF9JTVg4TVFfVVNC KQkrPQ0KPiBwaHktZnNsLWlteDhtcS11c2Iubw0KPiA+ICBvYmotJChDT05GSUdfUEhZX01JWEVM X0xWRFNfUEhZKQkrPSBwaHktZnNsLWlteDhxbS1sdmRzLXBoeS5vDQo+ID4gIG9iai0kKENPTkZJ R19QSFlfTUlYRUxfTUlQSV9EUEhZKQkrPSBwaHktZnNsLWlteDgtbWlwaS1kcGh5Lm8NCj4gPiAg b2JqLSQoQ09ORklHX1BIWV9GU0xfSU1YOE1fUENJRSkJKz0gcGh5LWZzbC1pbXg4bS1wY2llLm8N Cj4gPiArb2JqLSQoQ09ORklHX1BIWV9GU0xfSU1YOFFNX0hTSU8pCSs9IHBoeS1mc2wtaW14OHFt LWhzaW8ubw0KPiA+ICBvYmotJChDT05GSUdfUEhZX0ZTTF9MWU5YXzI4RykJCSs9IHBoeS1mc2wt bHlueC0yOGcubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZz bC1pbXg4cW0taHNpby5jDQo+ID4gYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4 cW0taHNpby5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLmIzZTE3MTYzZTg1OQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3Bo eS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4cW0taHNpby5jDQo+ID4gQEAgLTAsMCArMSw2MDcgQEAN Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ID4gKy8qDQo+ID4g KyAqIENvcHlyaWdodCAyMDI0IE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9pby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiANCj4gQ2hlY2sgdGhhdCB5b3Ug YXJlIGluY2x1ZGluZyB0aGUgcmlnaHQgRFQgaW5jbHVkZXMuDQo+IA0KPiA+ICsjaW5jbHVkZSA8 bGludXgvcGNpX3JlZ3MuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3BoeS9wY2llLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4NCj4gPiArI2luY2x1ZGUgPGR0LWJpbmRp bmdzL3BoeS9waHktaW14OC1wY2llLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1BWF9OVU1fUEhZ X01JWFMJNA0KPiA+ICsjZGVmaW5lIFBIWV9NSVhfTUFYX05VTV9MQU5FUwkyDQo+ID4gKyNkZWZp bmUgTEFORV9OVU1fQ0xLUwkJNQ0KPiA+ICsNCj4gPiArLyogUGFyYW1ldGVycyBmb3IgdGhlIHdh aXRpbmcgZm9yIFBDSWUgUEhZIFBMTCB0byBsb2NrICovDQo+ID4gKyNkZWZpbmUgUEhZX0lOSVRf V0FJVF9VU0xFRVBfTUFYCTEwDQo+ID4gKyNkZWZpbmUgUEhZX0lOSVRfV0FJVF9USU1FT1VUCQko MTAwMCAqDQo+IFBIWV9JTklUX1dBSVRfVVNMRUVQX01BWCkNCj4gPiArDQo+ID4gKy8qIGkuTVg4 USBIU0lPIHJlZ2lzdGVycyAqLw0KPiA+ICsjZGVmaW5lIEhTSU9fQ1RSTDAJCQkweDANCj4gPiAr I2RlZmluZSBIU0lPX0FQQl9SU1ROXzAJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBIU0lPX0FQQl9S U1ROXzEJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBIU0lPX1BJUEVfUlNUTl8wX01BU0sJCUdFTk1B U0soMjUsIDI0KQ0KPiA+ICsjZGVmaW5lIEhTSU9fUElQRV9SU1ROXzFfTUFTSwkJR0VOTUFTSygy NywgMjYpDQo+ID4gKyNkZWZpbmUgSFNJT19NT0RFX01BU0sJCQlHRU5NQVNLKDIwLCAxNykNCj4g PiArI2RlZmluZSBIU0lPX01PREVfUENJRQkJCTB4MA0KPiA+ICsjZGVmaW5lIEhTSU9fTU9ERV9T QVRBCQkJMHg0DQo+ID4gKyNkZWZpbmUgSFNJT19ERVZJQ0VfVFlQRV9NQVNLCQlHRU5NQVNLKDI3 LCAyNCkNCj4gPiArI2RlZmluZSBIU0lPX0VQQ1NfVFhERUVNUAkJQklUKDUpDQo+ID4gKyNkZWZp bmUgSFNJT19FUENTX1RYREVFTVBfU0VMCQlCSVQoNikNCj4gPiArI2RlZmluZSBIU0lPX0VQQ1Nf UEhZUkVTRVRfTgkJQklUKDcpDQo+ID4gKyNkZWZpbmUgSFNJT19SRVNFVF9OCQkJQklUKDEyKQ0K PiA+ICsNCj4gPiArI2RlZmluZSBIU0lPX0lPQl9SWEVOQQkJCUJJVCgwKQ0KPiA+ICsjZGVmaW5l IEhTSU9fSU9CX1RYRU5BCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgSFNJT19JT0JfQV8wX1RYT0UJ CUJJVCgyKQ0KPiA+ICsjZGVmaW5lIEhTSU9fSU9CX0FfMF9NMU0wXzIJCUJJVCg0KQ0KPiA+ICsj ZGVmaW5lIEhTSU9fSU9CX0FfMF9NMU0wX01BU0sJCUdFTk1BU0soNCwgMykNCj4gPiArI2RlZmlu ZSBIU0lPX1BIWVgxX0VQQ1NfU0VMCQlCSVQoMTIpDQo+ID4gKyNkZWZpbmUgSFNJT19QQ0lFX0FC X1NFTEVDVAkJQklUKDEzKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBIU0lPX1BIWV9TVFMwCQkJMHg0 DQo+ID4gKyNkZWZpbmUgSFNJT19MQU5FMF9UWF9QTExfTE9DSwkJQklUKDQpDQo+ID4gKyNkZWZp bmUgSFNJT19MQU5FMV9UWF9QTExfTE9DSwkJQklUKDEyKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBI U0lPX0NUUkwyCQkJMHg4DQo+ID4gKyNkZWZpbmUgSFNJT19MVFNTTV9FTkFCTEUJCUJJVCg0KQ0K PiA+ICsjZGVmaW5lIEhTSU9fQlVUVE9OX1JTVF9OCQlCSVQoMjEpDQo+ID4gKyNkZWZpbmUgSFNJ T19QRVJTVF9OCQkJQklUKDIyKQ0KPiA+ICsjZGVmaW5lIEhTSU9fUE9XRVJfVVBfUlNUX04JCUJJ VCgyMykNCj4gPiArDQo+ID4gKyNkZWZpbmUgSFNJT19QQ0lFX1NUUzAJCQkweGMNCj4gPiArI2Rl ZmluZSBIU0lPX1BNX1JFUV9DT1JFX1JTVAkJQklUKDE5KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBI U0lPX1JFRzQ4X1BNQV9TVEFUVVMJCTB4MzANCj4gPiArI2RlZmluZSBIU0lPX1JFRzQ4X1BNQV9S RFkJCUJJVCg3KQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVGhlcmUgYXJlIHRocmVlIGxhbmVz IFBIWSBpbiBpLk1YOFFNIEhTSU8sIGFuZCBjYW4gYmUgbWFkZSB1cCB0aGUNCj4gPiArICogZm9s bG93aW5nIFBIWSBtb2RlcyBpbiBkaWZmZXJlbnQgdXNlIGNhc2VzLg0KPiA+ICsgKiArLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsgKiB8IGluZGV4IHwgTEFOMCAg fCBMQU4xICB8IExBTjIgICAgICAgfA0KPiA+ICsgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tfA0KPiA+ICsgKiB8IDAgICAgIHwgUENJRUEgfCAgICAgICB8ICAgICAgICAg ICAgfA0KPiA+ICsgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ ICsgKiB8IDEgICAgIHwgICAgICAgfCBQQ0lFQiB8ICAgICAgICAgICAgfA0KPiA+ICsgKiB8LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiA+ICsgKiB8IDIgICAgIHwgUENJ RUEgfCBQQ0lFQSB8ICAgICAgICAgICAgfA0KPiA+ICsgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfA0KPiA+ICsgKiB8IDMgICAgIHwgICAgICAgfCAgICAgICB8IFBDSUVC L1NBVEEgfA0KPiA+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0K PiA+ICsgKi8NCj4gPiArZW51bSBwaHlfbW9kZV9pbmRleCB7DQo+ID4gKwlJTVg4UV9IU0lPX0xB TkUwX1BDSUVfUEhZLA0KPiA+ICsJSU1YOFFfSFNJT19MQU5FMV9QQ0lFX1BIWSwNCj4gPiArCUlN WDhRX0hTSU9fTEFORTBfMV9QQ0lFX1BIWSwNCj4gPiArCUlNWDhRX0hTSU9fTEFORTJfUEhZDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X2hzaW9fZHJ2ZGF0YSB7DQo+ID4gKwlpbnQg cGh5X21peF9udW07DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X2hzaW9fcGh5X2xh bmUgew0KPiA+ICsJY29uc3QgY2hhciAqIGNvbnN0ICpjbGtfbmFtZXM7DQo+ID4gKwlzdHJ1Y3Qg Y2xrX2J1bGtfZGF0YSBjbGtzW0xBTkVfTlVNX0NMS1NdOyB9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IGlteF9oc2lvX3BoeV9taXggew0KPiA+ICsJdTMyIGN0cmxfaW5kZXg7DQo+ID4gKwl1MzIgY3Ry bF9vZmY7DQo+ID4gKwl1MzIgcGh5X29mZjsNCj4gPiArCXUzMiBwaHlfdHlwZTsNCj4gPiArCXN0 cnVjdCBpbXhfaHNpb19waHlfbGFuZSBsYW5lW1BIWV9NSVhfTUFYX05VTV9MQU5FU107DQo+ID4g KwlzdHJ1Y3QgaW14X2hzaW9fcHJpdiAqcHJpdjsNCj4gPiArCXN0cnVjdCBwaHkgKnBoeTsNCj4g PiArCWVudW0gcGh5X21vZGUgcG1peF9tb2RlOw0KPiA+ICsJZW51bSBwaHlfbW9kZV9pbmRleCBp ZHg7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW14X2hzaW9fcHJpdiB7DQo+ID4gKwl2 b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwl1MzIg cmVmY2xrX3BhZDsNCj4gPiArCXUzMiBoc2lvX2NmZzsNCj4gPiArCXN0cnVjdCByZWdtYXAgKnBo eTsNCj4gPiArCXN0cnVjdCByZWdtYXAgKmN0cmw7DQo+ID4gKwlzdHJ1Y3QgcmVnbWFwICptaXNj Ow0KPiA+ICsJY29uc3Qgc3RydWN0IGlteF9oc2lvX2RydmRhdGEgKmRydmRhdGE7DQo+ID4gKwlz dHJ1Y3QgaW14X2hzaW9fcGh5X21peCBwbWl4W01BWF9OVU1fUEhZX01JWFNdOyB9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsYW4wX3BjaWVfY2xrc1tdID0geyJhcGJf cGNsazAiLCAicGNsazAiLCAiY3RsMF9jcnIiLA0KPiA+ICsJCQkJCSAgICAgICJwaHkwX2NyciIs ICJtaXNjX2NyciJ9Ow0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxhbjFfcGNpZWFf Y2xrc1tdID0geyJhcGJfcGNsazEiLCAicGNsazEiLCAiY3RsMF9jcnIiLA0KPiA+ICsJCQkJCSAg ICAgICAicGh5MF9jcnIiLCAibWlzY19jcnIifTsNCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBsYW4xX3BjaWViX2Nsa3NbXSA9IHsiYXBiX3BjbGsxIiwgInBjbGsxIiwgImN0bDFfY3Jy IiwNCj4gPiArCQkJCQkgICAgICAgInBoeTBfY3JyIiwgIm1pc2NfY3JyIn07DQo+ID4gK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3QgbGFuMl9wY2llYl9jbGtzW10gPSB7ImFwYl9wY2xrMiIsICJw Y2xrMiIsICJjdGwxX2NyciIsDQo+ID4gKwkJCQkJICAgICAgICJwaHkxX2NyciIsICJtaXNjX2Ny ciJ9Ow0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxhbjJfc2F0YV9jbGtzW10gPSB7 InBjbGsyIiwgImVwY3NfdHgiLCAiZXBjc19yeCIsDQo+ID4gKwkJCQkJICAgICAgInBoeTFfY3Jy IiwgIm1pc2NfY3JyIn07DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9j b25maWcgcmVnbWFwX2NvbmZpZyA9IHsNCj4gPiArCS5yZWdfYml0cyA9IDMyLA0KPiA+ICsJLnZh bF9iaXRzID0gMzIsDQo+ID4gKwkucmVnX3N0cmlkZSA9IDQsDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGlteF9oc2lvX2dldF9pZHgoaW50IHBoeV90eXBlLCBpbnQgY3RybF9pbmRl eCwgaW50DQo+ID4gK2xhbmVfbWFzaykgew0KPiA+ICsJaW50IGluZGV4Ow0KPiA+ICsNCj4gPiAr CXN3aXRjaCAocGh5X3R5cGUpIHsNCj4gPiArCWNhc2UgUEhZX1RZUEVfUENJRToNCj4gPiArCQlp ZiAoY3RybF9pbmRleCkgeyAvKiBQQ0lFQiAqLw0KPiA+ICsJCQlpZiAobGFuZV9tYXNrID09IElN WDhRX0hTSU9fTEFORTApIC8qIGkuTVg4UVhQICovDQo+ID4gKwkJCQlpbmRleCA9IElNWDhRX0hT SU9fTEFORTBfUENJRV9QSFk7DQo+ID4gKwkJCWVsc2UgaWYgKGxhbmVfbWFzayA9PSBJTVg4UV9I U0lPX0xBTkUxKSAvKiBpLk1YOFFNICovDQo+ID4gKwkJCQlpbmRleCA9IElNWDhRX0hTSU9fTEFO RTFfUENJRV9QSFk7DQo+ID4gKwkJCWVsc2UgaWYgKGxhbmVfbWFzayA9PSBJTVg4UV9IU0lPX0xB TkUyKSAvKiBpLk1YOFFNICovDQo+ID4gKwkJCQlpbmRleCA9IElNWDhRX0hTSU9fTEFORTJfUEhZ Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9IGVsc2Ug eyAvKiBQQ0lFQSAqLw0KPiA+ICsJCQlpZiAobGFuZV9tYXNrID09IChJTVg4UV9IU0lPX0xBTkUw IHwgSU1YOFFfSFNJT19MQU5FMSkpDQo+ID4gKwkJCQlpbmRleCA9IElNWDhRX0hTSU9fTEFORTBf MV9QQ0lFX1BIWTsNCj4gPiArCQkJZWxzZSBpZiAobGFuZV9tYXNrID09IElNWDhRX0hTSU9fTEFO RTApDQo+ID4gKwkJCQlpbmRleCA9IElNWDhRX0hTSU9fTEFORTBfUENJRV9QSFk7DQo+ID4gKwkJ CWVsc2UNCj4gPiArCQkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgUEhZX1RZUEVfU0FUQToNCj4gPiArCQlpbmRleCA9IElNWDhRX0hTSU9fTEFO RTJfUEhZOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gaW5kZXg7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgaW14X2hzaW9faW5pdChzdHJ1Y3QgcGh5ICpwaHkpIHsNCj4gPiAr CWludCByZXQsIGk7DQo+ID4gKwlzdHJ1Y3QgaW14X2hzaW9fcGh5X21peCAqcG1peCA9IHBoeV9n ZXRfZHJ2ZGF0YShwaHkpOw0KPiA+ICsJc3RydWN0IGlteF9oc2lvX3ByaXYgKnByaXYgPSBwbWl4 LT5wcml2Ow0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2Ow0KPiA+ICsNCj4g PiArCS8qIEFzc2lnbiBjbG9ja3MgcmVmZXIgdG8gZGlmZmVyZW50IG1vZGVzICovDQo+ID4gKwlz d2l0Y2ggKHBtaXgtPnBoeV90eXBlKSB7DQo+ID4gKwljYXNlIFBIWV9UWVBFX1BDSUU6DQo+ID4g KwkJaWYgKHBtaXgtPmN0cmxfaW5kZXggPT0gMCkgeyAvKiBQQ0lFQSAqLw0KPiA+ICsJCQlwbWl4 LT5wbWl4X21vZGUgPSBQSFlfTU9ERV9QQ0lFOw0KPiA+ICsJCQlwbWl4LT5jdHJsX29mZiA9IDA7 DQo+ID4gKwkJCXBtaXgtPnBoeV9vZmYgPSAwOw0KPiA+ICsNCj4gPiArCQkJZm9yIChpID0gMDsg aSA8IExBTkVfTlVNX0NMS1M7IGkrKykgew0KPiA+ICsJCQkJaWYgKHBtaXgtPmlkeCA9PSBJTVg4 UV9IU0lPX0xBTkUwX1BDSUVfUEhZKSB7DQo+ID4gKwkJCQkJcG1peC0+bGFuZVswXS5jbGtzW2ld LmlkID0gbGFuMF9wY2llX2Nsa3NbaV07DQo+ID4gKwkJCQl9IGVsc2UgeyAvKiAyIGxhbmVzIGFy ZSBib3VuZCB0byBQQ0lFQSAqLw0KPiA+ICsJCQkJCXBtaXgtPmxhbmVbMF0uY2xrc1tpXS5pZCA9 IGxhbjBfcGNpZV9jbGtzW2ldOw0KPiA+ICsJCQkJCXBtaXgtPmxhbmVbMV0uY2xrc1tpXS5pZCA9 IGxhbjFfcGNpZWFfY2xrc1tpXTsNCj4gPiArCQkJCX0NCj4gPiArCQkJfQ0KPiA+ICsJCX0gZWxz ZSB7IC8qIFBDSUVCICovDQo+ID4gKwkJCXBtaXgtPnBtaXhfbW9kZSA9IFBIWV9NT0RFX1BDSUU7 DQo+ID4gKwkJCWlmIChwbWl4LT5pZHggPT0gSU1YOFFfSFNJT19MQU5FMF9QQ0lFX1BIWSkgew0K PiA+ICsJCQkJLyogaS5NWDhRWFAgKi8NCj4gPiArCQkJCXBtaXgtPmN0cmxfb2ZmID0gMDsNCj4g PiArCQkJCXBtaXgtPnBoeV9vZmYgPSAwOw0KPiA+ICsJCQl9IGVsc2Ugew0KPiA+ICsJCQkJLyoN Cj4gPiArCQkJCSAqIE9uIGkuTVg4UU0sIG9ubHkgc2Vjb25kIG9yIHRoaXJkIGxhbmUgY2FuIGJl DQo+ID4gKwkJCQkgKiBib3VuZCB0byBQQ0lFQi4NCj4gPiArCQkJCSAqLw0KPiA+ICsJCQkJcG1p eC0+Y3RybF9vZmYgPSBTWl82NEs7DQo+ID4gKwkJCQlpZiAocG1peC0+aWR4ID09IElNWDhRX0hT SU9fTEFORTFfUENJRV9QSFkpDQo+ID4gKwkJCQkJcG1peC0+cGh5X29mZiA9IDA7DQo+ID4gKwkJ CQllbHNlIC8qIHRoZSB0aGlyZCBsYW5lIGlzIGJvdW5kIHRvIFBDSUVCICovDQo+ID4gKwkJCQkJ cG1peC0+cGh5X29mZiA9IFNaXzY0SzsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJZm9yIChp ID0gMDsgaSA8IExBTkVfTlVNX0NMS1M7IGkrKykgew0KPiA+ICsJCQkJaWYgKHBtaXgtPmlkeCA9 PSBJTVg4UV9IU0lPX0xBTkUxX1BDSUVfUEhZKQ0KPiA+ICsJCQkJCXBtaXgtPmxhbmVbMF0uY2xr c1tpXS5pZCA9IGxhbjFfcGNpZWJfY2xrc1tpXTsNCj4gPiArCQkJCWVsc2UgaWYgKHBtaXgtPmlk eCA9PSBJTVg4UV9IU0lPX0xBTkUyX1BIWSkNCj4gPiArCQkJCQlwbWl4LT5sYW5lWzBdLmNsa3Nb aV0uaWQgPSBsYW4yX3BjaWViX2Nsa3NbaV07DQo+ID4gKwkJCQllbHNlIC8qIGkuTVg4UVhQIG9u bHkgaGFzIFBDSUVCLCBpZHggaXMgMCAqLw0KPiA+ICsJCQkJCXBtaXgtPmxhbmVbMF0uY2xrc1tp XS5pZCA9IGxhbjBfcGNpZV9jbGtzW2ldOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBQSFlfVFlQRV9TQVRBOg0KPiA+ICsJCS8qIE9uIGkuTVg4UU0sIG9u bHkgdGhlIHRoaXJkIGxhbmUgY2FuIGJlIGJvdW5kIHRvIFNBVEEgKi8NCj4gPiArCQlwbWl4LT5j dHJsX29mZiA9IFNaXzEyOEs7DQo+ID4gKwkJcG1peC0+cG1peF9tb2RlID0gUEhZX01PREVfU0FU QTsNCj4gPiArCQlwbWl4LT5waHlfb2ZmID0gU1pfNjRLOw0KPiA+ICsNCj4gPiArCQlmb3IgKGkg PSAwOyBpIDwgTEFORV9OVU1fQ0xLUzsgaSsrKQ0KPiA+ICsJCQlwbWl4LT5sYW5lWzBdLmNsa3Nb aV0uaWQgPSBsYW4yX3NhdGFfY2xrc1tpXTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6 DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogRmV0Y2gg Y2xvY2tzIGFuZCBlbmFibGUgdGhlbSAqLw0KPiA+ICsJcmV0ID0gZGV2bV9jbGtfYnVsa19nZXQo ZGV2LCBMQU5FX05VTV9DTEtTLCBwbWl4LT5sYW5lWzBdLmNsa3MpOw0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJaWYgKHBtaXgtPmlkeCA9PSBJTVg4UV9IU0lPX0xB TkUwXzFfUENJRV9QSFkpIHsNCj4gPiArCQlyZXQgPSBkZXZtX2Nsa19idWxrX2dldChkZXYsIExB TkVfTlVNX0NMS1MsIHBtaXgtPmxhbmVbMV0uY2xrcyk7DQo+ID4gKwkJaWYgKHJldCkNCj4gPiAr CQkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5h YmxlKExBTkVfTlVNX0NMS1MsIHBtaXgtPmxhbmVbMF0uY2xrcyk7DQo+ID4gKwlpZiAocmV0KQ0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwlpZiAocG1peC0+aWR4ID09IElNWDhRX0hTSU9fTEFO RTBfMV9QQ0lFX1BIWSkgew0KPiA+ICsJCS8qIEVuYWJsZSB0aGUgc2Vjb25kIGxhbmUncyBjbG9j a3MgKi8NCj4gPiArCQlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShMQU5FX05VTV9DTEtT LA0KPiA+ICsJCQkJCSAgICAgIHBtaXgtPmxhbmVbMV0uY2xrcyk7DQo+ID4gKwkJaWYgKHJldCkg ew0KPiA+ICsJCQljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShMQU5FX05VTV9DTEtTLA0KPiA+ ICsJCQkJCQkgICBwbWl4LT5sYW5lWzBdLmNsa3MpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBhbGxvdyB0aGUgY2xvY2tzIHRvIHN0YWJp bGl6ZSAqLw0KPiA+ICsJdXNsZWVwX3JhbmdlKDIwMCwgNTAwKTsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlteF9oc2lvX2V4aXQoc3RydWN0IHBoeSAq cGh5KSB7DQo+ID4gKwlzdHJ1Y3QgaW14X2hzaW9fcGh5X21peCAqcG1peCA9IHBoeV9nZXRfZHJ2 ZGF0YShwaHkpOw0KPiA+ICsNCj4gPiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKExBTkVf TlVNX0NMS1MsIHBtaXgtPmxhbmVbMF0uY2xrcyk7DQo+ID4gKwlpZiAocG1peC0+aWR4ID09IElN WDhRX0hTSU9fTEFORTBfMV9QQ0lFX1BIWSkNCj4gPiArCQkvKiBEaXNhYmxlIHRoZSBjbG9ja3Mg dXNlZCBieSBzZW5jb25kIGxhbmUgb2YgdGhlIFBIWSAqLw0KPiA+ICsJCWNsa19idWxrX2Rpc2Fi bGVfdW5wcmVwYXJlKExBTkVfTlVNX0NMS1MsIHBtaXgtPmxhbmVbMV0uY2xrcyk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGlteF9oc2lv X3BjaWVfcGh5X3Jlc2V0cyhzdHJ1Y3QgcGh5ICpwaHkpIHsNCj4gPiArCXN0cnVjdCBpbXhfaHNp b19waHlfbWl4ICpwbWl4ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7DQo+ID4gKwlzdHJ1Y3QgaW14 X2hzaW9fcHJpdiAqcHJpdiA9IHBtaXgtPnByaXY7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX2NsZWFy X2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lPX0NUUkwyLA0KPiA+ICsJCQkg IEhTSU9fQlVUVE9OX1JTVF9OKTsNCj4gPiArCXJlZ21hcF9jbGVhcl9iaXRzKHByaXYtPmN0cmws IHBtaXgtPmN0cmxfb2ZmICsgSFNJT19DVFJMMiwNCj4gPiArCQkJICBIU0lPX1BFUlNUX04pOw0K PiA+ICsJcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lP X0NUUkwyLA0KPiA+ICsJCQkgIEhTSU9fUE9XRVJfVVBfUlNUX04pOw0KPiA+ICsJcmVnbWFwX3Nl dF9iaXRzKHByaXYtPmN0cmwsIHBtaXgtPmN0cmxfb2ZmICsgSFNJT19DVFJMMiwNCj4gPiArCQkJ SFNJT19CVVRUT05fUlNUX04pOw0KPiA+ICsJcmVnbWFwX3NldF9iaXRzKHByaXYtPmN0cmwsIHBt aXgtPmN0cmxfb2ZmICsgSFNJT19DVFJMMiwNCj4gPiArCQkJSFNJT19QRVJTVF9OKTsNCj4gPiAr CXJlZ21hcF9zZXRfYml0cyhwcml2LT5jdHJsLCBwbWl4LT5jdHJsX29mZiArIEhTSU9fQ1RSTDIs DQo+ID4gKwkJCUhTSU9fUE9XRVJfVVBfUlNUX04pOw0KPiA+ICsNCj4gPiArCWlmIChwbWl4LT5p ZHggPT0gSU1YOFFfSFNJT19MQU5FMF8xX1BDSUVfUEhZKSB7DQo+ID4gKwkJcmVnbWFwX3NldF9i aXRzKHByaXYtPnBoeSwgcG1peC0+cGh5X29mZiArIEhTSU9fQ1RSTDAsDQo+ID4gKwkJCQlIU0lP X0FQQl9SU1ROXzApOw0KPiA+ICsJCXJlZ21hcF9zZXRfYml0cyhwcml2LT5waHksIHBtaXgtPnBo eV9vZmYgKyBIU0lPX0NUUkwwLA0KPiA+ICsJCQkJSFNJT19QSVBFX1JTVE5fMF9NQVNLKTsNCj4g PiArCQlyZWdtYXBfc2V0X2JpdHMocHJpdi0+cGh5LCBwbWl4LT5waHlfb2ZmICsgSFNJT19DVFJM MCwNCj4gPiArCQkJCUhTSU9fQVBCX1JTVE5fMSk7DQo+ID4gKwkJcmVnbWFwX3NldF9iaXRzKHBy aXYtPnBoeSwgcG1peC0+cGh5X29mZiArIEhTSU9fQ1RSTDAsDQo+ID4gKwkJCQlIU0lPX1BJUEVf UlNUTl8xX01BU0spOw0KPiA+ICsJfSBlbHNlIGlmIChwbWl4LT5pZHggPT0gSU1YOFFfSFNJT19M QU5FMV9QQ0lFX1BIWSkgew0KPiA+ICsJCS8qIFRoZSBzZWNvbmQgcG1peCAqLw0KPiA+ICsJCXJl Z21hcF9zZXRfYml0cyhwcml2LT5waHksIHBtaXgtPnBoeV9vZmYgKyBIU0lPX0NUUkwwLA0KPiA+ ICsJCQkJSFNJT19BUEJfUlNUTl8xKTsNCj4gPiArCQlyZWdtYXBfc2V0X2JpdHMocHJpdi0+cGh5 LCBwbWl4LT5waHlfb2ZmICsgSFNJT19DVFJMMCwNCj4gPiArCQkJCUhTSU9fUElQRV9SU1ROXzFf TUFTSyk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJlZ21hcF9zZXRfYml0cyhwcml2LT5waHks IHBtaXgtPnBoeV9vZmYgKyBIU0lPX0NUUkwwLA0KPiA+ICsJCQkJSFNJT19BUEJfUlNUTl8wKTsN Cj4gPiArCQlyZWdtYXBfc2V0X2JpdHMocHJpdi0+cGh5LCBwbWl4LT5waHlfb2ZmICsgSFNJT19D VFJMMCwNCj4gPiArCQkJCUhTSU9fUElQRV9SU1ROXzBfTUFTSyk7DQo+ID4gKwl9DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGlteF9oc2lvX3NhdGFfcGh5X3Jlc2V0cyhzdHJ1Y3Qg cGh5ICpwaHkpIHsNCj4gPiArCXN0cnVjdCBpbXhfaHNpb19waHlfbWl4ICpwbWl4ID0gcGh5X2dl dF9kcnZkYXRhKHBoeSk7DQo+ID4gKwlzdHJ1Y3QgaW14X2hzaW9fcHJpdiAqcHJpdiA9IHBtaXgt PnByaXY7DQo+ID4gKw0KPiA+ICsJLyogY2xlYXIgUEhZIFJTVCwgdGhlbiBzZXQgaXQgKi8NCj4g PiArCXJlZ21hcF9jbGVhcl9iaXRzKHByaXYtPmN0cmwsIHBtaXgtPmN0cmxfb2ZmICsgSFNJT19D VFJMMCwNCj4gPiArCQkJICBIU0lPX0VQQ1NfUEhZUkVTRVRfTik7DQo+ID4gKwlyZWdtYXBfc2V0 X2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lPX0NUUkwwLA0KPiA+ICsJCQlI U0lPX0VQQ1NfUEhZUkVTRVRfTik7DQo+ID4gKw0KPiA+ICsJLyogQ1RSTCBSU1Q6IFNFVCAtPiBk ZWxheSAxIHVzIC0+IENMRUFSIC0+IFNFVCAqLw0KPiA+ICsJcmVnbWFwX3NldF9iaXRzKHByaXYt PmN0cmwsIHBtaXgtPmN0cmxfb2ZmICsgSFNJT19DVFJMMCwgSFNJT19SRVNFVF9OKTsNCj4gPiAr CXVkZWxheSgxKTsNCj4gPiArCXJlZ21hcF9jbGVhcl9iaXRzKHByaXYtPmN0cmwsIHBtaXgtPmN0 cmxfb2ZmICsgSFNJT19DVFJMMCwNCj4gPiArCQkJICBIU0lPX1JFU0VUX04pOw0KPiA+ICsJcmVn bWFwX3NldF9iaXRzKHByaXYtPmN0cmwsIHBtaXgtPmN0cmxfb2ZmICsgSFNJT19DVFJMMCwNCj4g PiArSFNJT19SRVNFVF9OKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaW14X2hzaW9fY29u ZmlndXJlX2Nsa19wYWQoc3RydWN0IHBoeSAqcGh5KSB7DQo+ID4gKwlib29sIHBsbCA9IGZhbHNl Ow0KPiA+ICsJdTMyIHBhZF9tb2RlOw0KPiA+ICsJc3RydWN0IGlteF9oc2lvX3BoeV9taXggKnBt aXggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsNCj4gPiArCXN0cnVjdCBpbXhfaHNpb19wcml2ICpw cml2ID0gcG1peC0+cHJpdjsNCj4gPiArDQo+ID4gKwlwYWRfbW9kZSA9IHByaXYtPnJlZmNsa19w YWQ7DQo+ID4gKwlpZiAocGFkX21vZGUgPT0gSU1YOF9QQ0lFX1JFRkNMS19QQURfT1VUUFVUKSB7 DQo+ID4gKwkJcGxsID0gdHJ1ZTsNCj4gPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+bWlz YywgSFNJT19DVFJMMCwNCj4gPiArCQkJCSAgIEhTSU9fSU9CX0FfMF9UWE9FIHwgSFNJT19JT0Jf QV8wX00xTTBfTUFTSywNCj4gPiArCQkJCSAgIEhTSU9fSU9CX0FfMF9UWE9FIHwgSFNJT19JT0Jf QV8wX00xTTBfMik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBy aXYtPm1pc2MsIEhTSU9fQ1RSTDAsIEhTSU9fSU9CX1JYRU5BLA0KPiA+ICsJCQkgICBwbGwgPyAw IDogSFNJT19JT0JfUlhFTkEpOw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPm1pc2Ms IEhTSU9fQ1RSTDAsIEhTSU9fSU9CX1RYRU5BLA0KPiA+ICsJCQkgICBwbGwgPyBIU0lPX0lPQl9U WEVOQSA6IDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlteF9oc2lvX3Bvd2Vy X29uKHN0cnVjdCBwaHkgKnBoeSkgew0KPiA+ICsJaW50IHJldDsNCj4gPiArCXUzMiB2YWwsIGFk ZHIsIGNvbmQ7DQo+ID4gKwlzdHJ1Y3QgaW14X2hzaW9fcGh5X21peCAqcG1peCA9IHBoeV9nZXRf ZHJ2ZGF0YShwaHkpOw0KPiA+ICsJc3RydWN0IGlteF9oc2lvX3ByaXYgKnByaXYgPSBwbWl4LT5w cml2Ow0KPiA+ICsNCj4gPiArCWlmIChwbWl4LT5wbWl4X21vZGUgPT0gUEhZX01PREVfUENJRSkN Cj4gPiArCQlpbXhfaHNpb19wY2llX3BoeV9yZXNldHMocGh5KTsNCj4gPiArCWVsc2UgLyogU0FU QSAqLw0KPiA+ICsJCXJlZ21hcF9zZXRfYml0cyhwcml2LT5waHksIHBtaXgtPnBoeV9vZmYgKyBI U0lPX0NUUkwwLA0KPiA+ICsJCQkJSFNJT19BUEJfUlNUTl8wKTsNCj4gPiArDQo+ID4gKwlpZiAo cHJpdi0+aHNpb19jZmcgJiBJTVg4UV9IU0lPX0NGR19QQ0lFQVgyUENJRUIpDQo+IA0KPiBDYW4n dCB0aGlzIGp1c3QgYmUgYmFzZWQgb24gbGFuZT09MiBhbmQgbW9kZT09cGNpZT8NCj4gDQpUaGUg SU1YOFFfSFNJT19DRkdfIyBhcmUgYml0LW1hcCBkZWZpbml0aW9ucy4NCklNWDhRX0hTSU9fQ0ZH X1BDSUVBWDJQQ0lFQiBtZWFucyB0aGF0IG5vdCBvbmx5IFBDSUVBIGlzIGVuYWJsZWQgYnV0IGFs c28NCiB0aGUgUENJRUIgaXMgZW5hYmxlZCB0b28uDQpUaHVzLCB0aGUgUENJRV9BQl9TRUxFQ1Qg c2hvdWxkIGJlIGFzc2VydGVkIHRvIGJlIDFiJzEuDQo+ID4gKwkJcmVnbWFwX3NldF9iaXRzKHBy aXYtPm1pc2MsIEhTSU9fQ1RSTDAsIEhTSU9fUENJRV9BQl9TRUxFQ1QpOw0KPiA+ICsJaWYgKHBy aXYtPmhzaW9fY2ZnICYgSU1YOFFfSFNJT19DRkdfUENJRUFYMlNBVEEpDQo+IA0KPiBBbmQgdGhp cyBvbiBtb2RlPT1zYXRhPw0KSU1YOFFfSFNJT19DRkdfUENJRUFYMlNBVEEgbWVhbnMgdGhhdCBu b3Qgb25seSBQQ0lFQSBpcyBlbmFibGVkIGJ1dCBhbHNvDQogdGhlIFNBVEEgaXMgZW5hYmxlZCB0 b28uDQpTbywgdGhlIFBIWVgxX0VQQ1NfU0VMIHNob3VsZCBiZSBhc3NlcnRlZCB0byBiZSAxYicx IGhlcmUuDQo+IA0KPiA+ICsJCXJlZ21hcF9zZXRfYml0cyhwcml2LT5taXNjLCBIU0lPX0NUUkww LCBIU0lPX1BIWVgxX0VQQ1NfU0VMKTsNCj4gPiArDQo+ID4gKwlpbXhfaHNpb19jb25maWd1cmVf Y2xrX3BhZChwaHkpOw0KPiANCj4gcG93ZXJfb24gaXMgY2FsbGVkIHBlciBwaHksIGJ1dCB0aGlz IGFwcGVhcnMgdG8gYmUgc29tZSBnbG9iYWwgc3RhdGUuDQo+IA0KWW91J3JlIHJpZ2h0LiBUaGUg cGFkIHNldHRpbmcgaXMgZ2xvYmFsIGFuZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UuDQpCVFcsIHRo ZSBzZXR0aW5nIG9mIHRoZSBQQ0lFX0FCX1NFTEVDVCBhbmQgUEhZWDFfRVBDU19TRUwgYXJlIGds b2JhbCB0b28uDQo+ID4gKw0KPiA+ICsJaWYgKHBtaXgtPnBtaXhfbW9kZSA9PSBQSFlfTU9ERV9T QVRBKSB7DQo+ID4gKwkJcmVnbWFwX3NldF9iaXRzKHByaXYtPmN0cmwsIHBtaXgtPmN0cmxfb2Zm ICsgSFNJT19DVFJMMCwNCj4gPiArCQkJCUhTSU9fRVBDU19UWERFRU1QKTsNCj4gPiArCQlyZWdt YXBfc2V0X2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lPX0NUUkwwLA0KPiA+ ICsJCQkJSFNJT19FUENTX1RYREVFTVBfU0VMKTsNCj4gPiArDQo+ID4gKwkJaW14X2hzaW9fc2F0 YV9waHlfcmVzZXRzKHBoeSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCS8qIFRvZ2dsZSBhcGJf cGNsayB0byBtYWtlIHN1cmUgUE1fUkVRX0NPUkVfUlNUIGlzIGNsZWFyZWQuICovDQo+ID4gKwkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBtaXgtPmxhbmVbMF0uY2xrc1swXS5jbGspOw0KPiA+ICsJ CW1kZWxheSgxKTsNCj4gPiArCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocG1peC0+bGFuZVsw XS5jbGtzWzBdLmNsayk7DQo+ID4gKwkJaWYgKHJldCkgew0KPiA+ICsJCQlkZXZfZXJyKHByaXYt PmRldiwgInVuYWJsZSB0byBlbmFibGUgcGh5IGFwYl9wY2xrXG4iKTsNCj4gPiArCQkJcmV0dXJu IHJldDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWFkZHIgPSBwbWl4LT5jdHJsX29mZiArIEhT SU9fUENJRV9TVFMwOw0KPiA+ICsJCWNvbmQgPSBIU0lPX1BNX1JFUV9DT1JFX1JTVDsNCj4gPiAr CQlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0+Y3RybCwgYWRkciwgdmFsLA0K PiA+ICsJCQkJCSAgICAgICAodmFsICYgY29uZCkgPT0gMCwNCj4gPiArCQkJCQkgICAgICAgUEhZ X0lOSVRfV0FJVF9VU0xFRVBfTUFYLA0KPiA+ICsJCQkJCSAgICAgICBQSFlfSU5JVF9XQUlUX1RJ TUVPVVQpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJZGV2X2Vycihwcml2LT5kZXYsICJI U0lPX1BNX1JFUV9DT1JFX1JTVCBpcyBzZXRcbiIpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBQb2xsaW5nIHRvIGNoZWNrIHRoZSBQSFkg aXMgcmVhZHkgb3Igbm90LiAqLw0KPiA+ICsJaWYgKHBtaXgtPmlkeCA9PSBJTVg4UV9IU0lPX0xB TkUxX1BDSUVfUEhZKQ0KPiA+ICsJCWNvbmQgPSBIU0lPX0xBTkUxX1RYX1BMTF9MT0NLOw0KPiA+ ICsJZWxzZQ0KPiA+ICsJCWNvbmQgPSBIU0lPX0xBTkUwX1RYX1BMTF9MT0NLOw0KPiANCj4gSW4g U0FUQSBtb2RlLCBkb24ndCB5b3UgbmVlZCBMQU5FMj8gT3IgeW91IHNob3VsZCBoYXZlIGV4aXRl ZCBhYm92ZT8NCj4gDQpFeGNlcHQgdGhlIHBtaXgtPnBoeV9vZmYgb2YgbGFuZTIsIHRoZSBvdGhl cnMgYXJlIHNhbWUgdG8gdGhlIHNldHRpbmcgb2YgbGFuZTAuDQpTbywgdGhlIFBMTF9MT0NLIGNo ZWNrIG9mIGxhbmUyIGlzIG1lcmdlZCBpbnRvIHRoZSBjaGVjayBvZiBsYW5lMCBoZXJlLg0KPiAN Cj4gPiArDQo+ID4gKwlyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi0+cGh5LCBw bWl4LT5waHlfb2ZmICsNCj4gSFNJT19QSFlfU1RTMCwNCj4gPiArCQkJCSAgICAgICB2YWwsICgo dmFsICYgY29uZCkgPT0gY29uZCksDQo+ID4gKwkJCQkgICAgICAgUEhZX0lOSVRfV0FJVF9VU0xF RVBfTUFYLA0KPiA+ICsJCQkJICAgICAgIFBIWV9JTklUX1dBSVRfVElNRU9VVCk7DQo+ID4gKwlp ZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycihwcml2LT5kZXYsICJJTVg4USBQSFklZCBQTEwgbG9j ayB0aW1lb3V0XG4iLCBwbWl4LT5pZHgpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ ID4gKwlkZXZfaW5mbyhwcml2LT5kZXYsICJJTVg4USBQSFklZCBQTEwgaXMgbG9ja2VkXG4iLCBw bWl4LT5pZHgpOw0KPiANCj4gVGhlc2UgaW5mbyBsZXZlbCBwcmludHMgc2hvdWxkIGJlIGRlYnVn IGxldmVsIElNTy4NCj4gDQo+ID4gKw0KPiA+ICsJaWYgKHBtaXgtPnBtaXhfbW9kZSA9PSBQSFlf TU9ERV9TQVRBKSB7DQo+ID4gKwkJY29uZCA9IEhTSU9fUkVHNDhfUE1BX1JEWTsNCj4gPiArCQly ZXQgPSByZWFkX3BvbGxfdGltZW91dChyZWFkYiwgdmFsLCAoKHZhbCAmIGNvbmQpID09IGNvbmQp LA0KPiA+ICsJCQkJCVBIWV9JTklUX1dBSVRfVVNMRUVQX01BWCwNCj4gPiArCQkJCQlQSFlfSU5J VF9XQUlUX1RJTUVPVVQsIGZhbHNlLA0KPiA+ICsJCQkJCXByaXYtPmJhc2UgKyBIU0lPX1JFRzQ4 X1BNQV9TVEFUVVMpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCWRldl9lcnIocHJpdi0+ZGV2 LCAiUEhZIGNhbGlicmF0aW9uIGlzIHRpbWVvdXRcbiIpOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJ ZGV2X2luZm8ocHJpdi0+ZGV2LCAiUEhZIGNhbGlicmF0aW9uIGlzIGRvbmVcbiIpOw0KPiA+ICsJ fQ0KPiANCj4gVGhpcyBmdW5jdGlvbiBpcyBhIGJ1bmNoIG9mICdpZiBTQVRBJyBvciAnaWYgUENJ RScgYmxvY2tzIHdoaWNoIGlzIGhhcmQgdG8gZm9sbG93LiBJDQo+IHRoaW5rIGl0IHdvdWxkIGJl IGVhc2llciB0byBmb2xsb3cgaWYgeW91IGhhZCBhIHNwZWNpZmljIHBvd2VyX29uIGZ1bmN0aW9u IGZvciBlYWNoDQo+IG1vZGUgd2hpY2ggY2FuIHRoZW4gY2FsbCBhbnkgY29tbW9uIGhlbHBlcnMg KGxpa2UgcG9sbGluZyBmb3IgUExMIGxvY2spLg0KPiANCj4gQW5kIGNvbnNpZGVyIGlmIG1vZGUg c3BlY2lmaWMgc3R1ZmYgY2FuIGdvIGludG8gc2V0X21vZGUoKSBob29rIGluc3RlYWQuDQpHb29k IGlkZWEuDQpUaGFua3MuDQo+IA0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgaW14X2hzaW9fc2V0X21vZGUoc3RydWN0IHBoeSAqcGh5LCBl bnVtIHBoeV9tb2RlIG1vZGUsDQo+ID4gKwkJCSAgICAgaW50IHN1Ym1vZGUpDQo+ID4gK3sNCj4g PiArCXUzMiB2YWw7DQo+ID4gKwlzdHJ1Y3QgaW14X2hzaW9fcGh5X21peCAqcG1peCA9IHBoeV9n ZXRfZHJ2ZGF0YShwaHkpOw0KPiA+ICsJc3RydWN0IGlteF9oc2lvX3ByaXYgKnByaXYgPSBwbWl4 LT5wcml2Ow0KPiA+ICsNCj4gPiArCWlmIChwbWl4LT5wbWl4X21vZGUgIT0gbW9kZSkNCj4gPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwl2YWwgPSAobW9kZSA9PSBQSFlfTU9ERV9Q Q0lFKSA/IEhTSU9fTU9ERV9QQ0lFIDogSFNJT19NT0RFX1NBVEE7DQo+ID4gKwl2YWwgPSBGSUVM RF9QUkVQKEhTSU9fTU9ERV9NQVNLLCB2YWwpOw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHBy aXYtPnBoeSwgcG1peC0+cGh5X29mZiArIEhTSU9fQ1RSTDAsDQo+ID4gKwkJCSAgIEhTSU9fTU9E RV9NQVNLLCB2YWwpOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc3VibW9kZSkgew0KPiA+ICsJY2Fz ZSBQSFlfTU9ERV9QQ0lFX1JDOg0KPiA+ICsJCXZhbCA9IEZJRUxEX1BSRVAoSFNJT19ERVZJQ0Vf VFlQRV9NQVNLLA0KPiBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUKTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUEhZX01PREVfUENJRV9FUDoNCj4gPiArCQl2YWwgPSBGSUVMRF9QUkVQKEhTSU9f REVWSUNFX1RZUEVfTUFTSywNCj4gUENJX0VYUF9UWVBFX0VORFBPSU5UKTsNCj4gPiArCQlicmVh azsNCj4gPiArCWRlZmF1bHQ6IC8qIFN1cHBvcnQgb25seSBQQ0llIEVQIGFuZCBSQyBub3cuICov DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gKwlpZiAoc3VibW9kZSkNCj4gPiArCQly ZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lPX0NUUkww LA0KPiA+ICsJCQkJICAgSFNJT19ERVZJQ0VfVFlQRV9NQVNLLCB2YWwpOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlteF9oc2lvX3NldF9z cGVlZChzdHJ1Y3QgcGh5ICpwaHksIGludCBzcGVlZCkgew0KPiA+ICsJc3RydWN0IGlteF9oc2lv X3BoeV9taXggKnBtaXggPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsNCj4gPiArCXN0cnVjdCBpbXhf aHNpb19wcml2ICpwcml2ID0gcG1peC0+cHJpdjsNCj4gPiArDQo+ID4gKwlyZWdtYXBfdXBkYXRl X2JpdHMocHJpdi0+Y3RybCwgcG1peC0+Y3RybF9vZmYgKyBIU0lPX0NUUkwyLA0KPiA+ICsJCQkg ICBIU0lPX0xUU1NNX0VOQUJMRSwNCj4gPiArCQkJICAgc3BlZWQgPyBIU0lPX0xUU1NNX0VOQUJM RSA6IDApOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgcGh5X29wcyBpbXhfaHNpb19vcHMgPSB7DQo+ID4gKwkuaW5pdCA9IGlteF9oc2lv X2luaXQsDQo+ID4gKwkuZXhpdCA9IGlteF9oc2lvX2V4aXQsDQo+ID4gKwkucG93ZXJfb24gPSBp bXhfaHNpb19wb3dlcl9vbiwNCj4gPiArCS5zZXRfbW9kZSA9IGlteF9oc2lvX3NldF9tb2RlLA0K PiA+ICsJLnNldF9zcGVlZCA9IGlteF9oc2lvX3NldF9zcGVlZCwNCj4gPiArCS5vd25lciA9IFRI SVNfTU9EVUxFLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhf aHNpb19kcnZkYXRhIGlteDhxeHBfaHNpb19kcnZkYXRhID0gew0KPiA+ICsJLnBoeV9taXhfbnVt ID0gMHgxLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpbXhfaHNp b19kcnZkYXRhIGlteF9oc2lvX2RydmRhdGEgPSB7DQo+ID4gKwkucGh5X21peF9udW0gPSAweDQs DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBp bXhfaHNpb19vZl9tYXRjaFtdID0gew0KPiA+ICsJey5jb21wYXRpYmxlID0gImZzbCxpbXg4cW0t aHNpbyIsIC5kYXRhID0gJmlteF9oc2lvX2RydmRhdGF9LA0KPiA+ICsJey5jb21wYXRpYmxlID0g ImZzbCxpbXg4cXhwLWhzaW8iLCAuZGF0YSA9ICZpbXg4cXhwX2hzaW9fZHJ2ZGF0YX0sDQo+ID4g Kwl7IH0sDQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteF9oc2lvX29m X21hdGNoKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGh5ICppbXhfaHNpb194bGF0ZShz dHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkgIGNvbnN0IHN0cnVjdCBvZl9waGFuZGxlX2Fy Z3MgKmFyZ3MpIHsNCj4gPiArCXN0cnVjdCBpbXhfaHNpb19wcml2ICpwcml2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7DQo+ID4gKwlpbnQgcGh5X3R5cGUgPSBhcmdzLT5hcmdzWzBdOw0KPiA+ICsJ aW50IGN0cmxfaW5kZXggPSBhcmdzLT5hcmdzWzFdOw0KPiA+ICsJaW50IGlkeCwgbGFuZV9tYXNr ID0gYXJncy0+YXJnc1syXTsNCj4gPiArDQo+ID4gKwlpZHggPSBpbXhfaHNpb19nZXRfaWR4KHBo eV90eXBlLCBjdHJsX2luZGV4LCBsYW5lX21hc2spOw0KPiA+ICsJaWYgKGlkeCA8IDAgfHwgaWR4 ID49IHByaXYtPmRydmRhdGEtPnBoeV9taXhfbnVtKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOw0KPiA+ICsJcHJpdi0+cG1peFtpZHhdLnBoeV90eXBlID0gcGh5X3R5cGU7DQo+ID4g Kwlwcml2LT5wbWl4W2lkeF0uY3RybF9pbmRleCA9IGN0cmxfaW5kZXg7DQo+ID4gKwlwcml2LT5w bWl4W2lkeF0uaWR4ID0gaWR4Ow0KPiA+ICsNCj4gPiArCXJldHVybiBwcml2LT5wbWl4W2lkeF0u cGh5Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlteF9oc2lvX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArCWludCBpOw0KPiA+ICsJdm9pZCBfX2lv bWVtICpvZmY7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsNCj4gPiArCWNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgKm9mX2lkOw0KPiA+ICsJc3RydWN0IGlteF9oc2lvX3ByaXYgKnByaXY7 DQo+ID4gKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwcm92aWRlcjsNCj4gPiArDQo+ID4gKwlvZl9p ZCA9IG9mX21hdGNoX2RldmljZShpbXhfaHNpb19vZl9tYXRjaCwgZGV2KTsNCj4gPiArCWlmICgh b2ZfaWQpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBUaGlzIGRyaXZlciBvbmx5IHdv cmtzIHdpdGggRFQuIFdlJ3ZlIGVudGVyZWQgcHJvYmUgYmVjYXVzZSBtYXRjaGluZyBoYXBwZW5l ZC4NCj4gSG93IGNvdWxkIHRoaXMgZmFpbD8NCj4gDQpZb3UncmUgcmlnaHQuDQpUaGlzIGNoZWNr IGNhbiBiZSByZW1vdmVkIHRvdGFsbHkuIFRoYW5rcy4NCj4gPiArDQo+ID4gKwlwcml2ID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOw0KPiA+ICsJ aWYgKCFwcml2KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsJcHJpdi0+ZGV2ID0gJnBk ZXYtPmRldjsNCj4gPiArCXByaXYtPmRydmRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEo ZGV2KTsNCj4gPiArDQo+ID4gKwkvKiBHZXQgSFNJTyBjb25maWd1cmF0aW9uIG1vZGUgKi8NCj4g PiArCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZnNsLGhzaW8tY2ZnIiwgJnByaXYtPmhzaW9f Y2ZnKTsNCj4gPiArCS8qIEdldCBQSFkgcmVmY2xrIHBhZCBtb2RlICovDQo+ID4gKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJmc2wscmVmY2xrLXBhZC1tb2RlIiwgJnByaXYtPnJlZmNs a19wYWQpKQ0KPiA+ICsJCXByaXYtPnJlZmNsa19wYWQgPSBJTVg4X1BDSUVfUkVGQ0xLX1BBRF9P VVRQVVQ7DQo+ID4gKw0KPiA+ICsJcHJpdi0+YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9y ZXNvdXJjZShwZGV2LCAwKTsNCj4gPiArCWlmIChJU19FUlIocHJpdi0+YmFzZSkpDQo+ID4gKwkJ cmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7DQo+ID4gKw0KPiA+ICsJb2ZmID0gZGV2bV9wbGF0 Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCAicGh5Iik7DQo+ID4gKwlwcml2LT5w aHkgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBvZmYsICZyZWdtYXBfY29uZmlnKTsNCj4g PiArCWlmIChJU19FUlIocHJpdi0+cGh5KSkNCj4gPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShk ZXYsIFBUUl9FUlIocHJpdi0+cGh5KSwNCj4gPiArCQkJCSAgICAgInVuYWJsZSB0byBmaW5kIHBo eSBjc3IgcmVnaXN0ZXJzXG4iKTsNCj4gPiArDQo+ID4gKwlvZmYgPSBkZXZtX3BsYXRmb3JtX2lv cmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsICJjdHJsIik7DQo+ID4gKwlwcml2LT5jdHJsID0g ZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgb2ZmLCAmcmVnbWFwX2NvbmZpZyk7DQo+ID4gKwlp ZiAoSVNfRVJSKHByaXYtPmN0cmwpKQ0KPiA+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwg UFRSX0VSUihwcml2LT5jdHJsKSwNCj4gPiArCQkJCSAgICAgInVuYWJsZSB0byBmaW5kIGN0cmwg Y3NyIHJlZ2lzdGVyc1xuIik7DQo+ID4gKw0KPiA+ICsJb2ZmID0gZGV2bV9wbGF0Zm9ybV9pb3Jl bWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCAibWlzYyIpOw0KPiA+ICsJcHJpdi0+bWlzYyA9IGRl dm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIG9mZiwgJnJlZ21hcF9jb25maWcpOw0KPiA+ICsJaWYg KElTX0VSUihwcml2LT5taXNjKSkNCj4gPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBU Ul9FUlIocHJpdi0+bWlzYyksDQo+ID4gKwkJCQkgICAgICJ1bmFibGUgdG8gZmluZCBtaXNjIGNz ciByZWdpc3RlcnNcbiIpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kcnZk YXRhLT5waHlfbWl4X251bTsgaSsrKSB7DQo+ID4gKwkJc3RydWN0IGlteF9oc2lvX3BoeV9taXgg KnBtaXggPSAmcHJpdi0+cG1peFtpXTsNCj4gPiArCQlzdHJ1Y3QgcGh5ICpwaHk7DQo+ID4gKw0K PiA+ICsJCW1lbXNldChwbWl4LCAwLCBzaXplb2YoKnBtaXgpKTsNCj4gPiArDQo+ID4gKwkJcGh5 ID0gZGV2bV9waHlfY3JlYXRlKCZwZGV2LT5kZXYsIE5VTEwsICZpbXhfaHNpb19vcHMpOw0KPiAN Cj4gWW91IGhhdmUgdXAgdG8gMyBwaHlzLCB3aHkgZG8geW91IHJlZ2lzdGVyIDQ/DQpCYXNlZCBv biB0aGUgMyBoYXJkd2FyZSBsYW5lIHBoeSBpbnN0YW5jZXMsIHRoZXJlIGFyZSBmb3VyIHBoeSBj b21iaW5hdGlvbiBtb2Rlcw0KIGRlZmluZWQgYWJvdmUuDQpTbywgNCBhYnN0cmFjdCBwaHlzIGFy ZSByZWdpc3RlciBoZXJlIGFjY29yZGluZyB0byB0aGUgZGlmZmVyZW50IHBoeSBtb2Rlcy4NCg0K QW55d2F5LCBJIGNvbnNpZGVyIHRvIGRyb3AgdGhpcyBtZXRob2QsIGFuZCBmb2xsb3dpbmcgeW91 ciBzdWdnZXN0aW9ucw0KIGxpc3RlZCBiZWxvdy4NClBDSUVBOg0KcGh5cyA9IDwmaHNpb19waHkg MCBQSFlfTU9ERV9QQ0lFPjsNCm9yOg0KcGh5cyA9IDwmaHNpb19waHkgMCBQSFlfTU9ERV9QQ0lF PiwgPCZoc2lvX3BoeSAxIFBIWV9NT0RFX1BDSUU+Ow0KDQpQQ0lFQjoNCnBoeXMgPSA8JmhzaW9f cGh5IDEgUEhZX01PREVfUENJRT47DQpvcjoNCnBoeXMgPSA8JmhzaW9fcGh5IDIgUEhZX01PREVf UENJRT47DQoNClNBVEE6DQpwaHlzID0gPCZoc2lvX3BoeSAyIFBIWV9NT0RFX1NBVEE+Ow0KDQpS aWNoYXJkDQpCZXN0IFJlZ2FyZHMNCj4gDQo+IA0KPiA+ICsJCWlmIChJU19FUlIocGh5KSkNCj4g PiArCQkJcmV0dXJuIFBUUl9FUlIocGh5KTsNCj4gPiArDQo+ID4gKwkJcG1peC0+cHJpdiA9IHBy aXY7DQo+ID4gKwkJcG1peC0+cGh5ID0gcGh5Ow0KPiA+ICsJCXBtaXgtPmlkeCA9IGk7DQo+ID4g KwkJcGh5X3NldF9kcnZkYXRhKHBoeSwgcG1peCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2 X3NldF9kcnZkYXRhKGRldiwgcHJpdik7DQo+ID4gKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRl diwgcHJpdik7DQo+ID4gKw0KPiA+ICsJcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9y ZWdpc3RlcigmcGRldi0+ZGV2LA0KPiA+ICtpbXhfaHNpb194bGF0ZSk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwcm92aWRlcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF9oc2lvX2RyaXZlciA9IHsNCj4gPiArCS5w cm9iZQk9IGlteF9oc2lvX3Byb2JlLA0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZQk9 ICJpbXg4cW0taHNpby1waHkiLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZQk9IGlteF9oc2lvX29m X21hdGNoLA0KPiA+ICsJfQ0KPiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlt eF9oc2lvX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkZTTCBJTVg4 UU0gSFNJTyBTRVJERVMgUEhZIGRyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 DQo+ID4gLS0NCj4gPiAyLjM3LjENCj4gPg0K