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 BB335C3DA4A for ; Mon, 19 Aug 2024 09:58:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4EE6110E23E; Mon, 19 Aug 2024 09:58:12 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="Wna8z1Zf"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85C8910E23E for ; Mon, 19 Aug 2024 09:58:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724061490; x=1755597490; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=U53bMYAztFcGTJZsFLDag6FCvBxHqOOLwYasQpiUfMs=; b=Wna8z1Zfo34IpdsInjbiDZX+pA1bOGLhMBHp6vJD6AA+5r8/yq54nU4d jsSn+tk3bfrBQyD7u0A2MiVkK03xirnRmYDpXpGFEr/QGTlTFng9K9Rrm tfsK+6IX2tfBw8mTt5zW7Nu52BN33O+PX60npsY9qXhhT/8RcNqPDdSlV j2bLi81eg57muu26nsurdVi5AovSP/3RIAm0vkE9aneO5BcAeqVPGiCjZ 31ba4x1POjA5bdtcpaF+BYlA65rQC/+IgbuJfIhrFIZekAv9Sg45P+q+6 MMyJ01nPvanxpFEMRHgD0ZO1Bfwalg4p9pIyrloMfVI7LDre33DLtP1la A==; X-CSE-ConnectionGUID: SWhqe7zBRvKE+qQhbqEOtg== X-CSE-MsgGUID: A0FIt9eVT36nxFjKhW9c5w== X-IronPort-AV: E=McAfee;i="6700,10204,11168"; a="26165334" X-IronPort-AV: E=Sophos;i="6.10,158,1719903600"; d="scan'208";a="26165334" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Aug 2024 02:58:10 -0700 X-CSE-ConnectionGUID: XA14/sROSn2RZTkqNdz7Ww== X-CSE-MsgGUID: e/fsl5tcTRaySrXBIotoJQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,158,1719903600"; d="scan'208";a="60476568" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa010.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 19 Aug 2024 02:58:10 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 19 Aug 2024 02:58:09 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 19 Aug 2024 02:58:09 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Mon, 19 Aug 2024 02:58:09 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.47) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 19 Aug 2024 02:58:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uQ2wsJY7yLer1J0ceYFvnxsDWvGRs+6KPqsn5tokw5tGcUF6NEcNgeuEFzYEU1hc8FUwJ96dI+YWcyG51ciYp1SgIynLydIyh7brm4ekhkAPfcgO+81iMV5wdvgSj3mkHofJBikWi0qWaMi95LCNSzUFimzfr232I4h+SGjDfAx/d0PNQMjxWr+hzJMzlDtWHNZHho/KaGtjGHEeZMetn+FlOb8fvw4F/ofYausmw7npUi0fHh1b6pY879ioQb/aePgunrOaj08HRN7sqThYGO9c1nNOnaLUoBkr6/dgFn00NAxhuAFfpDOcmYFcU+yuZXlAqgMLT/TA/XG7S4XdDA== 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=U53bMYAztFcGTJZsFLDag6FCvBxHqOOLwYasQpiUfMs=; b=x+xxNRBisAuRGPgtkWlXo0uzW4tbabiFfDrwYhlM8dgrsfwlajs9s96aNeQ689MhV8GH0EEkIlQraZCKaCIadb+iZ6c0YsacQ/euiAOd9PlQi6zQigH7jVmJT+JZ1VVYqiyppgkeY5E1p0W0zQ3n6hdEEPMgyu/duJoNQlP8ioNCDEydCrzKW7NwBTU3y9Lg6QGuUxNFh9vAwZwwl7zHXGqfHIoyfvCGTgkw2E2bm+hY9eD0Cvj33QCxlunCr9I5GF9jC5rTM4B5xWh3Ysetnu9012bHa0TmgHiRdSfd2RkoM6FNYoEkgvW6Pc9cP96kzKMu5j9iRRD6XLU1GnPezQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from IA0PR11MB7864.namprd11.prod.outlook.com (2603:10b6:208:3df::14) by CH3PR11MB7794.namprd11.prod.outlook.com (2603:10b6:610:125::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7875.21; Mon, 19 Aug 2024 09:58:05 +0000 Received: from IA0PR11MB7864.namprd11.prod.outlook.com ([fe80::9333:15de:faa8:4cf9]) by IA0PR11MB7864.namprd11.prod.outlook.com ([fe80::9333:15de:faa8:4cf9%5]) with mapi id 15.20.7875.019; Mon, 19 Aug 2024 09:58:05 +0000 From: "Grzegorzek, Dominik" To: "igt-dev@lists.freedesktop.org" , "Manszewski, Christoph" CC: "Patelczyk, Maciej" , "Hajda, Andrzej" , "karolina.stolarek@intel.com" , "Kempczynski, Zbigniew" , "Piatkowski, Dominik Karol" , "Sikora, Pawel" , "Kuoppala, Mika" , "Mun, Gwan-gyeong" , "kamil.konieczny@linux.intel.com" , Kolanupaka Naveena Subject: Re: [PATCH i-g-t v3 13/14] tests/xe_eudebug_online: Debug client which runs workloads on EU Thread-Topic: [PATCH i-g-t v3 13/14] tests/xe_eudebug_online: Debug client which runs workloads on EU Thread-Index: AQHa6llBw49G2ESUQkOFWl2FsWrKbrIuZ92A Date: Mon, 19 Aug 2024 09:58:05 +0000 Message-ID: <9554fdcccc00332dad9f9c345163a0fac0db23be.camel@intel.com> References: <20240809123813.109365-1-christoph.manszewski@intel.com> <20240809123813.109365-14-christoph.manszewski@intel.com> In-Reply-To: <20240809123813.109365-14-christoph.manszewski@intel.com> 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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: IA0PR11MB7864:EE_|CH3PR11MB7794:EE_ x-ms-office365-filtering-correlation-id: fac1e676-1efa-4bf9-0d37-08dcc0356bb7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?L1V3QVMyb0sra2RyRFd1ZzNwQkVRV25xd2dTNGNsOGpCa2hlMFZIL1MzaTMw?= =?utf-8?B?Q1RpMUJhQ01HR2c0SXJZd0dGOXd0WnJ0V1lXVmRTWGdqeVJJMlB3S0RYQzZC?= =?utf-8?B?c3BmZW5xUVNqTVhqZjNVV2RkQUJBOE1lSUpZSzEzSEJZdnZrOGJUV0JuQWUv?= =?utf-8?B?R3pwaU9qN3IwUTFLVGpRU1BQdFJUSFpEU2FEWUk2NHBmcld4c0dLK2t6L05i?= =?utf-8?B?MXlZbVR3dk9nVU1vV0tIY1lGWG43cEZGZnE0dE5vcnlzRnV2Y1JhTUxNU0x2?= =?utf-8?B?WVJFdWI4VHRRdUR6Q3BDeDFQMGt1Z2JBd0RrTWJtWmNuU0FMVzEvR2QwaTNP?= =?utf-8?B?VkQ5eVpIVkNCamcrUTRHTmptRUxqdkMxY2ozZlZDalU3VFhqUWNYeWxQVFFr?= =?utf-8?B?bUpBRHRVZmxITG9QNmhOU2YwOWhPaVZ5VmxVRjhhVnRHQ0E0ZzV2NkdyWHYw?= =?utf-8?B?ZnI3S2t4aXBCcFkrdkpsdHpEUmRDd1NFczYrUm5pcnRjQ0FOR1pkRm1VK3M1?= =?utf-8?B?bURxMmg3a1hzM0dqZjVXQ2pDd3puUVJyVG1aNDlvcUVRUkVTTDBLanBHbjhZ?= =?utf-8?B?VmNsZ2VRYWhBZmRod2czMk83TlROSmY2NHdvRnd2ZE51d3dXdndCbElVMzNH?= =?utf-8?B?cHQzMlZGRHBWdGVnOEVEWktFbzNJUWtWU01QWjFIbUNwVTVhdDI3SWRMTm9a?= =?utf-8?B?ckpxODY3ZHlPQXFwNFZZdEFOWUhxaVN1b3N6VFZwSlBHYmNGNENGSnJVdW5p?= =?utf-8?B?dWFKQjFCQkFZVXFEMWJWSXdaTEdoM1RyK3JwYTdIRCtDVG1iMmV5WGdsY2FH?= =?utf-8?B?T2dObnZpSTMxZ2dIWnVaajM4L3I3Y0xUZ2hZN3oyZEVjQkdQZWxqclZCQkZx?= =?utf-8?B?STAydVdVU2RSOFdIeFlsRGlxWkVZUUszUkdWWjRlVmh0MEVKeDV6VzNiUWVY?= =?utf-8?B?ZkRrNGdPbER1RHVwaHp0b0phWTlpcEQ2SHVaSFhrbkpYb0lNQWtGaHR5WGth?= =?utf-8?B?akU1d21hNi84RTZwR0NnbjNMZXI2ckI0V0tVNGdlQ1Urd2djZTI2VWsyS2hB?= =?utf-8?B?NlJlaFdGV29QZEhnaHpia1JxeTBNaGZCQm1na2hoOTRNcWlQSUdmRXFTanRi?= =?utf-8?B?bG1SaUVBZjZrZTNaTU1EZWtZL0UzU21LRll0OHd3bUh0eEVTUXlNaU1vTUJZ?= =?utf-8?B?R1VEeENVdEdNRjhMQ0JMaWpxMERJNEhMT0hBVWFEMU9XSWU2WU5uZWFwZXZo?= =?utf-8?B?aE9NbW1tdkRhNWJMckZNbzFHU2w2THhlMHIvak9tYnpGOFpLSlFtMmg5dFhq?= =?utf-8?B?TmdwcmNUK2JCR0VTbERHRzdoL1lyM1NGa0M2elgzbEJrbXNRZ3BQNU9LT2cr?= =?utf-8?B?TXZaYll6WnpNd01IeFR5V0laWmMxcXNQMlZxWDhrMlFlQm5pMDVlTkpUVUM2?= =?utf-8?B?cC9Cb2JlQk1FMmgyTExZQWF2dmUzZUtaL3dLU05PZG1nYmkvWk4zTEpNMU5o?= =?utf-8?B?UUIxNVhaV1hPS1JLYXhHNmVCQ243L1MzRURvam5lQmhYUmVIenRaWnRYcEJZ?= =?utf-8?B?WmZUdm1Zb21VSjRQdGpFcXBUZWtoTTZJN21iUnZ2VDhqUFVvenphRWU5RnR3?= =?utf-8?B?aUlJdzdIc1V4U09CdnpuT002VGFCRGl1clBEY2ZITm1WN0RORm01eFo4ekVS?= =?utf-8?B?elhYaGVHVmdjV2FiWjBlT2JiQXFlUENNNnlwbzBPalBUd1BCMGlZM3VqSnRn?= =?utf-8?B?UWlZYWJCM2VaME42MEw1NksvRWZhOSs4MDZlNnRFU3lpZUZPcjlrYkY0cWtN?= =?utf-8?B?MDlsemVmUnhtaEkyMFBKWWlPL1B6ejFmUWRtZHpuWHdjcFlQMmlrRnJJSGJB?= =?utf-8?B?QUZSM29YbUxybFY2MEhiU2hCVUZwZnFEaGREcXlRekZlNHc9PQ==?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR11MB7864.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?enRZTE42QmVRbHc3T0xnNnRaSzJQZm1vMGE0Vk5RWWVIQ1lpcGFYcVRDTHdJ?= =?utf-8?B?eU5DbUw5d1kyalExN3BINGFYOFc4QTBMUExRbFF3NlIrbXJQczhNbVRCbnA2?= =?utf-8?B?WlA2aTc3YU5MRmFYQURqTTZwQkJJWGhYeitDUVJqc2JrVnpFbW1NNFUxNXlF?= =?utf-8?B?WG1RSmdMTUZHakNITTRMeWNHWnVZR1I2UGhjMG4zazRuZVNQYmFNOEp0b1Ev?= =?utf-8?B?YVpwcjZIUm5mYlFYZ0YxblBhL0JEcStJeEV4WXExTlg5WFBZNjdIb29YZGlk?= =?utf-8?B?K1UyLzE1WlltMEdYQ3lTT0w0YmJnVERUS3FVNDRKZ254eWc5dGR0ZDU4QjZD?= =?utf-8?B?UktmcnFpL2FxYU9VUGJiRW4ya2FjSG1ZRlNGcFY2Z1ZzVWEza29iZDJsN3cw?= =?utf-8?B?WVliakMyRmd2THEyRTU4Y3ZFUXkvdzByL1ZuMlJnWjJzUmdFL3dKTjFkSko1?= =?utf-8?B?QkhhNmRVT3EzQ0h4Ui9zdSs4SlprWGVrK0I5ZWxCaUx4Q0pJR3llRFNydldS?= =?utf-8?B?c1Q2Q1NROUVwOUpNUlZnVmdNdmJGZ05yS09FUllIQ3AxR0VKZG80YmtXamxj?= =?utf-8?B?VU9DblJIRWxLUWhTaklnYUFtV1UxZDNad3hMVlNBVnlOZTh2d0hUUXhMQ0tP?= =?utf-8?B?SW9rVnA0Qk9kQ3R5b2xXMmY1bGZRNTNoMXlQTjA0SG9ZYVZzRW1WcHkxbVJ0?= =?utf-8?B?YmxZN05PQmdWaEZLQktSTTJQcTFydU9FdDJDSFRRbFg5RENyZUdVazZqMkhH?= =?utf-8?B?bHV2Tmk1bXNTVXlDMHFEWVVtV2pjYTdLVVNhOWhUK3Rob001Ukl2SkVHNTV1?= =?utf-8?B?cHJ5dGRoL0xaREN6QUoyVWF6MFFwckljaVR6UWJLOEFWRjlTY01nQnM0VEJS?= =?utf-8?B?TmVKVCtnZVVHQ1BlWGNxcCtLZ0VocTlSb1l2RGU2dGVHdGg2VXZWOUNBRmFp?= =?utf-8?B?QVhVVnM3L1Jhc2pJYTYycXNxRElBSzJFVmJJb1JMNytIbmJtaFc5Z3l0RUhZ?= =?utf-8?B?eC9RcVUzUTUwa3UxeVRjT2Z4ZytLUXhCcDNUaWdGVGMzSURiUkthZnR2T0dH?= =?utf-8?B?Q2o3WkYzU3FwUEZXMXA2TnZFZ05NaXdmREhTeTlCd1JmTmdNbzZua0gramVC?= =?utf-8?B?QTJ2QlFTRWIvSHQrMytIbkRLdWRNdTYyRUE3U2RidjI2RW9IQkwxYUhoL01s?= =?utf-8?B?SXM0L3RaQy9MYzU5U2VHb09jcmdxaUFUSjBQUGNNOGc5TFU3UlpUV3dSV0ZS?= =?utf-8?B?Tjl4Lyt1bzkxL3JyNlVaZHBTTXQ5UlhCeXBrVDZtQ2N5WWFpSlVobXFIelN2?= =?utf-8?B?U2pJSkNFMzlSblp1OTVSeHliT2R0d3NNSWp1S0lTNEVEeHRNNlFOZjBVTkRK?= =?utf-8?B?UWVkOElRY09hdVNmM2FTc2l2bStKelo0ai92Z2dRclBRcXdHYzhJbDVQVGVH?= =?utf-8?B?b09XQ2FTdGpGWHozcDhNUlM4N3pPbUFwbWk0YjF6U0o2anpFclFkR0dDdGlH?= =?utf-8?B?Z0l1TTNvUjNVUlIxelNVeWVXS0ljcktEN3VONmxGSHczRndOZW81Wkc2WTJO?= =?utf-8?B?aHlSVDN5d05QMTJtald3MUxDdE5rR1h4QW13ZmxZWVMxMEhqYnorWmMrNVNp?= =?utf-8?B?eDZjRFRCc28xYUlBaDRkU3Jya2t2ck5Db2RyQnllc3VyL2NTZG1oNGM2UUMw?= =?utf-8?B?cmFtbmNGdWdOY3R2RWtETmJ6RXNYTFNEZ2hVZGJyeHI1ekJMSGdIVmltaG9U?= =?utf-8?B?WUY3WHhZcG1jK3U5b0YwREFDdUZEd2tWc2ZCc2tlZjJJVFAyWnpqKzhhQWhC?= =?utf-8?B?dEdzWjNFakRmSGcvMGoxVkloRHdmWC94d3I2NXhZZ2dVRFlvSDJsb3lublRj?= =?utf-8?B?bG5mY25KMXFYTnJQQ1VCR3lJV0ZjUkVXamtCSmtFNXJ1akJtUG93SnJDN3U3?= =?utf-8?B?ZlN6Zms5N3NiUDN5RHZqQUhMS1FEMTh1ZFh6WC9FNVRXNGV3Z3JVTi8zWDA2?= =?utf-8?B?Z2tYQUNsR1dRVHlGZ3ROZTFzTVo1TGlxeEd6amxYN3NjN1ZYSXNabm1mR1lP?= =?utf-8?B?QzZxTk8yVVR5WUxHdVd0OWQxenhPY0tJbVcza1F0emcvdXM4eWlpTzhSUGVk?= =?utf-8?B?UkhqZnNvVXE4M0RFb1NadWw4N2lTMEpyc2NBRzhvRFlUK3pzR2MyREpVODFp?= =?utf-8?Q?Q5H9IyJqiLTEptCRhtklbk8=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <8678068A5C457D4F922D4D891AA1B7C9@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA0PR11MB7864.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fac1e676-1efa-4bf9-0d37-08dcc0356bb7 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2024 09:58:05.2552 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Lo3/8vpkCmRxmG6hkam5vxswg0tPeKTsC88EzWnTcnRxC8sJc2hnG3QvmXK7NNZjN9jqA8shqj3Isbh8/ypGAM9Wm+7CYiDkA8a79wv0fJU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB7794 X-OriginatorOrg: intel.com X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" T24gRnJpLCAyMDI0LTA4LTA5IGF0IDE0OjM4ICswMjAwLCBDaHJpc3RvcGggTWFuc3pld3NraSB3 cm90ZToNCj4gRnJvbTogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50 ZWwuY29tPg0KPiANCj4gRm9yIHR5cGljYWwgZGVidWdnaW5nIHVuZGVyIGdkYiBvbmUgY2FuIHNw ZWNpZnkgdHdvIG1haW4gdXNlY2FzZXM6DQo+IGFjY2Vzc2luZyBhbmQgbWFudXB1bGF0aW5nIHJl c291cmNlcyBjcmVhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBhbmQNCj4gbWFuaXB1bGF0aW5nIHRo cmVhZCBleGVjdXRpb24gKGludGVycnVwdGluZyBhbmQgc2V0dGluZyBicmVha3BvaW50cykuDQo+ IA0KPiBUaGlzIHRlc3QgYWRkcyBjb3ZlcmFnZSBmb3IgdGhlIGxhdHRlciBieSBjaGVja2luZyB0 aGF0Og0KPiAtIEVVIHdvcmtsb2FkcyB0aGF0IGhpdCBhIGluc3RydWN0aW9uIHdpdGggYnJlYWtw b2ludCBiaXQgc2V0IHdpbGwgc3RvcA0KPiAgIGhhbHQgZXhlY3V0aW9uIGFuZCB0aGUgZGVidWdn ZXIgd2lsbCByZXBvcnQgdGhpcyB2aWEgYXR0ZW50aW9uIGV2ZW50cywNCj4gLSB0aGUgZGVidWdn ZXIgaXMgYWJsZSB0byBpbnRlcnJ1cHQgd29ya2xvYWQgZXhlY3V0aW9uIGJ5IGlzc3VpbmcgYQ0K PiAgICdpbnRlcnJ1cHRfYWxsJyBpb2N0bCBjYWxsLA0KPiAtIHRoZSBkZWJ1Z2dlciBpcyBhYmxl IHRvIHJlc3VtZSBzZWxlY3RlZCB3b3JrbG9hZHMgdGhhdCBhcmUgc3RvcHBlZC4NCj4gDQo+IFNp Z25lZC1vZmYtYnk6IERvbWluaWsgR3J6ZWdvcnplayA8ZG9taW5pay5ncnplZ29yemVrQGludGVs LmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRl bC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IENocmlzdG9waCBNYW5zemV3c2tpIDxjaHJpc3RvcGgu bWFuc3pld3NraUBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IERvbWluaWsgS2Fyb2wgUGnE hXRrb3dza2kgPGRvbWluaWsua2Fyb2wucGlhdGtvd3NraUBpbnRlbC5jb20+DQo+IFNpZ25lZC1v ZmYtYnk6IFBhd2VsIFNpa29yYSA8cGF3ZWwuc2lrb3JhQGludGVsLmNvbT4NCj4gU2lnbmVkLW9m Zi1ieTogS2Fyb2xpbmEgU3RvbGFyZWsgPGthcm9saW5hLnN0b2xhcmVrQGludGVsLmNvbT4NCj4g U2lnbmVkLW9mZi1ieTogS29sYW51cGFrYSBOYXZlZW5hIDxrb2xhbnVwYWthLm5hdmVlbmFAaW50 ZWwuY29tPg0KPiAtLS0NCj4gIHRlc3RzL2ludGVsL3hlX2V1ZGVidWdfb25saW5lLmMgfCAyMjAz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHRlc3RzL21lc29uLmJ1aWxkICAg ICAgICAgICAgICAgfCAgICAxICsNCj4gIDIgZmlsZXMgY2hhbmdlZCwgMjIwNCBpbnNlcnRpb25z KCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaW50ZWwveGVfZXVkZWJ1Z19vbmxpbmUu Yw0KPiANCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGVsL3hlX2V1ZGVidWdfb25saW5lLmMgYi90 ZXN0cy9pbnRlbC94ZV9ldWRlYnVnX29ubGluZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMC4uMWM4YWM2N2YxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdGVz dHMvaW50ZWwveGVfZXVkZWJ1Z19vbmxpbmUuYw0KPiBAQCAtMCwwICsxLDIyMDMgQEANCj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgwqkg MjAyMyBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKy8qKg0KPiArICogVEVTVDog VGVzdHMgZm9yIGV1ZGVidWcgb25saW5lIGZ1bmN0aW9uYWxpdHkNCj4gKyAqIENhdGVnb3J5OiBD b3JlDQo+ICsgKiBNZWdhIGZlYXR1cmU6IEVVZGVidWcNCj4gKyAqIFN1Yi1jYXRlZ29yeTogRVVk ZWJ1ZyB0ZXN0cw0KPiArICogRnVuY3Rpb25hbGl0eTogZXUga2VybmVsIGRlYnVnDQo+ICsgKiBU ZXN0IGNhdGVnb3J5OiBmdW5jdGlvbmFsaXR5IHRlc3QNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVk ZSAieGUveGVfZXVkZWJ1Zy5oIg0KPiArI2luY2x1ZGUgInhlL3hlX2lvY3RsLmgiDQo+ICsjaW5j bHVkZSAieGUveGVfcXVlcnkuaCINCj4gKyNpbmNsdWRlICJpZ3QuaCINCj4gKyNpbmNsdWRlICJp bnRlbF9wYXQuaCINCj4gKyNpbmNsdWRlICJpbnRlbF9tb2NzLmgiDQo+ICsjaW5jbHVkZSAiZ3Bn cHVfc2hhZGVyLmgiDQo+ICsNCj4gKyNkZWZpbmUgU0hBREVSX05PUAkJCSgwIDw8IDApDQo+ICsj ZGVmaW5lIFNIQURFUl9CUkVBS1BPSU5UCQkoMSA8PCAwKQ0KPiArI2RlZmluZSBTSEFERVJfTE9P UAkJCSgxIDw8IDEpDQo+ICsjZGVmaW5lIFNIQURFUl9TSU5HTEVfU1RFUAkJKDEgPDwgMikNCj4g KyNkZWZpbmUgU0lQX1NJTkdMRV9TVEVQCQkJKDEgPDwgMykNCj4gKyNkZWZpbmUgRElTQUJMRV9E RUJVR19NT0RFCQkoMSA8PCA0KQ0KPiArI2RlZmluZSBTSEFERVJfTl9OT09QX0JSRUFLUE9JTlQJ KDEgPDwgNSkNCj4gKyNkZWZpbmUgU0hBREVSX0NBQ0hJTkdfU1JBTQkJKDEgPDwgNikNCj4gKyNk ZWZpbmUgU0hBREVSX0NBQ0hJTkdfVlJBTQkJKDEgPDwgNykNCj4gKyNkZWZpbmUgU0hBREVSX01J Tl9USFJFQURTCQkoMSA8PCA4KQ0KPiArI2RlZmluZSBET19OT1RfRVhQRUNUX0NBTkFSSUVTCQko MSA8PCA5KQ0KPiArI2RlZmluZSBUUklHR0VSX1JFU1VNRV9TSU5HTEVfV0FMSwkoMSA8PCAyNSkN Cj4gKyNkZWZpbmUgVFJJR0dFUl9SRVNVTUVfUEFSQUxMRUxfV0FMSwkoMSA8PCAyNikNCj4gKyNk ZWZpbmUgVFJJR0dFUl9SRUNPTk5FQ1QJCSgxIDw8IDI3KQ0KPiArI2RlZmluZSBUUklHR0VSX1JF U1VNRV9TRVRfQlAJCSgxIDw8IDI4KQ0KPiArI2RlZmluZSBUUklHR0VSX1JFU1VNRV9ERUxBWUVE CQkoMSA8PCAyOSkNCj4gKyNkZWZpbmUgVFJJR0dFUl9SRVNVTUVfRFNTCQkoMSA8PCAzMCkNCj4g KyNkZWZpbmUgVFJJR0dFUl9SRVNVTUVfT05FCQkoMSA8PCAzMSkNCj4gKw0KPiArI2RlZmluZSBE RUJVR0dFUl9SRUFUVEFDSEVECTENCj4gKw0KPiArI2RlZmluZSBTSEFERVJfTE9PUF9OCQkzDQo+ ICsjZGVmaW5lIFNJTkdMRV9TVEVQX0NPVU5UCTE2DQo+ICsjZGVmaW5lIFNURUVSSU5HX1NJTkdM RV9TVEVQCTANCj4gKyNkZWZpbmUgU1RFRVJJTkdfQ09OVElOVUUJMHgwMGMwZmZlZQ0KPiArI2Rl ZmluZSBTVEVFUklOR19FTkRfTE9PUAkweGRlYWRjYTExDQo+ICsNCj4gKyNkZWZpbmUgQ0FDSElO R19JTklUX1ZBTFVFCTB4Y2FmZTAwMDANCj4gKyNkZWZpbmUgQ0FDSElOR19QT0lTT05fVkFMVUUJ MHhjYWZlZGVhZA0KPiArI2RlZmluZSBDQUNISU5HX1ZBTFVFKG4pCShDQUNISU5HX0lOSVRfVkFM VUUgKyBuKQ0KPiArDQo+ICsjZGVmaW5lIFNIQURFUl9DQU5BUlkgMHgwMTAxMDEwMQ0KPiArDQo+ ICsjZGVmaW5lIFdBTEtFUl9YX0RJTQkJNA0KPiArI2RlZmluZSBXQUxLRVJfQUxJR05NRU5UCTE2 DQo+ICsjZGVmaW5lIFNJTURfU0laRQkJMTYNCj4gKw0KPiArI2RlZmluZSBTVEFSVFVQX1RJTUVP VVRfTVMJMzAwMA0KPiArI2RlZmluZSBXT1JLTE9BRF9ERUxBWV9VUwkoNTAwMCAqIDEwMDApDQo+ ICsNCj4gKyNkZWZpbmUgUEFHRV9TSVpFIDQwOTYNCj4gKw0KPiArc3RydWN0IGRpbV90IHsNCj4g Kwl1aW50MzJfdCB4Ow0KPiArCXVpbnQzMl90IHk7DQo+ICsJdWludDMyX3QgYWxpZ25tZW50Ow0K PiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBkaW1fdCB3YWxrZXJfZGltZW5zaW9ucyhpbnQg dGhyZWFkcykNCj4gK3sNCj4gKwl1aW50MzJfdCB4X2RpbSA9IG1pbl90KHhfZGltLCB0aHJlYWRz LCBXQUxLRVJfWF9ESU0pOw0KPiArCXN0cnVjdCBkaW1fdCByZXQgPSB7DQo+ICsJCS54ID0geF9k aW0sDQo+ICsJCS55ID0gdGhyZWFkcyAvIHhfZGltLA0KPiArCQkuYWxpZ25tZW50ID0gV0FMS0VS X0FMSUdOTUVOVA0KPiArCX07DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtz dGF0aWMgc3RydWN0IGRpbV90IHN1cmZhY2VfZGltZW5zaW9ucyhpbnQgdGhyZWFkcykNCj4gK3sN Cj4gKwlzdHJ1Y3QgZGltX3QgcmV0ID0gd2Fsa2VyX2RpbWVuc2lvbnModGhyZWFkcyk7DQo+ICsN Cj4gKwlyZXQueSA9IG1heF90KHJldC55LCB0aHJlYWRzL3JldC54LCA0KTsNCj4gKwlyZXQueCAq PSBTSU1EX1NJWkU7DQo+ICsJcmV0LmFsaWdubWVudCAqPSBTSU1EX1NJWkU7DQo+ICsNCj4gKwly ZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdWludDMyX3Qgc3RlZXJpbmdfb2Zmc2V0 KGludCB0aHJlYWRzKQ0KPiArew0KPiArCXN0cnVjdCBkaW1fdCB3ID0gd2Fsa2VyX2RpbWVuc2lv bnModGhyZWFkcyk7DQo+ICsNCj4gKwlyZXR1cm4gQUxJR04ody54LCB3LmFsaWdubWVudCkgKiB3 LnkgKiA0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGludGVsX2J1ZiAqY3JlYXRlX3Vj X2J1ZihpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaW50 ZWxfYnVmICpidWY7DQo+ICsNCj4gKwlidWYgPSBpbnRlbF9idWZfY3JlYXRlX2Z1bGwoYnVmX29w c19jcmVhdGUoZmQpLCAwLCB3aWR0aC80LCBoZWlnaHQsDQo+ICsJCQkJICAgIDMyLCAwLCBJOTE1 X1RJTElOR19OT05FLCAwLCAwLCAwLA0KPiArCQkJCSAgICB2cmFtX2lmX3Bvc3NpYmxlKGZkLCAw KSwNCj4gKwkJCQkgICAgREVGQVVMVF9QQVRfSU5ERVgsIERFRkFVTFRfTU9DU19JTkRFWCk7DQo+ ICsNCj4gKwlyZXR1cm4gYnVmOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGdldF9udW1iZXJf b2ZfdGhyZWFkcyh1aW50NjRfdCBmbGFncykNCj4gK3sNCj4gKwlpZiAoZmxhZ3MgJiBTSEFERVJf TUlOX1RIUkVBRFMpDQo+ICsJCXJldHVybiAxNjsNCj4gKw0KPiArCWlmIChmbGFncyAmIChUUklH R0VSX1JFU1VNRV9PTkUgfCBUUklHR0VSX1JFU1VNRV9TSU5HTEVfV0FMSyB8DQo+ICsJCSAgICAg VFJJR0dFUl9SRVNVTUVfUEFSQUxMRUxfV0FMSyB8IFNIQURFUl9DQUNISU5HX1NSQU0gfCBTSEFE RVJfQ0FDSElOR19WUkFNKSkNCj4gKwkJcmV0dXJuIDMyOw0KPiArDQo+ICsJcmV0dXJuIDUxMjsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBjYWNoaW5nX2dldF9pbnN0cnVjdGlvbl9jb3VudChp bnQgZmQsIHVpbnQzMl90IHNfZGltX194LCBpbnQgZmxhZ3MpDQo+ICt7DQo+ICsJdWludDY0X3Qg bWVtb3J5Ow0KPiArDQo+ICsJaWd0X2Fzc2VydCgoZmxhZ3MgJiBTSEFERVJfQ0FDSElOR19TUkFN KSB8fCAoZmxhZ3MgJiBTSEFERVJfQ0FDSElOR19WUkFNKSk7DQo+ICsNCj4gKwlpZiAoZmxhZ3Mg JiBTSEFERVJfQ0FDSElOR19TUkFNKQ0KPiArCQltZW1vcnkgPSBzeXN0ZW1fbWVtb3J5KGZkKTsN Cj4gKwllbHNlDQo+ICsJCW1lbW9yeSA9IHZyYW1fbWVtb3J5KGZkLCAwKTsNCj4gKw0KPiArCS8q IGVhY2ggaW5zdHJ1Y3Rpb24gd3JpdGVzIHRvIGdpdmVuIHkgb2Zmc2V0ICovDQo+ICsJcmV0dXJu ICgyICogeGVfbWluX3BhZ2Vfc2l6ZShmZCwgbWVtb3J5KSkgLyBzX2RpbV9feDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHN0cnVjdCBncGdwdV9zaGFkZXIgKmdldF9zaGFkZXIoaW50IGZkLCBjb25z dCB1bnNpZ25lZCBpbnQgZmxhZ3MpDQo+ICt7DQo+ICsJc3RydWN0IGRpbV90IHdfZGltID0gd2Fs a2VyX2RpbWVuc2lvbnMoZ2V0X251bWJlcl9vZl90aHJlYWRzKGZsYWdzKSk7DQo+ICsJc3RydWN0 IGRpbV90IHNfZGltID0gc3VyZmFjZV9kaW1lbnNpb25zKGdldF9udW1iZXJfb2ZfdGhyZWFkcyhm bGFncykpOw0KPiArCXN0YXRpYyBzdHJ1Y3QgZ3BncHVfc2hhZGVyICpzaGFkZXI7DQo+ICsNCj4g KwlzaGFkZXIgPSBncGdwdV9zaGFkZXJfY3JlYXRlKGZkKTsNCj4gKw0KPiArCWdwZ3B1X3NoYWRl cl9fd3JpdGVfZHdvcmQoc2hhZGVyLCBTSEFERVJfQ0FOQVJZLCAwKTsNCj4gKwlpZiAoZmxhZ3Mg JiBTSEFERVJfQlJFQUtQT0lOVCkgew0KPiArCQlncGdwdV9zaGFkZXJfX25vcChzaGFkZXIpOw0K PiArCQlncGdwdV9zaGFkZXJfX2JyZWFrcG9pbnQoc2hhZGVyKTsNCj4gKwl9IGVsc2UgaWYgKGZs YWdzICYgU0hBREVSX0xPT1ApIHsNCj4gKwkJZ3BncHVfc2hhZGVyX19sYWJlbChzaGFkZXIsIDAp Ow0KPiArCQlncGdwdV9zaGFkZXJfX3dyaXRlX2R3b3JkKHNoYWRlciwgU0hBREVSX0NBTkFSWSwg MCk7DQo+ICsJCWdwZ3B1X3NoYWRlcl9fanVtcF9uZXEoc2hhZGVyLCAwLCB3X2RpbS55LCBTVEVF UklOR19FTkRfTE9PUCk7DQo+ICsJCWdwZ3B1X3NoYWRlcl9fd3JpdGVfZHdvcmQoc2hhZGVyLCBT SEFERVJfQ0FOQVJZLCAwKTsNCj4gKwl9IGVsc2UgaWYgKGZsYWdzICYgU0hBREVSX1NJTkdMRV9T VEVQKSB7DQo+ICsJCWdwZ3B1X3NoYWRlcl9fbm9wKHNoYWRlcik7DQo+ICsJCWdwZ3B1X3NoYWRl cl9fYnJlYWtwb2ludChzaGFkZXIpOw0KPiArCQlmb3IgKGludCBpID0gMDsgaSA8IFNJTkdMRV9T VEVQX0NPVU5UOyBpKyspDQo+ICsJCQlncGdwdV9zaGFkZXJfX25vcChzaGFkZXIpOw0KPiArCX0g ZWxzZSBpZiAoZmxhZ3MgJiBTSEFERVJfTl9OT09QX0JSRUFLUE9JTlQpIHsNCj4gKwkJZm9yIChp bnQgaSA9IDA7IGkgPCBTSEFERVJfTE9PUF9OOyBpKyspIHsNCj4gKwkJCWdwZ3B1X3NoYWRlcl9f bm9wKHNoYWRlcik7DQo+ICsJCQlncGdwdV9zaGFkZXJfX2JyZWFrcG9pbnQoc2hhZGVyKTsNCj4g KwkJfQ0KPiArCX0gZWxzZSBpZiAoKGZsYWdzICYgU0hBREVSX0NBQ0hJTkdfU1JBTSkgfHwgKGZs YWdzICYgU0hBREVSX0NBQ0hJTkdfVlJBTSkpIHsNCj4gKwkJZ3BncHVfc2hhZGVyX19ub3Aoc2hh ZGVyKTsNCj4gKwkJZ3BncHVfc2hhZGVyX19icmVha3BvaW50KHNoYWRlcik7DQo+ICsJCWZvciAo aW50IGkgPSAwOyBpIDwgY2FjaGluZ19nZXRfaW5zdHJ1Y3Rpb25fY291bnQoZmQsIHNfZGltLngs IGZsYWdzKTsgaSsrKQ0KPiArCQkJZ3BncHVfc2hhZGVyX19jb21tb25fdGFyZ2V0X3dyaXRlX3Uz MihzaGFkZXIsIHNfZGltLnkgKyBpLCBDQUNISU5HX1ZBTFVFKGkpKTsNCj4gKwkJZ3BncHVfc2hh ZGVyX19ub3Aoc2hhZGVyKTsNCj4gKwkJZ3BncHVfc2hhZGVyX19icmVha3BvaW50KHNoYWRlcik7 DQo+ICsJfQ0KPiArDQo+ICsJZ3BncHVfc2hhZGVyX19lb3Qoc2hhZGVyKTsNCj4gKwlyZXR1cm4g c2hhZGVyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGdwZ3B1X3NoYWRlciAqZ2V0X3Np cChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3QgZGlt X3Qgd19kaW0gPSB3YWxrZXJfZGltZW5zaW9ucyhnZXRfbnVtYmVyX29mX3RocmVhZHMoZmxhZ3Mp KTsNCj4gKwlzdGF0aWMgc3RydWN0IGdwZ3B1X3NoYWRlciAqc2lwOw0KPiArDQo+ICsJc2lwID0g Z3BncHVfc2hhZGVyX2NyZWF0ZShmZCk7DQo+ICsJZ3BncHVfc2hhZGVyX193cml0ZV9haXAoc2lw LCAwKTsNCj4gKw0KPiArCWdwZ3B1X3NoYWRlcl9fd2FpdChzaXApOw0KPiArCWlmIChmbGFncyAm IFNJUF9TSU5HTEVfU1RFUCkNCj4gKwkJZ3BncHVfc2hhZGVyX19lbmRfc3lzdGVtX3JvdXRpbmVf c3RlcF9pZl9lcShzaXAsIHdfZGltLnksIDApOw0KPiArCWVsc2UNCj4gKwkJZ3BncHVfc2hhZGVy X19lbmRfc3lzdGVtX3JvdXRpbmUoc2lwLCB0cnVlKTsNCj4gKwlyZXR1cm4gc2lwOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGNvdW50X3NldF9iaXRzKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUp DQo+ICt7DQo+ICsJdWludDhfdCAqcCA9IHB0cjsNCj4gKwlpbnQgY291bnQgPSAwOw0KPiArCWlu dCBpLCBqOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykNCj4gKwkJZm9yIChq ID0gMDsgaiA8IDg7IGorKykNCj4gKwkJCWNvdW50ICs9ICEhKHBbaV0gJiAoMSA8PCBqKSk7DQo+ ICsNCj4gKwlyZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgY291bnRfY2Fu YXJpZXNfZXEodWludDMyX3QgKnB0ciwgc3RydWN0IGRpbV90IHdfZGltLCB1aW50MzJfdCB2YWx1 ZSkNCj4gK3sNCj4gKwlpbnQgY291bnQgPSAwOw0KPiArCWludCB4LCB5Ow0KPiArDQo+ICsJZm9y ICh4ID0gMDsgeCA8IHdfZGltLng7IHgrKykNCj4gKwkJZm9yICh5ID0gMDsgeSA8IHdfZGltLnk7 IHkrKykNCj4gKwkJCWlmIChSRUFEX09OQ0UocHRyW3ggKyBBTElHTih3X2RpbS54LCB3X2RpbS5h bGlnbm1lbnQpICogeV0pID09IHZhbHVlKQ0KPiArCQkJCWNvdW50Kys7DQo+ICsNCj4gKwlyZXR1 cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgY291bnRfY2FuYXJpZXNfbmVxKHVp bnQzMl90ICpwdHIsIHN0cnVjdCBkaW1fdCB3X2RpbSwgdWludDMyX3QgdmFsdWUpDQo+ICt7DQo+ ICsJcmV0dXJuIHdfZGltLnggKiB3X2RpbS55IC0gY291bnRfY2FuYXJpZXNfZXEocHRyLCB3X2Rp bSwgdmFsdWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3QgY2hhciAqdGRfY3RsX2NtZF90 b19zdHIodWludDMyX3QgY21kKQ0KPiArew0KPiArCXN3aXRjaCAoY21kKSB7DQo+ICsJY2FzZSBE Uk1fWEVfRVVERUJVR19FVV9DT05UUk9MX0NNRF9JTlRFUlJVUFRfQUxMOg0KPiArCQlyZXR1cm4g ImludGVycnVwdCBhbGwiOw0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVVfQ09OVFJPTF9DTURf U1RPUFBFRDoNCj4gKwkJcmV0dXJuICJzdG9wcGVkIjsNCj4gKwljYXNlIERSTV9YRV9FVURFQlVH X0VVX0NPTlRST0xfQ01EX1JFU1VNRToNCj4gKwkJcmV0dXJuICJyZXN1bWUiOw0KPiArCWRlZmF1 bHQ6DQo+ICsJCXJldHVybiAidW5rbm93biBjb21tYW5kIjsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgX19ldV9jdGwoaW50IGRlYnVnZmQsIHVpbnQ2NF90IGNsaWVudCwNCj4gKwkJ ICAgIHVpbnQ2NF90IGV4ZWNfcXVldWUsIHVpbnQ2NF90IGxyYywNCj4gKwkJICAgIHVpbnQ4X3Qg KmJpdG1hc2ssIHVpbnQzMl90ICpiaXRtYXNrX3NpemUsDQo+ICsJCSAgICB1aW50MzJfdCBjbWQs IHVpbnQ2NF90ICpzZXFubykNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXVfY29u dHJvbCBjb250cm9sID0gew0KPiArCQkuY2xpZW50X2hhbmRsZSA9IGxvd2VyXzMyX2JpdHMoY2xp ZW50KSwNCj4gKwkJLmV4ZWNfcXVldWVfaGFuZGxlID0gZXhlY19xdWV1ZSwNCj4gKwkJLmxyY19o YW5kbGUgPSBscmMsDQo+ICsJCS5jbWQgPSBjbWQsDQo+ICsJCS5iaXRtYXNrX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcihiaXRtYXNrKSwNCj4gKwl9Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAo Yml0bWFza19zaXplKQ0KPiArCQljb250cm9sLmJpdG1hc2tfc2l6ZSA9ICpiaXRtYXNrX3NpemU7 DQo+ICsNCj4gKwlyZXQgPSBpZ3RfaW9jdGwoZGVidWdmZCwgRFJNX1hFX0VVREVCVUdfSU9DVExf RVVfQ09OVFJPTCwgJmNvbnRyb2wpOw0KPiArDQo+ICsJaWYgKHJldCA8IDApDQo+ICsJCXJldHVy biAtZXJybm87DQo+ICsNCj4gKwlpZ3RfZGVidWcoIkVVIENPTlRST0xbJWxsdV06ICVzXG4iLCBj b250cm9sLnNlcW5vLCB0ZF9jdGxfY21kX3RvX3N0cihjbWQpKTsNCj4gKw0KPiArCWlmIChiaXRt YXNrX3NpemUpDQo+ICsJCSpiaXRtYXNrX3NpemUgPSBjb250cm9sLmJpdG1hc2tfc2l6ZTsNCj4g Kw0KPiArCWlmIChzZXFubykNCj4gKwkJKnNlcW5vID0gY29udHJvbC5zZXFubzsNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1aW50NjRfdCBldV9jdGwoaW50 IGRlYnVnZmQsIHVpbnQ2NF90IGNsaWVudCwNCj4gKwkJICAgICAgIHVpbnQ2NF90IGV4ZWNfcXVl dWUsIHVpbnQ2NF90IGxyYywNCj4gKwkJICAgICAgIHVpbnQ4X3QgKmJpdG1hc2ssIHVpbnQzMl90 ICpiaXRtYXNrX3NpemUsIHVpbnQzMl90IGNtZCkNCj4gK3sNCj4gKwl1aW50NjRfdCBzZXFubzsN Cj4gKw0KPiArCWlndF9hc3NlcnRfZXEoX19ldV9jdGwoZGVidWdmZCwgY2xpZW50LCBleGVjX3F1 ZXVlLCBscmMsIGJpdG1hc2ssDQo+ICsJCQkgICAgICAgYml0bWFza19zaXplLCBjbWQsICZzZXFu byksIDApOw0KPiArDQo+ICsJcmV0dXJuIHNlcW5vOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9v bCBpbnRlbF9nZW5fbmVlZHNfcmVzdW1lX3dhKGludCBmZCkNCj4gK3sNCj4gKwljb25zdCB1aW50 MzJfdCBpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOw0KPiArDQo+ICsJcmV0dXJuIGludGVs X2dlbihpZCkgPT0gMTIgJiYgaW50ZWxfZ3JhcGhpY3NfdmVyKGlkKSA8IElQX1ZFUigxMiwgNTUp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdWludDY0X3QgZXVfY3RsX3Jlc3VtZShpbnQgZmQsIGlu dCBkZWJ1Z2ZkLCB1aW50NjRfdCBjbGllbnQsDQo+ICsJCQkgICAgICB1aW50NjRfdCBleGVjX3F1 ZXVlLCB1aW50NjRfdCBscmMsDQo+ICsJCQkgICAgICB1aW50OF90ICpiaXRtYXNrLCB1aW50MzJf dCBiaXRtYXNrX3NpemUpDQo+ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwkvKiBYWFg6IFdBIGZv ciBoc2Q6IDE0MDExMzMyMDQyICovDQpSZW1vdmUgWFhYLg0KTWF5YmUgcGxhaW46IC8qIFdhXzE0 MDExMzMyMDQyICovID8NCj4gKwlpZiAoaW50ZWxfZ2VuX25lZWRzX3Jlc3VtZV93YShmZCkpIHsN Cj4gKwkJdWludDMyX3QgKmF0dF9yZWdfaGFsZiA9ICh1aW50MzJfdCAqKWJpdG1hc2s7DQo+ICsN Cj4gKwkJZm9yIChpID0gMDsgaSA8IGJpdG1hc2tfc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7IGkg Kz0gMikgew0KPiArCQkJYXR0X3JlZ19oYWxmW2ldIHw9IGF0dF9yZWdfaGFsZltpICsgMV07DQo+ ICsJCQlhdHRfcmVnX2hhbGZbaSArIDFdIHw9IGF0dF9yZWdfaGFsZltpXTsNCj4gKwkJfQ0KPiAr CX0NCj4gKw0KPiArCXJldHVybiBldV9jdGwoZGVidWdmZCwgY2xpZW50LCBleGVjX3F1ZXVlLCBs cmMsIGJpdG1hc2ssICZiaXRtYXNrX3NpemUsDQo+ICsJCSAgICAgIERSTV9YRV9FVURFQlVHX0VV X0NPTlRST0xfQ01EX1JFU1VNRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdWludDY0 X3QgZXVfY3RsX3N0b3BwZWQoaW50IGRlYnVnZmQsIHVpbnQ2NF90IGNsaWVudCwNCj4gKwkJCQkg ICAgICB1aW50NjRfdCBleGVjX3F1ZXVlLCB1aW50NjRfdCBscmMsDQo+ICsJCQkJICAgICAgdWlu dDhfdCAqYml0bWFzaywgdWludDMyX3QgKmJpdG1hc2tfc2l6ZSkNCj4gK3sNCj4gKwlyZXR1cm4g ZXVfY3RsKGRlYnVnZmQsIGNsaWVudCwgZXhlY19xdWV1ZSwgbHJjLCBiaXRtYXNrLCBiaXRtYXNr X3NpemUsDQo+ICsJCSAgICAgIERSTV9YRV9FVURFQlVHX0VVX0NPTlRST0xfQ01EX1NUT1BQRUQp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGV1X2N0bF9pbnRlcnJ1cHRf YWxsKGludCBkZWJ1Z2ZkLCB1aW50NjRfdCBjbGllbnQsDQo+ICsJCQkJCSAgICB1aW50NjRfdCBl eGVjX3F1ZXVlLCB1aW50NjRfdCBscmMpDQo+ICt7DQo+ICsJcmV0dXJuIGV1X2N0bChkZWJ1Z2Zk LCBjbGllbnQsIGV4ZWNfcXVldWUsIGxyYywgTlVMTCwgMCwNCj4gKwkJICAgICAgRFJNX1hFX0VV REVCVUdfRVVfQ09OVFJPTF9DTURfSU5URVJSVVBUX0FMTCk7DQo+ICt9DQo+ICsNCj4gK3N0cnVj dCBvbmxpbmVfZGVidWdfZGF0YSB7DQo+ICsJcHRocmVhZF9tdXRleF90IG11dGV4Ow0KPiArCS8q IGNsaWVudCBpbiAqLw0KPiArCXN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGh3 ZTsNCj4gKwkvKiBjbGllbnQgb3V0ICovDQo+ICsJaW50IHRocmVhZHNfY291bnQ7DQo+ICsJLyog ZGVidWdnZXIgaW50ZXJuYWxzICovDQo+ICsJdWludDY0X3QgY2xpZW50X2hhbmRsZTsNCj4gKwl1 aW50NjRfdCBleGVjX3F1ZXVlX2hhbmRsZTsNCj4gKwl1aW50NjRfdCBscmNfaGFuZGxlOw0KPiAr CXVpbnQ2NF90IHRhcmdldF9vZmZzZXQ7DQo+ICsJc2l6ZV90IHRhcmdldF9zaXplOw0KPiArCXVp bnQ2NF90IGJiX29mZnNldDsNCj4gKwlzaXplX3QgYmJfc2l6ZTsNCj4gKwlpbnQgdm1fZmQ7DQo+ ICsJdWludDMyX3QgZmlyc3RfYWlwOw0KPiArCXVpbnQ2NF90ICphaXBzX29mZnNldF90YWJsZTsN Cj4gKwl1aW50MzJfdCBzdGVwc19kb25lOw0KPiArCXVpbnQ4X3QgKnNpbmdsZV9zdGVwX2JpdG1h c2s7DQo+ICsJaW50IHN0ZXBwZWRfdGhyZWFkc19jb3VudDsNCj4gKwlzdHJ1Y3QgdGltZXNwZWMg ZXhjZXB0aW9uX2Fycml2ZWQ7DQo+ICsJaW50IGxhc3RfZXVfY29udHJvbF9zZXFubzsNCj4gKwlz dHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmV4Y2VwdGlvbl9ldmVudDsNCj4gK307DQo+ICsN Cj4gK3N0YXRpYyBzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKg0KPiArb25saW5lX2RlYnVnX2Rh dGFfY3JlYXRlKHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2UpDQo+ICt7 DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19kYXRhICpkYXRhOw0KPiArDQo+ICsJZGF0YSA9IG1t YXAoMCwgQUxJR04oc2l6ZW9mKCpkYXRhKSwgUEFHRV9TSVpFKSwNCj4gKwkJICAgIFBST1RfV1JJ VEUsIE1BUF9TSEFSRUQgfCBNQVBfQU5PTiwgLTEsIDApOw0KPiArCW1lbWNweSgmZGF0YS0+aHdl LCBod2UsIHNpemVvZigqaHdlKSk7DQo+ICsJcHRocmVhZF9tdXRleF9pbml0KCZkYXRhLT5tdXRl eCwgTlVMTCk7DQo+ICsJZGF0YS0+Y2xpZW50X2hhbmRsZSA9IC0xVUxMOw0KPiArCWRhdGEtPmV4 ZWNfcXVldWVfaGFuZGxlID0gLTFVTEw7DQo+ICsJZGF0YS0+bHJjX2hhbmRsZSA9IC0xVUxMOw0K PiArCWRhdGEtPnZtX2ZkID0gLTE7DQo+ICsJZGF0YS0+c3RlcHBlZF90aHJlYWRzX2NvdW50ID0g LTE7DQo+ICsNCj4gKwlyZXR1cm4gZGF0YTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgb25s aW5lX2RlYnVnX2RhdGFfZGVzdHJveShzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRhdGEpDQo+ ICt7DQo+ICsJZnJlZShkYXRhLT5haXBzX29mZnNldF90YWJsZSk7DQo+ICsJbXVubWFwKGRhdGEs IEFMSUdOKHNpemVvZigqZGF0YSksIFBBR0VfU0laRSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBldV9hdHRlbnRpb25fZGVidWdfdHJpZ2dlcihzdHJ1Y3QgeGVfZXVkZWJ1Z19kZWJ1Z2dl ciAqZCwNCj4gKwkJCQkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICplKQ0KPiArew0KPiAr CXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9ldV9hdHRlbnRpb24gKmF0dCA9ICh2b2lkICop IGU7DQo+ICsJdWludDMyX3QgKnB0ciA9ICh1aW50MzJfdCAqKSBhdHQtPmJpdG1hc2s7DQo+ICsN Cj4gKwlpZ3RfZGVidWcoIkVWRU5UWyVsbHVdIGV1LWF0dGVudHRpb247IHRocmVhZHM9JWQgIg0K PiArCQkgImNsaWVudFslbGx1XSwgZXhlY19xdWV1ZVslbGx1XSwgbHJjWyVsbHVdLCBiaXRtYXNr X3NpemVbJWRdXG4iLA0KPiArCQkgYXR0LT5iYXNlLnNlcW5vLCBjb3VudF9zZXRfYml0cyhhdHQt PmJpdG1hc2ssIGF0dC0+Yml0bWFza19zaXplKSwNCj4gKwkJCQlhdHQtPmNsaWVudF9oYW5kbGUs IGF0dC0+ZXhlY19xdWV1ZV9oYW5kbGUsDQo+ICsJCQkJYXR0LT5scmNfaGFuZGxlLCBhdHQtPmJp dG1hc2tfc2l6ZSk7DQpzdHJhbmdlIGFsaWdubWVudA0KPiArDQo+ICsJZm9yICh1aW50MzJfdCBp ID0gMDsgaSA8IGF0dC0+Yml0bWFza19zaXplLzQ7IGkgKz0gMikNCj4gKwkJaWd0X2RlYnVnKCJi aXRtYXNrWyVkXSA9IDB4JTA4eCUwOHhcbiIsIGkvMiwgcHRyW2ldLCBwdHJbaSsxXSk7DQo+ICsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZXVfYXR0ZW50aW9uX3Jlc2V0X3RyaWdnZXIoc3Ry dWN0IHhlX2V1ZGVidWdfZGVidWdnZXIgKmQsDQo+ICsJCQkJCXN0cnVjdCBkcm1feGVfZXVkZWJ1 Z19ldmVudCAqZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXVfYXR0 ZW50aW9uICphdHQgPSAodm9pZCAqKSBlOw0KPiArCXVpbnQzMl90ICpwdHIgPSAodWludDMyX3Qg KikgYXR0LT5iaXRtYXNrOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSA9IGQt PnB0cjsNCj4gKw0KPiArCWlndF9kZWJ1ZygiRVZFTlRbJWxsdV0gZXUtYXR0ZW50aW9uIHdpdGgg cmVzZXQ7IHRocmVhZHM9JWQgIg0KPiArCQkgImNsaWVudFslbGx1XSwgZXhlY19xdWV1ZVslbGx1 XSwgbHJjWyVsbHVdLCBiaXRtYXNrX3NpemVbJWRdXG4iLA0KPiArCQkgYXR0LT5iYXNlLnNlcW5v LCBjb3VudF9zZXRfYml0cyhhdHQtPmJpdG1hc2ssIGF0dC0+Yml0bWFza19zaXplKSwNCj4gKwkJ CQlhdHQtPmNsaWVudF9oYW5kbGUsIGF0dC0+ZXhlY19xdWV1ZV9oYW5kbGUsDQo+ICsJCQkJYXR0 LT5scmNfaGFuZGxlLCBhdHQtPmJpdG1hc2tfc2l6ZSk7DQpoZXJlIGFzIHdlbGwNCj4gKw0KPiAr CWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhdHQtPmJpdG1hc2tfc2l6ZS80OyBpICs9IDIpDQo+ ICsJCWlndF9kZWJ1ZygiYml0bWFza1slZF0gPSAweCUwOHglMDh4XG4iLCBpLzIsIHB0cltpXSwg cHRyW2krMV0pOw0KPiArDQo+ICsJeGVfZm9yY2VfZ3RfcmVzZXRfYXN5bmMoZC0+bWFzdGVyX2Zk LCBkYXRhLT5od2UuZ3RfaWQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjb3B5X2ZpcnN0 X2JpdCh1aW50OF90ICpkc3QsIHVpbnQ4X3QgKnNyYywgaW50IHNpemUpDQo+ICt7DQo+ICsJYm9v bCBmb3VuZCA9IGZhbHNlOw0KPiArCWludCBpLCBqOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8 IHNpemU7IGkrKykgew0KPiArCQlpZiAoZm91bmQpIHsNCj4gKwkJCWRzdFtpXSA9IDA7DQo+ICsJ CX0gZWxzZSB7DQo+ICsJCQl1aW50MzJfdCB0bXAgPSBzcmNbaV07IC8qIGluIGNhc2UgZHN0ID09 IHNyYyAqLw0KPiArDQo+ICsJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7DQo+ICsJCQkJZHN0 W2ldID0gdG1wICYgKDEgPDwgaik7DQo+ICsJCQkJaWYgKGRzdFtpXSkgew0KPiArCQkJCQlmb3Vu ZCA9IHRydWU7DQo+ICsJCQkJCWJyZWFrOw0KPiArCQkJCX0NCj4gKwkJCX0NCj4gKwkJfQ0KPiAr CX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgY29weV9udGhfYml0KHVpbnQ4X3QgKmRzdCwg dWludDhfdCAqc3JjLCBpbnQgc2l6ZSwgaW50IG4pDQo+ICt7DQo+ICsJaW50IGNvdW50ID0gMDsN Cj4gKw0KPiArCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQo+ICsJCXVpbnQzMl90 IHRtcCA9IHNyY1tpXTsNCj4gKwkJZm9yIChpbnQgaiA9IDc7IGogPj0gMDsgai0tKSB7DQo+ICsJ CQlpZiAodG1wICYgKDEgPDwgaikpIHsNCj4gKwkJCQljb3VudCsrOw0KPiArCQkJCWlmIChjb3Vu dCA9PSBuKQ0KPiArCQkJCQlkc3RbaV0gfD0gKDEgPDwgaik7DQo+ICsJCQkJZWxzZQ0KPiArCQkJ CQlkc3RbaV0gJj0gfigxIDw8IGopOw0KPiArCQkJfSBlbHNlDQo+ICsJCQkJZHN0W2ldICY9IH4o MSA8PCBqKTsNCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFNlYXJjaGVz IGZvciB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uIEl0IHN0YW5kcyBvbiBhc3N1bXB0aW9uLA0KPiAr ICogdGhhdCBzaGFkZXIga2VybmVsIGlzIHBsYWNlZCBiZWZvcmUgc2lwIHdpdGhpbiB0aGUgYmIu DQo+ICsgKi8NCj4gK3N0YXRpYyB1aW50MzJfdCBmaW5kX2tlcm5lbF9pbl9iYihzdHJ1Y3QgZ3Bn cHVfc2hhZGVyICprZXJuZWwsDQo+ICsJCQkJICBzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRh dGEpDQo+ICt7DQo+ICsJdWludDMyX3QgKnAgPSBrZXJuZWwtPmNvZGU7DQo+ICsJc2l6ZV90IHN6 ID0gNCAqIHNpemVvZih1aW50MzJfdCk7DQo+ICsJdWludDMyX3QgYnVmWzRdOw0KPiArCWludCBp Ow0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRhdGEtPmJiX3NpemU7IGkgKz0gc3opIHsNCj4g KwkJaWd0X2Fzc2VydF9lcShwcmVhZChkYXRhLT52bV9mZCwgJmJ1Ziwgc3osIGRhdGEtPmJiX29m ZnNldCArIGkpLCBzeik7DQo+ICsNCj4gKw0KPiArCQlpZiAobWVtY21wKHAsIGJ1Ziwgc3opID09 IDApDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0KGkgPCBkYXRhLT5i Yl9zaXplKTsNCj4gKw0KPiArCXJldHVybiBpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBz ZXRfYnJlYWtwb2ludF9vbmNlKHN0cnVjdCB4ZV9ldWRlYnVnX2RlYnVnZ2VyICpkLA0KPiArCQkJ CXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSkNCj4gK3sNCj4gKwljb25zdCB1aW50MzJf dCBicmVha3BvaW50X2JpdCA9IDEgPDwgMzA7DQo+ICsJc2l6ZV90IHN6ID0gc2l6ZW9mKHVpbnQz Ml90KTsNCj4gKwlzdHJ1Y3QgZ3BncHVfc2hhZGVyICprZXJuZWw7DQo+ICsJdWludDMyX3QgYWlw Ow0KPiArDQo+ICsJa2VybmVsID0gZ2V0X3NoYWRlcihkLT5tYXN0ZXJfZmQsIGQtPmZsYWdzKTsN Cj4gKw0KPiArCWlmIChkYXRhLT5maXJzdF9haXApIHsNCj4gKwkJdWludDMyX3QgZXhwZWN0ZWQg PSBmaW5kX2tlcm5lbF9pbl9iYihrZXJuZWwsIGRhdGEpICsga2VybmVsLT5zaXplICogNCAtIDB4 MTA7DQo+ICsNCj4gKwkJaWd0X2Fzc2VydF9lcShwcmVhZChkYXRhLT52bV9mZCwgJmFpcCwgc3os IGRhdGEtPnRhcmdldF9vZmZzZXQpLCBzeik7DQo+ICsJCWlndF9hc3NlcnRfZXFfdTMyKGFpcCwg ZXhwZWN0ZWQpOw0KPiArCX0gZWxzZSB7DQo+ICsJCXVpbnQzMl90IGluc3RyX3VzZHc7DQo+ICsN Cj4gKwkJaWd0X2Fzc2VydChkYXRhLT52bV9mZCAhPSAtMSk7DQo+ICsJCWlndF9hc3NlcnQoZGF0 YS0+dGFyZ2V0X3NpemUgIT0gMCk7DQo+ICsJCWlndF9hc3NlcnQoZGF0YS0+YmJfc2l6ZSAhPSAw KTsNCj4gKw0KPiArCQlpZ3RfYXNzZXJ0X2VxKHByZWFkKGRhdGEtPnZtX2ZkLCAmYWlwLCBzeiwg ZGF0YS0+dGFyZ2V0X29mZnNldCksIHN6KTsNCj4gKwkJZGF0YS0+Zmlyc3RfYWlwID0gYWlwOw0K PiArDQo+ICsJCWFpcCA9IGZpbmRfa2VybmVsX2luX2JiKGtlcm5lbCwgZGF0YSk7DQo+ICsNCj4g KwkJLyogc2V0IGJyZWFrcG9pbnQgb24gbGFzdCBpbnN0cnVjdGlvbiAqLw0KPiArCQlhaXAgKz0g a2VybmVsLT5zaXplICogNCAtIDB4MTA7DQo+ICsJCWlndF9hc3NlcnRfZXEocHJlYWQoZGF0YS0+ dm1fZmQsICZpbnN0cl91c2R3LCBzeiwNCj4gKwkJCQkgICAgZGF0YS0+YmJfb2Zmc2V0ICsgYWlw KSwgc3opOw0KPiArCQlpbnN0cl91c2R3IHw9IGJyZWFrcG9pbnRfYml0Ow0KPiArCQlpZ3RfYXNz ZXJ0X2VxKHB3cml0ZShkYXRhLT52bV9mZCwgJmluc3RyX3VzZHcsIHN6LA0KPiArCQkJCSAgICAg ZGF0YS0+YmJfb2Zmc2V0ICsgYWlwKSwgc3opOw0KPiArDQo+ICsJfQ0KPiArDQo+ICsJZ3BncHVf c2hhZGVyX2Rlc3Ryb3koa2VybmVsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZ2V0X2Fp cHNfb2Zmc2V0X3RhYmxlKHN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSwgaW50IHRocmVh ZHMpDQo+ICt7DQo+ICsJc2l6ZV90IHN6ID0gc2l6ZW9mKHVpbnQzMl90KTsNCj4gKwl1aW50MzJf dCBhaXA7DQo+ICsJdWludDMyX3QgZmlyc3RfYWlwOw0KPiArCWludCB0YWJsZV9pbmRleCA9IDA7 DQo+ICsNCj4gKwlpZiAoZGF0YS0+YWlwc19vZmZzZXRfdGFibGUpDQo+ICsJCXJldHVybjsNCj4g Kw0KPiArCWRhdGEtPmFpcHNfb2Zmc2V0X3RhYmxlID0gbWFsbG9jKHRocmVhZHMgKiBzaXplb2Yo dWludDY0X3QpKTsNCj4gKwlpZ3RfYXNzZXJ0KGRhdGEtPmFpcHNfb2Zmc2V0X3RhYmxlKTsNCj4g Kw0KPiArCWlndF9hc3NlcnRfZXEocHJlYWQoZGF0YS0+dm1fZmQsICZmaXJzdF9haXAsIHN6LCBk YXRhLT50YXJnZXRfb2Zmc2V0KSwgc3opOw0KPiArCWRhdGEtPmZpcnN0X2FpcCA9IGZpcnN0X2Fp cDsNCj4gKwlkYXRhLT5haXBzX29mZnNldF90YWJsZVt0YWJsZV9pbmRleCsrXSA9IDA7DQo+ICsN Cj4gKwlmc3luYyhkYXRhLT52bV9mZCk7DQo+ICsJZm9yIChpbnQgaSA9IDE7IGkgPCBkYXRhLT50 YXJnZXRfc2l6ZTsgaSsrKSB7DQpmb3IgKGludCBpID0gc3o7IGkgPCBkYXRhLT50YXJnZXRfc2l6 ZTsgaSs9c3opLCBubyBuZWVkIHRvIGNvbXBhcmUgYnl0ZSBieSBieXRlIHdoZW4gaW5zdHJ1Y3Rp b24NCnBvaW50ZXIgaGFzIDQgYnl0ZXMuDQo+ICsJCWlndF9hc3NlcnRfZXEocHJlYWQoZGF0YS0+ dm1fZmQsICZhaXAsIHN6LCBkYXRhLT50YXJnZXRfb2Zmc2V0ICsgaSksIHN6KTsNCj4gKwkJaWYg KGFpcCA9PSBmaXJzdF9haXApDQo+ICsJCQlkYXRhLT5haXBzX29mZnNldF90YWJsZVt0YWJsZV9p bmRleCsrXSA9IGk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcSh0aHJlYWRzLCB0YWJs ZV9pbmRleCk7DQo+ICsNCj4gKwlpZ3RfZGVidWcoIkFJUHMgb2Zmc2V0IHRhYmxlOlxuIik7DQo+ ICsJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzOyBpKyspIHsNCj4gKwkJaWd0X2RlYnVnKCIl bHhcbiIsIGRhdGEtPmFpcHNfb2Zmc2V0X3RhYmxlW2ldKTsNCj4gKwl9DQpyZWR1bmRhbnQgYnJh Y2V0cy4NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBnZXRfc3RlcHBlZF90aHJlYWRzX2NvdW50 KHN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSwgaW50IHRocmVhZHMpDQo+ICt7DQo+ICsJ aW50IGNvdW50ID0gMDsNCj4gKwlzaXplX3Qgc3ogPSBzaXplb2YodWludDMyX3QpOw0KPiArCXVp bnQzMl90IGFpcDsNCj4gKw0KPiArCWZzeW5jKGRhdGEtPnZtX2ZkKTsNCj4gKwlmb3IgKGludCBp ID0gMDsgaSA8IHRocmVhZHM7IGkrKykgew0KPiArCQlpZ3RfYXNzZXJ0X2VxKHByZWFkKGRhdGEt PnZtX2ZkLCAmYWlwLCBzeiwNCj4gKwkJCQkgICAgZGF0YS0+dGFyZ2V0X29mZnNldCArIGRhdGEt PmFpcHNfb2Zmc2V0X3RhYmxlW2ldKSwgc3opOw0KPiArCQlpZiAoYWlwICE9IGRhdGEtPmZpcnN0 X2FpcCkgew0KPiArCQkJaWd0X2Fzc2VydChhaXAgPT0gZGF0YS0+Zmlyc3RfYWlwICsgMHgxMCk7 DQo+ICsJCQljb3VudCsrOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGNvdW50Ow0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBzYXZlX2ZpcnN0X2V4Y2VwdGlvbl90cmlnZ2VyKHN0 cnVjdCB4ZV9ldWRlYnVnX2RlYnVnZ2VyICpkLA0KPiArCQkJCQkgc3RydWN0IGRybV94ZV9ldWRl YnVnX2V2ZW50ICplKQ0KPiArew0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSA9 IGQtPnB0cjsNCj4gKw0KPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOw0KPiAr CWlmICghZGF0YS0+ZXhjZXB0aW9uX2V2ZW50KSB7DQo+ICsJCWlndF9nZXR0aW1lKCZkYXRhLT5l eGNlcHRpb25fYXJyaXZlZCk7DQo+ICsJCWRhdGEtPmV4Y2VwdGlvbl9ldmVudCA9IGlndF9tZW1k dXAoZSwgZS0+bGVuKTsNCj4gKwl9DQo+ICsJcHRocmVhZF9tdXRleF91bmxvY2soJmRhdGEtPm11 dGV4KTsNCj4gK30NCj4gKw0KPiArI2RlZmluZSBNQVhfUFJFRU1QVF9USU1FT1VUIDEwdWxsDQo+ ICtzdGF0aWMgaW50IGlzX2NsaWVudF9yZXN1bWVkOw0KDQpXaHkgdGhpcyBpcyBzdGF0aWMgZ2xv YmFsIHZhcmlhYmxlPyBDb3VsZCBiZSBwYXJ0IG9mIHRoZSBkYXRhIHN0cnVjdC4gDQpXaGF0J3Mg bW9yZSwgaXQgc2xpZ2hsdHkgaW5kaWNhdGVzIHRoYXQgd2hlbiBpdCB3YXMgc2V0IHRvID0xIGNs aWVudCANCmlzIHJ1bm5pbmcuIFdoaWNoIG1heSBub3QgYmUgdHJ1ZS4gKG1vcmUgdGhhbiBvbmUg ZGlzcGF0Y2ggb3IgbW9yZSB0aGFuIG9uZSBicmVha3BvaW50KQ0KSSB3b3VsZCBjb25zaWRlciBj aGFuZ2luZyB0aGUgbmFtZSwgYnV0IEkgZG8gbm90IGhhdmUgc3Ryb25nIG9waW5pb24gYWJvdXQg dGhhdC4NCg0KPiArc3RhdGljIHZvaWQgZXVfYXR0ZW50aW9uX3Jlc3VtZV90cmlnZ2VyKHN0cnVj dCB4ZV9ldWRlYnVnX2RlYnVnZ2VyICpkLA0KPiArCQkJCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnQgKmUpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V1X2F0dGVu dGlvbiAqYXR0ID0gKHZvaWQgKikgZTsNCj4gKwlzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRh dGEgPSBkLT5wdHI7DQo+ICsJdWludDMyX3QgYml0bWFza19zaXplID0gYXR0LT5iaXRtYXNrX3Np emU7DQo+ICsJdWludDhfdCAqYml0bWFzazsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmIChkYXRh LT5sYXN0X2V1X2NvbnRyb2xfc2Vxbm8gPiBhdHQtPmJhc2Uuc2Vxbm8pDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCWJpdG1hc2sgPSBjYWxsb2MoMSwgYXR0LT5iaXRtYXNrX3NpemUpOw0KPiArDQo+ ICsJZXVfY3RsX3N0b3BwZWQoZC0+ZmQsIGF0dC0+Y2xpZW50X2hhbmRsZSwgYXR0LT5leGVjX3F1 ZXVlX2hhbmRsZSwNCj4gKwkJICAgICAgIGF0dC0+bHJjX2hhbmRsZSwgYml0bWFzaywgJmJpdG1h c2tfc2l6ZSk7DQo+ICsJaWd0X2Fzc2VydChiaXRtYXNrX3NpemUgPT0gYXR0LT5iaXRtYXNrX3Np emUpOw0KPiArCWlndF9hc3NlcnQobWVtY21wKGJpdG1hc2ssIGF0dC0+Yml0bWFzaywgYXR0LT5i aXRtYXNrX3NpemUpID09IDApOw0KPiArDQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5t dXRleCk7DQo+ICsJaWYgKGlndF9uc2VjX2VsYXBzZWQoJmRhdGEtPmV4Y2VwdGlvbl9hcnJpdmVk KSA8IChNQVhfUFJFRU1QVF9USU1FT1VUICsgMSkgKiBOU0VDX1BFUl9TRUMgJiYNCj4gKwkgICAg ZC0+ZmxhZ3MgJiBUUklHR0VSX1JFU1VNRV9ERUxBWUVEKSB7DQo+ICsJCXB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJCWZyZWUoYml0bWFzayk7DQo+ICsJCXJldHVybjsN Cj4gKwl9IGVsc2UgaWYgKGQtPmZsYWdzICYgVFJJR0dFUl9SRVNVTUVfT05FKSB7DQo+ICsJCWNv cHlfZmlyc3RfYml0KGJpdG1hc2ssIGJpdG1hc2ssIGJpdG1hc2tfc2l6ZSk7DQo+ICsJfSBlbHNl IGlmIChkLT5mbGFncyAmIFRSSUdHRVJfUkVTVU1FX0RTUykgew0KPiArCQl1aW50NjRfdCAqZXZl bnQgPSAodWludDY0X3QgKilhdHQtPmJpdG1hc2s7DQo+ICsJCXVpbnQ2NF90ICpyZXN1bWUgPSAo dWludDY0X3QgKiliaXRtYXNrOw0KPiArDQo+ICsJCW1lbXNldChiaXRtYXNrLCAwLCBiaXRtYXNr X3NpemUpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgYXR0LT5iaXRtYXNrX3NpemUgLyBzaXplb2Yo dWludDY0X3QpOyBpKyspIHsNCj4gKwkJCWlmICghZXZlbnRbaV0pDQo+ICsJCQkJY29udGludWU7 DQo+ICsNCj4gKwkJCXJlc3VtZVtpXSA9IGV2ZW50W2ldOw0KPiArCQkJYnJlYWs7DQo+ICsJCX0N Cj4gKwl9IGVsc2UgaWYgKGQtPmZsYWdzICYgVFJJR0dFUl9SRVNVTUVfU0VUX0JQKSB7DQo+ICsJ CXNldF9icmVha3BvaW50X29uY2UoZCwgZGF0YSk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGQtPmZs YWdzICYgU0hBREVSX0xPT1ApIHsNCj4gKwkJdWludDMyX3QgdGhyZWFkcyA9IGdldF9udW1iZXJf b2ZfdGhyZWFkcyhkLT5mbGFncyk7DQo+ICsJCXVpbnQzMl90IHZhbCA9IFNURUVSSU5HX0VORF9M T09QOw0KPiArDQo+ICsJCWlndF9hc3NlcnRfZXEocHdyaXRlKGRhdGEtPnZtX2ZkLCAmdmFsLCBz aXplb2YodWludDMyX3QpLA0KPiArCQkJCSAgICAgZGF0YS0+dGFyZ2V0X29mZnNldCArIHN0ZWVy aW5nX29mZnNldCh0aHJlYWRzKSksDQo+ICsJCQkgICAgICBzaXplb2YodWludDMyX3QpKTsNCj4g KwkJZnN5bmMoZGF0YS0+dm1fZmQpOw0KPiArCX0NCj4gKwlwdGhyZWFkX211dGV4X3VubG9jaygm ZGF0YS0+bXV0ZXgpOw0KPiArDQo+ICsJZGF0YS0+bGFzdF9ldV9jb250cm9sX3NlcW5vID0gZXVf Y3RsX3Jlc3VtZShkLT5tYXN0ZXJfZmQsIGQtPmZkLCBhdHQtPmNsaWVudF9oYW5kbGUsDQo+ICsJ CQkJCQkgICAgYXR0LT5leGVjX3F1ZXVlX2hhbmRsZSwgYXR0LT5scmNfaGFuZGxlLA0KPiArCQkJ CQkJICAgIGJpdG1hc2ssIGF0dC0+Yml0bWFza19zaXplKTsNCj4gKw0KPiArCWlzX2NsaWVudF9y ZXN1bWVkID0gMTsNCj4gKwlmcmVlKGJpdG1hc2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBldV9hdHRlbnRpb25fcmVzdW1lX3NpbmdsZV9zdGVwX3RyaWdnZXIoc3RydWN0IHhlX2V1ZGVi dWdfZGVidWdnZXIgKmQsDQo+ICsJCQkJCQkgICAgc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50 ICplKQ0KPiArew0KPiArCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9ldV9hdHRlbnRpb24g KmF0dCA9ICh2b2lkICopIGU7DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19kYXRhICpkYXRhID0g ZC0+cHRyOw0KPiArCWNvbnN0IGludCB0aHJlYWRzID0gZ2V0X251bWJlcl9vZl90aHJlYWRzKGQt PmZsYWdzKTsNCj4gKwl1aW50MzJfdCB2YWw7DQo+ICsJc2l6ZV90IHN6ID0gc2l6ZW9mKHVpbnQz Ml90KTsNCj4gKw0KPiArCWdldF9haXBzX29mZnNldF90YWJsZShkYXRhLCB0aHJlYWRzKTsNCj4g Kw0KPiArCWlmIChkLT5mbGFncyAmIFRSSUdHRVJfUkVTVU1FX1BBUkFMTEVMX1dBTEspIHsNCj4g KwkJaWYgKGRhdGEtPnN0ZXBwZWRfdGhyZWFkc19jb3VudCAhPSAtMSkNCj4gKwkJCWlmIChkYXRh LT5zdGVwc19kb25lIDwgU0lOR0xFX1NURVBfQ09VTlQpIHsNCj4gKwkJCQlpbnQgc3RlcHBlZF90 aHJlYWRzX2NvdW50X2FmdGVyX3Jlc3VtZSA9DQo+ICsJCQkJCQlnZXRfc3RlcHBlZF90aHJlYWRz X2NvdW50KGRhdGEsIHRocmVhZHMpOw0KPiArCQkJCWlndF9kZWJ1ZygiU3RlcHBlZCB0aHJlYWRz IGFmdGVyOiAlZFxuIiwNCj4gKwkJCQkJICBzdGVwcGVkX3RocmVhZHNfY291bnRfYWZ0ZXJfcmVz dW1lKTsNCj4gKw0KPiArCQkJCWlmIChzdGVwcGVkX3RocmVhZHNfY291bnRfYWZ0ZXJfcmVzdW1l ID09IHRocmVhZHMpIHsNCj4gKwkJCQkJZGF0YS0+Zmlyc3RfYWlwICs9IDB4MTA7DQo+ICsJCQkJ CWRhdGEtPnN0ZXBzX2RvbmUrKzsNCj4gKwkJCQl9DQo+ICsNCj4gKwkJCQlpZ3RfZGVidWcoIlNo YWRlciBzdGVwczogJWRcbiIsIGRhdGEtPnN0ZXBzX2RvbmUpOw0KPiArCQkJCWlndF9hc3NlcnQo ZGF0YS0+c3RlcHBlZF90aHJlYWRzX2NvdW50ID09IDApOw0KPiArCQkJCWlndF9hc3NlcnQoc3Rl cHBlZF90aHJlYWRzX2NvdW50X2FmdGVyX3Jlc3VtZSA9PSB0aHJlYWRzKTsNCj4gKwkJCX0NCj4g Kw0KPiArCQlpZiAoZGF0YS0+c3RlcHNfZG9uZSA8IFNJTkdMRV9TVEVQX0NPVU5UKSB7DQo+ICsJ CQlkYXRhLT5zdGVwcGVkX3RocmVhZHNfY291bnQgPSBnZXRfc3RlcHBlZF90aHJlYWRzX2NvdW50 KGRhdGEsIHRocmVhZHMpOw0KPiArCQkJaWd0X2RlYnVnKCJTdGVwcGVkIHRocmVhZHMgYmVmb3Jl OiAlZFxuIiwgZGF0YS0+c3RlcHBlZF90aHJlYWRzX2NvdW50KTsNCj4gKwkJfQ0KPiArDQo+ICsJ CXZhbCA9IGRhdGEtPnN0ZXBzX2RvbmUgPCBTSU5HTEVfU1RFUF9DT1VOVCA/IFNURUVSSU5HX1NJ TkdMRV9TVEVQIDoNCj4gKwkJCQkJCQkgICAgIFNURUVSSU5HX0NPTlRJTlVFOw0KPiArCX0gZWxz ZSBpZiAoZC0+ZmxhZ3MgJiBUUklHR0VSX1JFU1VNRV9TSU5HTEVfV0FMSykgew0KPiArCQlpZiAo ZGF0YS0+c3RlcHBlZF90aHJlYWRzX2NvdW50ICE9IC0xKQ0KPiArCQkJaWYgKGRhdGEtPnN0ZXBz X2RvbmUgPCAyKSB7DQo+ICsJCQkJaW50IHN0ZXBwZWRfdGhyZWFkc19jb3VudF9hZnRlcl9yZXN1 bWUgPQ0KPiArCQkJCQkJZ2V0X3N0ZXBwZWRfdGhyZWFkc19jb3VudChkYXRhLCB0aHJlYWRzKTsN Cj4gKwkJCQlpZ3RfZGVidWcoIlN0ZXBwZWQgdGhyZWFkcyBhZnRlcjogJWRcbiIsDQo+ICsJCQkJ CSAgc3RlcHBlZF90aHJlYWRzX2NvdW50X2FmdGVyX3Jlc3VtZSk7DQo+ICsNCj4gKwkJCQlpZiAo c3RlcHBlZF90aHJlYWRzX2NvdW50X2FmdGVyX3Jlc3VtZSA9PSB0aHJlYWRzKSB7DQo+ICsJCQkJ CWRhdGEtPmZpcnN0X2FpcCArPSAweDEwOw0KPiArCQkJCQlkYXRhLT5zdGVwc19kb25lKys7DQo+ ICsJCQkJCWZyZWUoZGF0YS0+c2luZ2xlX3N0ZXBfYml0bWFzayk7DQo+ICsJCQkJCWRhdGEtPnNp bmdsZV9zdGVwX2JpdG1hc2sgPSAwOw0KPiArCQkJCX0NCj4gKw0KPiArCQkJCWlndF9kZWJ1Zygi U2hhZGVyIHN0ZXBzOiAlZFxuIiwgZGF0YS0+c3RlcHNfZG9uZSk7DQo+ICsJCQkJaWd0X2Fzc2Vy dChkYXRhLT5zdGVwcGVkX3RocmVhZHNfY291bnQgKw0KPiArCQkJCQkgICAoaW50ZWxfZ2VuX25l ZWRzX3Jlc3VtZV93YShkLT5tYXN0ZXJfZmQpID8gMiA6IDEpID09DQo+ICsJCQkJCSAgIHN0ZXBw ZWRfdGhyZWFkc19jb3VudF9hZnRlcl9yZXN1bWUpOw0KPiArCQkJfQ0KPiArDQo+ICsJCWlmIChk YXRhLT5zdGVwc19kb25lIDwgMikgew0KPiArCQkJZGF0YS0+c3RlcHBlZF90aHJlYWRzX2NvdW50 ID0gZ2V0X3N0ZXBwZWRfdGhyZWFkc19jb3VudChkYXRhLCB0aHJlYWRzKTsNCj4gKwkJCWlndF9k ZWJ1ZygiU3RlcHBlZCB0aHJlYWRzIGJlZm9yZTogJWRcbiIsIGRhdGEtPnN0ZXBwZWRfdGhyZWFk c19jb3VudCk7DQo+ICsJCQlpZiAoaW50ZWxfZ2VuX25lZWRzX3Jlc3VtZV93YShkLT5tYXN0ZXJf ZmQpKSB7DQo+ICsJCQkJaWYgKCFkYXRhLT5zaW5nbGVfc3RlcF9iaXRtYXNrKSB7DQo+ICsJCQkJ CWRhdGEtPnNpbmdsZV9zdGVwX2JpdG1hc2sgPSBtYWxsb2MoYXR0LT5iaXRtYXNrX3NpemUgKg0K PiArCQkJCQkJCQkJICAgc2l6ZW9mKHVpbnQ4X3QpKTsNCj4gKwkJCQkJaWd0X2Fzc2VydChkYXRh LT5zaW5nbGVfc3RlcF9iaXRtYXNrKTsNCj4gKwkJCQkJbWVtY3B5KGRhdGEtPnNpbmdsZV9zdGVw X2JpdG1hc2ssIGF0dC0+Yml0bWFzaywNCj4gKwkJCQkJICAgICAgIGF0dC0+Yml0bWFza19zaXpl KTsNCj4gKwkJCQl9DQo+ICsNCj4gKwkJCQljb3B5X2ZpcnN0X2JpdChhdHQtPmJpdG1hc2ssIGRh dGEtPnNpbmdsZV9zdGVwX2JpdG1hc2ssDQo+ICsJCQkJCSAgICAgICBhdHQtPmJpdG1hc2tfc2l6 ZSk7DQo+ICsJCQl9IGVsc2UNCj4gKwkJCQljb3B5X250aF9iaXQoYXR0LT5iaXRtYXNrLCBhdHQt PmJpdG1hc2ssIGF0dC0+Yml0bWFza19zaXplLA0KPiArCQkJCQkgICAgIGRhdGEtPnN0ZXBwZWRf dGhyZWFkc19jb3VudCArIDEpOw0KPiArCQl9DQo+ICsNCj4gKwkJdmFsID0gZGF0YS0+c3RlcHNf ZG9uZSA8IDIgPyBTVEVFUklOR19TSU5HTEVfU1RFUCA6IFNURUVSSU5HX0NPTlRJTlVFOw0KPiAr CX0NCj4gKw0KPiArCWlndF9hc3NlcnRfZXEocHdyaXRlKGRhdGEtPnZtX2ZkLCAmdmFsLCBzeiwN Cj4gKwkJCSAgICAgZGF0YS0+dGFyZ2V0X29mZnNldCArIHN0ZWVyaW5nX29mZnNldCh0aHJlYWRz KSksIHN6KTsNCj4gKwlmc3luYyhkYXRhLT52bV9mZCk7DQo+ICsNCj4gKwlldV9jdGxfcmVzdW1l KGQtPm1hc3Rlcl9mZCwgZC0+ZmQsIGF0dC0+Y2xpZW50X2hhbmRsZSwNCj4gKwkJICAgICAgYXR0 LT5leGVjX3F1ZXVlX2hhbmRsZSwgYXR0LT5scmNfaGFuZGxlLA0KPiArCQkgICAgICBhdHQtPmJp dG1hc2ssIGF0dC0+Yml0bWFza19zaXplKTsNCj4gKw0KPiArCWlmIChkYXRhLT5zaW5nbGVfc3Rl cF9iaXRtYXNrKQ0KPiArCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dC0+Yml0bWFza19zaXplOyBp KyspDQo+ICsJCQlkYXRhLT5zaW5nbGVfc3RlcF9iaXRtYXNrW2ldICY9IH5hdHQtPmJpdG1hc2tb aV07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9wZW5fdHJpZ2dlcihzdHJ1Y3QgeGVfZXVk ZWJ1Z19kZWJ1Z2dlciAqZCwNCj4gKwkJCSBzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmUp DQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2NsaWVudCAqY2xpZW50ID0g KHZvaWQgKillOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSA9IGQtPnB0cjsN Cj4gKw0KPiArCWlmIChlLT5mbGFncyAmIERSTV9YRV9FVURFQlVHX0VWRU5UX0RFU1RST1kpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOw0K PiArCWRhdGEtPmNsaWVudF9oYW5kbGUgPSBjbGllbnQtPmNsaWVudF9oYW5kbGU7DQo+ICsJcHRo cmVhZF9tdXRleF91bmxvY2soJmRhdGEtPm11dGV4KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgZXhlY19xdWV1ZV90cmlnZ2VyKHN0cnVjdCB4ZV9ldWRlYnVnX2RlYnVnZ2VyICpkLA0KPiAr CQkJICAgICAgIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXhlY19xdWV1ZSAqZXEgPSAodm9pZCAqKWU7DQo+ICsJ c3RydWN0IG9ubGluZV9kZWJ1Z19kYXRhICpkYXRhID0gZC0+cHRyOw0KPiArDQo+ICsJaWYgKGUt PmZsYWdzICYgRFJNX1hFX0VVREVCVUdfRVZFTlRfREVTVFJPWSkNCj4gKwkJcmV0dXJuOw0KPiAr DQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJZGF0YS0+ZXhlY19x dWV1ZV9oYW5kbGUgPSBlcS0+ZXhlY19xdWV1ZV9oYW5kbGU7DQo+ICsJZGF0YS0+bHJjX2hhbmRs ZSA9IGVxLT5scmNfaGFuZGxlWzBdOw0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkYXRhLT5t dXRleCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHZtX29wZW5fdHJpZ2dlcihzdHJ1Y3Qg eGVfZXVkZWJ1Z19kZWJ1Z2dlciAqZCwNCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnQgKmUpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtICp2bSA9 ICh2b2lkICopZTsNCj4gKwlzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRhdGEgPSBkLT5wdHI7 DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX3ZtX29wZW4gdm8gPSB7DQo+ICsJCS5jbGllbnRf aGFuZGxlID0gdm0tPmNsaWVudF9oYW5kbGUsDQo+ICsJCS52bV9oYW5kbGUgPSB2bS0+dm1faGFu ZGxlLA0KPiArCX07DQo+ICsJaW50IGZkOw0KPiArDQo+ICsJaWYgKGUtPmZsYWdzICYgRFJNX1hF X0VVREVCVUdfRVZFTlRfQ1JFQVRFKSB7DQo+ICsJCWZkID0gaWd0X2lvY3RsKGQtPmZkLCBEUk1f WEVfRVVERUJVR19JT0NUTF9WTV9PUEVOLCAmdm8pOw0KPiArCQlpZ3RfYXNzZXJ0X2x0ZSgwLCBm ZCk7DQo+ICsNCj4gKwkJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJCWln dF9hc3NlcnQoZGF0YS0+dm1fZmQgPT0gLTEpOw0KPiArCQlkYXRhLT52bV9mZCA9IGZkOw0KPiAr CQlwdGhyZWFkX211dGV4X3VubG9jaygmZGF0YS0+bXV0ZXgpOw0KPiArCQlyZXR1cm47DQo+ICsJ fQ0KPiArDQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJY2xvc2Uo ZGF0YS0+dm1fZmQpOw0KPiArCWRhdGEtPnZtX2ZkID0gLTE7DQo+ICsJcHRocmVhZF9tdXRleF91 bmxvY2soJmRhdGEtPm11dGV4KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgcmVhZF9tZXRh ZGF0YShzdHJ1Y3QgeGVfZXVkZWJ1Z19kZWJ1Z2dlciAqZCwNCj4gKwkJCSAgdWludDY0X3QgY2xp ZW50X2hhbmRsZSwNCj4gKwkJCSAgdWludDY0X3QgbWV0YWRhdGFfaGFuZGxlLA0KPiArCQkJICB1 aW50NjRfdCB0eXBlLA0KPiArCQkJICB1aW50NjRfdCBsZW4pDQo+ICt7DQo+ICsJc3RydWN0IGRy bV94ZV9ldWRlYnVnX3JlYWRfbWV0YWRhdGEgcm0gPSB7DQo+ICsJCS5jbGllbnRfaGFuZGxlID0g Y2xpZW50X2hhbmRsZSwNCj4gKwkJLm1ldGFkYXRhX2hhbmRsZSA9IG1ldGFkYXRhX2hhbmRsZSwN Cj4gKwkJLnNpemUgPSBsZW4sDQo+ICsJfTsNCj4gKwlzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEg KmRhdGEgPSBkLT5wdHI7DQo+ICsJdWludDY0X3QgKm1ldGFkYXRhOw0KPiArDQo+ICsJbWV0YWRh dGEgPSBtYWxsb2MobGVuKTsNCj4gKwlpZ3RfYXNzZXJ0KG1ldGFkYXRhKTsNCj4gKw0KPiArCXJt LnB0ciA9IHRvX3VzZXJfcG9pbnRlcihtZXRhZGF0YSk7DQo+ICsJaWd0X2Fzc2VydF9lcShpZ3Rf aW9jdGwoZC0+ZmQsIERSTV9YRV9FVURFQlVHX0lPQ1RMX1JFQURfTUVUQURBVEEsICZybSksIDAp Ow0KPiArDQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJc3dpdGNo ICh0eXBlKSB7DQo+ICsJY2FzZSBEUk1fWEVfREVCVUdfTUVUQURBVEFfRUxGX0JJTkFSWToNCj4g KwkJZGF0YS0+YmJfb2Zmc2V0ID0gbWV0YWRhdGFbMF07DQo+ICsJCWRhdGEtPmJiX3NpemUgPSBt ZXRhZGF0YVsxXTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBEUk1fWEVfREVCVUdfTUVUQURBVEFf UFJPR1JBTV9NT0RVTEU6DQo+ICsJCWRhdGEtPnRhcmdldF9vZmZzZXQgPSBtZXRhZGF0YVswXTsN Cj4gKwkJZGF0YS0+dGFyZ2V0X3NpemUgPSBtZXRhZGF0YVsxXTsNCj4gKwkJYnJlYWs7DQo+ICsJ ZGVmYXVsdDoNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZk YXRhLT5tdXRleCk7DQo+ICsNCj4gKwlmcmVlKG1ldGFkYXRhKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgY3JlYXRlX21ldGFkYXRhX3RyaWdnZXIoc3RydWN0IHhlX2V1ZGVidWdfZGVidWdn ZXIgKmQsIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX3hlX2V1ZGVidWdfZXZlbnRfbWV0YWRhdGEgKmVtID0gKHZvaWQgKillOw0KPiArDQo+ICsJ aWYgKGUtPmZsYWdzICYgRFJNX1hFX0VVREVCVUdfRVZFTlRfQ1JFQVRFKSB7DQo+ICsJCXJlYWRf bWV0YWRhdGEoZCwgZW0tPmNsaWVudF9oYW5kbGUsIGVtLT5tZXRhZGF0YV9oYW5kbGUsIGVtLT50 eXBlLCBlbS0+bGVuKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG92ZXJ3cml0 ZV9pbW1lZGlhdGVfdmFsdWVfaW5fY29tbW9uX3RhcmdldF93cml0ZShpbnQgdm1fZmQsIHVpbnQ2 NF90IG9mZnNldCwNCj4gKwkJCQkJCQkgICAgIHVpbnQzMl90IG9sZF92YWwsIHVpbnQzMl90IG5l d192YWwpDQo+ICt7DQo+ICsJdWludDY0X3QgYWRkciA9IG9mZnNldDsNCj4gKwlpbnQgdmFsc19j aGFuZ2VkID0gMDsNCj4gKwl1aW50MzJfdCB2YWw7DQo+ICsNCj4gKwl3aGlsZSAodmFsc19jaGFu Z2VkIDwgNCkgew0KPiArCQlpZ3RfYXNzZXJ0X2VxKHByZWFkKHZtX2ZkLCAmdmFsLCBzaXplb2Yo dWludDMyX3QpLCBhZGRyKSwgc2l6ZW9mKHVpbnQzMl90KSk7DQo+ICsJCWlmICh2YWwgPT0gb2xk X3ZhbCkgew0KPiArCQkJaWd0X2RlYnVnKCJ2YWxfYmVmb3JlX3dyaXRlWyVkXTogJTA4eFxuIiwg dmFsc19jaGFuZ2VkLCB2YWwpOw0KPiArCQkJaWd0X2Fzc2VydF9lcShwd3JpdGUodm1fZmQsICZu ZXdfdmFsLCBzaXplb2YodWludDMyX3QpLCBhZGRyKSwNCj4gKwkJCQkgICAgICBzaXplb2YodWlu dDMyX3QpKTsNCj4gKwkJCWlndF9hc3NlcnRfZXEocHJlYWQodm1fZmQsICZ2YWwsIHNpemVvZih1 aW50MzJfdCksIGFkZHIpLA0KPiArCQkJCSAgICAgIHNpemVvZih1aW50MzJfdCkpOw0KPiArCQkJ aWd0X2RlYnVnKCJ2YWxfYmVmb3JlX2ZzeW5jWyVkXTogJTA4eFxuIiwgdmFsc19jaGFuZ2VkLCB2 YWwpOw0KPiArCQkJZnN5bmModm1fZmQpOw0KPiArCQkJaWd0X2Fzc2VydF9lcShwcmVhZCh2bV9m ZCwgJnZhbCwgc2l6ZW9mKHVpbnQzMl90KSwgYWRkciksDQo+ICsJCQkJICAgICAgc2l6ZW9mKHVp bnQzMl90KSk7DQo+ICsJCQlpZ3RfZGVidWcoInZhbF9hZnRlcl9mc3luY1slZF06ICUwOHhcbiIs IHZhbHNfY2hhbmdlZCwgdmFsKTsNCj4gKwkJCWlndF9hc3NlcnRfZXFfdTMyKHZhbCwgbmV3X3Zh bCk7DQo+ICsJCQl2YWxzX2NoYW5nZWQrKzsNCj4gKwkJfQ0KPiArCQlhZGRyICs9IHNpemVvZih1 aW50MzJfdCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBldV9hdHRlbnRpb25f cmVzdW1lX2NhY2hpbmdfdHJpZ2dlcihzdHJ1Y3QgeGVfZXVkZWJ1Z19kZWJ1Z2dlciAqZCwNCj4g KwkJCQkJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXVfYXR0ZW50aW9uICphdHQgPSAodm9pZCAqKSBlOw0KPiAr CXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YSA9IGQtPnB0cjsNCj4gKwlzdGF0aWMgaW50 IGNvdW50ZXIgPSAwOw0KPiArCXN0YXRpYyBpbnQga2VybmVsX2luX2JiID0gMDsNCj4gKwlzdHJ1 Y3QgZGltX3Qgc19kaW0gPSBzdXJmYWNlX2RpbWVuc2lvbnMoZ2V0X251bWJlcl9vZl90aHJlYWRz KGQtPmZsYWdzKSk7DQo+ICsJaW50IHZhbDsNCj4gKwl1aW50MzJfdCBpbnN0cl91c2R3Ow0KPiAr CXN0cnVjdCBncGdwdV9zaGFkZXIgKmtlcm5lbDsNCj4gKwljb25zdCB1aW50MzJfdCBicmVha3Bv aW50X2JpdCA9IDEgPDwgMzA7DQo+ICsJc3RydWN0IGdwZ3B1X3NoYWRlciAqc2hhZGVyX3ByZWFt YmxlOw0KPiArCXN0cnVjdCBncGdwdV9zaGFkZXIgKnNoYWRlcl93cml0ZV9pbnN0cjsNCj4gKw0K PiArCXNoYWRlcl9wcmVhbWJsZSA9IGdwZ3B1X3NoYWRlcl9jcmVhdGUoZC0+bWFzdGVyX2ZkKTsN Cj4gKwlncGdwdV9zaGFkZXJfX3dyaXRlX2R3b3JkKHNoYWRlcl9wcmVhbWJsZSwgU0hBREVSX0NB TkFSWSwgMCk7DQo+ICsJZ3BncHVfc2hhZGVyX19ub3Aoc2hhZGVyX3ByZWFtYmxlKTsNCj4gKwln cGdwdV9zaGFkZXJfX2JyZWFrcG9pbnQoc2hhZGVyX3ByZWFtYmxlKTsNCj4gKw0KPiArCXNoYWRl cl93cml0ZV9pbnN0ciA9IGdwZ3B1X3NoYWRlcl9jcmVhdGUoZC0+bWFzdGVyX2ZkKTsNCj4gKwln cGdwdV9zaGFkZXJfX2NvbW1vbl90YXJnZXRfd3JpdGVfdTMyKHNoYWRlcl93cml0ZV9pbnN0ciwg MCwgMCk7DQo+ICsNCj4gKwlpZiAoIWtlcm5lbF9pbl9iYikgew0KPiArCQlrZXJuZWwgPSBnZXRf c2hhZGVyKGQtPm1hc3Rlcl9mZCwgZC0+ZmxhZ3MpOw0KPiArCQlrZXJuZWxfaW5fYmIgPSBmaW5k X2tlcm5lbF9pbl9iYihrZXJuZWwsIGRhdGEpOw0KPiArCQlncGdwdV9zaGFkZXJfZGVzdHJveShr ZXJuZWwpOw0KPiArCX0NCj4gKw0KPiArCS8qIHNldCBicmVha3BvaW50IG9uIG5leHQgd3JpdGUg aW5zdHJ1Y3Rpb24gKi8NCj4gKwlpZiAoY291bnRlciA8IGNhY2hpbmdfZ2V0X2luc3RydWN0aW9u X2NvdW50KGQtPm1hc3Rlcl9mZCwgc19kaW0ueCwgZC0+ZmxhZ3MpKSB7DQo+ICsJCWlndF9hc3Nl cnRfZXEocHJlYWQoZGF0YS0+dm1fZmQsICZpbnN0cl91c2R3LCBzaXplb2YoaW5zdHJfdXNkdyks DQo+ICsJCQkJICAgIGRhdGEtPmJiX29mZnNldCArIGtlcm5lbF9pbl9iYiArIHNoYWRlcl9wcmVh bWJsZS0+c2l6ZSAqIDQgKw0KPiArCQkJCSAgICBzaGFkZXJfd3JpdGVfaW5zdHItPnNpemUgKiA0 ICogY291bnRlciksIHNpemVvZihpbnN0cl91c2R3KSk7DQo+ICsJCWluc3RyX3VzZHcgfD0gYnJl YWtwb2ludF9iaXQ7DQo+ICsJCWlndF9hc3NlcnRfZXEocHdyaXRlKGRhdGEtPnZtX2ZkLCAmaW5z dHJfdXNkdywgc2l6ZW9mKGluc3RyX3VzZHcpLA0KPiArCQkJCSAgICAgZGF0YS0+YmJfb2Zmc2V0 ICsga2VybmVsX2luX2JiICsgc2hhZGVyX3ByZWFtYmxlLT5zaXplICogNCArDQo+ICsJCQkJICAg ICBzaGFkZXJfd3JpdGVfaW5zdHItPnNpemUgKiA0ICogY291bnRlciksIHNpemVvZihpbnN0cl91 c2R3KSk7DQo+ICsJCWZzeW5jKGRhdGEtPnZtX2ZkKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiByZXN0 b3JlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gKi8NCj4gKwlpZiAoY291bnRlciAmJiBjb3VudGVyIDw9 IGNhY2hpbmdfZ2V0X2luc3RydWN0aW9uX2NvdW50KGQtPm1hc3Rlcl9mZCwgc19kaW0ueCwgZC0+ ZmxhZ3MpKQ0KPiArCQlvdmVyd3JpdGVfaW1tZWRpYXRlX3ZhbHVlX2luX2NvbW1vbl90YXJnZXRf d3JpdGUoZGF0YS0+dm1fZmQsDQo+ICsJCQkJCQkJCSBkYXRhLT5iYl9vZmZzZXQgKyBrZXJuZWxf aW5fYmIgKw0KPiArCQkJCQkJCQkgc2hhZGVyX3ByZWFtYmxlLT5zaXplICogNCArDQo+ICsJCQkJ CQkJCSBzaGFkZXJfd3JpdGVfaW5zdHItPnNpemUgKiA0ICogKGNvdW50ZXIgLSAxKSwNCj4gKwkJ CQkJCQkJIENBQ0hJTkdfUE9JU09OX1ZBTFVFLA0KPiArCQkJCQkJCQkgQ0FDSElOR19WQUxVRShj b3VudGVyIC0gMSkpOw0KPiArDQo+ICsJLyogcG9pc29uIG5leHQgaW5zdHJ1Y3Rpb24gKi8NCj4g KwlpZiAoY291bnRlciA8IGNhY2hpbmdfZ2V0X2luc3RydWN0aW9uX2NvdW50KGQtPm1hc3Rlcl9m ZCwgc19kaW0ueCwgZC0+ZmxhZ3MpKQ0KPiArCQlvdmVyd3JpdGVfaW1tZWRpYXRlX3ZhbHVlX2lu X2NvbW1vbl90YXJnZXRfd3JpdGUoZGF0YS0+dm1fZmQsDQo+ICsJCQkJCQkJCSBkYXRhLT5iYl9v ZmZzZXQgKyBrZXJuZWxfaW5fYmIgKw0KPiArCQkJCQkJCQkgc2hhZGVyX3ByZWFtYmxlLT5zaXpl ICogNCArDQo+ICsJCQkJCQkJCSBzaGFkZXJfd3JpdGVfaW5zdHItPnNpemUgKiA0ICogY291bnRl ciwNCj4gKwkJCQkJCQkJIENBQ0hJTkdfVkFMVUUoY291bnRlciksDQo+ICsJCQkJCQkJCSBDQUNI SU5HX1BPSVNPTl9WQUxVRSk7DQo+ICsNCj4gKwlncGdwdV9zaGFkZXJfZGVzdHJveShzaGFkZXJf d3JpdGVfaW5zdHIpOw0KPiArCWdwZ3B1X3NoYWRlcl9kZXN0cm95KHNoYWRlcl9wcmVhbWJsZSk7 DQo+ICsNCj4gKwlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEtPnRhcmdldF9zaXplOyBpICs9IHNp emVvZih1aW50MzJfdCkpIHsNCj4gKwkJaWd0X2Fzc2VydF9lcShwcmVhZChkYXRhLT52bV9mZCwg JnZhbCwgc2l6ZW9mKHZhbCksIGRhdGEtPnRhcmdldF9vZmZzZXQgKyBpKSwNCj4gKwkJCSAgICAg IHNpemVvZih2YWwpKTsNCj4gKwkJaWd0X2Fzc2VydF9mKHZhbCAhPSBDQUNISU5HX1BPSVNPTl9W QUxVRSwgIlBvaXNvbiB2YWx1ZSBmb3VuZCBhdCAlMDRkIVxuIiwgaSk7DQo+ICsJfQ0KPiArDQo+ ICsJZXVfY3RsX3Jlc3VtZShkLT5tYXN0ZXJfZmQsIGQtPmZkLCBhdHQtPmNsaWVudF9oYW5kbGUs DQo+ICsJCSAgICAgIGF0dC0+ZXhlY19xdWV1ZV9oYW5kbGUsIGF0dC0+bHJjX2hhbmRsZSwNCj4g KwkJICAgICAgYXR0LT5iaXRtYXNrLCBhdHQtPmJpdG1hc2tfc2l6ZSk7DQo+ICsNCj4gKwljb3Vu dGVyKys7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfYmIgKnhlX2JiX2NyZWF0 ZV9vbl9vZmZzZXQoaW50IGZkLCB1aW50MzJfdCBleGVjX3F1ZXVlLCB1aW50MzJfdCB2bSwNCj4g KwkJCQkJICAgICAgIHVpbnQ2NF90IG9mZnNldCwgdWludDMyX3Qgc2l6ZSkNCj4gK3sNCj4gKwlz dHJ1Y3QgaW50ZWxfYmIgKmliYjsNCj4gKw0KPiArCWliYiA9IGludGVsX2JiX2NyZWF0ZV93aXRo X2NvbnRleHQoZmQsIGV4ZWNfcXVldWUsIHZtLCBOVUxMLCBzaXplKTsNCj4gKw0KPiArCS8qIHVw ZGF0ZSBpbnRlbCBiYiBvZmZzZXQgKi8NCj4gKwlpbnRlbF9iYl9yZW1vdmVfb2JqZWN0KGliYiwg aWJiLT5oYW5kbGUsIGliYi0+YmF0Y2hfb2Zmc2V0LCBpYmItPnNpemUpOw0KPiArCWludGVsX2Ji X2FkZF9vYmplY3QoaWJiLCBpYmItPmhhbmRsZSwgaWJiLT5zaXplLCBvZmZzZXQsIGliYi0+YWxp Z25tZW50LCBmYWxzZSk7DQo+ICsJaWJiLT5iYXRjaF9vZmZzZXQgPSBvZmZzZXQ7DQo+ICsNCj4g KwlyZXR1cm4gaWJiOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc2l6ZV90IGdldF9iYl9zaXplKGlu dCBmbGFncykNCj4gK3sNCj4gKwlpZiAoKGZsYWdzICYgU0hBREVSX0NBQ0hJTkdfU1JBTSkgfHwg KGZsYWdzICYgU0hBREVSX0NBQ0hJTkdfVlJBTSkpDQo+ICsJCXJldHVybiAzMjc2ODsNCj4gKw0K PiArCXJldHVybiA0MDk2Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBydW5fb25saW5lX2Ns aWVudChzdHJ1Y3QgeGVfZXVkZWJ1Z19jbGllbnQgKmMpDQo+ICt7DQo+ICsJaW50IHRocmVhZHMg PSBnZXRfbnVtYmVyX29mX3RocmVhZHMoYy0+ZmxhZ3MpOw0KPiArCWNvbnN0IHVpbnQ2NF90IHRh cmdldF9vZmZzZXQgPSAweDFhMDAwMDAwOw0KPiArCWNvbnN0IHVpbnQ2NF90IGJiX29mZnNldCA9 IDB4MWIwMDAwMDA7DQo+ICsJY29uc3Qgc2l6ZV90IGJiX3NpemUgPSBnZXRfYmJfc2l6ZShjLT5m bGFncyk7DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19kYXRhICpkYXRhID0gYy0+cHRyOw0KPiAr CXN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGh3ZSA9IGRhdGEtPmh3ZTsNCj4g KwlzdHJ1Y3QgZHJtX3hlX2V4dF9zZXRfcHJvcGVydHkgZXh0ID0gew0KPiArCQkuYmFzZS5uYW1l ID0gRFJNX1hFX0VYRUNfUVVFVUVfRVhURU5TSU9OX1NFVF9QUk9QRVJUWSwNCj4gKwkJLnByb3Bl cnR5ID0gRFJNX1hFX0VYRUNfUVVFVUVfU0VUX1BST1BFUlRZX0VVREVCVUcsDQo+ICsJCS52YWx1 ZSA9IERSTV9YRV9FWEVDX1FVRVVFX0VVREVCVUdfRkxBR19FTkFCTEUsDQo+ICsJfTsNCj4gKwlz dHJ1Y3QgZHJtX3hlX2V4ZWNfcXVldWVfY3JlYXRlIGNyZWF0ZSA9IHsNCj4gKwkJLmluc3RhbmNl cyA9IHRvX3VzZXJfcG9pbnRlcigmaHdlKSwNCj4gKwkJLndpZHRoID0gMSwNCj4gKwkJLm51bV9w bGFjZW1lbnRzID0gMSwNCj4gKwkJLmV4dGVuc2lvbnMgPSBjLT5mbGFncyAmIERJU0FCTEVfREVC VUdfTU9ERSA/IDAgOiB0b191c2VyX3BvaW50ZXIoJmV4dCkNCj4gKwl9Ow0KPiArCXN0cnVjdCBk aW1fdCB3X2RpbSA9IHdhbGtlcl9kaW1lbnNpb25zKHRocmVhZHMpOw0KPiArCXN0cnVjdCBkaW1f dCBzX2RpbSA9IHN1cmZhY2VfZGltZW5zaW9ucyh0aHJlYWRzKTsNCj4gKwlzdHJ1Y3QgdGltZXNw ZWMgdHMgPSB7IH07DQo+ICsJc3RydWN0IGdwZ3B1X3NoYWRlciAqc2lwLCAqc2hhZGVyOw0KPiAr CXVpbnQzMl90IG1ldGFkYXRhX2lkWzJdOw0KPiArCXVpbnQ2NF90ICptZXRhZGF0YVsyXTsNCj4g KwlzdHJ1Y3QgaW50ZWxfYmIgKmliYjsNCj4gKwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7DQo+ICsJ dWludDMyX3QgKnB0cjsNCj4gKwlpbnQgZmQ7DQo+ICsNCj4gKwltZXRhZGF0YVswXSA9IGNhbGxv YygyLCBzaXplb2YoKm1ldGFkYXRhKSk7DQo+ICsJbWV0YWRhdGFbMV0gPSBjYWxsb2MoMiwgc2l6 ZW9mKCptZXRhZGF0YSkpOw0KPiArCWlndF9hc3NlcnQobWV0YWRhdGFbMF0pOw0KPiArCWlndF9h c3NlcnQobWV0YWRhdGFbMV0pOw0KPiArDQo+ICsJZmQgPSB4ZV9ldWRlYnVnX2NsaWVudF9vcGVu X2RyaXZlcihjKTsNCj4gKwl4ZV9kZXZpY2VfZ2V0KGZkKTsNCj4gKw0KPiArCS8qIEFkZGl0aW9u YWwgbWVtb3J5IGZvciBzdGVlcmluZyBjb250cm9sICovDQo+ICsJaWYgKGMtPmZsYWdzICYgU0hB REVSX0xPT1AgfHwgYy0+ZmxhZ3MgJiBTSEFERVJfU0lOR0xFX1NURVApDQo+ICsJCXNfZGltLnkr KzsNCj4gKwkvKiBBZGRpdGlvbmFsIG1lbW9yeSBmb3IgY2FjaGluZyBjaGVjayAqLw0KPiArCWlm ICgoYy0+ZmxhZ3MgJiBTSEFERVJfQ0FDSElOR19TUkFNKSB8fCAoYy0+ZmxhZ3MgJiBTSEFERVJf Q0FDSElOR19WUkFNKSkNCj4gKwkJc19kaW0ueSArPSBjYWNoaW5nX2dldF9pbnN0cnVjdGlvbl9j b3VudChmZCwgc19kaW0ueCwgYy0+ZmxhZ3MpOw0KPiArCWJ1ZiA9IGNyZWF0ZV91Y19idWYoZmQs IHNfZGltLngsIHNfZGltLnkpOw0KPiArDQo+ICsJYnVmLT5hZGRyLm9mZnNldCA9IHRhcmdldF9v ZmZzZXQ7DQo+ICsNCj4gKwltZXRhZGF0YVswXVswXSA9IGJiX29mZnNldDsNCj4gKwltZXRhZGF0 YVswXVsxXSA9IGJiX3NpemU7DQo+ICsJbWV0YWRhdGFbMV1bMF0gPSB0YXJnZXRfb2Zmc2V0Ow0K PiArCW1ldGFkYXRhWzFdWzFdID0gYnVmLT5zaXplOw0KPiArCW1ldGFkYXRhX2lkWzBdID0geGVf ZXVkZWJ1Z19jbGllbnRfbWV0YWRhdGFfY3JlYXRlKGMsIGZkLCBEUk1fWEVfREVCVUdfTUVUQURB VEFfRUxGX0JJTkFSWSwNCj4gKwkJCQkJCQkgICAyICogc2l6ZW9mKCptZXRhZGF0YSksIG1ldGFk YXRhWzBdKTsNCj4gKwltZXRhZGF0YV9pZFsxXSA9IHhlX2V1ZGVidWdfY2xpZW50X21ldGFkYXRh X2NyZWF0ZShjLCBmZCwNCj4gKwkJCQkJCQkgICBEUk1fWEVfREVCVUdfTUVUQURBVEFfUFJPR1JB TV9NT0RVTEUsDQo+ICsJCQkJCQkJICAgMiAqIHNpemVvZigqbWV0YWRhdGEpLCBtZXRhZGF0YVsx XSk7DQo+ICsNCj4gKwljcmVhdGUudm1faWQgPSB4ZV9ldWRlYnVnX2NsaWVudF92bV9jcmVhdGUo YywgZmQsIERSTV9YRV9WTV9DUkVBVEVfRkxBR19MUl9NT0RFLCAwKTsNCj4gKwl4ZV9ldWRlYnVn X2NsaWVudF9leGVjX3F1ZXVlX2NyZWF0ZShjLCBmZCwgJmNyZWF0ZSk7DQo+ICsNCj4gKwlpYmIg PSB4ZV9iYl9jcmVhdGVfb25fb2Zmc2V0KGZkLCBjcmVhdGUuZXhlY19xdWV1ZV9pZCwgY3JlYXRl LnZtX2lkLA0KPiArCQkJCSAgICAgYmJfb2Zmc2V0LCBiYl9zaXplKTsNCj4gKwlpbnRlbF9iYl9z ZXRfbHJfbW9kZShpYmIsIHRydWUpOw0KPiArDQo+ICsJc2lwID0gZ2V0X3NpcChmZCwgYy0+Zmxh Z3MpOw0KPiArCXNoYWRlciA9IGdldF9zaGFkZXIoZmQsIGMtPmZsYWdzKTsNCj4gKw0KPiArCWln dF9uc2VjX2VsYXBzZWQoJnRzKTsNCj4gKwlncGdwdV9zaGFkZXJfZXhlYyhpYmIsIGJ1Ziwgd19k aW0ueCwgd19kaW0ueSwgc2hhZGVyLCBzaXAsIDAsIDApOw0KPiArDQo+ICsJZ3BncHVfc2hhZGVy X2Rlc3Ryb3koc2lwKTsNCj4gKwlncGdwdV9zaGFkZXJfZGVzdHJveShzaGFkZXIpOw0KPiArDQo+ ICsJaW50ZWxfYmJfc3luYyhpYmIpOw0KPiArDQo+ICsJaWYgKGMtPmZsYWdzICYgVFJJR0dFUl9S RUNPTk5FQ1QpDQo+ICsJCXhlX2V1ZGVidWdfY2xpZW50X3dhaXRfc3RhZ2UoYywgREVCVUdHRVJf UkVBVFRBQ0hFRCk7DQo+ICsJZWxzZQ0KPiArCQkvKiBNYWtlIHN1cmUgaXQgd2Fzbid0IHRoZSB0 aW1lb3V0LiAqLw0KPiArCQlpZ3RfYXNzZXJ0KGlndF9uc2VjX2VsYXBzZWQoJnRzKSA8DQo+ICsJ CQkgICBYRV9FVURFQlVHX0RFRkFVTFRfVElNRU9VVF9NUyAvIE1TRUNfUEVSX1NFQyAqIE5TRUNf UEVSX1NFQyk7DQo+ICsNCj4gKwlpZiAoIShjLT5mbGFncyAmIERPX05PVF9FWFBFQ1RfQ0FOQVJJ RVMpKSB7DQo+ICsJCXB0ciA9IHhlX2JvX21tYXBfZXh0KGZkLCBidWYtPmhhbmRsZSwgYnVmLT5z aXplLCBQUk9UX1JFQUQpOw0KPiArCQlkYXRhLT50aHJlYWRzX2NvdW50ID0gY291bnRfY2FuYXJp ZXNfbmVxKHB0ciwgd19kaW0sIDApOw0KPiArCQlpZ3RfYXNzZXJ0X2YoZGF0YS0+dGhyZWFkc19j b3VudCwgIk5vIGNhbmFyaWVzIGZvdW5kLCBub3RoaW5nIGV4ZWN1dGVkP1xuIik7DQo+ICsNCj4g KwkJaWYgKChjLT5mbGFncyAmIFNIQURFUl9CUkVBS1BPSU5UIHx8IGMtPmZsYWdzICYgVFJJR0dF Ul9SRVNVTUVfU0VUX0JQIHx8DQo+ICsJCSAgICAgYy0+ZmxhZ3MgJiBTSEFERVJfTl9OT09QX0JS RUFLUE9JTlQpICYmICEoYy0+ZmxhZ3MgJiBESVNBQkxFX0RFQlVHX01PREUpKSB7DQo+ICsJCQl1 aW50MzJfdCBhaXAgPSBwdHJbMF07DQo+ICsNCj4gKwkJCWlndF9hc3NlcnRfZihhaXAgIT0gU0hB REVSX0NBTkFSWSwgIldvcmtsb2FkIGV4ZWN1dGVkIGJ1dCBicmVha3BvaW50IG5vdCBoaXQhXG4i KTsNCj4gKwkJCWlndF9hc3NlcnRfZXEoY291bnRfY2FuYXJpZXNfZXEocHRyLCB3X2RpbSwgYWlw KSwgZGF0YS0+dGhyZWFkc19jb3VudCk7DQo+ICsJCQlpZ3RfZGVidWcoIkJyZWFrcG9pbnQgaGl0 IGluICVkIHRocmVhZHMsIEFJUD0weCUwOHhcbiIsIGRhdGEtPnRocmVhZHNfY291bnQsIGFpcCk7 DQo+ICsJCX0NCj4gKw0KPiArCQltdW5tYXAocHRyLCBidWYtPnNpemUpOw0KPiArCX0NCj4gKw0K PiArCWludGVsX2JiX2Rlc3Ryb3koaWJiKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X2V4 ZWNfcXVldWVfZGVzdHJveShjLCBmZCwgJmNyZWF0ZSk7DQo+ICsJeGVfZXVkZWJ1Z19jbGllbnRf dm1fZGVzdHJveShjLCBmZCwgIGNyZWF0ZS52bV9pZCk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2Ns aWVudF9tZXRhZGF0YV9kZXN0cm95KGMsIGZkLCBtZXRhZGF0YV9pZFswXSwgRFJNX1hFX0RFQlVH X01FVEFEQVRBX0VMRl9CSU5BUlksDQo+ICsJCQkJCSAgIDIgKiBzaXplb2YoKm1ldGFkYXRhKSk7 DQo+ICsJeGVfZXVkZWJ1Z19jbGllbnRfbWV0YWRhdGFfZGVzdHJveShjLCBmZCwgbWV0YWRhdGFf aWRbMV0sDQo+ICsJCQkJCSAgIERSTV9YRV9ERUJVR19NRVRBREFUQV9QUk9HUkFNX01PRFVMRSwN Cj4gKwkJCQkJICAgMiAqIHNpemVvZigqbWV0YWRhdGEpKTsNCj4gKw0KPiArCXhlX2RldmljZV9w dXQoZmQpOw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X2Nsb3NlX2RyaXZlcihjLCBmZCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sIGludGVsX2dlbl9oYXNfbG9ja3N0ZXBfZXVzKGludCBmZCkN Cj4gK3sNCj4gKwljb25zdCB1aW50MzJfdCBpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOw0K PiArDQo+ICsJLyoNCj4gKwkgKiBMb2Nrc3RlcCAob3IgaW4gc29tZSBwYXJsYW5jZSwgZnVzZWQp IEVVcyBhcmUgcGFpciBvZiBFVXMNCj4gKwkgKiB0aGF0IHdvcmsgaW4gc3luYywgc3VwcG9zZWRs eSBzYW1lIGNsb2NrIGFuZCBzYW1lIGNvbnRyb2wgZmxvdy4NCj4gKwkgKiBUaHVzIGZvciBhdHRl bnRpb25zLCBpZiB0aGUgY29udHJvbCBoYXMgYnJlYWtwb2ludCwgYm90aCB3aWxsIGJlDQo+ICsJ ICogZXhjZXB0ZWQgaW50byBTSVAuIEluIHRoaXMgbGV2ZWwsIHRoZSBoYXJkd2FyZSBoYXMgb25s eSBvbmUgYXR0ZW50aW9uDQo+ICsJICogdGhyZWFkIGJpdCBmb3IgdW5pdHMuIFBWQyBpcyB0aGUg Zmlyc3Qgb25lIHdpdGhvdXQgbG9ja3N0ZXBwaW5nLg0KPiArCSAqLw0KPiArCXJldHVybiAhKGlu dGVsX2dyYXBoaWNzX3ZlcihpZCkgPT0gSVBfVkVSKDEyLCA2MCkgfHwgaW50ZWxfZ2VuKGlkKSA+ PSAyMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgcXVlcnlfYXR0ZW50aW9uX2JpdG1hc2tf c2l6ZShpbnQgZmQsIGludCBndCkNCj4gK3sNCj4gKwljb25zdCB1bnNpZ25lZCBpbnQgdGhyZWFk cyA9IDg7DQo+ICsJc3RydWN0IGRybV94ZV9xdWVyeV90b3BvbG9neV9tYXNrICpjX2RzcyA9IE5V TEwsICpnX2RzcyA9IE5VTEwsICpldV9wZXJfZHNzID0gTlVMTDsNCj4gKwlzdHJ1Y3QgZHJtX3hl X3F1ZXJ5X3RvcG9sb2d5X21hc2sgKnRvcG9sb2d5Ow0KPiArCXN0cnVjdCBkcm1feGVfZGV2aWNl X3F1ZXJ5IHF1ZXJ5ID0gew0KPiArCQkuZXh0ZW5zaW9ucyA9IDAsDQo+ICsJCS5xdWVyeSA9IERS TV9YRV9ERVZJQ0VfUVVFUllfR1RfVE9QT0xPR1ksDQo+ICsJCS5zaXplID0gMCwNCj4gKwkJLmRh dGEgPSAwLA0KPiArCX07DQo+ICsJaW50IHBvcyA9IDAsIGV1czsNCj4gKwl1aW50OF90ICphbnlf ZHNzOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9YRV9E RVZJQ0VfUVVFUlksICZxdWVyeSksIDApOw0KPiArCWlndF9hc3NlcnRfbmVxKHF1ZXJ5LnNpemUs IDApOw0KPiArDQo+ICsJdG9wb2xvZ3kgPSBtYWxsb2MocXVlcnkuc2l6ZSk7DQo+ICsJaWd0X2Fz c2VydCh0b3BvbG9neSk7DQo+ICsNCj4gKwlxdWVyeS5kYXRhID0gdG9fdXNlcl9wb2ludGVyKHRv cG9sb2d5KTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1hFX0RF VklDRV9RVUVSWSwgJnF1ZXJ5KSwgMCk7DQo+ICsNCj4gKwl3aGlsZSAocXVlcnkuc2l6ZSA+PSBz aXplb2Yoc3RydWN0IGRybV94ZV9xdWVyeV90b3BvbG9neV9tYXNrKSkgew0KPiArCQlzdHJ1Y3Qg ZHJtX3hlX3F1ZXJ5X3RvcG9sb2d5X21hc2sgKnRvcG87DQo+ICsJCWludCBzejsNCj4gKw0KPiAr CQl0b3BvID0gKHN0cnVjdCBkcm1feGVfcXVlcnlfdG9wb2xvZ3lfbWFzayAqKSgodW5zaWduZWQg Y2hhciAqKXRvcG9sb2d5ICsgcG9zKTsNCj4gKwkJc3ogPSBzaXplb2Yoc3RydWN0IGRybV94ZV9x dWVyeV90b3BvbG9neV9tYXNrKSArIHRvcG8tPm51bV9ieXRlczsNCj4gKw0KPiArCQlxdWVyeS5z aXplIC09IHN6Ow0KPiArCQlwb3MgKz0gc3o7DQo+ICsNCj4gKwkJaWYgKHRvcG8tPmd0X2lkICE9 IGd0KQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJaWYgKHRvcG8tPnR5cGUgPT0gRFJNX1hF X1RPUE9fRFNTX0dFT01FVFJZKQ0KPiArCQkJZ19kc3MgPSB0b3BvOw0KPiArCQllbHNlIGlmICh0 b3BvLT50eXBlID09IERSTV9YRV9UT1BPX0RTU19DT01QVVRFKQ0KPiArCQkJY19kc3MgPSB0b3Bv Ow0KPiArCQllbHNlIGlmICh0b3BvLT50eXBlID09IERSTV9YRV9UT1BPX0VVX1BFUl9EU1MgfHwN Cj4gKwkJCSB0b3BvLT50eXBlID09IERSTV9YRV9UT1BPX1NJTUQxNl9FVV9QRVJfRFNTKQ0KPiAr CQkJZXVfcGVyX2RzcyA9IHRvcG87DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Fzc2VydChnX2RzcyAm JiBjX2RzcyAmJiBldV9wZXJfZHNzKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxX3UzMihjX2Rzcy0+bnVt X2J5dGVzLCBnX2Rzcy0+bnVtX2J5dGVzKTsNCj4gKw0KPiArCWFueV9kc3MgPSBtYWxsb2MoY19k c3MtPm51bV9ieXRlcyk7DQo+ICsNCj4gKwlmb3IgKGludCBpID0gMDsgaSA8IGNfZHNzLT5udW1f Ynl0ZXM7IGkrKykNCj4gKwkJYW55X2Rzc1tpXSA9IGNfZHNzLT5tYXNrW2ldIHwgZ19kc3MtPm1h c2tbaV07DQo+ICsNCj4gKwlldXMgPSBjb3VudF9zZXRfYml0cyhhbnlfZHNzLCBjX2Rzcy0+bnVt X2J5dGVzKTsNCj4gKwlldXMgKj0gY291bnRfc2V0X2JpdHMoZXVfcGVyX2Rzcy0+bWFzaywgZXVf cGVyX2Rzcy0+bnVtX2J5dGVzKTsNCj4gKw0KPiArCWlmIChpbnRlbF9nZW5faGFzX2xvY2tzdGVw X2V1cyhmZCkpDQo+ICsJCWV1cyAvPSAyOw0KPiArDQo+ICsJZnJlZShhbnlfZHNzKTsNCj4gKwlm cmVlKHRvcG9sb2d5KTsNCj4gKw0KPiArCXJldHVybiBldXMgKiB0aHJlYWRzIC8gODsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9leGVjX3F1ZXVlICoN Cj4gK21hdGNoX2F0dGVudGlvbl93aXRoX2V4ZWNfcXVldWUoc3RydWN0IHhlX2V1ZGVidWdfZXZl bnRfbG9nICpsb2csDQo+ICsJCQkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V1X2F0dGVu dGlvbiAqZWEpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V4ZWNfcXVl dWUgKmVlOw0KPiArCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZXZlbnQgPSBOVUxMLCAq Y3VycmVudCA9IE5VTEwsICptYXRjaGluZ19kZXN0cm95ID0gTlVMTDsNCj4gKwlpbnQgbHJjX2lk eDsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZm9yX2VhY2hfZXZlbnQoZXZlbnQsIGxvZykgew0KPiAr CQlpZiAoZXZlbnQtPnR5cGUgPT0gRFJNX1hFX0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRSAmJg0K PiArCQkgICAgZXZlbnQtPmZsYWdzID09IERSTV9YRV9FVURFQlVHX0VWRU5UX0NSRUFURSkgew0K PiArCQkJZWUgPSAoc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V4ZWNfcXVldWUgKilldmVu dDsNCj4gKw0KPiArCQkJaWYgKGVlLT5leGVjX3F1ZXVlX2hhbmRsZSAhPSBlYS0+ZXhlY19xdWV1 ZV9oYW5kbGUpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWlmIChlZS0+Y2xpZW50X2hh bmRsZSAhPSBlYS0+Y2xpZW50X2hhbmRsZSkNCj4gKwkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJ Zm9yIChscmNfaWR4ID0gMDsgbHJjX2lkeCA8IGVlLT53aWR0aDsgbHJjX2lkeCsrKSB7DQo+ICsJ CQkJaWYgKGVlLT5scmNfaGFuZGxlW2xyY19pZHhdID09IGVhLT5scmNfaGFuZGxlKQ0KPiArCQkJ CQlicmVhazsNCj4gKwkJCX0NCj4gKw0KPiArCQkJaWYgKGxyY19pZHggPj0gZWUtPndpZHRoKSB7 DQo+ICsJCQkJaWd0X2RlYnVnKCJObyBtYXRjaGluZyBscmMgaGFuZGxlIHdpdGhpbiBtYXRjaGlu ZyBleGVjX3F1ZXVlISIpOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJfQ0KPiArDQo+ICsJCQkv KiBldmVudCBsb2dzIGFyZSBzb3J0ZWQsIGV2ZXJ5IGZvdW5kIG5leHQgd291bGQgbm90IGJlIHBy ZXNlbnQuICovDQo+ICsJCQlpZiAoZWEtPmJhc2Uuc2Vxbm8gPCBlZS0+YmFzZS5zZXFubykNCj4g KwkJCQlicmVhazsNCj4gKw0KPiArCQkJLyogc2FuaXR5IGNoZWNrIHdoZXRoZXIgYXR0ZW50aW9u IGRpZA0KPiArCQkJICogbm90IGFwcGVhciB5ZXQgb24gYWxyZWFkeSBkZXN0cm95ZWQgZXhlY19x dWV1ZQ0KPiArCQkJICovDQo+ICsJCQljdXJyZW50ID0gZXZlbnQ7DQo+ICsJCQl4ZV9ldWRlYnVn X2Zvcl9lYWNoX2V2ZW50KGN1cnJlbnQsIGxvZykgew0KPiArCQkJCWlmIChjdXJyZW50LT50eXBl ID09IERSTV9YRV9FVURFQlVHX0VWRU5UX0VYRUNfUVVFVUUgJiYNCj4gKwkJCQkgICAgY3VycmVu dC0+ZmxhZ3MgPT0gRFJNX1hFX0VVREVCVUdfRVZFTlRfREVTVFJPWSkgew0KPiArCQkJCQl1aW50 OF90IG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQpOw0KPiArDQo+ ICsJCQkJCWlmIChtZW1jbXAoKHVpbnQ4X3QgKiljdXJyZW50ICsgb2Zmc2V0LA0KPiArCQkJCQkJ ICAgKHVpbnQ4X3QgKilldmVudCArIG9mZnNldCwNCj4gKwkJCQkJCSAgIGN1cnJlbnQtPmxlbiAt IG9mZnNldCkgPT0gMCkgew0KPiArCQkJCQkJbWF0Y2hpbmdfZGVzdHJveSA9IGN1cnJlbnQ7DQo+ ICsJCQkJCX0NCj4gKwkJCQl9DQo+ICsJCQl9DQo+ICsNCj4gKwkJCWlmICghbWF0Y2hpbmdfZGVz dHJveSB8fCBlYS0+YmFzZS5zZXFubyA+IG1hdGNoaW5nX2Rlc3Ryb3ktPnNlcW5vKQ0KPiArCQkJ CWNvbnRpbnVlOw0KPiArDQo+ICsJCQlyZXR1cm4gZWU7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4g KwlyZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgb25saW5lX3Nlc3Npb25f Y2hlY2soc3RydWN0IHhlX2V1ZGVidWdfc2Vzc2lvbiAqcywgaW50IGZsYWdzKQ0KPiArew0KPiAr CXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9ldV9hdHRlbnRpb24gKmVhID0gTlVMTDsNCj4g KwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmV2ZW50ID0gTlVMTDsNCj4gKwlzdHJ1Y3Qg b25saW5lX2RlYnVnX2RhdGEgKmRhdGEgPSBzLT5jLT5wdHI7DQo+ICsJYm9vbCBleHBlY3RfZXhj ZXB0aW9uID0gZmxhZ3MgJiBESVNBQkxFX0RFQlVHX01PREUgPyBmYWxzZSA6IHRydWU7DQo+ICsJ aW50IHN1bSA9IDA7DQo+ICsJaW50IGJpdG1hc2tfc2l6ZTsNCj4gKw0KPiArCXhlX2V1ZGVidWdf c2Vzc2lvbl9jaGVjayhzLCB0cnVlLCBYRV9FVURFQlVHX0ZJTFRFUl9FVkVOVF9WTV9CSU5EIHwN Cj4gKwkJCQkJICBYRV9FVURFQlVHX0ZJTFRFUl9FVkVOVF9WTV9CSU5EX09QIHwNCj4gKwkJCQkJ ICBYRV9FVURFQlVHX0ZJTFRFUl9FVkVOVF9WTV9CSU5EX1VGRU5DRSk7DQo+ICsNCj4gKwliaXRt YXNrX3NpemUgPSBxdWVyeV9hdHRlbnRpb25fYml0bWFza19zaXplKHMtPmQtPm1hc3Rlcl9mZCwg ZGF0YS0+aHdlLmd0X2lkKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZm9yX2VhY2hfZXZlbnQoZXZl bnQsIHMtPmQtPmxvZykgew0KPiArCQlpZiAoZXZlbnQtPnR5cGUgPT0gRFJNX1hFX0VVREVCVUdf RVZFTlRfRVVfQVRURU5USU9OKSB7DQo+ICsJCQllYSA9IChzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnRfZXVfYXR0ZW50aW9uICopZXZlbnQ7DQo+ICsNCj4gKwkJCWlndF9hc3NlcnQoZXZlbnQt PmZsYWdzID09IERSTV9YRV9FVURFQlVHX0VWRU5UX1NUQVRFX0NIQU5HRSk7DQo+ICsJCQlpZ3Rf YXNzZXJ0X2VxKGVhLT5iaXRtYXNrX3NpemUsIGJpdG1hc2tfc2l6ZSk7DQo+ICsJCQlzdW0gKz0g Y291bnRfc2V0X2JpdHMoZWEtPmJpdG1hc2ssIGJpdG1hc2tfc2l6ZSk7DQo+ICsJCQlpZ3RfYXNz ZXJ0KG1hdGNoX2F0dGVudGlvbl93aXRoX2V4ZWNfcXVldWUocy0+ZC0+bG9nLCBlYSkpOw0KPiAr CQl9DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBXZSBjYW4gZXhwZWN0IGF0dGVudGlvbiB0 byBzdW0gdXAgb25seQ0KPiArCSAqIGlmIHdlIGhhdmUgYSBicmVha3BvaW50IHNldCBhbmQgd2Ug cmVzdW1lIGFsbCB0aHJlYWRzIGFsd2F5cy4NCj4gKwkgKi8NCj4gKwlpZiAoZmxhZ3MgPT0gU0hB REVSX0JSRUFLUE9JTlQpDQo+ICsJCWlndF9hc3NlcnRfZXEoc3VtLCBkYXRhLT50aHJlYWRzX2Nv dW50KTsNCj4gKw0KPiArCWlmIChleHBlY3RfZXhjZXB0aW9uKQ0KPiArCQlpZ3RfYXNzZXJ0KHN1 bSA+IDApOw0KPiArCWVsc2UNCj4gKwkJaWd0X2Fzc2VydChzdW0gPT0gMCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIHVmZW5jZV9hY2tfdHJpZ2dlcihzdHJ1Y3QgeGVfZXVkZWJ1Z19kZWJ1 Z2dlciAqZCwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmUpDQo+ ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfdWZlbmNlICplZiA9 ICh2b2lkICopZTsNCj4gKw0KPiArCWlmIChlLT5mbGFncyAmIERSTV9YRV9FVURFQlVHX0VWRU5U X0NSRUFURSkNCj4gKwkJeGVfZXVkZWJ1Z19hY2tfdWZlbmNlKGQtPmZkLCBlZik7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICogU1VCVEVTVDogYmFzaWMtYnJlYWtwb2ludA0KPiArICogRGVzY3Jp cHRpb246DQo+ICsgKglDaGVjayB3aGV0aGVyIEtNRCBzZW5kcyBhdHRlbnRpb24gZXZlbnRzDQo+ ICsgKglmb3Igd29ya2xvYWQgaW4gZGVidWcgbW9kZSBzdG9wcGVkIG9uIGJyZWFrcG9pbnQuDQo+ ICsgKg0KPiArICogU1VCVEVTVDogYnJlYWtwb2ludC1ub3QtaW4tZGVidWctbW9kZQ0KPiArICog RGVzY3JpcHRpb246DQo+ICsgKglDaGVjayB3aGV0aGVyIEtNRCByZXNldHMgdGhlIEdQVSB3aGVu IGl0IHNwb3RzIGFuIGF0dGVudGlvbg0KPiArICoJY29taW5nIGZyb20gd29ya2xvYWQgbm90IGlu IGRlYnVnIG1vZGUuDQo+ICsgKg0KPiArICogU1VCVEVTVDogc3RvcHBlZC10aHJlYWQNCj4gKyAq IERlc2NyaXB0aW9uOg0KPiArICoJSGl0cyBicmVha3BvaW50IG9uIHJ1bmFsb25lIHdvcmtsb2Fk IGFuZA0KPiArICoJcmVhZHMgYXR0ZW50aW9uIGZvciBmaXhlZCB0aW1lLg0KPiArICoNCj4gKyAq IFNVQlRFU1Q6IHJlc3VtZS0lcw0KPiArICogRGVzY3JpcHRpb246DQo+ICsgKglSZXN1bWVzIHN0 b3BwZWQgb24gYSBicmVha3BvaW50IHdvcmtsb2FkDQo+ICsgKgl3aXRoIGdyYW51bGFyaXR5IG9m ICVhcmdbMV0uDQo+ICsgKg0KPiArICoNCj4gKyAqIGFyZ1sxXToNCj4gKyAqDQo+ICsgKiBAb25l OglvbmUgdGhyZWFkDQo+ICsgKiBAZHNzOgl0aHJlYWRzIHJ1bm5pbmcgb24gb25lIHN1YnNsaWNl DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfYmFzaWNfb25saW5lKGludCBmZCwgc3RydWN0 IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmh3ZSwgaW50IGZsYWdzKQ0KPiArew0KPiAr CXN0cnVjdCB4ZV9ldWRlYnVnX3Nlc3Npb24gKnM7DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19k YXRhICpkYXRhOw0KPiArDQo+ICsJZGF0YSA9IG9ubGluZV9kZWJ1Z19kYXRhX2NyZWF0ZShod2Up Ow0KPiArCXMgPSB4ZV9ldWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZkLCBydW5fb25saW5lX2NsaWVu dCwgZmxhZ3MsIGRhdGEpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dl cihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9FVV9BVFRFTlRJT04sDQo+ICsJCQkJCWV1X2F0 dGVudGlvbl9kZWJ1Z190cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmln Z2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJZXVf YXR0ZW50aW9uX3Jlc3VtZV90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90 cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiArCQkJ CQl1ZmVuY2VfYWNrX3RyaWdnZXIpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19zZXNzaW9uX3J1bihz KTsNCj4gKwlvbmxpbmVfc2Vzc2lvbl9jaGVjayhzLCBzLT5mbGFncyk7DQo+ICsNCj4gKwl4ZV9l dWRlYnVnX3Nlc3Npb25fZGVzdHJveShzKTsNCj4gKwlvbmxpbmVfZGVidWdfZGF0YV9kZXN0cm95 KGRhdGEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFNVQlRFU1Q6IHByZWVtcHQtYnJlYWtw b2ludA0KPiArICogRGVzY3JpcHRpb246DQo+ICsgKglWZXJpZnkgdGhhdCBldSBkZWJ1Z2dlciBk aXNhYmxlcyBwcmVlbXB0aW9uIHRpbWVvdXQgdG8NCj4gKyAqCXByZXZlbnQgcmVzZXQgb2Ygd29y a2xvYWQgc3RvcHBlZCBvbiBicmVha3BvaW50Lg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCB0ZXN0 X3ByZWVtcHRpb24oaW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAq aHdlKQ0KPiArew0KPiArCWludCBmbGFncyA9IFNIQURFUl9CUkVBS1BPSU5UIHwgVFJJR0dFUl9S RVNVTUVfREVMQVlFRDsNCj4gKwlzdHJ1Y3QgeGVfZXVkZWJ1Z19zZXNzaW9uICpzOw0KPiArCXN0 cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YTsNCj4gKwlzdHJ1Y3QgeGVfZXVkZWJ1Z19jbGll bnQgKm90aGVyOw0KPiArDQo+ICsJZGF0YSA9IG9ubGluZV9kZWJ1Z19kYXRhX2NyZWF0ZShod2Up Ow0KPiArCXMgPSB4ZV9ldWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZkLCBydW5fb25saW5lX2NsaWVu dCwgZmxhZ3MsIGRhdGEpOw0KPiArCW90aGVyID0geGVfZXVkZWJ1Z19jbGllbnRfY3JlYXRlKGZk LCBydW5fb25saW5lX2NsaWVudCwgU0hBREVSX05PUCwgZGF0YSk7DQo+ICsNCj4gKwl4ZV9ldWRl YnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FU VEVOVElPTiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX2RlYnVnX3RyaWdnZXIpOw0KPiArCXhlX2V1 ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVVf QVRURU5USU9OLA0KPiArCQkJCQlldV9hdHRlbnRpb25fcmVzdW1lX3RyaWdnZXIpOw0KPiArCXhl X2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRf Vk1fQklORF9VRkVOQ0UsDQo+ICsJCQkJCXVmZW5jZV9hY2tfdHJpZ2dlcik7DQo+ICsNCj4gKwlp Z3RfYXNzZXJ0X2VxKHhlX2V1ZGVidWdfZGVidWdnZXJfYXR0YWNoKHMtPmQsIHMtPmMpLCAwKTsN Cj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX3N0YXJ0X3dvcmtlcihzLT5kKTsNCj4gKw0KPiArCXhl X2V1ZGVidWdfY2xpZW50X3N0YXJ0KHMtPmMpOw0KPiArCXNsZWVwKDEpOyAvKiBtYWtlIHN1cmUg cy0+YyBzdGFydHMgZmlyc3QgKi8NCj4gKwl4ZV9ldWRlYnVnX2NsaWVudF9zdGFydChvdGhlcik7 DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2NsaWVudF93YWl0X2RvbmUocy0+Yyk7DQo+ICsJeGVfZXVk ZWJ1Z19jbGllbnRfd2FpdF9kb25lKG90aGVyKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdn ZXJfc3RvcF93b3JrZXIocy0+ZCwgMSk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Npb25fZGVz dHJveShzKTsNCj4gKwl4ZV9ldWRlYnVnX2NsaWVudF9kZXN0cm95KG90aGVyKTsNCj4gKw0KPiAr CWlndF9hc3NlcnRfZihkYXRhLT5sYXN0X2V1X2NvbnRyb2xfc2Vxbm8gIT0gMCwNCj4gKwkJICAg ICAiV29ya2xvYWQgd2l0aCBicmVha3BvaW50IGhhcyBlbmRlZCB3aXRob3V0IHJlc3VtZSFcbiIp Ow0KPiArDQo+ICsJb25saW5lX2RlYnVnX2RhdGFfZGVzdHJveShkYXRhKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBTVUJURVNUOiByZXNldC13aXRoLWF0dGVudGlvbg0KPiArICogRGVzY3Jp cHRpb246DQo+ICsgKglDaGVjayB3aGV0aGVyIEdQVSBpcyB1c2FibGUgYWZ0ZXIgcmVzZXR0aW5n IHdpdGggYXR0ZW50aW9uIHJhaXNlZCANCj4gKyAqCShzdG9wcGVkIG9uIGJyZWFrcG9pbnQpIGJ5 IHJ1bm5pbmcgdGhlIHNhbWUgd29ya2xvYWQgYWdhaW4uDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lk IHRlc3RfcmVzZXRfd2l0aF9hdHRlbnRpb25fb25saW5lKGludCBmZCwgc3RydWN0IGRybV94ZV9l bmdpbmVfY2xhc3NfaW5zdGFuY2UgKmh3ZSwgaW50IGZsYWdzKQ0KPiArew0KPiArCXN0cnVjdCB4 ZV9ldWRlYnVnX3Nlc3Npb24gKnMxLCAqczI7DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19kYXRh ICpkYXRhOw0KPiArDQo+ICsJZGF0YSA9IG9ubGluZV9kZWJ1Z19kYXRhX2NyZWF0ZShod2UpOw0K PiArCXMxID0geGVfZXVkZWJ1Z19zZXNzaW9uX2NyZWF0ZShmZCwgcnVuX29ubGluZV9jbGllbnQs IGZsYWdzLCBkYXRhKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIo czEtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJZXVfYXR0 ZW50aW9uX3Jlc2V0X3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdn ZXIoczEtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiArCQkJCQl1 ZmVuY2VfYWNrX3RyaWdnZXIpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19zZXNzaW9uX3J1bihzMSk7 DQo+ICsJeGVfZXVkZWJ1Z19zZXNzaW9uX2Rlc3Ryb3koczEpOw0KPiArDQo+ICsJczIgPSB4ZV9l dWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZkLCBydW5fb25saW5lX2NsaWVudCwgZmxhZ3MsIGRhdGEp Ow0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIoczItPmQsIERSTV9YRV9FVURF QlVHX0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX3Jlc3VtZV90cmln Z2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMyLT5kLCBEUk1fWEVf RVVERUJVR19FVkVOVF9WTV9CSU5EX1VGRU5DRSwNCj4gKwkJCQkJdWZlbmNlX2Fja190cmlnZ2Vy KTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfc2Vzc2lvbl9ydW4oczIpOw0KPiArDQo+ICsJb25saW5l X3Nlc3Npb25fY2hlY2soczIsIHMyLT5mbGFncyk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Np b25fZGVzdHJveShzMik7DQo+ICsJb25saW5lX2RlYnVnX2RhdGFfZGVzdHJveShkYXRhKTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBTVUJURVNUOiBpbnRlcnJ1cHQtYWxsDQo+ICsgKiBEZXNj cmlwdGlvbjoNCj4gKyAqCVNjaGVkdWxlcyBFVSB3b3JrbG9hZCB3aGljaCBzaG91bGQgbGFzdCBh Ym91dCBhIGZldyBzZWNvbmRzLCB0aGVuDQo+ICsgKglpbnRlcnJ1cHRzIGFsbCB0aHJlYWRzLCBj aGVja3Mgd2hldGhlciBhdHRlbnRpb24gZXZlbnQgY2FtZSwgYW5kDQo+ICsgKglyZXN1bWVzIHN0 b3BwZWQgdGhyZWFkcyBiYWNrLg0KPiArICoNCj4gKyAqIFNVQlRFU1Q6IGludGVycnVwdC1hbGwt c2V0LWJyZWFrcG9pbnQNCj4gKyAqIERlc2NyaXB0aW9uOg0KPiArICoJU2NoZWR1bGVzIEVVIHdv cmtsb2FkIHdoaWNoIHNob3VsZCBsYXN0IGFib3V0IGEgZmV3IHNlY29uZHMsIHRoZW4NCj4gKyAq CWludGVycnVwdHMgYWxsIHRocmVhZHMsIG9uY2UgYXR0ZW50aW9uIGV2ZW50IGNvbWUgaXQgc2V0 cyBicmVha3BvaW50IG9uDQo+ICsgKgl0aGUgdmVyeSBuZXh0IGluc3RydWN0aW9uIGFuZCByZXN1 bWVzIHN0b3BwZWQgdGhyZWFkcyBiYWNrLiBJdCBleHBlY3RzDQo+ICsgKgl0aGF0IGV2ZXJ5IHRo cmVhZCBoaXRzIHRoZSBicmVha3BvaW50Lg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCB0ZXN0X2lu dGVycnVwdF9hbGwoaW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAq aHdlLCBpbnQgZmxhZ3MpDQo+ICt7DQo+ICsJc3RydWN0IHhlX2V1ZGVidWdfc2Vzc2lvbiAqczsN Cj4gKwlzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRhdGE7DQo+ICsJdWludDMyX3QgdmFsOw0K PiArDQo+ICsJZGF0YSA9IG9ubGluZV9kZWJ1Z19kYXRhX2NyZWF0ZShod2UpOw0KPiArCXMgPSB4 ZV9ldWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZkLCBydW5fb25saW5lX2NsaWVudCwgZmxhZ3MsIGRh dGEpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1f WEVfRVVERUJVR19FVkVOVF9PUEVOLA0KPiArCQkJCQlvcGVuX3RyaWdnZXIpOw0KPiArCXhlX2V1 ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVhF Q19RVUVVRSwNCj4gKwkJCQkJZXhlY19xdWV1ZV90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2Rl YnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElP TiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX2RlYnVnX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdf ZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVVfQVRURU5U SU9OLA0KPiArCQkJCQlldV9hdHRlbnRpb25fcmVzdW1lX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVi dWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfVk0sIHZt X29wZW5fdHJpZ2dlcik7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5k LCBEUk1fWEVfRVVERUJVR19FVkVOVF9NRVRBREFUQSwNCj4gKwkJCQkJY3JlYXRlX21ldGFkYXRh X3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJN X1hFX0VVREVCVUdfRVZFTlRfVk1fQklORF9VRkVOQ0UsDQo+ICsJCQkJCXVmZW5jZV9hY2tfdHJp Z2dlcik7DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0X2VxKHhlX2V1ZGVidWdfZGVidWdnZXJfYXR0YWNo KHMtPmQsIHMtPmMpLCAwKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX3N0YXJ0X3dvcmtlcihz LT5kKTsNCj4gKwl4ZV9ldWRlYnVnX2NsaWVudF9zdGFydChzLT5jKTsNCj4gKw0KPiArCS8qIHdh aXQgZm9yIHdvcmtsb2FkIHRvIHN0YXJ0ICovDQo+ICsJaWd0X2Zvcl9taWxsaXNlY29uZHMoU1RB UlRVUF9USU1FT1VUX01TKSB7DQo+ICsJCS8qIGNvbGxlY3QgbmVlZGVkIGRhdGEgZnJvbSB0cmln Z2VycyAqLw0KPiArCQlpZiAoUkVBRF9PTkNFKGRhdGEtPnZtX2ZkKSA9PSAtMSB8fCBSRUFEX09O Q0UoZGF0YS0+dGFyZ2V0X3NpemUpID09IDApDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlp ZiAocHJlYWQoZGF0YS0+dm1fZmQsICZ2YWwsIHNpemVvZih2YWwpLCBkYXRhLT50YXJnZXRfb2Zm c2V0KSA9PSBzaXplb2YodmFsKSkNCj4gKwkJCWlmICh2YWwgIT0gMCkNCj4gKwkJCQlicmVhazsN Cj4gKwl9DQo+ICsNCj4gKwlwdGhyZWFkX211dGV4X2xvY2soJmRhdGEtPm11dGV4KTsNCj4gKwlp Z3RfYXNzZXJ0KGRhdGEtPmNsaWVudF9oYW5kbGUgIT0gLTEpOw0KPiArCWlndF9hc3NlcnQoZGF0 YS0+ZXhlY19xdWV1ZV9oYW5kbGUgIT0gLTEpOw0KPiArCWV1X2N0bF9pbnRlcnJ1cHRfYWxsKHMt PmQtPmZkLCBkYXRhLT5jbGllbnRfaGFuZGxlLA0KPiArCQkJICAgICBkYXRhLT5leGVjX3F1ZXVl X2hhbmRsZSwgZGF0YS0+bHJjX2hhbmRsZSk7DQo+ICsJcHRocmVhZF9tdXRleF91bmxvY2soJmRh dGEtPm11dGV4KTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X3dhaXRfZG9uZShzLT5jKTsN Cj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfc3RvcF93b3JrZXIocy0+ZCwgMSk7DQo+ICsN Cj4gKwl4ZV9ldWRlYnVnX2V2ZW50X2xvZ19wcmludChzLT5kLT5sb2csIHRydWUpOw0KPiArCXhl X2V1ZGVidWdfZXZlbnRfbG9nX3ByaW50KHMtPmMtPmxvZywgdHJ1ZSk7DQo+ICsNCj4gKwlvbmxp bmVfc2Vzc2lvbl9jaGVjayhzLCBzLT5mbGFncyk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Np b25fZGVzdHJveShzKTsNCj4gKwlvbmxpbmVfZGVidWdfZGF0YV9kZXN0cm95KGRhdGEpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZXNldF9kZWJ1Z2dlcl9sb2coc3RydWN0IHhlX2V1ZGVi dWdfZGVidWdnZXIgKmQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IG1heF9zaXplOw0KPiArCWNo YXIgbG9nX25hbWVbODBdOw0KPiArDQo+ICsJLyogRG9uJ3QgcHVsbCB0aGUgcnVnIG91dCBmcm9t IHVuZGVyIGFuIGFjdGl2ZSBkZWJ1Z2dlciAqLw0KPiArCWlndF9hc3NlcnQoZC0+dGFyZ2V0X3Bp ZCA9PSAwKTsNCj4gKw0KPiArCW1heF9zaXplID0gZC0+bG9nLT5tYXhfc2l6ZTsNCj4gKwlzdHJu Y3B5KGxvZ19uYW1lLCBkLT5sb2ctPm5hbWUsIHNpemVvZihkLT5sb2ctPm5hbWUpIC0gMSk7DQo+ ICsJbG9nX25hbWVbNzldID0gJ1wwJzsNCj4gKwl4ZV9ldWRlYnVnX2V2ZW50X2xvZ19kZXN0cm95 KGQtPmxvZyk7DQo+ICsJZC0+bG9nID0geGVfZXVkZWJ1Z19ldmVudF9sb2dfY3JlYXRlKGxvZ19u YW1lLCBtYXhfc2l6ZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogU1VCVEVTVDogaW50ZXJy dXB0LW90aGVyLWRlYnVnZ2FibGUNCj4gKyAqIERlc2NyaXB0aW9uOg0KPiArICoJU2NoZWR1bGVz IEVVIHdvcmtsb2FkIGluIHJ1bmFsb25lIG1vZGUgd2l0aCBuZXZlciBlbmRpbmcgbG9vcCwgd2hp bGUNCj4gKyAqCWl0IGlzIG5vdCB1bmRlciBkZWJ1ZywgdHJpZXMgdG8gaW50ZXJydXB0IGFsbCB0 aHJlYWRzIHVzaW5nIHRoZSBkaWZmZXJlbnQNCj4gKyAqCWNsaWVudCBhdHRhY2hlZCB0byBkZWJ1 Z2dlci4NCj4gKyAqDQo+ICsgKiBTVUJURVNUOiBpbnRlcnJ1cHQtb3RoZXINCj4gKyAqIERlc2Ny aXB0aW9uOg0KPiArICogCVNjaGVkdWxlcyBFVSB3b3JrbG9hZCB3aXRoIGEgbmV2ZXIgZW5kaW5n IGxvb3AgYW5kLCB3aGlsZSBpdCBpcyBub3QNCj4gKyAqIAljb25maWd1cmVkIGZvciBkZWJ1Z2dp bmcsIHRyaWVzIHRvIGludGVycnVwdCBhbGwgdGhyZWFkcyB1c2luZyB0aGUgY2xpZW50DQo+ICsg KiAJYXR0YWNoZWQgdG8gZGVidWdnZXIuDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfaW50 ZXJydXB0X290aGVyKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ug Kmh3ZSwgaW50IGZsYWdzKQ0KPiArew0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0 YTsNCj4gKwlzdHJ1Y3Qgb25saW5lX2RlYnVnX2RhdGEgKmRlYnVnZWVfZGF0YTsNCj4gKwlzdHJ1 Y3QgeGVfZXVkZWJ1Z19zZXNzaW9uICpzOw0KPiArCXN0cnVjdCB4ZV9ldWRlYnVnX2NsaWVudCAq ZGVidWdlZTsNCj4gKwlpbnQgZGVidWdlZV9mbGFncyA9IFNIQURFUl9MT09QIHwgRE9fTk9UX0VY UEVDVF9DQU5BUklFUzsNCj4gKwlpbnQgdmFsOw0KPiArDQo+ICsJZGF0YSA9IG9ubGluZV9kZWJ1 Z19kYXRhX2NyZWF0ZShod2UpOw0KPiArCXMgPSB4ZV9ldWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZk LCBydW5fb25saW5lX2NsaWVudCwgZmxhZ3MsIGRhdGEpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19k ZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9PUEVOLCBvcGVu X3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJN X1hFX0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRSwNCj4gKwkJCQkJZXhlY19xdWV1ZV90cmlnZ2Vy KTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURF QlVHX0VWRU5UX1ZNLCB2bV9vcGVuX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJf YWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfTUVUQURBVEEsDQo+ICsJCQkJ CWNyZWF0ZV9tZXRhZGF0YV90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90 cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiArCQkJ CQl1ZmVuY2VfYWNrX3RyaWdnZXIpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcSh4ZV9ldWRlYnVn X2RlYnVnZ2VyX2F0dGFjaChzLT5kLCBzLT5jKSwgMCk7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dl cl9zdGFydF93b3JrZXIocy0+ZCk7DQo+ICsJeGVfZXVkZWJ1Z19jbGllbnRfc3RhcnQocy0+Yyk7 DQo+ICsNCj4gKwkvKiB3YWl0IGZvciB3b3JrbG9hZCB0byBzdGFydCAqLw0KPiArCWlndF9mb3Jf bWlsbGlzZWNvbmRzKFNUQVJUVVBfVElNRU9VVF9NUykgew0KPiArCQlpZiAoUkVBRF9PTkNFKGRh dGEtPnZtX2ZkKSA9PSAtMSB8fCBSRUFEX09OQ0UoZGF0YS0+dGFyZ2V0X3NpemUpID09IDApDQo+ ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZiAocHJlYWQoZGF0YS0+dm1fZmQsICZ2YWwsIHNp emVvZih2YWwpLCBkYXRhLT50YXJnZXRfb2Zmc2V0KSA9PSBzaXplb2YodmFsKSkNCj4gKwkJCWlm ICh2YWwgIT0gMCkNCj4gKwkJCQlicmVhazsNCj4gKwl9DQo+ICsJaWd0X2Fzc2VydF9mKHZhbCAh PSAwLCAiV29ya2xvYWQgZXhlY3V0aW9uIGlzIG5vdCB5ZXQgc3RhcnRlZFxuIik7DQo+ICsNCj4g Kwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2RldHRhY2gocy0+ZCk7DQo+ICsJcmVzZXRfZGVidWdnZXJf bG9nKHMtPmQpOw0KPiArDQo+ICsJZGVidWdlZV9kYXRhID0gb25saW5lX2RlYnVnX2RhdGFfY3Jl YXRlKGh3ZSk7DQo+ICsJcy0+ZC0+cHRyID0gZGVidWdlZV9kYXRhOw0KPiArCWRlYnVnZWUgPSB4 ZV9ldWRlYnVnX2NsaWVudF9jcmVhdGUoZmQsIHJ1bl9vbmxpbmVfY2xpZW50LCBkZWJ1Z2VlX2Zs YWdzLCBkZWJ1Z2VlX2RhdGEpOw0KPiArCWlndF9hc3NlcnRfZXEoeGVfZXVkZWJ1Z19kZWJ1Z2dl cl9hdHRhY2gocy0+ZCwgZGVidWdlZSksIDApOw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X3N0YXJ0 KGRlYnVnZWUpOw0KPiArDQo+ICsJaWd0X2Zvcl9taWxsaXNlY29uZHMoU1RBUlRVUF9USU1FT1VU X01TKSB7DQo+ICsJCWlmIChSRUFEX09OQ0UoZGVidWdlZV9kYXRhLT52bV9mZCkgPT0gLTEgfHwg UkVBRF9PTkNFKGRlYnVnZWVfZGF0YS0+dGFyZ2V0X3NpemUpID09IDApDQo+ICsJCQljb250aW51 ZTsNCj4gKwl9DQo+ICsNCj4gKwlwdGhyZWFkX211dGV4X2xvY2soJmRlYnVnZWVfZGF0YS0+bXV0 ZXgpOw0KPiArCWlndF9hc3NlcnQoZGVidWdlZV9kYXRhLT5jbGllbnRfaGFuZGxlICE9IC0xKTsN Cj4gKwlpZ3RfYXNzZXJ0KGRlYnVnZWVfZGF0YS0+ZXhlY19xdWV1ZV9oYW5kbGUgIT0gLTEpOw0K PiArCS8qIEludGVycnVwdGluZyB0aGUgb3RoZXIgY2xpZW50IHNob3VsZCByZXR1cm4gaW52YWxp ZCBzdGF0ZQ0KPiArCSAqIGFzIGl0IGlzIHJ1bm5pbmcgaW4gcnVuYWxvbmUgbW9kZSAqLw0KPiAr CWlndF9hc3NlcnRfZXEoX19ldV9jdGwocy0+ZC0+ZmQsIGRlYnVnZWVfZGF0YS0+Y2xpZW50X2hh bmRsZSwNCj4gKwkJICAgICAgIGRlYnVnZWVfZGF0YS0+ZXhlY19xdWV1ZV9oYW5kbGUsIGRlYnVn ZWVfZGF0YS0+bHJjX2hhbmRsZSwNCj4gKwkJICAgICAgIE5VTEwsIDAsIERSTV9YRV9FVURFQlVH X0VVX0NPTlRST0xfQ01EX0lOVEVSUlVQVF9BTEwsIE5VTEwpLCAtRUlOVkFMKTsNCj4gKwlwdGhy ZWFkX211dGV4X3VubG9jaygmZGVidWdlZV9kYXRhLT5tdXRleCk7DQo+ICsNCj4gKwl4ZV9mb3Jj ZV9ndF9yZXNldF9hc3luYyhzLT5kLT5tYXN0ZXJfZmQsIGRlYnVnZWVfZGF0YS0+aHdlLmd0X2lk KTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X3dhaXRfZG9uZShkZWJ1Z2VlKTsNCj4gKwl4 ZV9ldWRlYnVnX2RlYnVnZ2VyX3N0b3Bfd29ya2VyKHMtPmQsIDEpOw0KPiArDQo+ICsJeGVfZXVk ZWJ1Z19ldmVudF9sb2dfcHJpbnQocy0+ZC0+bG9nLCB0cnVlKTsNCj4gKwl4ZV9ldWRlYnVnX2V2 ZW50X2xvZ19wcmludChkZWJ1Z2VlLT5sb2csIHRydWUpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19z ZXNzaW9uX2NoZWNrKHMsIHRydWUsIFhFX0VVREVCVUdfRklMVEVSX0VWRU5UX1ZNX0JJTkQgfA0K PiArCQkJCSBYRV9FVURFQlVHX0ZJTFRFUl9FVkVOVF9WTV9CSU5EX09QIHwNCj4gKwkJCQkgWEVf RVVERUJVR19GSUxURVJfRVZFTlRfVk1fQklORF9VRkVOQ0UpOw0KPiArDQo+ICsJeGVfZXVkZWJ1 Z19jbGllbnRfZGVzdHJveShkZWJ1Z2VlKTsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Npb25fZGVzdHJv eShzKTsNCj4gKwlvbmxpbmVfZGVidWdfZGF0YV9kZXN0cm95KGRhdGEpOw0KPiArCW9ubGluZV9k ZWJ1Z19kYXRhX2Rlc3Ryb3koZGVidWdlZV9kYXRhKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBTVUJURVNUOiB0ZGN0bC1wYXJhbWV0ZXJzDQo+ICsgKiBEZXNjcmlwdGlvbjoNCj4gKyAqCVNj aGVkdWxlcyBFVSB3b3JrbG9hZCB3aGljaCBzaG91bGQgbGFzdCBhYm91dCBhIGZldyBzZWNvbmRz LCB0aGVuDQo+ICsgKgljaGVja3MgbmVnYXRpdmUgc2NlbmFyaW9zIG9mIEVVX1RIUkVBRFMgaW9j dGwgdXNhZ2UsIGludGVycnVwdHMgYWxsIHRocmVhZHMsDQo+ICsgKgljaGVja3Mgd2hldGhlciBh dHRlbnRpb24gZXZlbnQgY2FtZSwgYW5kIHJlc3VtZXMgc3RvcHBlZCB0aHJlYWRzIGJhY2suDQo+ ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfdGRjdGxfcGFyYW1ldGVycyhpbnQgZmQsIHN0cnVj dCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2UsIGludCBmbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgeGVfZXVkZWJ1Z19zZXNzaW9uICpzOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdf ZGF0YSAqZGF0YTsNCj4gKwl1aW50MzJfdCB2YWw7DQo+ICsJdWludDMyX3QgcmFuZG9tX2NvbW1h bmQ7DQo+ICsJdWludDMyX3QgYml0bWFza19zaXplID0gcXVlcnlfYXR0ZW50aW9uX2JpdG1hc2tf c2l6ZShmZCwgaHdlLT5ndF9pZCk7DQo+ICsJdWludDhfdCAqYXR0ZW50aW9uX2JpdG1hc2sgPSBt YWxsb2MoYml0bWFza19zaXplICogc2l6ZW9mKHVpbnQ4X3QpKTsNCj4gKwlpZ3RfYXNzZXJ0KGF0 dGVudGlvbl9iaXRtYXNrKTsNCj4gKw0KPiArCWRhdGEgPSBvbmxpbmVfZGVidWdfZGF0YV9jcmVh dGUoaHdlKTsNCj4gKwlzID0geGVfZXVkZWJ1Z19zZXNzaW9uX2NyZWF0ZShmZCwgcnVuX29ubGlu ZV9jbGllbnQsIGZsYWdzLCBkYXRhKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRk X3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfT1BFTiwNCj4gKwkJCQkJb3Blbl90 cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9Y RV9FVURFQlVHX0VWRU5UX0VYRUNfUVVFVUUsDQo+ICsJCQkJCWV4ZWNfcXVldWVfdHJpZ2dlcik7 DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJV R19FVkVOVF9FVV9BVFRFTlRJT04sDQo+ICsJCQkJCWV1X2F0dGVudGlvbl9kZWJ1Z190cmlnZ2Vy KTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURF QlVHX0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX3Jlc3VtZV90cmln Z2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9F VURFQlVHX0VWRU5UX1ZNLCB2bV9vcGVuX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdn ZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfTUVUQURBVEEsDQo+ICsJ CQkJCWNyZWF0ZV9tZXRhZGF0YV90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2Fk ZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiAr CQkJCQl1ZmVuY2VfYWNrX3RyaWdnZXIpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcSh4ZV9ldWRl YnVnX2RlYnVnZ2VyX2F0dGFjaChzLT5kLCBzLT5jKSwgMCk7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1 Z2dlcl9zdGFydF93b3JrZXIocy0+ZCk7DQo+ICsJeGVfZXVkZWJ1Z19jbGllbnRfc3RhcnQocy0+ Yyk7DQo+ICsNCj4gKwkvKiB3YWl0IGZvciB3b3JrbG9hZCB0byBzdGFydCAqLw0KPiArCWlndF9m b3JfbWlsbGlzZWNvbmRzKFNUQVJUVVBfVElNRU9VVF9NUykgew0KPiArCQkvKiBjb2xsZWN0IG5l ZWRlZCBkYXRhIGZyb20gdHJpZ2dlcnMgKi8NCj4gKwkJaWYgKFJFQURfT05DRShkYXRhLT52bV9m ZCkgPT0gLTEgfHwgUkVBRF9PTkNFKGRhdGEtPnRhcmdldF9zaXplKSA9PSAwKQ0KPiArCQkJY29u dGludWU7DQo+ICsNCj4gKwkJaWYgKHByZWFkKGRhdGEtPnZtX2ZkLCAmdmFsLCBzaXplb2YodmFs KSwgZGF0YS0+dGFyZ2V0X29mZnNldCkgPT0gc2l6ZW9mKHZhbCkpDQo+ICsJCQlpZiAodmFsICE9 IDApDQo+ICsJCQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZk YXRhLT5tdXRleCk7DQo+ICsJaWd0X2Fzc2VydChkYXRhLT5jbGllbnRfaGFuZGxlICE9IC0xKTsN Cj4gKwlpZ3RfYXNzZXJ0KGRhdGEtPmV4ZWNfcXVldWVfaGFuZGxlICE9IC0xKTsNCj4gKwlpZ3Rf YXNzZXJ0KGRhdGEtPmxyY19oYW5kbGUgIT0gLTEpOw0KPiArDQo+ICsJLyogZmFpbCBvbiBpbnZh bGlkIGxyY19oYW5kbGUgKi8NCj4gKwlpZ3RfYXNzZXJ0KF9fZXVfY3RsKHMtPmQtPmZkLCBkYXRh LT5jbGllbnRfaGFuZGxlLA0KPiArCQkJICAgIGRhdGEtPmV4ZWNfcXVldWVfaGFuZGxlLCBkYXRh LT5scmNfaGFuZGxlICsgMSwNCj4gKwkJCSAgICBhdHRlbnRpb25fYml0bWFzaywgJmJpdG1hc2tf c2l6ZSwNCj4gKwkJCSAgICBEUk1fWEVfRVVERUJVR19FVV9DT05UUk9MX0NNRF9JTlRFUlJVUFRf QUxMLCBOVUxMKSA9PSAtRUlOVkFMKTsNCj4gKw0KPiArCS8qIGZhaWwgb24gaW52YWxpZCBleGVj X3F1ZXVlX2hhbmRsZSAqLw0KPiArCWlndF9hc3NlcnQoX19ldV9jdGwocy0+ZC0+ZmQsIGRhdGEt PmNsaWVudF9oYW5kbGUsDQo+ICsJCQkgICAgZGF0YS0+ZXhlY19xdWV1ZV9oYW5kbGUgKyAxLCBk YXRhLT5scmNfaGFuZGxlLA0KPiArCQkJICAgIGF0dGVudGlvbl9iaXRtYXNrLCAmYml0bWFza19z aXplLA0KPiArCQkJICAgIERSTV9YRV9FVURFQlVHX0VVX0NPTlRST0xfQ01EX0lOVEVSUlVQVF9B TEwsIE5VTEwpID09IC1FSU5WQUwpOw0KPiArDQo+ICsJLyogZmFpbCBvbiBpbnZhbGlkIGNsaWVu dCAqLw0KPiArCWlndF9hc3NlcnQoX19ldV9jdGwocy0+ZC0+ZmQsIGRhdGEtPmNsaWVudF9oYW5k bGUgKyAxLA0KPiArCQkJICAgIGRhdGEtPmV4ZWNfcXVldWVfaGFuZGxlLCBkYXRhLT5scmNfaGFu ZGxlLA0KPiArCQkJICAgIGF0dGVudGlvbl9iaXRtYXNrLCAmYml0bWFza19zaXplLA0KPiArCQkJ ICAgIERSTV9YRV9FVURFQlVHX0VVX0NPTlRST0xfQ01EX0lOVEVSUlVQVF9BTEwsIE5VTEwpID09 IC1FSU5WQUwpOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBiaXRtYXNrIHNpemUgbXVzdCBiZSBhbGln bmVkIHRvIHNpemVvZih1MzIpIGZvciBhbGwgY29tbWFuZHMNCj4gKwkgKiBhbmQgYmUgemVybyBm b3IgaW50ZXJydXB0IGFsbA0KPiArCSAqLw0KPiArCWJpdG1hc2tfc2l6ZSA9IHNpemVvZih1aW50 MzJfdCkgLSAxOw0KPiArCWlndF9hc3NlcnQoX19ldV9jdGwocy0+ZC0+ZmQsIGRhdGEtPmNsaWVu dF9oYW5kbGUsDQo+ICsJCQkgICAgZGF0YS0+ZXhlY19xdWV1ZV9oYW5kbGUsIGRhdGEtPmxyY19o YW5kbGUsDQo+ICsJCQkgICAgYXR0ZW50aW9uX2JpdG1hc2ssICZiaXRtYXNrX3NpemUsDQo+ICsJ CQkgICAgRFJNX1hFX0VVREVCVUdfRVVfQ09OVFJPTF9DTURfU1RPUFBFRCwgTlVMTCkgPT0gLUVJ TlZBTCk7DQo+ICsJYml0bWFza19zaXplID0gMDsNCj4gKw0KPiArCS8qIGZhaWwgb24gaW52YWxp ZCBjb21tYW5kICovDQo+ICsJcmFuZG9tX2NvbW1hbmQgPSByYW5kb20oKSB8IChEUk1fWEVfRVVE RUJVR19FVV9DT05UUk9MX0NNRF9SRVNVTUUgKyAxKTsNCj4gKwlpZ3RfYXNzZXJ0KF9fZXVfY3Rs KHMtPmQtPmZkLCBkYXRhLT5jbGllbnRfaGFuZGxlLA0KPiArCQkJICAgIGRhdGEtPmV4ZWNfcXVl dWVfaGFuZGxlLCBkYXRhLT5scmNfaGFuZGxlLA0KPiArCQkJICAgIGF0dGVudGlvbl9iaXRtYXNr LCAmYml0bWFza19zaXplLCByYW5kb21fY29tbWFuZCwgTlVMTCkgPT0gLUVJTlZBTCk7DQo+ICsN Cj4gKwlmcmVlKGF0dGVudGlvbl9iaXRtYXNrKTsNCj4gKw0KPiArCWV1X2N0bF9pbnRlcnJ1cHRf YWxsKHMtPmQtPmZkLCBkYXRhLT5jbGllbnRfaGFuZGxlLA0KPiArCQkJICAgICBkYXRhLT5leGVj X3F1ZXVlX2hhbmRsZSwgZGF0YS0+bHJjX2hhbmRsZSk7DQo+ICsJcHRocmVhZF9tdXRleF91bmxv Y2soJmRhdGEtPm11dGV4KTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfY2xpZW50X3dhaXRfZG9uZShz LT5jKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfc3RvcF93b3JrZXIocy0+ZCwgMSk7 DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2V2ZW50X2xvZ19wcmludChzLT5kLT5sb2csIHRydWUpOw0K PiArCXhlX2V1ZGVidWdfZXZlbnRfbG9nX3ByaW50KHMtPmMtPmxvZywgdHJ1ZSk7DQo+ICsNCj4g KwlvbmxpbmVfc2Vzc2lvbl9jaGVjayhzLCBzLT5mbGFncyk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVn X3Nlc3Npb25fZGVzdHJveShzKTsNCj4gKwlvbmxpbmVfZGVidWdfZGF0YV9kZXN0cm95KGRhdGEp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBldV9hdHRlbnRpb25fZGVidWdnZXJfZGV0YWNo X3RyaWdnZXIoc3RydWN0IHhlX2V1ZGVidWdfZGVidWdnZXIgKmQsDQo+ICsJCQkJCQkgc3RydWN0 IGRybV94ZV9ldWRlYnVnX2V2ZW50ICpldmVudCkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb25saW5lX2Rl YnVnX2RhdGEgKmRhdGEgPSBkLT5wdHI7DQo+ICsJdWludDY0X3QgY19waWQ7DQo+ICsJaW50IHJl dDsNCj4gKw0KPiArCWNfcGlkID0gZC0+dGFyZ2V0X3BpZDsNCj4gKw0KPiArCS8qIFJlc2V0IFZN IGRhdGEgc28gdGhlIHJlLXRyaWdnZXJlZCBWTSBvcGVuIGhhbmRsZXIgd29ya3MgcHJvcGVybHkg Ki8NCj4gKwlkYXRhLT52bV9mZCA9IC0xOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9k ZXR0YWNoKGQpOw0KPiArDQo+ICsJLyogTGV0IHRoZSBLTUQgc2NhbiBmdW5jdGlvbiBub3RpY2Ug dW5oYW5kbGVkIEVVIGF0dGVudGlvbiAqLw0KPiArCWlmICghKGQtPmZsYWdzICYgU0hBREVSX05f Tk9PUF9CUkVBS1BPSU5UKSkNCj4gKwkJc2xlZXAoMSk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIE5l dyBzZXNzaW9uIHRoYXQgaXMgY3JlYXRlZCBieSBFVSBkZWJ1Z2dlciBvbiByZWNvbm5lY3QgcmVz dGFydHMNCj4gKwkgKiBzZXFubywgY2F1c2luZyBpc3NlcyB3aXRoIGxvZyBzb3J0aW5nLiBUbyBh dm9pZCB0aGF0LCBjcmVhdGUNCj4gKwkgKiBhIG5ldyBldmVudCBsb2cuDQo+ICsJICovDQo+ICsJ cmVzZXRfZGVidWdnZXJfbG9nKGQpOw0KPiArDQo+ICsJcmV0ID0geGVfZXVkZWJ1Z19jb25uZWN0 KGQtPm1hc3Rlcl9mZCwgY19waWQsIDApOw0KPiArCWlndF9hc3NlcnQocmV0ID49IDApOw0KPiAr CWQtPmZkID0gcmV0Ow0KPiArCWQtPnRhcmdldF9waWQgPSBjX3BpZDsNCj4gKw0KPiArCS8qIExl dCB0aGUgZGlzY292ZXJ5IHdvcmtlciBkaXNjb3ZlciByZXNvdXJjZXMgKi8NCj4gKwlzbGVlcCgy KTsNCj4gKw0KPiArCWlmICghKGQtPmZsYWdzICYgU0hBREVSX05fTk9PUF9CUkVBS1BPSU5UKSkN Cj4gKwkJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9zaWduYWxfc3RhZ2UoZCwgREVCVUdHRVJfUkVBVFRB Q0hFRCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogU1VCVEVTVDogaW50ZXJydXB0LXJlY29u bmVjdA0KPiArICogRGVzY3JpcHRpb246DQo+ICsgKglTY2hlZHVsZXMgRVUgd29ya2xvYWQgd2hp Y2ggc2hvdWxkIGxhc3QgYWJvdXQgYSBmZXcgc2Vjb25kcywNCj4gKyAqCWludGVycnVwdHMgYWxs IHRocmVhZHMgYW5kIGRldGFjaGVzIGRlYnVnZ2VyIHdoZW4gYXR0ZW50aW9uIGlzDQo+ICsgKgly YWlzZWQuIFRoZSB0ZXN0IGNoZWNrcyBpZiBLTUQgcmVzZXRzIHRoZSB3b3JrbG9hZCB3aGVuIHRo ZXJlJ3MNCj4gKyAqCW5vIGRlYnVnZ2VyIGF0dGFjaGVkIGFuZCBkb2VzIHRoZSBldmVudCBwbGF5 YmFjayBvbiBkaXNjb3ZlcnkuDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfaW50ZXJydXB0 X3JlY29ubmVjdChpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpo d2UsIGludCBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmUg PSBOVUxMOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YTsNCj4gKwlzdHJ1Y3Qg eGVfZXVkZWJ1Z19zZXNzaW9uICpzOw0KPiArCXVpbnQzMl90IHZhbDsNCj4gKw0KPiArCWRhdGEg PSBvbmxpbmVfZGVidWdfZGF0YV9jcmVhdGUoaHdlKTsNCj4gKwlzID0geGVfZXVkZWJ1Z19zZXNz aW9uX2NyZWF0ZShmZCwgcnVuX29ubGluZV9jbGllbnQsIGZsYWdzLCBkYXRhKTsNCj4gKw0KPiAr CXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZF TlRfT1BFTiwNCj4gKwkJCQkJb3Blbl90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2Vy X2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VYRUNfUVVFVUUsDQo+ICsJ CQkJCWV4ZWNfcXVldWVfdHJpZ2dlcik7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJp Z2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9FVV9BVFRFTlRJT04sDQo+ICsJCQkJCWV1 X2F0dGVudGlvbl9kZWJ1Z190cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90 cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJ ZXVfYXR0ZW50aW9uX2RlYnVnZ2VyX2RldGFjaF90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2Rl YnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNLCB2bV9vcGVu X3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJN X1hFX0VVREVCVUdfRVZFTlRfTUVUQURBVEEsDQo+ICsJCQkJCWNyZWF0ZV9tZXRhZGF0YV90cmln Z2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9F VURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiArCQkJCQl1ZmVuY2VfYWNrX3RyaWdnZXIp Ow0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcSh4ZV9ldWRlYnVnX2RlYnVnZ2VyX2F0dGFjaChzLT5k LCBzLT5jKSwgMCk7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9zdGFydF93b3JrZXIocy0+ZCk7 DQo+ICsJeGVfZXVkZWJ1Z19jbGllbnRfc3RhcnQocy0+Yyk7DQo+ICsNCj4gKwkvKiB3YWl0IGZv ciB3b3JrbG9hZCB0byBzdGFydCAqLw0KPiArCWlndF9mb3JfbWlsbGlzZWNvbmRzKFNUQVJUVVBf VElNRU9VVF9NUykgew0KPiArCQkvKiBjb2xsZWN0IG5lZWRlZCBkYXRhIGZyb20gdHJpZ2dlcnMg Ki8NCj4gKwkJaWYgKFJFQURfT05DRShkYXRhLT52bV9mZCkgPT0gLTEgfHwgUkVBRF9PTkNFKGRh dGEtPnRhcmdldF9zaXplKSA9PSAwKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJaWYgKHBy ZWFkKGRhdGEtPnZtX2ZkLCAmdmFsLCBzaXplb2YodmFsKSwgZGF0YS0+dGFyZ2V0X29mZnNldCkg PT0gc2l6ZW9mKHZhbCkpDQo+ICsJCQlpZiAodmFsICE9IDApDQo+ICsJCQkJYnJlYWs7DQo+ICsJ fQ0KPiArDQo+ICsJcHRocmVhZF9tdXRleF9sb2NrKCZkYXRhLT5tdXRleCk7DQo+ICsJaWd0X2Fz c2VydChkYXRhLT5jbGllbnRfaGFuZGxlICE9IC0xKTsNCj4gKwlpZ3RfYXNzZXJ0KGRhdGEtPmV4 ZWNfcXVldWVfaGFuZGxlICE9IC0xKTsNCj4gKwlldV9jdGxfaW50ZXJydXB0X2FsbChzLT5kLT5m ZCwgZGF0YS0+Y2xpZW50X2hhbmRsZSwNCj4gKwkJCSAgICAgZGF0YS0+ZXhlY19xdWV1ZV9oYW5k bGUsIGRhdGEtPmxyY19oYW5kbGUpOw0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkYXRhLT5t dXRleCk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2NsaWVudF93YWl0X2RvbmUocy0+Yyk7DQo+ICsN Cj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX3N0b3Bfd29ya2VyKHMtPmQsIDEpOw0KPiArDQo+ICsJ eGVfZXVkZWJ1Z19ldmVudF9sb2dfcHJpbnQocy0+ZC0+bG9nLCB0cnVlKTsNCj4gKwl4ZV9ldWRl YnVnX2V2ZW50X2xvZ19wcmludChzLT5jLT5sb2csIHRydWUpOw0KPiArDQo+ICsJeGVfZXVkZWJ1 Z19zZXNzaW9uX2NoZWNrKHMsIHRydWUsIFhFX0VVREVCVUdfRklMVEVSX0VWRU5UX1ZNX0JJTkQg fA0KPiArCQkJCQkgIFhFX0VVREVCVUdfRklMVEVSX0VWRU5UX1ZNX0JJTkRfT1AgfA0KPiArCQkJ CQkgIFhFX0VVREVCVUdfRklMVEVSX0VWRU5UX1ZNX0JJTkRfVUZFTkNFKTsNCj4gKw0KPiArCS8q IFdlIGV4cGVjdCB3b3JrbG9hZCByZXNldCwgc28gbm8gYXR0ZW50aW9uIHNob3VsZCBiZSByYWlz ZWQgKi8NCj4gKwl4ZV9ldWRlYnVnX2Zvcl9lYWNoX2V2ZW50KGUsIHMtPmQtPmxvZykNCj4gKwkJ aWd0X2Fzc2VydChlLT50eXBlICE9IERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElPTik7 DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Npb25fZGVzdHJveShzKTsNCj4gKwlvbmxpbmVfZGVi dWdfZGF0YV9kZXN0cm95KGRhdGEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFNVQlRFU1Q6 IHNpbmdsZS1zdGVwDQo+ICsgKiBEZXNjcmlwdGlvbjoNCj4gKyAqCVNjaGVkdWxlcyBFVSB3b3Jr bG9hZCB3aXRoIDE2IG5vcHMgYWZ0ZXIgYnJlYWtwb2ludCwgdGhlbiBzaW5nbGUtc3RlcHMNCj4g KyAqCXRocm91Z2ggdGhlIHNoYWRlciwgYWR2YW5jZXMgYWxsIHRocmVhZHMgZWFjaCBzdGVwLCBj aGVja2luZyBpZiBhbGwNCj4gKyAqCXRocmVhZHMgYWR2YW5jZWQgZXZlcnkgc3RlcC4NCj4gKyAq DQo+ICsgKiBTVUJURVNUOiBzaW5nbGUtc3RlcC1vbmUNCj4gKyAqIERlc2NyaXB0aW9uOg0KPiAr ICoJU2NoZWR1bGVzIEVVIHdvcmtsb2FkIHdpdGggMTYgbm9wcyBhZnRlciBicmVha3BvaW50LCB0 aGVuIHNpbmdsZS1zdGVwcw0KPiArICoJdGhyb3VnaCB0aGUgc2hhZGVyLCBhZHZhbmNlcyBvbmUg dGhyZWFkIGVhY2ggc3RlcCwgY2hlY2tpbmcgaWYgb25lDQo+ICsgKgl0aHJlYWQgYWR2YW5jZWQg ZXZlcnkgc3RlcC4gRHVlIHRvIHRoZSB0aW1lIGNvbnN0cmFpbnQsIG9ubHkgZmlyc3QgdHdvDQo+ ICsgKglzaGFkZXIgaW5zdHJ1Y3Rpb25zIGFmdGVyIGJyZWFrcG9pbnQgYXJlIHZhbGlkYXRlZC4N Cj4gKyAqLw0KPiArc3RhdGljIHZvaWQgdGVzdF9zaW5nbGVfc3RlcChpbnQgZmQsIHN0cnVjdCBk cm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2UsIGludCBmbGFncykNCj4gK3sNCj4gKwlz dHJ1Y3QgeGVfZXVkZWJ1Z19zZXNzaW9uICpzOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0 YSAqZGF0YTsNCj4gKw0KPiArCWRhdGEgPSBvbmxpbmVfZGVidWdfZGF0YV9jcmVhdGUoaHdlKTsN Cj4gKwlzID0geGVfZXVkZWJ1Z19zZXNzaW9uX2NyZWF0ZShmZCwgcnVuX29ubGluZV9jbGllbnQs IGZsYWdzLCBkYXRhKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIo cy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfT1BFTiwNCj4gKwkJCQkJb3Blbl90cmlnZ2VyKTsN Cj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVH X0VWRU5UX0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX2RlYnVnX3RyaWdnZXIp Ow0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVC VUdfRVZFTlRfRVVfQVRURU5USU9OLA0KPiArCQkJCQlldV9hdHRlbnRpb25fcmVzdW1lX3Npbmds ZV9zdGVwX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfVk0sIHZtX29wZW5fdHJpZ2dlcik7DQo+ICsJeGVfZXVk ZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9NRVRB REFUQSwNCj4gKwkJCQkJY3JlYXRlX21ldGFkYXRhX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdf ZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfVk1fQklORF9V RkVOQ0UsDQo+ICsJCQkJCXVmZW5jZV9hY2tfdHJpZ2dlcik7DQo+ICsNCj4gKwl4ZV9ldWRlYnVn X3Nlc3Npb25fcnVuKHMpOw0KPiArCW9ubGluZV9zZXNzaW9uX2NoZWNrKHMsIHMtPmZsYWdzKTsN Cj4gKwl4ZV9ldWRlYnVnX3Nlc3Npb25fZGVzdHJveShzKTsNCj4gKwlvbmxpbmVfZGVidWdfZGF0 YV9kZXN0cm95KGRhdGEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBldV9hdHRlbnRpb25f ZGVidWdnZXJfbmRldGFjaF90cmlnZ2VyKHN0cnVjdCB4ZV9ldWRlYnVnX2RlYnVnZ2VyICpkLA0K PiArCQkJCQkJIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZXZlbnQpDQo+ICt7DQo+ICsJ c3RhdGljIGludCBkZWJ1Z2dlcl9kZXRhY2hfY291bnQ7DQo+ICsNCj4gKwlpZiAoZGVidWdnZXJf ZGV0YWNoX2NvdW50IDwgKFNIQURFUl9MT09QX04gLSAxKSkgew0KPiArCQkvKiBNYWtlIHN1cmUg dGhlIHJlc3VtZSBjb21tYW5kIGhhcyBpc3N1ZWQgYmVmb3JlIGRldGFjaGluZyB0aGUgZGVidWdn ZXIgKi8NCj4gKwkJaWYgKCFpc19jbGllbnRfcmVzdW1lZCkNCj4gKwkJCXJldHVybjsNCk5vdCBz dXJlIHdoYXQgd2UgYXJlIHRyeWluZyB0byBhY2hpZXZlIGhlcmUuIEkgdGhpbmsgdHJpZ2dlcnMg YXJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzDQphZGRlZCwgc28gdGhpcyBzaG91bGQg YmUgZW5zdXJlZC4gQnV0IGFueXdheSwgSSB0aGluayB3ZSBjb3VsZCBqdXN0IHJlc3VlIGRhdGEt DQo+bGFzdF9ldV9jb250cm9sX3NlcW5vLiBJZiBpdHMgZ3JlYXRlciB0aGFuIHNlcW5vIG9mIHRo aXMgZXZlbnQgd2UgYXJlIGZyZWUgdG8gcmVhdHRhY2guDQoNClJlZ2FyZHMsDQpEb21pbmlrDQoN Cj4gKwkJZXVfYXR0ZW50aW9uX2RlYnVnZ2VyX2RldGFjaF90cmlnZ2VyKGQsIGV2ZW50KTsNCj4g KwkJZGVidWdnZXJfZGV0YWNoX2NvdW50Kys7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWd0X2RlYnVn KCJSZWFjaGVkIE50aCBicmVha3BvaW50IGhlbmNlIHByZXZlbnRpbmcgdGhlIGRlYnVnZ2VyIGRl dGFjaFxuIik7DQo+ICsJfQ0KPiArCWlzX2NsaWVudF9yZXN1bWVkID0gMDsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBTVUJURVNUOiBkZWJ1Z2dlci1yZW9wZW4NCj4gKyAqIERlc2NyaXB0aW9u Og0KPiArICoJQ2hlY2sgd2hldGhlciB0aGUgZGVidWdnZXIgaXMgYWJsZSB0byByZW9wZW4gdGhl IGNvbm5lY3Rpb24gYW5kDQo+ICsgKgljYXB0dXJlIHRoZSBldmVudHMgb2YgYWxyZWFkeSBydW5u aW5nIGNsaWVudC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgdGVzdF9kZWJ1Z2dlcl9yZW9wZW4o aW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqaHdlLCBpbnQgZmxh Z3MpDQo+ICt7DQo+ICsJc3RydWN0IHhlX2V1ZGVidWdfc2Vzc2lvbiAqczsNCj4gKwlzdHJ1Y3Qg b25saW5lX2RlYnVnX2RhdGEgKmRhdGE7DQo+ICsNCj4gKwlkYXRhID0gb25saW5lX2RlYnVnX2Rh dGFfY3JlYXRlKGh3ZSk7DQo+ICsNCj4gKwlzID0geGVfZXVkZWJ1Z19zZXNzaW9uX2NyZWF0ZShm ZCwgcnVuX29ubGluZV9jbGllbnQsIGZsYWdzLCBkYXRhKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdf ZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVVfQVRURU5U SU9OLA0KPiArCQkJCQlldV9hdHRlbnRpb25fZGVidWdfdHJpZ2dlcik7DQo+ICsJeGVfZXVkZWJ1 Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9FVV9BVFRF TlRJT04sDQo+ICsJCQkJCWV1X2F0dGVudGlvbl9yZXN1bWVfdHJpZ2dlcik7DQo+ICsJeGVfZXVk ZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9FVV9B VFRFTlRJT04sDQo+ICsJCQkJCWV1X2F0dGVudGlvbl9kZWJ1Z2dlcl9uZGV0YWNoX3RyaWdnZXIp Ow0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVC VUdfRVZFTlRfVk1fQklORF9VRkVOQ0UsDQo+ICsJCQkJCXVmZW5jZV9hY2tfdHJpZ2dlcik7DQo+ ICsNCj4gKwl4ZV9ldWRlYnVnX3Nlc3Npb25fcnVuKHMpOw0KPiArDQo+ICsJeGVfZXVkZWJ1Z19z ZXNzaW9uX2Rlc3Ryb3kocyk7DQo+ICsJb25saW5lX2RlYnVnX2RhdGFfZGVzdHJveShkYXRhKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBTVUJURVNUOiB3cml0ZXMtY2FjaGluZy0lcw0KPiAr ICogRGVzY3JpcHRpb246DQo+ICsgKglXcml0ZSBpbmNyZW1lbnRpbmcgdmFsdWVzIHRvIDItcGFn ZS1sb25nIHRhcmdldCBzdXJmYWNlLCBwb2lzb25pbmcgdGhlIGRhdGEgb25lIGJyZWFrcG9pbnQN Cj4gKyAqCWJlZm9yZSBlYWNoIHdyaXRlIGluc3RydWN0aW9uIGFuZCByZXN0b3JpbmcgaXQgd2hl biB0aGUgcG9pc29uZWQgaW5zdHJ1Y3Rpb24gYnJlYWtwb2ludA0KPiArICoJaXMgaGl0LiBFeHBl Y3QgdG8gbmV2ZXIgc2VlIHBvaXNvbiB2YWx1ZXMgaW4gdGFyZ2V0IHN1cmZhY2UuDQo+ICsgKg0K PiArICoNCj4gKyAqIGFyZ1sxXToNCj4gKyAqDQo+ICsgKiBAc3JhbToJVXNlIHBhZ2Ugc2l6ZSBv ZiBTUkFNDQo+ICsgKiBAdnJhbToJVXNlIHBhZ2Ugc2l6ZSBvZiBWUkFNDQo+ICsgKi8NCj4gK3N0 YXRpYyB2b2lkIHRlc3RfY2FjaGluZyhpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNz X2luc3RhbmNlICpod2UsIGludCBmbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZXVkZWJ1Z19z ZXNzaW9uICpzOw0KPiArCXN0cnVjdCBvbmxpbmVfZGVidWdfZGF0YSAqZGF0YTsNCj4gKw0KPiAr CWlmIChmbGFncyAmIFNIQURFUl9DQUNISU5HX1ZSQU0pDQo+ICsJCWlndF9za2lwX29uX2YoIXhl X2hhc192cmFtKGZkKSwgIkRldmljZSBkb2VzIG5vdCBoYXZlIFZSQU0uXG4iKTsNCj4gKw0KPiAr CWRhdGEgPSBvbmxpbmVfZGVidWdfZGF0YV9jcmVhdGUoaHdlKTsNCj4gKwlzID0geGVfZXVkZWJ1 Z19zZXNzaW9uX2NyZWF0ZShmZCwgcnVuX29ubGluZV9jbGllbnQsIGZsYWdzLCBkYXRhKTsNCj4g Kw0KPiArCXhlX2V1ZGVidWdfZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVC VUdfRVZFTlRfT1BFTiwNCj4gKwkJCQkJb3Blbl90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2Rl YnVnZ2VyX2FkZF90cmlnZ2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElP TiwNCj4gKwkJCQkJZXVfYXR0ZW50aW9uX2RlYnVnX3RyaWdnZXIpOw0KPiArCXhlX2V1ZGVidWdf ZGVidWdnZXJfYWRkX3RyaWdnZXIocy0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVVfQVRURU5U SU9OLA0KPiArCQkJCQlldV9hdHRlbnRpb25fcmVzdW1lX2NhY2hpbmdfdHJpZ2dlcik7DQo+ICsJ eGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihzLT5kLCBEUk1fWEVfRVVERUJVR19FVkVO VF9WTSwgdm1fb3Blbl90cmlnZ2VyKTsNCj4gKwl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmln Z2VyKHMtPmQsIERSTV9YRV9FVURFQlVHX0VWRU5UX01FVEFEQVRBLA0KPiArCQkJCQljcmVhdGVf bWV0YWRhdGFfdHJpZ2dlcik7DQo+ICsJeGVfZXVkZWJ1Z19kZWJ1Z2dlcl9hZGRfdHJpZ2dlcihz LT5kLCBEUk1fWEVfRVVERUJVR19FVkVOVF9WTV9CSU5EX1VGRU5DRSwNCj4gKwkJCQkJdWZlbmNl X2Fja190cmlnZ2VyKTsNCj4gKw0KPiArCXhlX2V1ZGVidWdfc2Vzc2lvbl9ydW4ocyk7DQo+ICsJ b25saW5lX3Nlc3Npb25fY2hlY2socywgcy0+ZmxhZ3MpOw0KPiArCXhlX2V1ZGVidWdfc2Vzc2lv bl9kZXN0cm95KHMpOw0KPiArCW9ubGluZV9kZWJ1Z19kYXRhX2Rlc3Ryb3koZGF0YSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbnQgd2FpdF9mb3JfZXhjZXB0aW9uKHN0cnVjdCBvbmxpbmVfZGVi dWdfZGF0YSAqZGF0YSwgaW50IHRpbWVvdXQpDQo+ICt7DQo+ICsJaW50IHJldCA9IC1FVElNRURP VVQ7DQo+ICsNCj4gKwlpZ3RfZm9yX21pbGxpc2Vjb25kcyh0aW1lb3V0KSB7DQo+ICsJCXB0aHJl YWRfbXV0ZXhfbG9jaygmZGF0YS0+bXV0ZXgpOw0KPiArCQlpZiAoKGRhdGEtPmV4Y2VwdGlvbl9h cnJpdmVkLnR2X3NlYyB8DQo+ICsJCSAgICAgZGF0YS0+ZXhjZXB0aW9uX2Fycml2ZWQudHZfbnNl YykgIT0gMCkNCj4gKwkJCXJldCA9IDA7DQo+ICsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkYXRh LT5tdXRleCk7DQo+ICsNCj4gKwkJaWYgKCFyZXQpDQo+ICsJCQlicmVhazsNCj4gKwkJdXNsZWVw KDEwMDApOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gKyNkZWZp bmUgaXNfY29tcHV0ZV9vbl9ndChfX2UsIF9fZ3QpICgoX19lLT5lbmdpbmVfY2xhc3MgPT0gRFJN X1hFX0VOR0lORV9DTEFTU19SRU5ERVIgfHwgXA0KPiArCQkJCSAgICAgIF9fZS0+ZW5naW5lX2Ns YXNzID09IERSTV9YRV9FTkdJTkVfQ0xBU1NfQ09NUFVURSkgJiYgXA0KPiArCQkJCSAgICAgIF9f ZS0+Z3RfaWQgPT0gX19ndCkNCj4gKw0KPiArc3RydWN0IHhlX2VuZ2luZV9saXN0X2VudHJ5IHsN Cj4gKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBsaW5rOw0KPiArCXN0cnVjdCBkcm1feGVfZW5naW5l X2NsYXNzX2luc3RhbmNlICpod2U7DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lIE1BWF9USUxFUwky DQo+ICtzdGF0aWMgaW50IGZpbmRfc3VpdGFibGVfZW5naW5lcyhzdHJ1Y3QgZHJtX3hlX2VuZ2lu ZV9jbGFzc19pbnN0YW5jZSAqaHdlc1tHRU1fTUFYX0VOR0lORVNdLA0KPiArCQkJCSBpbnQgZmQs IGJvb2wgbWFueV90aWxlcykNCj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZGV2aWNlICp4ZV9kZXY7DQo+ ICsJc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmU7DQo+ICsJc3RydWN0IHhl X2VuZ2luZV9saXN0X2VudHJ5ICplbiwgKnRtcDsNCj4gKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBj b21wdXRlX2VuZ2luZXNbTUFYX1RJTEVTXTsNCj4gKwlpbnQgZ3RfaWQ7DQo+ICsJaW50IHRpbGVf aWQsIGksIGVuZ2luZV9jb3VudCA9IDAsIHRpbGVfY291bnQgPSAwOw0KPiArDQo+ICsJeGVfZGV2 ID0geGVfZGV2aWNlX2dldChmZCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1RJTEVT OyBpKyspDQo+ICsJCUlHVF9JTklUX0xJU1RfSEVBRCgmY29tcHV0ZV9lbmdpbmVzW2ldKTsNCj4g Kw0KPiArCXhlX2Zvcl9lYWNoX2d0KGZkLCBndF9pZCkgew0KPiArCQl4ZV9mb3JfZWFjaF9lbmdp bmUoZmQsIGUpIHsNCj4gKwkJCWlmIChpc19jb21wdXRlX29uX2d0KGUsIGd0X2lkKSkgew0KPiAr CQkJCXRpbGVfaWQgPSB4ZV9kZXYtPmd0X2xpc3QtPmd0X2xpc3RbZ3RfaWRdLnRpbGVfaWQ7DQo+ ICsNCj4gKwkJCQllbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHhlX2VuZ2luZV9saXN0X2VudHJ5 KSk7DQo+ICsJCQkJZW4tPmh3ZSA9IGU7DQo+ICsNCj4gKwkJCQlpZ3RfbGlzdF9hZGRfdGFpbCgm ZW4tPmxpbmssICZjb21wdXRlX2VuZ2luZXNbdGlsZV9pZF0pOw0KPiArCQkJfQ0KPiArCQl9DQo+ ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IE1BWF9USUxFUzsgaSsrKSB7DQo+ICsJCWlm IChpZ3RfbGlzdF9lbXB0eSgmY29tcHV0ZV9lbmdpbmVzW2ldKSkNCj4gKwkJCWNvbnRpbnVlOw0K PiArDQo+ICsJCWlmIChtYW55X3RpbGVzKSB7DQo+ICsJCQllbiA9IGlndF9saXN0X2ZpcnN0X2Vu dHJ5KCZjb21wdXRlX2VuZ2luZXNbaV0sIGVuLCBsaW5rKTsNCj4gKwkJCWh3ZXNbZW5naW5lX2Nv dW50KytdID0gZW4tPmh3ZTsNCj4gKwkJCXRpbGVfY291bnQrKzsNCj4gKwkJfSBlbHNlIHsNCj4g KwkJCWlmIChpZ3RfbGlzdF9sZW5ndGgoJmNvbXB1dGVfZW5naW5lc1tpXSkgPiAxKSB7DQo+ICsJ CQkJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkoZW4sICZjb21wdXRlX2VuZ2luZXNbaV0sIGxpbmsp DQo+ICsJCQkJCWh3ZXNbZW5naW5lX2NvdW50KytdID0gZW4tPmh3ZTsNCj4gKwkJCQlicmVhazsN Cj4gKwkJCX0NCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBNQVhfVElM RVM7IGkrKykgew0KPiArCQlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVuLCB0bXAsICZj b21wdXRlX2VuZ2luZXNbaV0sIGxpbmspIHsNCj4gKwkJCWlndF9saXN0X2RlbCgmZW4tPmxpbmsp Ow0KPiArCQkJZnJlZShlbik7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAobWFueV90aWxl cykNCj4gKwkJaWd0X3JlcXVpcmVfZih0aWxlX2NvdW50ID4gMSwgIk11bGl0LXRpbGUgc2NlbmFy aW8gcmVxdWlyZXMgbW9yZSB0aWxlc1xuIik7DQo+ICsNCj4gKwlyZXR1cm4gZW5naW5lX2NvdW50 Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFNVQlRFU1Q6IGJyZWFrcG9pbnQtbWFueS1zZXNz aW9ucy1zaW5nbGUtdGlsZQ0KPiArICogRGVzY3JpcHRpb246DQo+ICsgKglTY2hlZHVsZXMgRVUg d29ya2xvYWQgd2l0aCBwcmVpbnN0YWxsZWQgYnJlYWtwb2ludCBvbiBldmVyeSBjb21wdXRlIGVu Z2luZQ0KPiArICoJYXZhaWxhYmxlIG9uIHRoZSB0aWxlLiBDaGVja3MgaWYgdGhlIGNvbnRleHRz IGhpdCBicmVha3BvaW50IGluIHNlcXVlbmNlDQo+ICsgKglhbmQgcmVzdW1lcyB0aGVtLg0KPiAr ICoNCj4gKyAqIFNVQlRFU1Q6IGJyZWFrcG9pbnQtbWFueS1zZXNzaW9ucy10aWxlcw0KPiArICog RGVzY3JpcHRpb246DQo+ICsgKglTY2hlZHVsZXMgRVUgd29ya2xvYWQgd2l0aCBwcmVpbnN0YWxs ZWQgYnJlYWtwb2ludCBvbiBzZWxlY3RlZCBjb21wdXRlDQo+ICsgKiAgICAgIGVuZ2luZXMsIHdp dGggb25lIHBlciB0aWxlLiBDaGVja3MgaWYgZWFjaCBjb250ZXh0IGhpdCBicmVha3BvaW50IGFu ZA0KPiArICogICAgICByZXN1bWVzIHRoZW0uDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3Rf bWFueV9zZXNzaW9uc19vbl90aWxlcyhpbnQgZmQsIGJvb2wgbXVsdGlfdGlsZSkNCj4gK3sNCj4g KwlpbnQgbiA9IDAsIGZsYWdzID0gU0hBREVSX0JSRUFLUE9JTlQgfCBTSEFERVJfTUlOX1RIUkVB RFM7DQo+ICsJc3RydWN0IHhlX2V1ZGVidWdfc2Vzc2lvbiAqc1tHRU1fTUFYX0VOR0lORVNdID0g e307DQo+ICsJc3RydWN0IG9ubGluZV9kZWJ1Z19kYXRhICpkYXRhW0dFTV9NQVhfRU5HSU5FU10g PSB7fTsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqaHdlW0dFTV9N QVhfRU5HSU5FU10gPSB7fTsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXVfYXR0 ZW50aW9uICpldXM7DQo+ICsJdWludDY0X3QgY3VycmVudF90LCBuZXh0X3QsIGRpZmY7DQo+ICsJ aW50IGk7DQo+ICsNCj4gKwluID0gZmluZF9zdWl0YWJsZV9lbmdpbmVzKGh3ZSwgZmQsIG11bHRp X3RpbGUpOw0KPiArDQo+ICsJaWd0X3JlcXVpcmVfZihuID4gMSwgIlRlc3QgcmVxdWlyZXMgYXQg bGVhc3QgdHdvIHBhcmFsbGVsIGNvbXB1dGUgZW5naW5lcyFcbiIpOw0KPiArDQo+ICsJZm9yIChp ID0gMDsgaSA8IG47IGkrKykgew0KPiArCQlkYXRhW2ldID0gb25saW5lX2RlYnVnX2RhdGFfY3Jl YXRlKGh3ZVtpXSk7DQo+ICsJCXNbaV0gPSB4ZV9ldWRlYnVnX3Nlc3Npb25fY3JlYXRlKGZkLCBy dW5fb25saW5lX2NsaWVudCwgZmxhZ3MsIGRhdGFbaV0pOw0KPiArDQo+ICsJCXhlX2V1ZGVidWdf ZGVidWdnZXJfYWRkX3RyaWdnZXIoc1tpXS0+ZCwgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVVfQVRU RU5USU9OLA0KPiArCQkJCQkJZXVfYXR0ZW50aW9uX2RlYnVnX3RyaWdnZXIpOw0KPiArCQl4ZV9l dWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHNbaV0tPmQsIERSTV9YRV9FVURFQlVHX0VWRU5U X0VVX0FUVEVOVElPTiwNCj4gKwkJCQkJCXNhdmVfZmlyc3RfZXhjZXB0aW9uX3RyaWdnZXIpOw0K PiArCQl4ZV9ldWRlYnVnX2RlYnVnZ2VyX2FkZF90cmlnZ2VyKHNbaV0tPmQsIERSTV9YRV9FVURF QlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFLA0KPiArCQkJCQkJdWZlbmNlX2Fja190cmlnZ2VyKTsN Cj4gKw0KPiArCQlpZ3RfYXNzZXJ0X2VxKHhlX2V1ZGVidWdfZGVidWdnZXJfYXR0YWNoKHNbaV0t PmQsIHNbaV0tPmMpLCAwKTsNCj4gKw0KPiArCQl4ZV9ldWRlYnVnX2RlYnVnZ2VyX3N0YXJ0X3dv cmtlcihzW2ldLT5kKTsNCj4gKwkJeGVfZXVkZWJ1Z19jbGllbnRfc3RhcnQoc1tpXS0+Yyk7DQo+ ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KPiArCQkvKiBYWFg6IFNv bWV0aW1lcyByYWN5LCBleHBlY3RzIGNsaWVudHMgdG8gZXhlY3V0ZSBpbiBzZXF1ZW5jZSAqLw0K PiArCQlpZ3RfYXNzZXJ0KCF3YWl0X2Zvcl9leGNlcHRpb24oZGF0YVtpXSwgU1RBUlRVUF9USU1F T1VUX01TKSk7DQo+ICsNCj4gKwkJZXVzID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9l dV9hdHRlbnRpb24gKilkYXRhW2ldLT5leGNlcHRpb25fZXZlbnQ7DQo+ICsNCj4gKwkJLyogRGVs YXkgYWxsIGJ1dCB0aGUgbGFzdCB3b3JrbG9hZCB0byBjaGVjayBzZXJpYWxpemF0aW9uICovDQo+ ICsJCWlmIChpIDwgbiAtIDEpDQo+ICsJCQl1c2xlZXAoV09SS0xPQURfREVMQVlfVVMpOw0KPiAr DQo+ICsJCWV1X2N0bF9yZXN1bWUoc1tpXS0+ZC0+bWFzdGVyX2ZkLCBzW2ldLT5kLT5mZCwNCj4g KwkJCSAgICAgIGV1cy0+Y2xpZW50X2hhbmRsZSwgZXVzLT5leGVjX3F1ZXVlX2hhbmRsZSwNCj4g KwkJCSAgICAgIGV1cy0+bHJjX2hhbmRsZSwgZXVzLT5iaXRtYXNrLCBldXMtPmJpdG1hc2tfc2l6 ZSk7DQo+ICsJCWZyZWUoZXVzKTsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbiAt IDE7IGkrKykgew0KPiArCQkvKiBDb252ZXJ0IHRpbWVzdGFtcHMgdG8gbWljcm9zZWNvbmRzICov DQo+ICsJCWN1cnJlbnRfdCA9IGRhdGFbaV0tPmV4Y2VwdGlvbl9hcnJpdmVkLnR2X25zZWMgKiAx MDAwOw0KPiArCQluZXh0X3QgPSBkYXRhW2kgKyAxXS0+ZXhjZXB0aW9uX2Fycml2ZWQudHZfbnNl YyAqIDEwMDA7DQo+ICsJCWRpZmYgPSBjdXJyZW50X3QgPCBuZXh0X3QgPyBuZXh0X3QgLSBjdXJy ZW50X3QgOiBjdXJyZW50X3QgLSBuZXh0X3Q7DQo+ICsNCj4gKwkJaWYgKG11bHRpX3RpbGUpDQo+ ICsJCQlpZ3RfYXNzZXJ0X2YoZGlmZiA8IFdPUktMT0FEX0RFTEFZX1VTLA0KPiArCQkJCSAgICAg IkV4cGVjdGVkIHRvIGV4ZWN1dGUgd29ya2xvYWRzIGNvbmN1cnJlbnRseS4gQWN0dWFsIGRlbGF5 OiAlbHUgbXNcbiIsDQo+ICsJCQkJICAgICBkaWZmKTsNCj4gKwkJZWxzZQ0KPiArCQkJaWd0X2Fz c2VydF9mKGRpZmYgPj0gV09SS0xPQURfREVMQVlfVVMsDQo+ICsJCQkJICAgICAiRXhwZWN0ZWQg YSBzZXJpYWxpemF0aW9uIG9mIHdvcmtsb2Fkcy4gQWN0dWFsIGRlbGF5OiAlbHUgbXNcbiIsDQo+ ICsJCQkJICAgICBkaWZmKTsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7DQo+ICsJCXhlX2V1ZGVidWdfY2xpZW50X3dhaXRfZG9uZShzW2ldLT5jKTsNCj4gKwkJeGVf ZXVkZWJ1Z19kZWJ1Z2dlcl9zdG9wX3dvcmtlcihzW2ldLT5kLCAxKTsNCj4gKw0KPiArCQl4ZV9l dWRlYnVnX2V2ZW50X2xvZ19wcmludChzW2ldLT5kLT5sb2csIHRydWUpOw0KPiArCQlvbmxpbmVf c2Vzc2lvbl9jaGVjayhzW2ldLCBmbGFncyk7DQo+ICsNCj4gKwkJeGVfZXVkZWJ1Z19zZXNzaW9u X2Rlc3Ryb3koc1tpXSk7DQo+ICsJCW9ubGluZV9kZWJ1Z19kYXRhX2Rlc3Ryb3koZGF0YVtpXSk7 DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3Nf aW5zdGFuY2UgKnBpY2tfY29tcHV0ZShpbnQgZmQsIGludCBndCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqaHdlOw0KPiArCWludCBjb3VudCA9IDA7DQo+ ICsNCj4gKwl4ZV9mb3JfZWFjaF9lbmdpbmUoZmQsIGh3ZSkNCj4gKwkJaWYgKGlzX2NvbXB1dGVf b25fZ3QoaHdlLCBndCkpDQo+ICsJCQljb3VudCsrOw0KPiArDQo+ICsJeGVfZm9yX2VhY2hfZW5n aW5lKGZkLCBod2UpDQo+ICsJCWlmIChpc19jb21wdXRlX29uX2d0KGh3ZSwgZ3QpICYmIHJhbmQo KSAlIGNvdW50LS0gPT0gMCkNCj4gKwkJCXJldHVybiBod2U7DQo+ICsNCj4gKwlyZXR1cm4gTlVM TDsNCj4gK30NCj4gKw0KPiArI2RlZmluZSB0ZXN0X2d0X3JlbmRlcl9vcl9jb21wdXRlKHQsIGk5 MTUsIF9faHdlKSBcDQo+ICsJaWd0X3N1YnRlc3Rfd2l0aF9keW5hbWljKHQpIFwNCj4gKwkJZm9y IChpbnQgZ3QgPSAwOyAoX19od2UgPSBwaWNrX2NvbXB1dGUoaTkxNSwgZ3QpKTsgZ3QrKykgXA0K PiArCQkJaWd0X2R5bmFtaWNfZigiJXMlZCIsIHhlX2VuZ2luZV9jbGFzc19zdHJpbmcoX19od2Ut PmVuZ2luZV9jbGFzcyksIGh3ZS0+ZW5naW5lX2luc3RhbmNlKQ0KPiArDQo+ICtpZ3RfbWFpbg0K PiArew0KPiArCXN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2U7DQo+ICsJ Ym9vbCB3YXNfZW5hYmxlZDsNCj4gKwlpbnQgZmQ7DQo+ICsNCj4gKwlpZ3RfZml4dHVyZSB7DQo+ ICsJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9YRSk7DQo+ICsJCWludGVsX2FsbG9jYXRv cl9tdWx0aXByb2Nlc3Nfc3RhcnQoKTsNCj4gKwkJaWd0X3NyYW5kb20oKTsNCj4gKwkJd2FzX2Vu YWJsZWQgPSB4ZV9ldWRlYnVnX2VuYWJsZShmZCwgdHJ1ZSk7DQo+ICsJfQ0KPiArDQo+ICsJdGVz dF9ndF9yZW5kZXJfb3JfY29tcHV0ZSgiYmFzaWMtYnJlYWtwb2ludCIsIGZkLCBod2UpDQo+ICsJ CXRlc3RfYmFzaWNfb25saW5lKGZkLCBod2UsIFNIQURFUl9CUkVBS1BPSU5UKTsNCj4gKw0KPiAr CXRlc3RfZ3RfcmVuZGVyX29yX2NvbXB1dGUoInByZWVtcHQtYnJlYWtwb2ludCIsIGZkLCBod2Up DQo+ICsJCXRlc3RfcHJlZW1wdGlvbihmZCwgaHdlKTsNCj4gKw0KPiArCXRlc3RfZ3RfcmVuZGVy X29yX2NvbXB1dGUoImJyZWFrcG9pbnQtbm90LWluLWRlYnVnLW1vZGUiLCBmZCwgaHdlKQ0KPiAr CQl0ZXN0X2Jhc2ljX29ubGluZShmZCwgaHdlLCBTSEFERVJfQlJFQUtQT0lOVCB8IERJU0FCTEVf REVCVUdfTU9ERSk7DQo+ICsNCj4gKwl0ZXN0X2d0X3JlbmRlcl9vcl9jb21wdXRlKCJzdG9wcGVk LXRocmVhZCIsIGZkLCBod2UpDQo+ICsJCXRlc3RfYmFzaWNfb25saW5lKGZkLCBod2UsIFNIQURF Ul9CUkVBS1BPSU5UIHwgVFJJR0dFUl9SRVNVTUVfREVMQVlFRCk7DQo+ICsNCj4gKwl0ZXN0X2d0 X3JlbmRlcl9vcl9jb21wdXRlKCJyZXN1bWUtb25lIiwgZmQsIGh3ZSkNCj4gKwkJdGVzdF9iYXNp Y19vbmxpbmUoZmQsIGh3ZSwgU0hBREVSX0JSRUFLUE9JTlQgfCBUUklHR0VSX1JFU1VNRV9PTkUp Ow0KPiArDQo+ICsJdGVzdF9ndF9yZW5kZXJfb3JfY29tcHV0ZSgicmVzdW1lLWRzcyIsIGZkLCBo d2UpDQo+ICsJCXRlc3RfYmFzaWNfb25saW5lKGZkLCBod2UsIFNIQURFUl9CUkVBS1BPSU5UIHwg VFJJR0dFUl9SRVNVTUVfRFNTKTsNCj4gKw0KPiArCXRlc3RfZ3RfcmVuZGVyX29yX2NvbXB1dGUo ImludGVycnVwdC1hbGwiLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X2ludGVycnVwdF9hbGwoZmQsIGh3 ZSwgU0hBREVSX0xPT1ApOw0KPiArDQo+ICsJdGVzdF9ndF9yZW5kZXJfb3JfY29tcHV0ZSgiaW50 ZXJydXB0LW90aGVyLWRlYnVnZ2FibGUiLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X2ludGVycnVwdF9v dGhlcihmZCwgaHdlLCBTSEFERVJfTE9PUCk7DQo+ICsNCj4gKwl0ZXN0X2d0X3JlbmRlcl9vcl9j b21wdXRlKCJpbnRlcnJ1cHQtb3RoZXIiLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X2ludGVycnVwdF9v dGhlcihmZCwgaHdlLCBTSEFERVJfTE9PUCB8IERJU0FCTEVfREVCVUdfTU9ERSk7DQo+ICsNCj4g Kwl0ZXN0X2d0X3JlbmRlcl9vcl9jb21wdXRlKCJpbnRlcnJ1cHQtYWxsLXNldC1icmVha3BvaW50 IiwgZmQsIGh3ZSkNCj4gKwkJdGVzdF9pbnRlcnJ1cHRfYWxsKGZkLCBod2UsIFNIQURFUl9MT09Q IHwgVFJJR0dFUl9SRVNVTUVfU0VUX0JQKTsNCj4gKw0KPiArCXRlc3RfZ3RfcmVuZGVyX29yX2Nv bXB1dGUoInRkY3RsLXBhcmFtZXRlcnMiLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X3RkY3RsX3BhcmFt ZXRlcnMoZmQsIGh3ZSwgU0hBREVSX0xPT1ApOw0KPiArDQo+ICsJdGVzdF9ndF9yZW5kZXJfb3Jf Y29tcHV0ZSgicmVzZXQtd2l0aC1hdHRlbnRpb24iLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X3Jlc2V0 X3dpdGhfYXR0ZW50aW9uX29ubGluZShmZCwgaHdlLCBTSEFERVJfQlJFQUtQT0lOVCk7DQo+ICsN Cj4gKwl0ZXN0X2d0X3JlbmRlcl9vcl9jb21wdXRlKCJpbnRlcnJ1cHQtcmVjb25uZWN0IiwgZmQs IGh3ZSkNCj4gKwkJdGVzdF9pbnRlcnJ1cHRfcmVjb25uZWN0KGZkLCBod2UsIFNIQURFUl9MT09Q IHwgVFJJR0dFUl9SRUNPTk5FQ1QpOw0KPiArDQo+ICsJdGVzdF9ndF9yZW5kZXJfb3JfY29tcHV0 ZSgic2luZ2xlLXN0ZXAiLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X3NpbmdsZV9zdGVwKGZkLCBod2Us IFNIQURFUl9TSU5HTEVfU1RFUCB8IFNJUF9TSU5HTEVfU1RFUCB8DQo+ICsJCQkJIFRSSUdHRVJf UkVTVU1FX1BBUkFMTEVMX1dBTEspOw0KPiArDQo+ICsJdGVzdF9ndF9yZW5kZXJfb3JfY29tcHV0 ZSgic2luZ2xlLXN0ZXAtb25lIiwgZmQsIGh3ZSkNCj4gKwkJdGVzdF9zaW5nbGVfc3RlcChmZCwg aHdlLCBTSEFERVJfU0lOR0xFX1NURVAgfCBTSVBfU0lOR0xFX1NURVAgfA0KPiArCQkJCSBUUklH R0VSX1JFU1VNRV9TSU5HTEVfV0FMSyk7DQo+ICsNCj4gKwl0ZXN0X2d0X3JlbmRlcl9vcl9jb21w dXRlKCJkZWJ1Z2dlci1yZW9wZW4iLCBmZCwgaHdlKQ0KPiArCQl0ZXN0X2RlYnVnZ2VyX3Jlb3Bl bihmZCwgaHdlLCBTSEFERVJfTl9OT09QX0JSRUFLUE9JTlQpOw0KPiArDQo+ICsJdGVzdF9ndF9y ZW5kZXJfb3JfY29tcHV0ZSgid3JpdGVzLWNhY2hpbmctc3JhbSIsIGZkLCBod2UpDQo+ICsJCXRl c3RfY2FjaGluZyhmZCwgaHdlLCBTSEFERVJfQ0FDSElOR19TUkFNKTsNCj4gKw0KPiArCXRlc3Rf Z3RfcmVuZGVyX29yX2NvbXB1dGUoIndyaXRlcy1jYWNoaW5nLXZyYW0iLCBmZCwgaHdlKQ0KPiAr CQl0ZXN0X2NhY2hpbmcoZmQsIGh3ZSwgU0hBREVSX0NBQ0hJTkdfVlJBTSk7DQo+ICsNCj4gKwlp Z3Rfc3VidGVzdCgiYnJlYWtwb2ludC1tYW55LXNlc3Npb25zLXNpbmdsZS10aWxlIikNCj4gKwkJ dGVzdF9tYW55X3Nlc3Npb25zX29uX3RpbGVzKGZkLCBmYWxzZSk7DQo+ICsNCj4gKwlpZ3Rfc3Vi dGVzdCgiYnJlYWtwb2ludC1tYW55LXNlc3Npb25zLXRpbGVzIikNCj4gKwkJdGVzdF9tYW55X3Nl c3Npb25zX29uX3RpbGVzKGZkLCB0cnVlKTsNCj4gKw0KPiArCWlndF9maXh0dXJlIHsNCj4gKwkJ eGVfZXVkZWJ1Z19lbmFibGUoZmQsIHdhc19lbmFibGVkKTsNCj4gKw0KPiArCQlpbnRlbF9hbGxv Y2F0b3JfbXVsdGlwcm9jZXNzX3N0b3AoKTsNCj4gKwkJZHJtX2Nsb3NlX2RyaXZlcihmZCk7DQo+ ICsJfQ0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNv bi5idWlsZA0KPiBpbmRleCAzNWJmOGVkMzUuLmYxOGVlYzdlNyAxMDA2NDQNCj4gLS0tIGEvdGVz dHMvbWVzb24uYnVpbGQNCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQNCj4gQEAgLTI4MCw2ICsy ODAsNyBAQCBpbnRlbF94ZV9wcm9ncyA9IFsNCj4gIAkneGVfZGVidWdmcycsDQo+ICAJJ3hlX2Ry bV9mZGluZm8nLA0KPiAgCSd4ZV9ldWRlYnVnJywNCj4gKwkneGVfZXVkZWJ1Z19vbmxpbmUnLA0K PiAgCSd4ZV9ldmljdCcsDQo+ICAJJ3hlX2V2aWN0X2NjcycsDQo+ICAJJ3hlX2V4ZWNfYXRvbWlj JywNCg0K