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 761FFC7115D for ; Thu, 29 Aug 2024 04:26:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E9BDE10E00B; Thu, 29 Aug 2024 04:26:57 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="ONS0A25h"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4E6D410E00B for ; Thu, 29 Aug 2024 04:26:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724905616; x=1756441616; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=W9PSEvQR83uzyPYAdRxN94DoMw3/YUTVDJcCWANZ6FU=; b=ONS0A25hKm+hVjKmDeotnIhW7H0hHRGLBpcTcaIrJ32XWC7hM8+RVrW5 uzmNmT4PPbaFAyYnfGMrihPM4X6QVpgHvD8IvJIHFKDNfooASsumwcUZM jBS29T7nqBkPF3lbx+y7law9LqYEhwKXyybIx9etOMShTxqdFiakaV/HE vspLmglhUZu8Jq1TH2byJeGBV0DftdEAc2OKXQBbu2pzBYhiaw8Qo6vHH ywPnE0dFnICVbEt9il9qvPd3G2uI70femz8benx0RKwKGalIEJBVAJ1Ub TgaP4VQ2seZ219weqxoHU65eogh0bbYyljSQrur8Mcs2tBOMZ6dxbVy0O w==; X-CSE-ConnectionGUID: F3tOmy3wT7C9XMLTKdMLNA== X-CSE-MsgGUID: EM7xZ4x6Rg2AYaQrICRRHQ== X-IronPort-AV: E=McAfee;i="6700,10204,11178"; a="27235908" X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="27235908" Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa107.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Aug 2024 21:26:56 -0700 X-CSE-ConnectionGUID: PL/Ta5JtTKyP0Hjx6LBudw== X-CSE-MsgGUID: +q/DfgZgRbiCEwRFPULHvg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,184,1719903600"; d="scan'208";a="68278718" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orviesa005.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 28 Aug 2024 21:26:56 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 Aug 2024 21:26:55 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 28 Aug 2024 21:26:55 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Wed, 28 Aug 2024 21:26:55 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.100) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 28 Aug 2024 21:26:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NqXQD9MgN/StPKtdhKalA2JA4NjuucyQ5Xr+rmpOasqGA4a/Mt2xXYibR6E/AUlaDqq4o8mYNeyPUEvIusXZwzeTXUpW5qe6AdTVl1eSJxg23GelWt9lfvIzS6A0IUWUyQ1A+XmmD/ckz89SfpKaagWNOlIPyr5EE3EQP7WYs21teGwo5uehr3OPY+ZQtQIC7gRjYJrkI5wWUVzdEtIKrMt504TaQR+3MlT4gHvlspI+c/v3DSvzogFPl1dhHWHD6Ux20zjBCdQgeiwZX4FN48Csgmw11QPjTEazqsycUdgzyilaiWUozI/oBDbFKrP2nNv05YkDMKlZUFiifVq6mg== 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=W9PSEvQR83uzyPYAdRxN94DoMw3/YUTVDJcCWANZ6FU=; b=cZPeXEofXJRuQyuUF5fU5i9zoNl+9NMdC0rpcdJUSCYyABJcE1jB3fjUBluQQYAzyd5/TNkoNGJV88qcWq3Lv96nVNTyn9fA6j/Ka/+h8XsvMZPBdB41LGhEwZieG39QUzN4EXVD7x8nFL5dyWo8sPVQ0MzFrhRpWrjnesv/ksAl5x1yT8/AtQv+tZQhoQKfz8812jDAi8UaUfjJe9JVTuG/WX2Uil7e9GNmmIwbIYm8kIz45EaHYsH3cGsEr9dwo6CsA37weZJqkUcuRdRlKdSa2903jk0S5FNXVvYuX4ygjmqlVrxEsxyMgA0DohFl+m3J+67udlDlHQgH6ItJoQ== 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 DM8PR11MB5751.namprd11.prod.outlook.com (2603:10b6:8:12::16) by MW6PR11MB8312.namprd11.prod.outlook.com (2603:10b6:303:242::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7897.25; Thu, 29 Aug 2024 04:26:52 +0000 Received: from DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842]) by DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842%5]) with mapi id 15.20.7897.027; Thu, 29 Aug 2024 04:26:52 +0000 From: "Teres Alexis, Alan Previn" To: "Dong, Zhanjun" , "intel-xe@lists.freedesktop.org" Subject: Re: [PATCH v17 7/7] drm/xe/guc: Plumb GuC-capture into dev coredump Thread-Topic: [PATCH v17 7/7] drm/xe/guc: Plumb GuC-capture into dev coredump Thread-Index: AQHa+MrQ0nfB/vVRgUWq1BFvnFKDm7I9pb6A Date: Thu, 29 Aug 2024 04:26:51 +0000 Message-ID: <7cd59281aa8e2b1851058866a22b14ec9320ecc2.camel@intel.com> References: <20240827214726.1183935-1-zhanjun.dong@intel.com> <20240827214726.1183935-8-zhanjun.dong@intel.com> In-Reply-To: <20240827214726.1183935-8-zhanjun.dong@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 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: DM8PR11MB5751:EE_|MW6PR11MB8312:EE_ x-ms-office365-filtering-correlation-id: 24754f03-abc5-428c-9931-08dcc7e2ce81 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?Ujl2bXFVandRSkJMSWZaU1Bsb2ZyV25CODBCZkhRbVZsMEVhaXQ5aGdkTENv?= =?utf-8?B?eWtuRWY4bVFjNFNpSU1xQTVlQUlpcDFTTXZ3a3FFQm5TRGVJRXNsSzJnMkdu?= =?utf-8?B?L2dwempzaW40aVhGaFY1NHUxOFBBMDY2cGIwbUx3Z1daSWdCTWovTCt4MWlj?= =?utf-8?B?VExoVXdydStoOWtOZlVBalRKR0dDWU1URkNlT2FmanMwcVBnT3ZnRFFwMjNm?= =?utf-8?B?aEdYOTM1aHdudUU2MHZpQjFTVVFTSFlya3pnYmtjcXFJUkpRb2wrQ2NzcDV4?= =?utf-8?B?MVlKVDh3SzR2YTVNQkducVNXenlFSkQxa1ZpaFkrZ0ZOWFFzTGhtT04wb3Jr?= =?utf-8?B?VldNRlBsWUxiUnVHOG1LaHRTSlVpaGJseVZsYVVGc3piOWJ5T0NFWFlGS0Fu?= =?utf-8?B?TnYxdlN3RGl2RmhIeHRoN01iVlQ3dmk2TzJvN1hmSnlMd2dlWUdON2ZwU0Ju?= =?utf-8?B?UzJLT2JTUS8xaEx5WXVSb09pSkZwUW1TWUYvZ0JFSC95MUFrbitxZW9rV0ZB?= =?utf-8?B?YnBTbitoanc1b3pDWGVleXJVYm9rWWUwbUtIcWZBcE4yY2p1U0lyN0xwbVlj?= =?utf-8?B?MS9WVm0vU2I0ZjZuQVVSVklOYmdGQk5zd2p4UVhGeTE5NVpYT2ZzRngxeEVJ?= =?utf-8?B?Y2pCWVduc2NCSENMaElrdXpaMGRwamNJTDA3OUtIMzdlbjBEZmRrTFgvRWpw?= =?utf-8?B?Njg1RVRCU015c2NYR1dwVXg3VGpBaWJRRnpMekI5MEVJK3NXNnZ5VkhYY1pZ?= =?utf-8?B?LzFtUlRFRjh6MStxNDd2RzZUSXEzSGZldnpOUEpxbXJWdmdReWtNbXQzQy8x?= =?utf-8?B?dmpjZW5tWk9PUGVHZk9EZ1laUWN6b2c2UDRnejN4RTZnQ0x1Q3BzSnVma3J3?= =?utf-8?B?d2pVMGprSHFTanV5ZmQ0T0hXNzg3SGZPY0hRczVPMjhJQTk4N3hoamw5OXA5?= =?utf-8?B?SmRtRGZxWEFjYjNYTHFtdktrWklMSVRLekJvRUVTeXVzQU8xQVJKb1FwV2VO?= =?utf-8?B?T1o5Rm5KdFpJRmdLR1E2bEliNTBnTlZhRmJFam5SNDdjK2ZMK3d4S0R3V2kx?= =?utf-8?B?RnZYR1F6b1VHcFZlR2pSSExGUHFxMUEzQ1MwZnhFckdFL2NwSXpDaG1QcENC?= =?utf-8?B?RGJaYmZ5a3RhSTdXWkp0dUhVcUhCRnMycjVTYUhWSWFsODcrQ0JBaU9tYjhV?= =?utf-8?B?TnB4ek5GWTdkNEc1VThoYjF3QlN3N1B2eitZU1RZMk5JREw4MDBQTHppaHUv?= =?utf-8?B?cGlGWnVsZnZ1S1lFbkxlNDU1MHVMWTMzVXVoOU1iKzFEaVgzUFYvajJSM090?= =?utf-8?B?Y0R1WWd6TWJPcys4Yk5OTnBkajJTam1BbDY1UlpQcUZOTG0xV2VsQkpVZlVr?= =?utf-8?B?cHdNMDRWV1V6ZmgzanVEK0NNYlpYbEowcE5zYTMvM1pXa3RFeVJqd3VGV3Q3?= =?utf-8?B?ZE0vUmtFQ08xN29VaFY2aGhsZFF1SzZuN0pac0h5b0s2d3R4cmRlNy9Mck9j?= =?utf-8?B?S0NYVFppNUpWQVZHSjhXNG9GTzBnZE9RWlpjaURZUmtmakxPeFB5TnlFRzBr?= =?utf-8?B?cnNIQVJQWFJkZmlNQmZhUG81TDBiRnFudVIrQ3gwMmVreHJaZlo1THdaeXRl?= =?utf-8?B?Tyt5T3JsM0JhUXVuZnZYdnR3MGtPTVZGV3BCSkwvSUE4Mmk2MndyN2tOWFdq?= =?utf-8?B?TlhVaTNRcEQ0Y1lGVmhYdFJOQkFyMUgrbkxzZk9Nb3ZXZmZWa21wRE9hRC91?= =?utf-8?B?S2xpNEQzZHh3NUhKUW03d2ZxK3ZDbGRtWjlyZG9kT0RpZnVnOVVhNnIySmEz?= =?utf-8?B?MTdMRjRoaVJ6QUltZkxsOTBhK3IvR0drR3BXN0JIRTBseC9FclNDNUdKZkZX?= =?utf-8?B?Ymsvbm1NUk5UQ1VveElHMGJTamRKRGRSazlMNE9qb0NsTnc9PQ==?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5751.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TEs4ckNodElTWm03Y205ajl1Umt4NUpvUTg0NUxrK3BjMFE3b2N4Mm5vdVFP?= =?utf-8?B?bDdmVVpmenp6NmlydUM3RFlTK1ppK3paTGpjVzVtQnFkNDAwTEhYb3pnT3lN?= =?utf-8?B?aHZybEZJNVNKakJhcGNZNHFWRlNJZlFOQ29hRDRxb3ZKNXovWXpFbmR3VjRI?= =?utf-8?B?bzVvbG1ncHdZbGhyb2FlSFZkcVh5eTNZRXhzZ0pJenE2aHJlZWVicmsrVk9L?= =?utf-8?B?dGZrZmN0RkYvVnVjYzllMk12WkVRc0VkUUtzV3RsOFlnWWU3QktVY0JsbE42?= =?utf-8?B?dDZIb0xKUUdJLzd0OHBDWExlbTdsNm1FSC8ydnlHaW9HUmpYYnhWbWdzYkRt?= =?utf-8?B?ZWRKQnIxMXdCUGpSNzJRRnFWbkI2dFljMmlKdlljd0NwVU9aeWRlUjQwZFll?= =?utf-8?B?OXRvQjViU2xPMGQvMFlORjU4QjlydkRFU2IxbkxvbEswTEtaTy9KU2Vmd3Vm?= =?utf-8?B?OTlSTEZqR3ZaQ2JuVlVlRmlYcFUrNkNTcUt3TGpQRjRHN1lRTUZJQnBWaXRE?= =?utf-8?B?bFAzY0YvczRjR1FjR1BlRU05Z3FZZXhVS3hJMFZ3K0xSUWlHc3pIRFJBSjBM?= =?utf-8?B?T1pQUmcxZ29NWWFhcGh3QTBIZXlQRGtrSzZSUnJvYkkvQTRnNEF3NElvNjUz?= =?utf-8?B?dEZLMmg3RS9GUXhmN0hMMjVMNU9nMG5wVzhvaENhOG8wYTh2MENXeExaUzBs?= =?utf-8?B?TkVMN1FxU1dva2JabStUVjlhVjhLRjVaNmk4VU4xV1U3TUwyUVVMWnJsVXJj?= =?utf-8?B?NkU2ZGJhOVFFNVU5YkxielBPZHVHZWxwYjRxUFJNejkxei84b2d5eTg0eGNI?= =?utf-8?B?b2wvSDZPQkpWS0JIWE1aYWJGMmZiMEhhQTVIY2V4aW94NVMvdmx0VFd5YVY0?= =?utf-8?B?MkZGSFBOaUxyeWN1Qk81YUZzdlh6MVZUS2cxTGpBcUo3YXZkNUJ4eVdqc1Q3?= =?utf-8?B?ejN2d0c1TDVZSzBCSVR0Z2t0cUVGbWJFWEVDWklJVTV5RWRlN3lYQjVlOUVB?= =?utf-8?B?MmowVmpNQVNFSTJjNXVCRkU0Vk1CNm1tNEVqK0ZVcnplSFEzTXcvL2tFYm5L?= =?utf-8?B?RFJjL0JJeHkvbG9UdVk1cURMQldYTzVaSTU4dFduWHJVK3ZTeTBiOGMxWW41?= =?utf-8?B?ajYycHFHaHhPYnVWT3JVWnFaY00ra1VrTExDc21WUmEyS2x5ZG1kQWRPTVAr?= =?utf-8?B?WVdqd0FubENZV280UlNseEQrbTdrSXV5T2pIS0VrdHJxUWo2djlzNnNDZlhI?= =?utf-8?B?UWt5TE5hYitZMXBIRTEreGZDVDJxamd2bVJqZnhLaFMwTWFrZGJsaGFYSUNa?= =?utf-8?B?N08zVUdjUEpLMG00T3FvT05BSDN2bFJQQm1FVk9LRkNQV0NDcVlZTzJrVnRS?= =?utf-8?B?ZHd4b1ZnamJYQ2ZuRTFYZS8zbEE2WHVYQSs5K2xvZE8yZnRzczhXcDVzbTQy?= =?utf-8?B?UXE0dURNckJJTmZia1d0REJVamJad2NHdk5Ua3JPcnVsZzdqTS9TRkkzQ1dG?= =?utf-8?B?RnJCUUZBSzFCSjQrQkpQZjRQTVp1R2RJRTNIbE1XMlBMbjI2ZS9ZNlJ3UjZn?= =?utf-8?B?VVBKNS8yZFBldWhPLzlzMElPdWlYYnFyL1lWL0NzYms1K3lIZWJ6d0xkek4x?= =?utf-8?B?ME1QQVNPOEltdnNVbjRlUis2RWU3RlYvRmZqK28yeEo4bVJNTk0zd1dzNG1P?= =?utf-8?B?VlAwakVJZHN0anA2aVE3U3RTUkFzR2piUStEKzViQ1d0b0VBL1ZvTTRIck8w?= =?utf-8?B?ME9zTTRSUjlkMFBZL0ptRWxrZlBORlFYakJIN2tTWVc1TWFLNHR0WFlhWm55?= =?utf-8?B?SStWOTY1OHk5YWx3bWFiTEZJM00rcXZjcUVMT3VIZGhTdXMwVG9ZRDI1cFNP?= =?utf-8?B?bGNRWm9KbDlNSW8ramw0R2FmWHJuak1GZkRBSVp2dDgxMkRxOWFpdkZDZDNT?= =?utf-8?B?Z3FTUytvcXEvMVRkMEFXNDZscW1wU3Bpam5wUU1vSURuWnF2R1c0RjgwRDFn?= =?utf-8?B?UnJPUGlCWTd2VmlwNTlLMmFkYlVaU2k3UkpPbXYwTUQwQ0x4OUlBZmVsUVlH?= =?utf-8?B?aGxLY1o0bUVhZ3c1dEVVVnVKdnpjSEt5YTBBUjhJanluTW8yMHhDNU9zbFV3?= =?utf-8?B?dEN4MXpDYkxhMFNPWG1mOWZhT01kMWg5MURXbjRJaDFqVVViazVaa24vcmk5?= =?utf-8?Q?uPTzkyt5QBXr1pe/6171Nio=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <7FCA1153B0BD904AAB978B79393E6DA5@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5751.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24754f03-abc5-428c-9931-08dcc7e2ce81 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Aug 2024 04:26:52.0308 (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: 1313tqg5pxBByMNCjgv+fL+Hnj5PsJkfJJYuLXshmD7jI1+7uxCItFYWeag4ZyCY+iA9uqF1NSbZrrtvh1jN0h9ZSc6kO9wMl02dKFiIdX9gy3kif4/W1S6WnyXwPMkO X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR11MB8312 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" CkhhdmVudCBnb25lIHRocm91Z2ggZXZlcnl0aGluZywgYnV0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBh IGxvdCB0bwpkaWdlc3QsIGxldHMgY29ubmVjdCBvZmZsaW5lIGFuZCBnbyB0aHJvdWdoIGV2ZXJ5 dGhpbmcuIFN1c3BlY3QKd2UgbWlnaHQgbmVlZCBhbm90aGVyIG9uZSBvciB0d28gcm91bmRzLgoK SG1tbS4uIHRoaXMgcGF0Y2ggaXMgaHVnZSwgd2UgbmVlZCB0byB0aGluayBhYm91dCBob3cgd2Ug Y2FuIGJyZWFrIHRoaXMgaW50bwoyIG9yIDMgcGF0Y2hlcyBidXQgYnkgc2ltcGxlIHRyaXZpYWwg ZmlsZS1zcGVjaWZpYyBjaGFuZ2UgbGlrZSBzdGFuZGEtYWxvbmUgaGVhZGVyCm1vZGlmaWNhdGlv biBpbiBhIHNpbmdsZSBwYXRjaC4uLiAgYnV0IHJhdGhlciBiYXNlZCBvbiBzcGVjaWZpYyBmbG93 cyBvcgpmdW5jdGlvbmFsaXRpZXMgdGhhdCBjYW4gYmUgY2hyb25sb2dpY2FsLiBGb3IgZXhhbXBs ZToKCnBhdGNoIHggPSBvbmx5IGZvY3VzIG9uIHNlYXJjaGluZyBmb3IgbWF0Y2hpbmcgZ3VjLXBy ZS1jYXB0dXJlZC1ub2RlIGFuZCBwcmludGluZyB0aGF0LgogICAgICAgICAgYW5kIGtlZXAgdGhl IGV4aXN0aW5nIG1hbnVhbCBjb3B5ICsgcHJpbnRpbmcgKHdpdGggdGhlIGR1cGxpY2F0ZSBzbmFw c2hvdCBlbmdpbmUgcmVncyBzdHJ1Y3R1cmUpLgpwYXRjaCB4KzEgPSBSZW1vdmUgdGhlIG1hbnVh bCBjYXB0dXJlICsgcHJpbnRpbmcgKGFuZCB0aGlzIHBhdGNoIGNhbiByZW1vdmUgdGhlIGR1cGxp Y2F0ZQpzbmFwc2hvdCBlbmdpbmUgcmVncyBzdHJ1Y3R1cmUpLgpwYXRjaCB4KzIgPSBhZGQgbWFu dWFsLWNhcHR1cmUgdmlhIGd1Yy1jYXB0dXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgc2FtZSBs aXN0Cihmb3Igd2VkZ2VkLW1vZGU9MiBhbmQgc3VjaCkKCkkgYW0gYXdhcmUgdGhpcyBpcyBhIGJp ZyBhc2sgYnV0IHNpbmNlIHBhdGNoIHNpemVzIGNhbiBiZSBzdWJqZWN0aXZlLCBsZXQncyBjaGVj awp3aXRoIG9uZSBvZiB0aGUgb3RoZXIgY29tbWl0dGVycyBvZmZsaW5lIHRvIHNlZSB3aGF0IHRo ZXkgdGhpbmsuCgpFaXRoZXIgd2F5LCBJIGRvIGhhdmUgYSBidW5jaCBvZiBhZGRpdGlvbmFsIGNv bW1lbnRzIGJlbG93LiBJIGhhdmVudCBnb25lCnRocm91Z2ggZXZlcnl0aGluZyB5ZXQgLSBzaW5j ZSB0aGUgY2hhbmdlcyB0b3VjaCBtYW55IGRpZmZlcmVudCBwb2ludHMKaW4gdGhlIGZsb3cuIGJ1 dCBJJ3ZlIGZvY3VzZWQgbW9yZSBvbiB0aGUgbmV3IGxpc3QgYW5kIHRoZSBwcmludGluZy4KCk9u IFR1ZSwgMjAyNC0wOC0yNyBhdCAxNDo0NyAtMDcwMCwgWmhhbmp1biBEb25nIHdyb3RlOgo+IEFk ZCBwcmUtY2FwdHVyZSBieSByZWFkIGZyb20gaHcgZW5naW5lIGlmIEd1QyBjYXB0dXJlIGRhdGEg aXMgbm90IHJlYWR5LAo+IHRoZSBwcmUtY2FwdHVyZWQgZGF0YSB3aWxsIGJlIHJlZmVyZXNoZWQg aWYgR3VDIGNhcHR1cmUgaXMgcmVhZHkgYXQgbGF0ZXIKPiB0aW1lLgphbGFuOiBNYXliZSBzb21l IGFkZGl0aW9uYWwgY29udGV4dCBsaWtlICIKYWxhbjogaSBkb250IHRoaW5rIHRoZSB0ZXJtICJw cmUtY2FwdHVyZSIgaXMgc2VsZiBleHBsYW5hdG9yeSwgc2luY2UKdGhlIHRlcm0gInByZSIgbWVh bnMgfmJlZm9yZSBidXQgaW4gYWN0dWFsIGZhY3QsIGV2ZW4gd2hlbiBjYXB0dXJlCmNvbWVzIGZy b20gR3VDIGl0IGFscmVhZHkgaGFwcGVuZWQgJ2JlZm9yZScuIENhbiB3ZSByZXBsYWNlIGFsbCB0 aGUKdGVybXMgb2YgcHJlLWNhcHR1cmUgb3IgcHJlX2NhcHR1cmUgaW4gY29tbWVudHMgYW5kIGNv ZGUgdG8KIm1hbnVhbF9jYXB0dXJlIiBvciAia21kX2NhcHR1cmUiIG9yIGFueXRoaW5nIG1vcmUg c2VsZi1leHBsYW5hdG9yeS4KCj4gUHJvdmlkZSB4ZV9ndWNfY2FwdHVyZV9nZXRfcmVnX2Rlc2Nf bGlzdCB0byBnZXQgdGhlIHJlZ2lzdGVyIGRzY3JpcHRvcgo+IGxpc3QuCj4gR3VDIHN1cHBvcnQg bGltaXRlZCByZWdpc3RlciByYW5nZXMgdG8gYmUgY2FwdHVyZWQsIGFkZCB0eXBlIG9mIGRpcmVj dAo+IHJlYWQgdG8gcmVhZCB0aGVzZSByZWdpc3RlcnMgYnkgaG9zdC4KPiBBZGQgZnVuY3Rpb24g dG8gY2hlY2sgaWYgY2FwdHVyZSBpcyByZWFkeSBmb3IgYSBqb2IuCj4gUHJpbnQgb3V0IHNuYXBz aG90IHJlZ2lzdGVycyBieSB0eXBlcyBvZiBnbG9iYWwsIGNsYXNzLCBpbnN0YW5jZSBhbmQKPiBk aXJlY3QgcmVhZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBaaGFuanVuIERvbmcgPHpoYW5qdW4uZG9u Z0BpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUvcmVncy94ZV9ndF9yZWdz LmjCoMKgwqDCoMKgIHzCoMKgIDIgKwo+IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmNvcmVk dW1wLmPCoMKgwqDCoMKgwqAgfMKgIDE2ICstCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2 Y29yZWR1bXBfdHlwZXMuaCB8wqDCoCAyICsKPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNf Y2FwdHVyZS5jwqDCoMKgwqDCoMKgIHwgMzgwICsrKysrKysrKysrKysrKysrKysrKy0KPiDCoGRy aXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5owqDCoMKgwqDCoMKgIHzCoCAyNiArKwo+ IMKgZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlX3R5cGVzLmggfMKgwqAgMiArCj4g wqBkcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3N1Ym1pdC5jwqDCoMKgwqDCoMKgwqAgfMKgIDE5 ICstCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmPCoMKgwqDCoMKgwqDCoMKg IHwgMjczICsrKystLS0tLS0tLS0tLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS94ZS94ZV9od19lbmdp bmUuaMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUveGVf aHdfZW5naW5lX3R5cGVzLmjCoMKgIHzCoCA2NiArLS0tCj4gwqBkcml2ZXJzL2dwdS9kcm0veGUv eGVfbHJjLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgMTEgZmls ZXMgY2hhbmdlZCwgNTA0IGluc2VydGlvbnMoKyksIDI4NSBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3JlZ3MveGVfZ3RfcmVncy5oIGIvZHJpdmVycy9n cHUvZHJtL3hlL3JlZ3MveGVfZ3RfcmVncy5oCj4gaW5kZXggMGQxYTRhOWY0ZTExLi42YThkZWUw Njk5NzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3JlZ3MveGVfZ3RfcmVncy5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3JlZ3MveGVfZ3RfcmVncy5oCj4gQEAgLTYwNSw0 ICs2MDUsNiBAQAo+IMKgI2RlZmluZcKgwqAgR1RfQ1NfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVMKg wqDCoMKgwqDCoMKgwqDCoFJFR19CSVQoMykKPiDCoCNkZWZpbmXCoMKgIEdUX1JFTkRFUl9VU0VS X0lOVEVSUlVQVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUkVHX0JJVCgwKQo+IMKgCj4gKyNk ZWZpbmUgU0ZDX0RPTkUobinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFhFX1JFRygweDFjYzAwMCArIChuKSAqIDB4MTAwMCkKPiArCj4gwqAj ZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmNvcmVkdW1wLmMg Yi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZGV2Y29yZWR1bXAuYwo+IGluZGV4IGJkYjc2ZTgzNGU0 Yy4uNzgzOTU4ODI5NzUwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZj b3JlZHVtcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmNvcmVkdW1wLmMKPiBA QCAtMTYsNiArMTYsNyBAQAo+IMKgI2luY2x1ZGUgInhlX2ZvcmNlX3dha2UuaCIKPiDCoCNpbmNs dWRlICJ4ZV9ndC5oIgo+IMKgI2luY2x1ZGUgInhlX2d0X3ByaW50ay5oIgo+ICsjaW5jbHVkZSAi eGVfZ3VjX2NhcHR1cmUuaCIKPiDCoCNpbmNsdWRlICJ4ZV9ndWNfY3QuaCIKPiDCoCNpbmNsdWRl ICJ4ZV9ndWNfc3VibWl0LmgiCj4gwqAjaW5jbHVkZSAieGVfaHdfZW5naW5lLmgiCj4gQEAgLTEz NSw2ICsxMzYsOCBAQCBzdGF0aWMgdm9pZCB4ZV9kZXZjb3JlZHVtcF9zbmFwc2hvdF9mcmVlKHN0 cnVjdCB4ZV9kZXZjb3JlZHVtcF9zbmFwc2hvdCAqc3MpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg eGVfdm1fc25hcHNob3RfZnJlZShzcy0+dm0pOwo+IMKgwqDCoMKgwqDCoMKgwqBzcy0+dm0gPSBO VUxMOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB4ZV9ndWNfY2FwdHVyZV9mcmVlKCZzcy0+Z3QtPnVj Lmd1Yyk7CmFsYW46IHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoaXMgY29kZSAuLiBzZWUgYmVsb3cu Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIHhlX2RldmNvcmVkdW1wX2RlZmVycmVkX3NuYXBf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gQEAgLTIwNCw2ICsyMDcsNyBAQCBzdGF0 aWMgdm9pZCB4ZV9kZXZjb3JlZHVtcF9mcmVlKHZvaWQgKmRhdGEpCj4gwqDCoMKgwqDCoMKgwqDC oC8qIFRvIHByZXZlbnQgc3RhbGUgZGF0YSBvbiBuZXh0IHNuYXBzaG90LCBjbGVhciBldmVyeXRo aW5nICovCj4gwqDCoMKgwqDCoMKgwqDCoG1lbXNldCgmY29yZWR1bXAtPnNuYXBzaG90LCAwLCBz aXplb2YoY29yZWR1bXAtPnNuYXBzaG90KSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGNvcmVkdW1wLT5j YXB0dXJlZCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoGNvcmVkdW1wLT5qb2IgPSBOVUxMOwo+ IMKgwqDCoMKgwqDCoMKgwqBkcm1faW5mbygmY29yZWR1bXBfdG9feGUoY29yZWR1bXApLT5kcm0s Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlhlIGRldmljZSBjb3JlZHVtcCBo YXMgYmVlbiBkZWxldGVkLlxuIik7Cj4gwqB9Cj4gQEAgLTIxNCw4ICsyMTgsNiBAQCBzdGF0aWMg dm9pZCBkZXZjb3JlZHVtcF9zbmFwc2hvdChzdHJ1Y3QgeGVfZGV2Y29yZWR1bXAgKmNvcmVkdW1w LAo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2Y29yZWR1bXBfc25hcHNob3QgKnNzID0g JmNvcmVkdW1wLT5zbmFwc2hvdDsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2V4ZWNfcXVl dWUgKnEgPSBqb2ItPnE7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWMgKmd1YyA9IGV4 ZWNfcXVldWVfdG9fZ3VjKHEpOwo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9od19lbmdpbmUg Kmh3ZTsKPiAtwqDCoMKgwqDCoMKgwqBlbnVtIHhlX2h3X2VuZ2luZV9pZCBpZDsKPiDCoMKgwqDC oMKgwqDCoMKgdTMyIGFkal9sb2dpY2FsX21hc2sgPSBxLT5sb2dpY2FsX21hc2s7Cj4gwqDCoMKg wqDCoMKgwqDCoHUzMiB3aWR0aF9tYXNrID0gKDB4MSA8PCBxLT53aWR0aCkgLSAxOwo+IMKgwqDC oMKgwqDCoMKgwqBjb25zdCBjaGFyICpwcm9jZXNzX25hbWUgPSAibm8gcHJvY2VzcyI7Cj4gQEAg LTIzMSw2ICsyMzMsNyBAQCBzdGF0aWMgdm9pZCBkZXZjb3JlZHVtcF9zbmFwc2hvdChzdHJ1Y3Qg eGVfZGV2Y29yZWR1bXAgKmNvcmVkdW1wLAo+IMKgwqDCoMKgwqDCoMKgwqBzdHJzY3B5KHNzLT5w cm9jZXNzX25hbWUsIHByb2Nlc3NfbmFtZSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgc3MtPmd0 ID0gcS0+Z3Q7Cj4gK8KgwqDCoMKgwqDCoMKgY29yZWR1bXAtPmpvYiA9IGpvYjsKPiDCoMKgwqDC oMKgwqDCoMKgSU5JVF9XT1JLKCZzcy0+d29yaywgeGVfZGV2Y29yZWR1bXBfZGVmZXJyZWRfc25h cF93b3JrKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBjb29raWUgPSBkbWFfZmVuY2VfYmVnaW5f c2lnbmFsbGluZygpOwo+IEBAIC0yNTIsMTQgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIGRldmNvcmVk dW1wX3NuYXBzaG90KHN0cnVjdCB4ZV9kZXZjb3JlZHVtcCAqY29yZWR1bXAsCj4gwqDCoMKgwqDC oMKgwqDCoGNvcmVkdW1wLT5zbmFwc2hvdC5qb2IgPSB4ZV9zY2hlZF9qb2Jfc25hcHNob3RfY2Fw dHVyZShqb2IpOwo+IMKgwqDCoMKgwqDCoMKgwqBjb3JlZHVtcC0+c25hcHNob3Qudm0gPSB4ZV92 bV9zbmFwc2hvdF9jYXB0dXJlKHEtPnZtKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGZvcl9lYWNo X2h3X2VuZ2luZShod2UsIHEtPmd0LCBpZCkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoaHdlLT5jbGFzcyAhPSBxLT5od2UtPmNsYXNzIHx8Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhKEJJVChod2UtPmxvZ2ljYWxfaW5zdGFuY2UpICYgYWRq X2xvZ2ljYWxfbWFzaykpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvcmVkdW1wLT5zbmFwc2hvdC5od2VbaWRdID0gTlVMTDsKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvcmVkdW1wLT5zbmFwc2hvdC5od2VbaWRdID0geGVfaHdfZW5naW5lX3NuYXBzaG90X2NhcHR1 cmUoaHdlKTsKPiAtwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgeGVfaHdfZW5naW5l X3NuYXBzaG90X2NhcHR1cmVfZm9yX2pvYihqb2IpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHF1 ZXVlX3dvcmsoc3lzdGVtX3VuYm91bmRfd3EsICZzcy0+d29yayk7Cj4gwqAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmNvcmVkdW1wX3R5cGVzLmggYi9kcml2ZXJzL2dw dS9kcm0veGUveGVfZGV2Y29yZWR1bXBfdHlwZXMuaAo+IGluZGV4IDQ0MGQwNWQ3N2E1YS4uNTAx NjVhMTBhYmRkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9kZXZjb3JlZHVt cF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2RldmNvcmVkdW1wX3R5cGVz LmgKPiBAQCAtNjksNiArNjksOCBAQCBzdHJ1Y3QgeGVfZGV2Y29yZWR1bXAgewo+IMKgwqDCoMKg wqDCoMKgwqBib29sIGNhcHR1cmVkOwo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQHNuYXBzaG90OiBT bmFwc2hvdCBpcyBjYXB0dXJlZCBhdCB0aW1lIG9mIHRoZSBmaXJzdCBjcmFzaCAqLwo+IMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2Y29yZWR1bXBfc25hcHNob3Qgc25hcHNob3Q7Cj4gK8Kg wqDCoMKgwqDCoMKgLyoqIEBqb2I6IFBvaW50IHRvIHRoZSBpc3N1ZSBqb2IgKi8KPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgeGVfc2NoZWRfam9iICpqb2I7Cj4gwqB9Owo+IMKgCj4gwqAjZW5kaWYK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMgYi9kcml2 ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYwo+IGluZGV4IDIwYjM4ZDYwZGNhNy4uMTZm NjYwZGIzMjMxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVy ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMKPiBAQCAtMjcs MTEgKzI3LDE2IEBACj4gwqAjaW5jbHVkZSAieGVfZ3VjX2NhcHR1cmUuaCIKPiDCoCNpbmNsdWRl ICJ4ZV9ndWNfY2FwdHVyZV90eXBlcy5oIgo+IMKgI2luY2x1ZGUgInhlX2d1Y19jdC5oIgo+ICsj aW5jbHVkZSAieGVfZ3VjX2V4ZWNfcXVldWVfdHlwZXMuaCIKPiDCoCNpbmNsdWRlICJ4ZV9ndWNf bG9nLmgiCj4gKyNpbmNsdWRlICJ4ZV9ndWNfc3VibWl0X3R5cGVzLmgiCj4gwqAjaW5jbHVkZSAi eGVfZ3VjX3N1Ym1pdC5oIgo+IMKgI2luY2x1ZGUgInhlX2h3X2VuZ2luZV90eXBlcy5oIgo+ICsj aW5jbHVkZSAieGVfbHJjLmgiCj4gwqAjaW5jbHVkZSAieGVfbWFjcm9zLmgiCj4gwqAjaW5jbHVk ZSAieGVfbWFwLmgiCj4gKyNpbmNsdWRlICJ4ZV9tbWlvLmgiCj4gKyNpbmNsdWRlICJ4ZV9zY2hl ZF9qb2IuaCIKPiDCoAo+IMKgLyoKPiDCoCAqIHN0cnVjdCBfX2d1Y19jYXB0dXJlX2J1ZnN0YXRl Cj4gQEAgLTY5LDExICs3NCwxMyBAQCBzdHJ1Y3QgX19ndWNfY2FwdHVyZV9wYXJzZWRfb3V0cHV0 IHsKPiDCoMKgwqDCoMKgwqDCoMKgdTMyIGVuZ19pbnN0Owo+IMKgwqDCoMKgwqDCoMKgwqB1MzIg Z3VjX2lkOwo+IMKgwqDCoMKgwqDCoMKgwqB1MzIgbHJjYTsKPiArwqDCoMKgwqDCoMKgwqB1MzIg dHlwZTsKPiArwqDCoMKgwqDCoMKgwqBlbnVtIHhlX2h3X2VuZ2luZV9zbmFwc2hvdF9zb3VyY2Vf aWQgc291cmNlOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZ2NhcF9yZWdfbGlzdF9pbmZvIHsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiB2ZmlkOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIG51bV9yZWdzOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IGd1Y19tbWlvX3JlZyAqcmVnczsKPiAtwqDCoMKgwqDCoMKgwqB9 IHJlZ2luZm9bR1VDX1NUQVRFX0NBUFRVUkVfVFlQRV9NQVhdOwo+ICvCoMKgwqDCoMKgwqDCoH0g cmVnaW5mb1tHVUNfSE9TVF9DQVBUVVJFX1RZUEVfTUFYXTsKYWxhbjogbGV0cyBub3QgZG8gdGhp cyAtIHdlIG5lZWQgYSBkaWZmZXJlbnQgd2F5IHRvIGRvIHRoaXMsIGFjdHVhbGx5LCB3ZQpuZWVk IHRvIGVuc3VyZSBBTEwgcmVnaXN0ZXIgZHVtcHMgY2FwdHVyZWQgZHVlIHRvIGhhbmdpbmcgd29y a2xvYWRzIGNvbWUKc3RyaWN0bHkgZnJvbSBlaXRoZXIgdGhlIEd1QyAuLi4gT1IgLi4uIG1hbnVh bGx5IHJlYWQgKHdoZW4gR3VDIHJlc2V0IGlzCmRpc2FibGVkIGkuZS4gd2VkZ2VkIG1vZGUgPjIg KS4gVGhlcmUgc2hvdWxkIE5PVCBiZSBhIG1peC4gRXhjZXB0aW9ucyB3b3VsZApvbmx5IGJlIHJl Z2lzdGVycyB0aGF0IGNhbiBuZXZlciBjaGFuZ2UgYXQgcnVudGltZSBiYXNlZCBvbiBlbmdpbmUt Y2xhc3MvCmVuZ2luZS1pbnN0YW5jZSAvIGV4ZWN1dGluZy1jb250ZXh0LXdvcmtsb2FkcyBzdWJt aXNzaW9ucy4gSWYgc3VjaCBhIHJlZ2lzdGVycwpleGlzdHMsIGl0IHNob3VsZCBiZSBkaXJlY3Rs eSB0cmFja2VkIGJ5IGFuZCByZWFkIGJ5IGRldmNvcmVkdW1wLCBub3QgYXMgcGFydApvZiB0aGUg Z3VjLWVycm9yLWNhcHR1cmUgbGlzdHMuIEhvd2V2ZXIsIGJhc2VkIG9uIHdoYXQgaSBhbSBzZWVp bmcgaW4gdGhpcyBwYXRjaAp5b3UgYXJlIHVzaW5nIHRoaXMgbmV3ICJvdXQtb2YtYmFuZC1ndWMt YWJpLWxpc3QtdHlwZSIgYXMgYSBoYWNrIHRvIGlkZW50aWZ5aW5nCnNlcGFyYXRpbmcgdGhlIFNG Q19ET05FIHJlZ2lzdGVycyAtIGJ1dCB0aG9zZSBhcmUgZW5naW5lIGNsYXNzIHJlZ2lzdGVycyBz bwp0aGlzIGRvZXNuJ3QgbG9vayByaWdodCB0byBtZS4gV2UgYWRkIHRoaXMgdG8gdGhlIEd1QyBy ZWdpc3RlciBsaXN0IGluIEFEUy4KCgo+IMKgI2RlZmluZSBHQ0FQX1BBUlNFRF9SRUdMSVNUX0lO REVYX0dMT0JBTMKgwqAgQklUKEdVQ19TVEFURV9DQVBUVVJFX1RZUEVfR0xPQkFMKQo+IMKgI2Rl ZmluZSBHQ0FQX1BBUlNFRF9SRUdMSVNUX0lOREVYX0VOR0NMQVNTIEJJVChHVUNfU1RBVEVfQ0FQ VFVSRV9UWVBFX0VOR0lORV9DTEFTUykKPiDCoH07Cj4gQEAgLTEzMyw2ICsxNDAsMTcgQEAgc3Ry dWN0IF9fZ3VjX2NhcHR1cmVfcGFyc2VkX291dHB1dCB7Cj4gwqDCoMKgwqDCoMKgwqDCoHsgU0Nf SU5TVERPTkVfRVhUUkEswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUkVHXzMyQklULMKgwqDCoMKg wqDCoDAswqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgwqAiU0NfSU5TVERPTkVfRVhUUkEifSwgXAo+ IMKgwqDCoMKgwqDCoMKgwqB7IFNDX0lOU1RET05FX0VYVFJBMizCoMKgwqDCoMKgwqDCoMKgwqDC oMKgUkVHXzMyQklULMKgwqDCoMKgwqDCoDAswqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgwqAiU0Nf SU5TVERPTkVfRVhUUkEyIn0KPiDCoAo+ICsvKgo+ICsgKiBHdUMgc3VwcG9ydCBsaW1pdGVkIHJl Z2lzdGVycyByYW5nZXMgdG8gYmUgY2FwdHVyZWQgZm9yIGRlYnVnCj4gKyAqIHB1cnBvc2UsIGZv ciByZWdpc3RlcnMgb3V0IG9mIHRoZXNlIHJhbmdlcywgZGlyZWN0IHJlYWQgaXMgdGhlIG9ubHkK PiArICogd2F5IHRvIGFjY2Vzcy4KPiArICovCj4gKyNkZWZpbmUgWEVMUF9WRUNfRElSRUNUX1JF QUQgXAo+ICvCoMKgwqDCoMKgwqDCoHsgU0ZDX0RPTkUoMCkswqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgwqAwLMKgwqDCoMKgwqDCoDAswqDCoMKgwqDCoMKg IlNGQ19ET05FWzBdIn0sIFwKPiArwqDCoMKgwqDCoMKgwqB7IFNGQ19ET05FKDEpLMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDAswqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgwqAw LMKgwqDCoMKgwqDCoCJTRkNfRE9ORVsxXSJ9LCBcCj4gK8KgwqDCoMKgwqDCoMKgeyBTRkNfRE9O RSgyKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAwLMKgwqDCoMKgwqDCoDAs wqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgwqAiU0ZDX0RPTkVbMl0ifSwgXAo+ICvCoMKgwqDCoMKg wqDCoHsgU0ZDX0RPTkUoMykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMCzC oMKgwqDCoMKgwqAwLMKgwqDCoMKgwqDCoDAswqDCoMKgwqDCoMKgIlNGQ19ET05FWzNdIn0KPiAr CmFsYW46IHRoZXNlIGFyZSBlbmdpbmUgY2xhc3MgcmVnaXN0ZXJzLCB0aGV5IHNob3VsZCBiZSBj YXB0dXJlZCBieSBHdUMgc2luY2Ugb25seQpHdUMga25vd3Mgd2hhdCBjb250ZXh0cyBhcmUgcnVu bmluZyBvbiB3aGljaCBlbmdpbmVzIGF0IHdoaWNoIHBvaW50IGR1cmluZyBhIHJlc2V0CmV2ZW50 LiBJZiB5b3UgYXJlIGhhdmluZyBpc3N1ZXMgd2l0aCBHdUMgbm90IHJlcG9ydGluZyB0aGlzLCB3 ZSBuZWVkIHRvIHdvcmsKd2l0aCB0aGUgR3VDIGZpcm13YXJlIHRlYW0gLyBhcmNoIHRlYW0gdG8g Z2V0IHRoaXMgZml4ZXMuIEkgc3VzcGVjdCB0aGlzIG1pZ2h0CmVuZCB1cCB0YWtpbmcgbW9yZSB0 aW1lIGFuZCBpdHMgaW1wb3J0YW50IHRoYXQgd2UgY2FuIGdldCB0aGUgbW9zdCBjb21tb24gcmlu ZwpyZWdpc3RlciBkdW1wcyBlbmFibGVkIGZpcnN0LiBJIHdvdWxkIHN1Z2dlc3Qgd2Ugb3BlbiBh IHB1YmxpYyBmYWNpbmcgSklSQQp0aGF0IGFja293bGVkZ2VzIHRoYXQgd2UgbmVlZCB0byBhZGQg U0ZDX0RPTkUgcmVnaXN0ZXJzIGludG8gR3VDIGVycm9yIGNhcHR1cmUKQURTIGFuZCBwcm9jZWVk IHdpdGhvdXQgaXQgZmlyc3QuIFVubGVzcyB3ZSBmaW5kIHRoYXQgR3VDIGRvZXMgYWN0dWFsbHkg c3VwcG9ydAphbmQgd2UgcGVyaGFwcyBkaWRudCBlbmFibGUgaXQgY29ycmVjdGx5LiBMZXQncyBk aXNjdXNzIG9mZmxpbmUuCgo+IMKgLyogWEVfTFAgR2xvYmFsICovCj4gwqBzdGF0aWMgY29uc3Qg c3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyIHhlX2xwX2dsb2JhbF9yZWdzW10gPSB7Cj4gwqDC oMKgwqDCoMKgwqDCoENPTU1PTl9YRUxQX0JBU0VfR0xPQkFMLAo+IEBAIC0xNjQsNiArMTgyLDEx IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX19ndWNfbW1pb19yZWdfZGVzY3IgeGVfdmVjX2luc3Rf cmVnc1tdID0gewo+IMKgwqDCoMKgwqDCoMKgwqBDT01NT05fQkFTRV9FTkdJTkVfSU5TVEFOQ0Us Cj4gwqB9Owo+IMKgCj4gKy8qIFZpZGVvIEVuaGFuY2VtZW50IGRpcmVjdCByZWFkIHJlZ2lzdGVy cyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyIHhlX3ZlY19k aXJlY3RfcmVhZF9yZWdzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgWEVMUF9WRUNfRElSRUNUX1JF QUQsCj4gK307Cj4gKwo+IMKgLyogQmxpdHRlciBQZXItRW5naW5lLUluc3RhbmNlICovCj4gwqBz dGF0aWMgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyIHhlX2JsdF9pbnN0X3JlZ3Nb XSA9IHsKPiDCoMKgwqDCoMKgwqDCoMKgQ09NTU9OX0JBU0VfRU5HSU5FX0lOU1RBTkNFLAo+IEBA IC0yMDEsNiArMjI0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBfX2d1Y19tbWlvX3JlZ19kZXNj cl9ncm91cCB4ZV9scF9saXN0c1tdID0gewo+IMKgwqDCoMKgwqDCoMKgwqBNQUtFX1JFR0xJU1Qo eGVfdmRfaW5zdF9yZWdzLCBQRiwgRU5HSU5FX0lOU1RBTkNFLCBHVUNfQ0FQVFVSRV9MSVNUX0NM QVNTX1ZJREVPKSwKPiDCoMKgwqDCoMKgwqDCoMKgTUFLRV9SRUdMSVNUKGVtcHR5X3JlZ3NfbGlz dCwgUEYsIEVOR0lORV9DTEFTUywgR1VDX0NBUFRVUkVfTElTVF9DTEFTU19WSURFT0VOSEFOQ0Up LAo+IMKgwqDCoMKgwqDCoMKgwqBNQUtFX1JFR0xJU1QoeGVfdmVjX2luc3RfcmVncywgUEYsIEVO R0lORV9JTlNUQU5DRSwgR1VDX0NBUFRVUkVfTElTVF9DTEFTU19WSURFT0VOSEFOQ0UpLAo+ICvC oMKgwqDCoMKgwqDCoE1BS0VfUkVHTElTVCh4ZV92ZWNfZGlyZWN0X3JlYWRfcmVncywgUEYsIEhP U1RfRElSRUNUX1JFQUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEdVQ19DQVBUVVJFX0xJU1RfQ0xBU1NfVklERU9FTkhBTkNFKSwKYWxhbjogUmVnYXJkaW5nIHRo aXMgIHVzYWdlIG9mICJIT1NUX0RJUkVDVF9SRUFEIiwgaXQgYXBwZWFycyB5b3UgYXJlIHRyeWlu ZyB0byBvdmVybG9hZAphIEdVQy1BQkkgZGVmaW5pdGlvbiBmb3IgcmVnbGlzdCB0eXBlIHRvIHdv cmthcm91bmQgdGhlIGZhY3QgdGhhdCBzb21lIHJlZ2lzdGVycyBhcmUgbm90CmNhcHR1cmVkIGJ5 IEd1Qy4gVGhpcyBpcyBpbmNvcnJlY3QsIHdlIG5lZWQgdG8gd29yayB3aXRoIHRoZSBHdUMgdGVh bSB0byBlbnN1cmUgdGhleQpjYXB0dXJlIHRoZXNlIHJlZ2lzdGVycyBiZWNhdXNlIHRoZSBTRkMg cmVnaXN0ZXIgc3RhdGUgdXNlZCBvbmx5IGFzIHBhcnQgb2YgdGhlIGJhdGNoCnN1Ym1pc3Npb24g dGhydSBWREJPWC9WRUJPWCBDUy4gVGhhdCBtZWFucyBpdCBzaG91bGQgYmUgY29waWVkIGJ5IEd1 Qy4gSWYgd2UgYXJlIHNlZWluZwppc3N1ZXMsIHdlIG5lZWQgdG8gZ2V0IHRoaXMgZml4ZWQgaW4g dGhlIGZpcm13YXJlLiBJIHRoaW5rIG1peGluZyBHdUMgY2FwdHVyZSB3aXRoIG1hbnVhbApyZWFk IGlzIHRoZSB3cm9uZyB0aGluZyB0byBkby4KCj4gwqDCoMKgwqDCoMKgwqDCoE1BS0VfUkVHTElT VChlbXB0eV9yZWdzX2xpc3QsIFBGLCBFTkdJTkVfQ0xBU1MsIEdVQ19DQVBUVVJFX0xJU1RfQ0xB U1NfQkxJVFRFUiksCj4gwqDCoMKgwqDCoMKgwqDCoE1BS0VfUkVHTElTVCh4ZV9ibHRfaW5zdF9y ZWdzLCBQRiwgRU5HSU5FX0lOU1RBTkNFLCBHVUNfQ0FQVFVSRV9MSVNUX0NMQVNTX0JMSVRURVIp LAo+IMKgwqDCoMKgwqDCoMKgwqBNQUtFX1JFR0xJU1QoZW1wdHlfcmVnc19saXN0LCBQRiwgRU5H SU5FX0NMQVNTLCBHVUNfQ0FQVFVSRV9MSVNUX0NMQVNTX0dTQ19PVEhFUiksCj4gQEAgLTIxNyw2 ICsyNDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3Vw IHhlX2hwZ19saXN0c1tdID0gewo+IMKgwqDCoMKgwqDCoMKgwqBNQUtFX1JFR0xJU1QoeGVfdmRf aW5zdF9yZWdzLCBQRiwgRU5HSU5FX0lOU1RBTkNFLCBHVUNfQ0FQVFVSRV9MSVNUX0NMQVNTX1ZJ REVPKSwKPiDCoMKgwqDCoMKgwqDCoMKgTUFLRV9SRUdMSVNUKGVtcHR5X3JlZ3NfbGlzdCwgUEYs IEVOR0lORV9DTEFTUywgR1VDX0NBUFRVUkVfTElTVF9DTEFTU19WSURFT0VOSEFOQ0UpLAo+IMKg wqDCoMKgwqDCoMKgwqBNQUtFX1JFR0xJU1QoeGVfdmVjX2luc3RfcmVncywgUEYsIEVOR0lORV9J TlNUQU5DRSwgR1VDX0NBUFRVUkVfTElTVF9DTEFTU19WSURFT0VOSEFOQ0UpLAo+ICvCoMKgwqDC oMKgwqDCoE1BS0VfUkVHTElTVCh4ZV92ZWNfZGlyZWN0X3JlYWRfcmVncywgUEYsIEhPU1RfRElS RUNUX1JFQUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdVQ19D QVBUVVJFX0xJU1RfQ0xBU1NfVklERU9FTkhBTkNFKSwKYWxhbjogc2FtZSBjb21tZW50IGFzIGxh c3QKPiDCoMKgwqDCoMKgwqDCoMKgTUFLRV9SRUdMSVNUKGVtcHR5X3JlZ3NfbGlzdCwgUEYsIEVO R0lORV9DTEFTUywgR1VDX0NBUFRVUkVfTElTVF9DTEFTU19CTElUVEVSKSwKPiDCoMKgwqDCoMKg wqDCoMKgTUFLRV9SRUdMSVNUKHhlX2JsdF9pbnN0X3JlZ3MsIFBGLCBFTkdJTkVfSU5TVEFOQ0Us IEdVQ19DQVBUVVJFX0xJU1RfQ0xBU1NfQkxJVFRFUiksCj4gwqDCoMKgwqDCoMKgwqDCoE1BS0Vf UkVHTElTVChlbXB0eV9yZWdzX2xpc3QsIFBGLCBFTkdJTkVfQ0xBU1MsIEdVQ19DQVBUVVJFX0xJ U1RfQ0xBU1NfR1NDX09USEVSKSwKPiBAQCAtMjkyLDYgKzMxOSwyMyBAQCBndWNfY2FwdHVyZV9n ZXRfb25lX2xpc3QoY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICpyZWds aXN0cywKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gwqB9Cj4gwqAKPiArY29uc3Qg c3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICoKPiAreGVfZ3VjX2NhcHR1cmVfZ2V0 X3JlZ19kZXNjX2xpc3Qoc3RydWN0IHhlX2d0ICpndCwgdTMyIG93bmVyLCB1MzIgdHlwZSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW51bSBndWNfY2FwdHVyZV9saXN0X2NsYXNzX3R5cGUgY2FwdHVyZV9jbGFzcykKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBndWNfY2FwdHVyZV9nZXRfb25lX2xpc3QoZ3VjX2Nh cHR1cmVfZ2V0X2RldmljZV9yZWdsaXN0KGd0X3RvX3hlKGd0KSksIG93bmVyLCB0eXBlLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjYXB0dXJlX2NsYXNzKTsKPiArfQo+ICsKYWxhbjogbml0OiBp bnN0ZWFkIG9mIHR3byBoZWxwZXJzIGFib3ZlIGFuZCBiZWxvdywgdSBjYW4gbWFrZSBpdCBvbmUg d2l0aCBhCnBhcmFtIGZvciAiaXNfZXh0X2xpc3QiLCBpbnRlcm5hbGx5IGlmLWVsc2UgaXQgLSBt YXliZSBmZXcgb2YgbGluZXMgb2YgY29kZT8KPiArY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVn X2Rlc2NyX2dyb3VwICoKPiAreGVfZ3VjX2NhcHR1cmVfZ2V0X2V4dF9yZWdfZGVzY19saXN0KHN0 cnVjdCB4ZV9ndCAqZ3QsIHUzMiBvd25lciwgdTMyIHR5cGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51 bSBndWNfY2FwdHVyZV9saXN0X2NsYXNzX3R5cGUgY2FwdHVyZV9jbGFzcykKPiArewo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWMgKmd1YyA9ICZndC0+dWMuZ3VjOwo+ICsKPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gZ3VjX2NhcHR1cmVfZ2V0X29uZV9saXN0KGd1Yy0+Y2FwdHVyZS0+ZXh0 bGlzdHMsIG93bmVyLCB0eXBlLCBjYXB0dXJlX2NsYXNzKTsKPiArfQo+ICsKPiDCoHN0cnVjdCBf X2V4dF9zdGVlcl9yZWcgewo+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpuYW1lOwo+IMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfcmVnX21jciByZWc7Cj4gQEAgLTgxMCwxNiArODU0LDE2 IEBAIGd1Y19jYXB0dXJlX2FkZF9ub2RlX3RvX2NhY2hlbGlzdChzdHJ1Y3QgeGVfZ3VjX3N0YXRl X2NhcHR1cmUgKmdjLAo+IMKgc3RhdGljIHZvaWQKPiDCoGd1Y19jYXB0dXJlX2luaXRfbm9kZShz dHJ1Y3QgeGVfZ3VjICpndWMsIHN0cnVjdCBfX2d1Y19jYXB0dXJlX3BhcnNlZF9vdXRwdXQgKm5v ZGUpCj4gwqB7Cj4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGd1Y19tbWlvX3JlZyAqdG1wW0dVQ19T VEFURV9DQVBUVVJFX1RZUEVfTUFYXTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZ3VjX21taW9f cmVnICp0bXBbR1VDX0hPU1RfQ0FQVFVSRV9UWVBFX01BWF07Cj4gwqDCoMKgwqDCoMKgwqDCoGlu dCBpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEdVQ19TVEFURV9DQVBU VVJFX1RZUEVfTUFYOyArK2kpIHsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgR1VD X0hPU1RfQ0FQVFVSRV9UWVBFX01BWDsgKytpKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB0bXBbaV0gPSBub2RlLT5yZWdpbmZvW2ldLnJlZ3M7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBtZW1zZXQodG1wW2ldLCAwLCBzaXplb2Yoc3RydWN0IGd1Y19tbWlv X3JlZykgKgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGd1 Yy0+Y2FwdHVyZS0+bWF4X21taW9fcGVyX25vZGUpOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgwqDCoG1lbXNldChub2RlLCAwLCBzaXplb2YoKm5vZGUpKTsKPiAtwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgR1VDX1NUQVRFX0NBUFRVUkVfVFlQRV9NQVg7ICsraSkKPiAr wqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgR1VDX0hPU1RfQ0FQVFVSRV9UWVBFX01BWDsg KytpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm9kZS0+cmVnaW5mb1tpXS5y ZWdzID0gdG1wW2ldOwphbGFuOiBzYW1lIGNvbW1lbnRzIGFyZSBwcmlvciAtIGxldHMgbm90IG92 ZXJsb2FkIEFCSS10eXBlcyBmb3IgYSB3b3JrYXJvdW5kLgo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oElOSVRfTElTVF9IRUFEKCZub2RlLT5saW5rKTsKPiBAQCAtODY0LDYgKzkwOCw3IEBAIGd1Y19j YXB0dXJlX2luaXRfbm9kZShzdHJ1Y3QgeGVfZ3VjICpndWMsIHN0cnVjdCBfX2d1Y19jYXB0dXJl X3BhcnNlZF9vdXRwdXQgKm5vCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBMLS0+IHhlX2RldmNvcmVkdW1wCj4gwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEwtLT4gZGV2Y29yZWR1bXBfc25hcHNob3QoLi5JU19H VUNfQ0FQVFVSRSkKPiDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0tPiB4ZV9od19lbmdpbmVfc25hcHNob3RfY2FwdHVyZSgu LklTX0dVQ19DQVBUVVJFKQo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtLT4geGVfZ3VjX2NhcHR1cmVfbm9kZV9mcm9tX2h3 KC4uSWYgbm8gR1VDIENBUFRVUkUpCj4gwqAgKgo+IMKgICogVXNlciBTeXNmcyAvIERlYnVnZnMK PiDCoCAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gQEAgLTExOTcsNiArMTI0Miw4IEBAIGd1Y19j YXB0dXJlX2V4dHJhY3RfcmVnbGlzdHMoc3RydWN0IHhlX2d1YyAqZ3VjLCBzdHJ1Y3QgX19ndWNf Y2FwdHVyZV9idWZzdGF0ZSAqCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub2RlLT5pc19wYXJ0aWFsID0gaXNfcGFy dGlhbDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGUtPnJlZ2luZm9bZGF0 YXR5cGVdLnZmaWQgPSBGSUVMRF9HRVQoR1VDX1NUQVRFX0NBUFRVUkVfSEVBREVSX1ZGSUQsIGhk ci5vd25lcik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGUtPnNvdXJjZSA9 IFhFX0hXX0VOR0lORV9TT1VSQ0VfR1VDX0NBUFRVUkU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG5vZGUtPnR5cGUgPSBkYXRhdHlwZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3dpdGNoIChkYXRhdHlwZSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSBHVUNfU1RBVEVfQ0FQVFVSRV9UWVBFX0VOR0lORV9JTlNUQU5DRToK PiBAQCAtMTM2Myw3ICsxNDEwLDcgQEAgZ3VjX2NhcHR1cmVfYWxsb2Nfb25lX25vZGUoc3RydWN0 IHhlX2d1YyAqZ3VjKQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIW5ldykKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgZm9y IChpID0gMDsgaSA8IEdVQ19TVEFURV9DQVBUVVJFX1RZUEVfTUFYOyArK2kpIHsKPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgR1VDX0hPU1RfQ0FQVFVSRV9UWVBFX01BWDsgKytpKSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXctPnJlZ2luZm9baV0ucmVncyA9 IGRybW1fa3phbGxvYyhkcm0sIGd1Yy0+Y2FwdHVyZS0+bWF4X21taW9fcGVyX25vZGUgKgo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihzdHJ1Y3QgZ3VjX21taW9f cmVnKSwgR0ZQX0tFUk5FTCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo IW5ldy0+cmVnaW5mb1tpXS5yZWdzKSB7Cj4gQEAgLTE0MDEsNyArMTQ0OCw3IEBAIGd1Y19nZXRf bWF4X3JlZ2xpc3RfY291bnQoc3RydWN0IHhlX2d1YyAqZ3VjKQo+IMKgwqDCoMKgwqDCoMKgwqBp bnQgaSwgaiwgaywgdG1wLCBtYXhyZWdjb3VudCA9IDA7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg Zm9yIChpID0gMDsgaSA8IEdVQ19DQVBUVVJFX0xJU1RfSU5ERVhfTUFYOyArK2kpIHsKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChqID0gMDsgaiA8IEdVQ19TVEFURV9DQVBU VVJFX1RZUEVfTUFYOyArK2opIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9y IChqID0gMDsgaiA8IEdVQ19IT1NUX0NBUFRVUkVfVFlQRV9NQVg7ICsraikgewo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoayA9IDA7IGsgPCBH VUNfTUFYX0VOR0lORV9DTEFTU0VTOyArK2spIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGogPT0gR1VDX1NUQVRF X0NBUFRVUkVfVFlQRV9HTE9CQUwgJiYgayA+IDApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b250aW51ZTsKPiBAQCAtMTQyOSw2ICsxNDc2LDMyNyBAQCBndWNfY2FwdHVyZV9jcmVhdGVfcHJl YWxsb2Nfbm9kZXMoc3RydWN0IHhlX2d1YyAqZ3VjKQo+IMKgwqDCoMKgwqDCoMKgwqBfX2d1Y19j YXB0dXJlX2NyZWF0ZV9wcmVhbGxvY19ub2RlcyhndWMpOwo+IMKgfQo+IMKgCj4gK3N0YXRpYyB2 b2lkCj4gK3JlYWRfcmVnX3RvX25vZGUoc3RydWN0IHhlX2h3X2VuZ2luZSAqaHdlLCBjb25zdCBz dHJ1Y3QgX19ndWNfbW1pb19yZWdfZGVzY3JfZ3JvdXAgKmxpc3QsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgX19ndWNfY2FwdHVyZV9wYXJzZWRfb3V0cHV0ICpub2Rl KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGdjYXBfcmVnX2xpc3RfaW5mbyAqcmVnaW5m byA9ICZub2RlLT5yZWdpbmZvW2xpc3QtPnR5cGVdOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBn dWNfbW1pb19yZWcgKnJlZ3MgPSByZWdpbmZvLT5yZWdzOwo+ICvCoMKgwqDCoMKgwqDCoGludCBp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlZ3MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxp c3QtPm51bV9yZWdzOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyIGRlc2MgPSBsaXN0LT5saXN0W2ldOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgdmFsdWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoIWxpc3QtPmxpc3QpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB2YWx1ZSA9IChsaXN0LT50eXBlID09IEdVQ19TVEFURV9DQVBUVVJFX1RZUEVf RU5HSU5FX0lOU1RBTkNFKSA/Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBkZXNjLnJlZykgOgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfbW1pb19yZWFk MzIoaHdlLT5ndCwgZGVzYy5yZWcpOwphbGFuOiBpIHNlZSB5b3UgYXJlIHVzaW5nIHRoaXMgZm9y IHRoZSBtYW51YWwgcmVhZC4gSSBhbHNvIGJlbGlldmUgeW91IGFyZQphbHNvIHVzaW5nIHRoaXMg Zm9yIHJlYWRpbmcgc3RlZXJpbmcgcmVnaXN0ZXJzLCBidXQgbWV0aG9kIGlzIG5vdCBnb2luZyB0 byB3b3JrCmZvciBzdGVlcmluZyByZWdpc3RlcnMuIFBsZWFzZSBzZWUgdGhlIGNvcnJlY3QgbWV0 aG9kIGluIGZ1bmN0aW9uCiJ4ZV9od19lbmdpbmVfc25hcHNob3RfaW5zdGRvbmVfY2FwdHVyZSIg YW5kIGhvdyBpdCBjYWxscyB4ZV9ndF9tY3JfdW5pY2FzdF9yZWFkCmluIGJhc2VsaW5lIGNvZGVi YXNlLgoKQWN0dWFsbHksIHRvIGJlIGhvbmVzdCwgaSBkb250IHNlZSB3aHkgeW91IG5lZWRlZCB0 byBtb3ZlIHRoZSBtYW51YWwgcmVnaXN0ZXIKY2FwdHVyZSBpbnRvIGd1Yy1jYXB0dXJlLiBXZSBo YXZlIGJlZW4gZHJpdmluZyB0byBlbnN1cmUgd2UgaGF2ZSBhIHNpbmdsZQpyZWdpc3RlciBsaXN0 IGlzIHNoYXJlZCBhY3Jvc3MgYm90aCBkZXZjb3JlZHVtcCBhbmQgZ3VjLWVycm9yLWNhcHR1cmUu CkknbSBub3Qgc3VyZSB3aHkgeW91IGFsc28gbmVlZGVkIHRvIG1vdmUgdGhlIG1hbnVhbC1yZWdp c3Rlci1yZWFkaW5nCm92ZXIgdG8gZ3VjLWVyci1jYXB0dXJlLiBJIGRvbid0IHNlZSBhIG1vdGl2 YXRpb24gZm9yIHRoYXQuIAoKSSB0aGluayBrZWVwaW5nIHRoZSBtYW51YWwgcmVnaXN0ZXIgcmVh ZHMgaW4gZGV2Y29yZWR1bXAgc3Vic3lzdGVtIGlzIGZpbmUuCldlIGNhbiBrZWVwIHhlX2h3X2Vu Z2luZV9zbmFwc2hvdF9jYXB0dXJlIGJ1dCBvbmx5IHVzZWQgd2hlbiBkb2luZyBtYW51YWwKY2Fw dHVyZSBhcyBsb25nIGFzIHdlIHVzZSB0aGUgc2hhcmVkIHJlZ2lzdGVyIGxpc3QsIGkuZS4gdXNl IHRoZSBsaXN0CmZyb20geGVfZ3VjX2NhcHR1cmVfZ2V0X3JlZ19kZXNjX2xpc3QgLyB4ZV9ndWNf Y2FwdHVyZV9nZXRfZXh0X3JlZ19kZXNjX2xpc3QuCgo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVnc1tpXS52YWx1ZSA9IHZhbHVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZWdzW2ldLm9mZnNldCA9IGRlc2MucmVnLmFkZHI7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJlZ3NbaV0uZmxhZ3MgPSBkZXNjLmZsYWdzOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdzW2ldLm1hc2sgPSBkZXNjLm1hc2s7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICt9Cj4gKwo+ICsvKioKPiArICogeGVfZ3VjX2NhcHR1cmVfbm9kZV9mcm9t X2h3IC0gVGFrZSBhIGVuZ2luZSBzbmFwc2hvdCBmcm9tIEd1QyBjYXB0dXJlLgo+ICsgKiBAaHdl OiBYZSBIVyBFbmdpbmUuCj4gKyAqIEB0eXBlOiBHdUMgY2FwdHVyZSByZWdpc3RlciB0eXBlCj4g KyAqIEBsaXN0OiBUaGUgcmVnaXN0ZXIgbGlzdAo+ICsgKgo+ICsgKiBUaGlzIGNhbiBiZSBwcmlu dGVkIG91dCBpbiBhIGxhdGVyIHN0YWdlIGxpa2UgZHVyaW5nIGRldl9jb3JlZHVtcAo+ICsgKiBh bmFseXNpcy4KPiArICoKPiArICogUmV0dXJuczogTm9uZQo+ICsgKi8KPiArdm9pZCB4ZV9ndWNf Y2FwdHVyZV9ub2RlX2Zyb21faHcoc3RydWN0IHhlX2h3X2VuZ2luZSAqaHdlLCB1MzIgdHlwZSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICpsaXN0KQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2d0ICpndCA9IGh3ZS0+Z3Q7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHhlX2RldmljZSAqeGUgPSBndF90b194ZShndCk7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IHhlX2d1YyAqZ3VjID0gJmd0LT51Yy5ndWM7Cj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IHhlX2RldmNvcmVkdW1wICpkZXZjb3JlZHVtcCA9ICZ4ZS0+ZGV2Y29yZWR1bXA7Cj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IF9fZ3VjX2NhcHR1cmVfcGFyc2VkX291dHB1dCAqbmV3ID0g TlVMTDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZ2NhcF9yZWdfbGlzdF9pbmZvICpyZWdpbmZv Owo+ICvCoMKgwqDCoMKgwqDCoHUxNiBndWNfaWQgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoHUzMiBs cmNhID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFsaXN0IHx8IGxpc3QtPm51bV9yZWdz ID09IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKg wqDCoMKgwqBYRV9XQVJOX09OKGxpc3QtPm51bV9yZWdzID4gZ3VjLT5jYXB0dXJlLT5tYXhfbW1p b19wZXJfbm9kZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG5ldyA9IGd1Y19jYXB0dXJlX2dldF9w cmVhbGxvY19ub2RlKGd1Yyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFuZXcpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbmV3LT5p c19wYXJ0aWFsID0gZmFsc2U7Cj4gK8KgwqDCoMKgwqDCoMKgcmVnaW5mbyA9ICZuZXctPnJlZ2lu Zm9bdHlwZV07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJlYWRfcmVnX3RvX25vZGUoaHdlLCBsaXN0 LCBuZXcpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZWdpbmZvLT5udW1fcmVncyA9IGxpc3QtPm51 bV9yZWdzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoZGV2Y29yZWR1bXAtPmNhcHR1cmVkKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWNfc3VibWl0X2V4 ZWNfcXVldWVfc25hcHNob3QgKmdlID0gZGV2Y29yZWR1bXAtPnNuYXBzaG90LmdlOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3VjX2lkID0gZ2UtPmd1Yy5pZDsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbHJjYSA9IGdlLT5scmNbMF0tPmNvbnRleHRfZGVz YyAmIExSQ19HVFRfQUREUkVTU19NQVNLOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgwqDCoMKgbmV3LT5lbmdfY2xhc3MgPSBod2UtPmNsYXNzOwo+ICvCoMKgwqDCoMKgwqDCoG5l dy0+ZW5nX2luc3QgPSBod2UtPmluc3RhbmNlOwphbGFuOiBhcyBtZW50aW9uZWQgcHJldmlvdXNs eSwgaSB0aGluayB3ZSBzaG91bGQgbm90IG1vdmUgbWFudWFsIHJlZ2lzdGVyCnJlYWRzIGZyb20g ZGV2Y29yZWR1bXAgb3ZlciB0byBndWMsIG9ubHkgZW5zdXJlIHRoZSBsaXN0IGlzIHRoZSBzaGFy ZWQgbGlzdC4KUHV0dGluZyB0aGF0IHBvaW50IGFzaWRlLCBhYm92ZSBjb2RlIG1heSBub3Qgd29y ayBjb3JyZWN0bHkuIElJUkMsCm5vZGUtPmVuZ19jbGFzcyBhbmQgbm9kZS0+ZW5nX2luc3QgYXJl IGJvdGggR1VDIHNwZWNpZmljIGlkZW50aWZpZXJzIGFuZAp3ZSBoYXZlIHRvIG1ha2Ugc29tZSBr aW5kIG9mIGNvbnZlcnNpb24gZnJvbSBod2UtY2xhc3MgdG8gZ3VjLWNsYXNzIGFuZAptYXliZSBo d2UtaW5zdGFuY2UgdG8gZ3VjLWluc3RhbmNlLi4gKGkgYW0gc3VyZSBhYm91dCB0aGUgZm9ybWVy LCBidXQgbm90CnN1cmUgb24gdXAgb24gdGhlIGxhdHRlcikuIFNvIHdoZW4gaXRzIHRpbWUgdG8g cHJpbnQsIGlmIHdlIGxvb2sgYXQgCgo+ICvCoMKgwqDCoMKgwqDCoG5ldy0+Z3VjX2lkID0gZ3Vj X2lkOwo+ICvCoMKgwqDCoMKgwqDCoG5ldy0+bHJjYSA9IGxyY2E7Cj4gK8KgwqDCoMKgwqDCoMKg bmV3LT5zb3VyY2UgPSBYRV9IV19FTkdJTkVfU09VUkNFX0hXX0VOR0lORTsKPiArwqDCoMKgwqDC oMKgwqBuZXctPnR5cGUgPSB0eXBlOwo+ICvCoMKgwqDCoMKgwqDCoGd1Y19jYXB0dXJlX2FkZF9u b2RlX3RvX291dGxpc3QoZ3VjLT5jYXB0dXJlLCBuZXcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGd1Y19tbWlvX3JlZyAqCj4gK2d1Y19jYXB0dXJlX2ZpbmRfcmVnKHN0cnVjdCBnY2FwX3Jl Z19saXN0X2luZm8gKnJlZ2luZm8sIHUzMiBhZGRyLCB1MzIgZmxhZ3MpCj4gK3sKPiArwqDCoMKg wqDCoMKgwqBpbnQgaTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlZ2luZm8gJiYgcmVnaW5m by0+bnVtX3JlZ3MgPiAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBndWNfbW1pb19yZWcgKnJlZ3MgPSByZWdpbmZvLT5yZWdzOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJlZ3MpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgcmVnaW5mby0+bnVtX3JlZ3M7IGkr KykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAocmVnc1tpXS5vZmZzZXQgPT0gYWRkciAmJiByZWdzW2ldLmZsYWdzID09 IGZsYWdzKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gJnJlZ3NbaV07Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQKPiArc25hcHNob3RfcHJpbnRfYnlfbGlzdChzdHJ1Y3QgeGVfaHdfZW5naW5l X3NuYXBzaG90ICpzbmFwc2hvdCwgc3RydWN0IGRybV9wcmludGVyICpwLCB1MzIgdHlwZSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBf X2d1Y19tbWlvX3JlZ19kZXNjcl9ncm91cCAqbGlzdCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9ndCAqZ3QgPSBzbmFwc2hvdC0+aHdlLT5ndDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGVfZGV2aWNlICp4ZSA9IGd0X3RvX3hlKGd0KTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg eGVfZ3VjICpndWMgPSAmZ3QtPnVjLmd1YzsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2 Y29yZWR1bXAgKmRldmNvcmVkdW1wID0gJnhlLT5kZXZjb3JlZHVtcDsKPiArwqDCoMKgwqDCoMKg wqB1MTYgZ3VjX2lkID0gMDsKPiArwqDCoMKgwqDCoMKgwqB1MzIgbGFzdF92YWx1ZSwgbHJjYSA9 IDA7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKPiArwqDCoMKgwqDC oMKgwqBpbnQgaSwgZ3VjX2NsYXNzOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgaXNfZXh0Owo+ICsK PiArwqDCoMKgwqDCoMKgwqBpZiAoIWxpc3QpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaXNfZXh0ID0gbGlzdCA9PSBndWMtPmNh cHR1cmUtPmV4dGxpc3RzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoZGV2Y29yZWR1bXAtPmNh cHR1cmVkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndWNf c3VibWl0X2V4ZWNfcXVldWVfc25hcHNob3QgKmdlID0gZGV2Y29yZWR1bXAtPnNuYXBzaG90Lmdl Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3VjX2lkID0gZ2UtPmd1Yy5p ZDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbHJjYSA9wqAgZ2UtPmxyY1swXS0+ Y29udGV4dF9kZXNjOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgZ3Vj X2NsYXNzID0geGVfZW5naW5lX2NsYXNzX3RvX2d1Y19jbGFzcyhzbmFwc2hvdC0+aHdlLT5jbGFz cyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG5vZGUgPSAmZ3VjLT5jYXB0dXJlLT5vdXRsaXN0Owo+ ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fcmVnczsgaSsrKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBfX2d1Y19jYXB0dXJlX3BhcnNl ZF9vdXRwdXQgKm4sICpudG1wOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25z dCBzdHJ1Y3QgX19ndWNfbW1pb19yZWdfZGVzY3IgKnN1Yl9saXN0ID0gJmxpc3QtPmxpc3RbaV07 CgphbGFuOiBJJ20gYSBsaXR0bGUgYml0IGxvc3QgcmlnaHQgaGVyZS4gVGhlIHBhcmFtICJsaXN0 IiBjb21pbmcgaW50byB0aGlzCmZ1bmN0aW9uIGlzIHRoZSBsaXN0IHJlZ2lzdGVycyB0aGF0IHdl IHVzZSBmb3IgcmVnaXN0ZXJpbmcgaW50byBBRFMgKG5vdCAKdGhlIG91dHB1dCBjYXB0dXJlIG5v ZGUgbGlzdCkuIFRoZW4gdGhlIGlkZWEgd2UgaGF2ZSBpcyB0byBmb3JtYXQgdGhlIHByaW50aW5n Cm9mIHRoZSByZWdpc3RlcnMgdGhhdCB3YXMgY2FwdHVyZWQgZnJvbSBhIG1hdGNoaW5nIG91dGxp c3QuIHRvIGRvIHRoYXQKd2UgZ3JhYiB0aGUgbmV4dCByZWdpc3RlciBmcm9tIG91dGxvc3QgYW5k IHRoZW4gbG9vayBmb3IgdGhlIG1hdGNoaW5nCnJlZ2lzdGVyIGRlc2NyaXB0aW9uIGZyb20gbGlz dC4KCgpUaGF0IHNhaWQgaSB3b3VsZCBoYXZlIGV4cGVjdGVkIHRoZSBmbG93IG9mIHRoaXMgZnVu Y3Rpb24gdG8gbG9vayBsaWtlIHRoaXM6ClN0ZXAxOiBmaW5kIHRoZSBtYXRoaW5nIG91dHB1dCBu b2RlLgoKCglzdHJ1Y3QgX19ndWNfY2FwdHVyZV9wYXJzZWRfb3V0cHV0ICptYXRjaG5vZGUgPSBO VUxMOwoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG4sIG50bXAsIG5vZGUsIGxpbmspIHsKCQlp ZiAobi0+ZW5nX2NsYXNzID09IGd1Y19jbGFzcyAmJiBuLT5lbmdfaW5zdCA9PSBzbmFwc2hvdC0+ aHdlLT5pbnN0YW5jZSAmJgoJCQluLT5ndWNfaWQgPT0gZ3VjX2lkICYmIChuLT5scmNhICYgTFJD X0dUVF9BRERSRVNTX01BU0spID09IGxyY2EpIHsKCQkJbWF0Y2hub2RlID0gbjsKCX0KCglpZiAo IW1hdGNobm9kZSkgewoJCXByaW50X2Vycm9yIC0gY2Fubm90IGZpbmQgbWF0Y2hpbmcgcmVnaXN0 ZXIgZHVtcHMKCQlyZXR1cm4gKGVycm9yPykKCX0KCglzdHJ1Y3QgZ2NhcF9yZWdfbGlzdF9pbmZv ICpyZWdpbmZvID0gJm1hdGNobm9kZS0+cmVnaW5mb1t0eXBlXTsKCglzdHJ1Y3QgZ3VjX21taW9f cmVnICpyZWc7Cgljb25zdCBzdHJ1Y3QgX19ndWNfbW1pb19yZWdfZGVzY3IgKnJlZ19kZXNjcjsK CXUzMiB2YWx1ZTsKCWZvciAoaSA9IDA7IGkgPCByZWdpbmZvLT5udW1fcmVnczsgKytpKSB7CgkJ cmVnID0gcmVnaW5mby0+cmVnc1tpXQoJCXJlZ19kZXNjciA9IGd1Y19jYXB0dXJlX2ZpbmRfcmVn X2Rlc2NyKHJlZywgbGlzdCk7CgkJCQkvLyBpbiB0aGlzIGZ1bmN0aW9uLCBsb29wIHRocnUgbGlz dC0+bGlzdCBhbmQgZmluZCBtYXRjaGluZyBhZGRyZXNzIC8gc3RlZXJpbmctaW5mbwoJCWlmICgh cmVnX2Rlc2NyKSB7CgkJCWNvbnRpbnVlOwoJCQlwcmludCB3YXJuaW5nCgkJfQoJCgkJLy90aGUg cmVzdCBvZiB0aGUgcHJpbnQgZm9ybWF0dGluZyBjb2RlLi4uCgkJdmFsdWUgPSByZWctPnZhbHVl OwoJCWlmIChzdWJfbGlzdC0+ZGF0YV90eXBlID09IFJFR182NEJJVF9MT1dfRFcpIHsKCQkJbGFz dF92YWx1ZSA9IHZhbHVlOwoJCQkJY29udGludWU7CgkJfSBlbHNlIGlmIChzdWJfbGlzdC0+ZGF0 YV90eXBlID09IFJFR182NEJJVF9ISV9EVykgewoJCQl1NjQgdmFsdWVfcXcgPSAoKHU2NCl2YWx1 ZSA8PCAzMikgfCBsYXN0X3ZhbHVlOwoJCQlpZiAoc3ViX2xpc3QtPnJlZ25hbWUpCgkJCQlkcm1f cHJpbnRmKHAsICJcdCVzOiAweCUwMTZsbHhcbiIsCgkJCQkJc3ViX2xpc3QtPnJlZ25hbWUsIHZh bHVlX3F3KTsKCQkJCQljb250aW51ZTsgLy8gPC0tLSBhbGFuOiBpIHRoaW5rIGJyZWFrIHdhcyB3 cm9uZyBoZXJlCgkJfQoJCWlmICghc3ViX2xpc3QtPnJlZ25hbWUpCgkJCWJyZWFrOwoJCWlmIChp c19leHQpIHsKCQkJLi4uCgkJCS4uLgoJCX0KCQkvLyBkb250IG5lZWQgdGhhdCBsYXN0IGJyZWFr OwoJfQoKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShuLCBudG1wLCBub2RlLCBsaW5rKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobi0+ZW5nX2NsYXNzID09IGd1Y19jbGFzcyAm JiBuLT5lbmdfaW5zdCA9PSBzbmFwc2hvdC0+aHdlLT5pbnN0YW5jZSAmJgphbGFuOiBkb2VzIGh3 ZS0+aW5zdGFuY2UgbWF0Y2ggdGhlIGd1YydzIGVuZ2luZS1pbnN0YW5jZT8gbmVlZCB0byBjaGVj ayB3aXRoIHRoZSBmb2xrcyBmYW1pbGlhcgp3aXRoIHRoZSBndWMgbWFwcGluZyB0YWJsZSB3ZSBz ZXR1cCBpbiBhZHMgLSBtYXliZSBub3QgYW4gaXNzdWUuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbi0+Z3VjX2lkID09IGd1Y19pZCAmJiAo bi0+bHJjYSAmIExSQ19HVFRfQUREUkVTU19NQVNLKSA9PSBscmNhKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IGdjYXBfcmVnX2xpc3RfaW5mbyAqcmVnaW5mbyA9ICZuLT5yZWdpbmZvW3R5cGVdOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBndWNfbW1pb19yZWcgKnJlZzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgdmFsdWU7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJlZyA9IGd1Y19jYXB0dXJlX2ZpbmRfcmVnKHJlZ2luZm8sIHN1Yl9saXN0LT5yZWcuYWRkciwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN1Yl9saXN0LT5mbGFncyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFyZWcpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWx1ZSA9IHJlZy0+dmFsdWU7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHN1Yl9saXN0LT5kYXRhX3R5cGUgPT0gUkVHXzY0QklUX0xPV19EVykgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsYXN0X3ZhbHVlID0gdmFsdWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoc3ViX2xpc3QtPmRhdGFfdHlwZSA9PSBSRUdf NjRCSVRfSElfRFcpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTY0IHZhbHVlX3F3ID0gKCh1 NjQpdmFsdWUgPDwgMzIpIHwgbGFzdF92YWx1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChzdWJfbGlzdC0+cmVnbmFtZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9wcmludGYocCwgIlx0JXM6IDB4JTAxNmxseFxuIiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN1Yl9saXN0LT5y ZWduYW1lLCB2YWx1ZV9xdyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKCFzdWJfbGlzdC0+cmVnbmFtZSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpc19leHQpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW50IGRzcywgZ3JvdXAsIGluc3RhbmNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ3JvdXAgPSBGSUVMRF9HRVQoR1VDX1JFR1NFVF9TVEVFUklOR19HUk9VUCwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdWJfbGlz dC0+ZmxhZ3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnN0YW5jZSA9IEZJRUxEX0dFVChH VUNfUkVHU0VUX1NURUVSSU5HX0lOU1RBTkNFLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN1Yl9saXN0LT5mbGFncyk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzcyA9IHhlX2d0X21jcl9zdGVlcmluZ19pbmZvX3RvX2Rz c19pZChndCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn cm91cCwgaW5zdGFuY2UpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3ByaW50Zihw LCAiXHQlc1sldV06IDB4JTA4eFxuIiwgc3ViX2xpc3QtPnJlZ25hbWUsIGRzcywKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsdWUpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9wcmludGYocCwgIlx0JXM6IDB4JTA4eFxu Iiwgc3ViX2xpc3QtPnJlZ25hbWUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHZhbHVlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB4 ZV9od19lbmdpbmVfc25hcHNob3RfcHJpbnQgLSBQcmludCBvdXQgYSBnaXZlbiBYZSBIVyBFbmdp bmUgc25hcHNob3QuCj4gKyAqIEBzbmFwc2hvdDogWGUgSFcgRW5naW5lIHNuYXBzaG90IG9iamVj dC4KPiArICogQHA6IGRybV9wcmludGVyIHdoZXJlIGl0IHdpbGwgYmUgcHJpbnRlZCBvdXQuCj4g KyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRzIG91dCBhIGdpdmVuIFhlIEhXIEVuZ2luZSBz bmFwc2hvdCBvYmplY3QuCj4gKyAqLwo+ICt2b2lkIHhlX2h3X2VuZ2luZV9zbmFwc2hvdF9wcmlu dChzdHJ1Y3QgeGVfaHdfZW5naW5lX3NuYXBzaG90ICpzbmFwc2hvdCwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRybV9wcmludGVyICpwKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHR5cGU7Cj4gK8KgwqDC oMKgwqDCoMKgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICpsaXN0Owo+ ICvCoMKgwqDCoMKgwqDCoGVudW0gZ3VjX2NhcHR1cmVfbGlzdF9jbGFzc190eXBlIGNhcHR1cmVf Y2xhc3M7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghc25hcHNob3QpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgeGVfZ3RfYXNz ZXJ0KHNuYXBzaG90LT5od2UtPmd0LCBzbmFwc2hvdC0+c291cmNlIDw9IFhFX0hXX0VOR0lORV9T T1VSQ0VfR1VDX0NBUFRVUkUpOwo+ICvCoMKgwqDCoMKgwqDCoHhlX2d0X2Fzc2VydChzbmFwc2hv dC0+aHdlLT5ndCwgc25hcHNob3QtPmh3ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGNhcHR1cmVf Y2xhc3MgPSB4ZV9lbmdpbmVfY2xhc3NfdG9fZ3VjX2NhcHR1cmVfY2xhc3Moc25hcHNob3QtPmh3 ZS0+Y2xhc3MpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkcm1fcHJpbnRmKHAsICIlcyAocGh5c2lj YWwpLCBsb2dpY2FsIGluc3RhbmNlPSVkXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNuYXBzaG90LT5uYW1lID8gc25hcHNob3QtPm5hbWUgOiAiIiwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+bG9naWNhbF9pbnN0YW5jZSk7 Cj4gK8KgwqDCoMKgwqDCoMKgZHJtX3ByaW50ZihwLCAiXHRDYXB0dXJlIHNvdXJjZTogJXNcbiIs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc25hcHNob3QtPnNvdXJjZSA9 PSBYRV9IV19FTkdJTkVfU09VUkNFX0dVQ19DQVBUVVJFID8gIkd1QyIgOiAiRW5naW5lIik7Cj4g K8KgwqDCoMKgwqDCoMKgZHJtX3ByaW50ZihwLCAiXHRGb3JjZXdha2U6IGRvbWFpbiAweCV4LCBy ZWYgJWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc25hcHNob3Qt PmZvcmNld2FrZS5kb21haW4sIHNuYXBzaG90LT5mb3JjZXdha2UucmVmKTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgZm9yICh0eXBlID0gR1VDX1NUQVRFX0NBUFRVUkVfVFlQRV9HTE9CQUw7IHR5cGUg PCBHVUNfSE9TVF9DQVBUVVJFX1RZUEVfTUFYOyB0eXBlKyspIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbGlzdCA9IHhlX2d1Y19jYXB0dXJlX2dldF9yZWdfZGVzY19saXN0KHNu YXBzaG90LT5od2UtPmd0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEdVQ19DQVBUVVJFX0xJU1RfSU5ERVhfUEYsIHR5cGUsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FwdHVyZV9j bGFzcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNuYXBzaG90X3ByaW50X2J5 X2xpc3Qoc25hcHNob3QsIHAsIHR5cGUsIGxpc3QpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgaWYgKGNhcHR1cmVfY2xhc3MgPT0gR1VDX0NBUFRVUkVfTElTVF9DTEFT U19SRU5ERVJfQ09NUFVURSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0 ID0geGVfZ3VjX2NhcHR1cmVfZ2V0X2V4dF9yZWdfZGVzY19saXN0KHNuYXBzaG90LT5od2UtPmd0 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBHVUNfQ0FQVFVSRV9MSVNUX0lOREVYX1BGLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHVUNfU1RBVEVfQ0FQVFVS RV9UWVBFX0VOR0lORV9DTEFTUywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FwdHVyZV9jbGFzcyk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHNuYXBzaG90X3ByaW50X2J5X2xpc3Qoc25hcHNob3QsIHAsIEdV Q19TVEFURV9DQVBUVVJFX1RZUEVfRU5HSU5FX0NMQVNTLCBsaXN0KTsKPiArwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGRybV9wdXRzKHAsICJcbiIpOwo+ICt9Cj4gKwo+ICsv KioKPiArICogeGVfZ3VjX2NhcHR1cmVfaXNfcmVhZHlfZm9yIC0gQ2hlY2sgaWYgY2FwdHVyZSBp cyByZWFkeSBmb3IgdGhlIGpvYi4KPiArICogQGpvYjogVGhlIGpvYiBvYmplY3QuCj4gKyAqCj4g KyAqIFNlYXJjaCB3aXRoaW4gdGhlIGNhcHR1cmUgb3V0bGlzdCBmb3IgdGhlIGpvYi4KPiArICoK PiArICogUmV0dXJuczogVHJ1ZSBpZiBmb3VuZCBhIG5vZGUgZm9yIHRoZSBqb2IKPiArICovCj4g K2Jvb2wgeGVfZ3VjX2NhcHR1cmVfaXNfcmVhZHlfZm9yKHN0cnVjdCB4ZV9zY2hlZF9qb2IgKmpv YikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZTsKPiArwqDC oMKgwqDCoMKgwqBlbnVtIHhlX2h3X2VuZ2luZV9pZCBpZDsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgeGVfZXhlY19xdWV1ZSAqcSA9IGpvYi0+cTsKPiArwqDCoMKgwqDCoMKgwqB1MTYgZ3VjX2Ns YXNzID0gR1VDX0xBU1RfRU5HSU5FX0NMQVNTICsgMTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFxIHx8ICFxLT5ndCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBGaW5kIGh3ZSBmb3IgdGhlIGpvYiAqLwo+ICvC oMKgwqDCoMKgwqDCoGZvcl9lYWNoX2h3X2VuZ2luZShod2UsIHEtPmd0LCBpZCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaHdlICE9IHEtPmh3ZSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBndWNfY2xhc3MgPSB4ZV9lbmdpbmVfY2xhc3NfdG9fZ3Vj X2NsYXNzKGh3ZS0+Y2xhc3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChndWNfY2xhc3Mg PD0gR1VDX0xBU1RfRU5HSU5FX0NMQVNTKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBfX2d1Y19jYXB0dXJlX3BhcnNlZF9vdXRwdXQgKm4sICpudG1wOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3VjICpndWMgPcKgICZxLT5ndC0+ dWMuZ3VjOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGlzdF9oZWFk ICpsaXN0ID0gJmd1Yy0+Y2FwdHVyZS0+b3V0bGlzdDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTE2IGd1Y19pZCA9IHEtPmd1Yy0+aWQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHUzMiBscmNhID0geGVfbHJjX2dndHRfYWRkcihqb2ItPnEtPmxyY1swXSkgJiBM UkNfR1RUX0FERFJFU1NfTUFTSzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIExvb2sgZm9yIGEgbWF0Y2hp bmcgR3VDIHJlcG9ydGVkIGVycm9yIGNhcHR1cmUgbm9kZSBmcm9tCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqIHRoZSBpbnRlcm5hbCBvdXRwdXQgbGluay1saXN0IGJhc2VkIG9u IGVuZ2luZSwgZ3VjIGlkIGFuZAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBs cmNhIGluZm8uCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobiwgbnRtcCwg bGlzdCwgbGluaykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKG4tPmVuZ19jbGFzcyA9PSBndWNfY2xhc3MgJiYgbi0+ZW5nX2luc3QgPT0gaHdl LT5pbnN0YW5jZSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG4tPmd1Y19pZCA9PSBndWNfaWQgJiYgKG4tPmxyY2EgJiBMUkNfR1RUX0FE RFJFU1NfTUFTSykgPT0gbHJjYSAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG4tPnNvdXJjZSA9PSBYRV9IV19FTkdJTkVfU09VUkNFX0dV Q19DQVBUVVJFKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxz ZTsKPiArfQo+ICsKPiArLyoKPiArICogeGVfZ3VjX2NhcHR1cmVfZnJlZV9wcmVfY2FwdHVyZSAt IEZyZWUgdGhlIHByZSBjYXB0dXJlZCByZWdpc3RlciBsaXN0Cj4gKyAqIEBndWM6IFRoZSBHdUMg b2JqZWN0Cj4gKyAqCj4gKyAqIEZyZWUgdGhlIHByZSBjYXB0dXJlZCByZWdpc3RlciBsaXN0Cj4g KyAqLwo+ICt2b2lkIHhlX2d1Y19jYXB0dXJlX2ZyZWVfcHJlX2NhcHR1cmUoc3RydWN0IHhlX2d1 YyAqZ3VjKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGd1Yy0+Y2FwdHVyZSAmJiAhbGlzdF9l bXB0eSgmZ3VjLT5jYXB0dXJlLT5vdXRsaXN0KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgX19ndWNfY2FwdHVyZV9wYXJzZWRfb3V0cHV0ICpuLCAqbnRtcDsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShuLCBudG1wLCAmZ3VjLT5jYXB0dXJlLT5vdXRsaXN0LCBsaW5rKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobi0+c291cmNlID09IFhFX0hX X0VOR0lORV9TT1VSQ0VfSFdfRU5HSU5FICYmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogRGlyZWN0IHJlYWQgaXMgZm9yIGhvc3Qgb25s eSwgbm8gbmVlZCB0byByZWZyZXNoICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbi0+dHlwZSAhPSBHVUNfU1RBVEVfQ0FQVFVSRV9UWVBF X0hPU1RfRElSRUNUX1JFQUQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2RlbCgmbi0+bGluayk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogcHV0IG5vZGUgYmFjayB0byBjYWNoZSBsaXN0ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3VjX2NhcHR1cmVfYWRk X25vZGVfdG9fY2FjaGVsaXN0KGd1Yy0+Y2FwdHVyZSwgbik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gK30KPiArCj4gKy8qCj4gKyAqIHhlX2d1Y19j YXB0dXJlX2ZyZWUgLSBGcmVlIHRoZSBHdUMgY2FwdHVyZWQgcmVnaXN0ZXIgbGlzdAo+ICsgKiBA Z3VjOiBUaGUgR3VDIG9iamVjdAo+ICsgKgo+ICsgKiBGcmVlIHRoZSBHdUMgY2FwdHVyZWQgcmVn aXN0ZXIgbGlzdAo+ICsgKi8KPiArdm9pZCB4ZV9ndWNfY2FwdHVyZV9mcmVlKHN0cnVjdCB4ZV9n dWMgKmd1YykKPiArewo+ICvCoMKgwqDCoMKgwqDCoGlmIChndWMtPmNhcHR1cmUgJiYgIWxpc3Rf ZW1wdHkoJmd1Yy0+Y2FwdHVyZS0+b3V0bGlzdCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IF9fZ3VjX2NhcHR1cmVfcGFyc2VkX291dHB1dCAqbiwgKm50bXA7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUobiwgbnRtcCwgJmd1Yy0+Y2FwdHVyZS0+b3V0bGlzdCwgbGluaykgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9kZWwoJm4tPmxpbmspOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogcHV0IG5v ZGUgYmFjayB0byBjYWNoZSBsaXN0ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBndWNfY2FwdHVyZV9hZGRfbm9kZV90b19jYWNoZWxpc3QoZ3VjLT5j YXB0dXJlLCBuKTsKYWxhbjogdGhpcyBpcyBpbmNvcnJlY3QuLi4gaWYgZGV2X2NvcmVkdW1wIGhh cyBiZWVuIGZyZWVkIGZvciBvbmUgc3BlY2lmaWMgY2FwdHVyZSBldmVudCwKaSBkb250IHRoaW5r IHdlIHdhbnQgdG8gZnJlZSBhbCBjYXB0dXJlIG5vZGVzLiBEb24ndCBmb3JnZXQgd2UgY2FuIGhh dmUgbXVsdGlwbGUgZW5naW5lcwpiZSBoYW5naW5nIGFuZCByZXNldHRpbmcgaW4gcXVpY2sgc3Vj Y2Vzc2lvbiAod2hpY2ggaXMgYWN0dWFsbHkgdGhlIGNhc2UgZm9yIHNvbWUgb2YKb3VyIG1vcmUg aW50ZW5zZSBpZ3QgdGVzdHMsIGFsc28gaWYgd2UgaGF2ZSBkZXBlbmRlbnQgZW5naW5lIHJlc2V0 cywgd2UgY2FuIGFsc28gc2VlCnRoaXMpLiBUaGF0IHNhaWQsIHdlIGhhdmUgdG8gdGhpbmsgb2Yg dHdvIHRoaW5nczoKCjEuIG9ubHkgZnJlZSB0aGUgb3VwdXQgbm9kZSB0aGF0IHdhcyBkaXJlY3Rs eSBzZXJ2aWNpbmcgdGhlIHhlX2RldmNvcmVkdW1wX3NuYXBzaG90CnN0cnVjdHVyZSB0aGF0IGlz IGdldHRpbmcgZnJlZWQsIHRoaXMgbWVhbnMsIHdlIG1pZ2h0IHdhbm5hIHRha2UgaW4gdGhlIGd1 YyBzdHJ1Y3R1cmUKYXMgd2VsbCBhcyB0aGUgc3RydWN0IHhlX2RldmNvcmVkdW1wX3NuYXBzaG90 IHN0cnVjdHVyZSBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZQptYXRjaGluZyBub2RlIChieSB3YXkg b2YgZW5naW5lLCBndWMtaWQsIGxyYywgZXRjKS4KCjIuIHdlIGRvbid0IHdhbnQgdG8gbGVhayBj YXB0dXJlLT5vdXRsaXN0OiBpbiB0aGUgZXZlbnQgd2UgaGF2ZSBtdWx0aXBsZQpndWMgZXJyb3Ig Y2FwdHVyZSBJUlFzIGFuZCB3ZSBwYXJzZSBhbmQgZXh0cmFjdCBtdWx0aXBsZSBvdXRwdXQgbm9k ZXMgZnJvbQpndWMtY2FwdHVyZS1yaW5nLWJ1ZmZlciBpcyBidXQgb25seSBvbmUgIGRldmNvcmUt ZHVtcHMgZ2V0IGdlbmVyYXRlZCBhbmQKZnJlZWQgKHNlZSBmdW5jdGlvbiBndWNfY2FwdHVyZV9n ZXRfcHJlYWxsb2Nfbm9kZSB3aGVyZSBpdCBiYWlscyBpZiB0aGVyZQphbHJlYWR5IGlzIGEgZGV2 Y29yZWR1bXAgc3RydWN0IHdhaXRpbmcgdG8gYmUgY29sbGVjdGVkKSwgd2UgaGF2ZSB0byBlbnN1 cmUKd2UgZG9uJ3QgbGVhayB0aG9zZSBub2RlcyBpbiBvdXRsaXN0LiBIb3dldmVyLCB3ZSBkb250 IGhhdmUgdG8gd29ycnkgYWJvdXQKdGhpcyBzaW5jZSBpbiBwYXRjaCAjNCwgZnVuY3Rpb24gZ3Vj X2NhcHR1cmVfZ2V0X3ByZWFsbG9jX25vZGUgd2lsbCBhbHdheXMKc3RlYWwgYmFjayBMUlUgbm9k ZSBmcm9tIG91dGxpc3QgaWYgcmVxdWlyZWQuCgpUaGF0IHNhaWQsIHdlIGRvIHdhbnQgdG8gZml4 IHRoaXMgZnVuY3Rpb24gZm9yICMxLiAKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArfQo+ICsKPiDCoC8qCj4gwqAgKiB4ZV9ndWNfY2FwdHVy ZV9zdGVlcmVkX2xpc3RfaW5pdCAtIEluaXQgc3RlZXJpbmcgcmVnaXN0ZXIgbGlzdAo+IMKgICog QGd1YzogVGhlIEd1QyBvYmplY3QKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlL3hl X2d1Y19jYXB0dXJlLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuaAo+IGlu ZGV4IDNhNjkwZThiNzE0YS4uYmNkYTE3ZWY5ZWI5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1 Y19jYXB0dXJlLmgKPiBAQCAtMTIsNiArMTIsMjEgQEAKPiDCoCNpbmNsdWRlICJ4ZV9ndWNfZndp Zi5oIgo+IMKgCj4gwqBzdHJ1Y3QgeGVfZ3VjOwo+ICtzdHJ1Y3QgeGVfaHdfZW5naW5lOwo+ICtz dHJ1Y3QgeGVfaHdfZW5naW5lX3NuYXBzaG90Owo+ICtzdHJ1Y3QgeGVfc2NoZWRfam9iOwo+ICsK PiArLyogUmVnaXN0ZXItdHlwZXMgb2YgR3VDIGNhcHR1cmUgcmVnaXN0ZXIgbGlzdHMgZm9yIGhv c3Qgc2lkZSBwcm9jZXNzICovCj4gK2VudW0gZ3VjX2NhcHR1cmVfaG9zdF90eXBlIHsKPiArwqDC oMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEd1QyBzdXBwb3J0IGxpbWl0ZWQgcmVn aXN0ZXJzIHJhbmdlcyB0byBiZSBjYXB0dXJlZCBmb3IgZGVidWcKPiArwqDCoMKgwqDCoMKgwqAg KiBwdXJwb3NlLCBmb3IgcmVnaXN0ZXJzIG91dCBvZiB0aGVzZSByYW5nZXMsIGRpcmVjdCByZWFk IGlzIHRoZSBvbmx5Cj4gK8KgwqDCoMKgwqDCoMKgICogd2F5IHRvIGFjY2Vzcy4KPiArwqDCoMKg wqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBHVUNfU1RBVEVfQ0FQVFVSRV9UWVBFX0hPU1Rf RElSRUNUX1JFQUQgPSBHVUNfU1RBVEVfQ0FQVFVSRV9UWVBFX01BWCwKPiArfTsKPiArCj4gKyNk ZWZpbmUgR1VDX0hPU1RfQ0FQVFVSRV9UWVBFX01BWMKgwqDCoMKgwqDCoChHVUNfU1RBVEVfQ0FQ VFVSRV9UWVBFX0hPU1RfRElSRUNUX1JFQUQgKyAxKQo+IMKgCj4gwqBzdGF0aWMgaW5saW5lIGVu dW0gZ3VjX2NhcHR1cmVfbGlzdF9jbGFzc190eXBlIHhlX2d1Y19jbGFzc190b19jYXB0dXJlX2Ns YXNzKHUxNiBjbGFzcykKPiDCoHsKPiBAQCAtNDQsNiArNTksMTcgQEAgaW50IHhlX2d1Y19jYXB0 dXJlX2dldGxpc3RzaXplKHN0cnVjdCB4ZV9ndWMgKmd1YywgdTMyIG93bmVyLCB1MzIgdHlwZSwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW51bSBndWNfY2FwdHVyZV9saXN0X2NsYXNzX3R5cGUgY2FwdHVyZV9jbGFzcywgc2l6 ZV90ICpzaXplKTsKPiDCoGludCB4ZV9ndWNfY2FwdHVyZV9nZXRudWxsaGVhZGVyKHN0cnVjdCB4 ZV9ndWMgKmd1Yywgdm9pZCAqKm91dHB0ciwgc2l6ZV90ICpzaXplKTsKPiDCoHNpemVfdCB4ZV9n dWNfY2FwdHVyZV9hZHNfaW5wdXRfd29yc3Rfc2l6ZShzdHJ1Y3QgeGVfZ3VjICpndWMpOwo+ICtj b25zdCBzdHJ1Y3QgX19ndWNfbW1pb19yZWdfZGVzY3JfZ3JvdXAgKgo+ICt4ZV9ndWNfY2FwdHVy ZV9nZXRfcmVnX2Rlc2NfbGlzdChzdHJ1Y3QgeGVfZ3QgKmd0LCB1MzIgb3duZXIsIHUzMiB0eXBl LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbnVtIGd1Y19jYXB0dXJlX2xpc3RfY2xhc3NfdHlwZSBjYXB0dXJlX2NsYXNz KTsKPiArY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICoKPiAreGVfZ3Vj X2NhcHR1cmVfZ2V0X2V4dF9yZWdfZGVzY19saXN0KHN0cnVjdCB4ZV9ndCAqZ3QsIHUzMiBvd25l ciwgdTMyIHR5cGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBndWNfY2FwdHVyZV9saXN0X2NsYXNz X3R5cGUgY2FwdHVyZV9jbGFzcyk7Cj4gK2Jvb2wgeGVfZ3VjX2NhcHR1cmVfaXNfcmVhZHlfZm9y KHN0cnVjdCB4ZV9zY2hlZF9qb2IgKmpvYik7Cj4gK3ZvaWQgeGVfZ3VjX2NhcHR1cmVfbm9kZV9m cm9tX2h3KHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZSwgdTMyIHR5cGUsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IHN0cnVjdCBfX2d1Y19tbWlvX3JlZ19kZXNjcl9ncm91cCAqbGlzdCk7Cj4gK3ZvaWQgeGVfZ3Vj X2NhcHR1cmVfZnJlZV9wcmVfY2FwdHVyZShzdHJ1Y3QgeGVfZ3VjICpndWMpOwo+ICt2b2lkIHhl X2d1Y19jYXB0dXJlX2ZyZWUoc3RydWN0IHhlX2d1YyAqZ3VjKTsKPiDCoGludCB4ZV9ndWNfY2Fw dHVyZV9zdGVlcmVkX2xpc3RfaW5pdChzdHJ1Y3QgeGVfZ3VjICpndWMpOwo+IMKgaW50IHhlX2d1 Y19jYXB0dXJlX2luaXQoc3RydWN0IHhlX2d1YyAqZ3VjKTsKPiDCoAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmVfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS94ZS94ZV9ndWNfY2FwdHVyZV90eXBlcy5oCj4gaW5kZXggMjA1NzEyNWIxYmZhLi44NTdhZDEw YmI4ZjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlX3R5 cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmVfdHlwZXMuaAo+ IEBAIC00MSw2ICs0MSw4IEBAIHN0cnVjdCBfX2d1Y19tbWlvX3JlZ19kZXNjciB7Cj4gwqDCoMKg wqDCoMKgwqDCoHUzMiBtYXNrOwo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQHJlZ25hbWU6IE5hbWUg b2YgdGhlIHJlZ2lzdGVyICovCj4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKnJlZ25hbWU7 Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwb3NpdGlvbl9pbl9zbmFwc2hvdDogVGhlIG9mZnNldCBw b3NpdGlvbiBpbiBzbmFwc2hvdCBzdHJ1Y3R1cmUgKi8KPiArwqDCoMKgwqDCoMKgwqB1MzIgcG9z aXRpb25faW5fc25hcHNob3Q7Cj4gwqB9Owo+IMKgCj4gwqAvKioKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hlL3hlX2d1Y19zdWJtaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZS94ZV9n dWNfc3VibWl0LmMKPiBpbmRleCAzODFiZTg0NzQwY2YuLjQ0MzUzZTMyM2YyNCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX3N1Ym1pdC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hlL3hlX2d1Y19zdWJtaXQuYwo+IEBAIC0xMDczLDYgKzEwNzMsNyBAQCBndWNfZXhl Y19xdWV1ZV90aW1lZG91dF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKmRybV9qb2IpCj4gwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ncHVfc2NoZWR1bGVyICpzY2hlZCA9ICZxLT5ndWMtPnNj aGVkOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3VjICpndWMgPSBleGVjX3F1ZXVlX3Rv X2d1YyhxKTsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqcHJvY2Vzc19uYW1lID0gIm5v IHByb2Nlc3MiOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9kZXZpY2UgKnhlID0gZ3VjX3Rv X3hlKGd1Yyk7Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBlcnIgPSAtRVRJTUU7Cj4gwqDCoMKgwqDC oMKgwqDCoHBpZF90IHBpZCA9IC0xOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgaSA9IDA7Cj4gQEAg LTExMDAsNiArMTEwMSwxOCBAQCBndWNfZXhlY19xdWV1ZV90aW1lZG91dF9qb2Ioc3RydWN0IGRy bV9zY2hlZF9qb2IgKmRybV9qb2IpCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghc2tpcF90aW1lb3V0 X2NoZWNrICYmICF4ZV9zY2hlZF9qb2Jfc3RhcnRlZChqb2IpKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byByZWFybTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoC8qIFByZS1j YXB0dXJlIHJlZ2lzdGVyIHNuYXBzaG90LCBpZiBkZXZjb3JlZHVtcCBub3QgY2FwdHVyZWQgYW5k IEd1QyBjYXB0dXJlIG5vdCByZWFkeSAqLwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZXhlY19xdWV1 ZV9raWxsZWQocSkgJiYgIXhlLT5kZXZjb3JlZHVtcC5jYXB0dXJlZCAmJiB4ZV9kZXZpY2VfdWNf ZW5hYmxlZCh4ZSkgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGUtPndlZGdlZC5tb2RlID49 IDEgJiYgIXhlX2d1Y19jYXB0dXJlX2lzX3JlYWR5X2Zvcihqb2IpKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIHRha2UgZm9yY2Ugd2FrZSBiZWZvcmUgZW5naW5lIHJlZ2lz dGVyIHByZS1jYXB0dXJlICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4 ZV9mb3JjZV93YWtlX2dldChndF90b19mdyhxLT5ndCksIFhFX0ZPUkNFV0FLRV9BTEwpKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZ3RfaW5mbyhx LT5ndCwgImZhaWxlZCB0byBnZXQgZm9yY2V3YWtlIGZvciBjb3JlZHVtcCBjYXB0dXJlXG4iKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2h3X2VuZ2luZV9zbmFwc2hv dF9jYXB0dXJlX2Zvcl9qb2Ioam9iKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhlX2ZvcmNlX3dha2VfcHV0KGd0X3RvX2Z3KHEtPmd0KSwgWEVfRk9SQ0VXQUtFX0FMTCk7 Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgLyoKPiDCoMKgwqDCoMKg wqDCoMKgICogWFhYOiBTYW1wbGluZyB0aW1lb3V0IGRvZXNuJ3Qgd29yayBpbiB3ZWRnZWQgbW9k ZSBhcyB3ZSBoYXZlIHRvCj4gwqDCoMKgwqDCoMKgwqDCoCAqIG1vZGlmeSBzY2hlZHVsaW5nIHN0 YXRlIHRvIHJlYWQgdGltZXN0YW1wLiBXZSBjb3VsZCByZWFkIHRoZQo+IEBAIC0xMTgyLDcgKzEx OTUsNyBAQCBndWNfZXhlY19xdWV1ZV90aW1lZG91dF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2Ig KmRybV9qb2IpCj4gwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3hlX3NjaGVkX2pvYl90aW1lZG91dChq b2IpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghZXhlY19xdWV1ZV9raWxsZWQocSkpCj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2RldmNvcmVkdW1wKGpvYik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2RldmNvcmVkdW1wKGpvYik7IC8qIHByZS1j YXB0dXJlZCBkYXRhIHdpbGwgYmUgcmVmcmVzaGVkIGJ5IEd1QyBjYXB0dXJlICovCmFsYW46IGNv bW1lbnQgZGVzY3JpcHRpb24gaXMgbm90IGFjY3VyYXRlLiBJIHRoaW5rICJyZWZyZXNoZWQiIGlz IHRoZSB3cm9uZyB0ZXJtLAppIHRoaW5rIGl0IHNob3VsZCBiZSAibWFudWFsIGNhcHR1cmUgZGF0 YSB3aWxsIGJlIHJlcGxhY2VkIGJ5IEd1QyBjYXB0dXJlIGlmCkd1QyBzdWNjZWVkcyBvbiB1cGNv bWluZyBvciBhbHJlYWR5LWNvbXBsZXRlZCBlbmdpbmUgcmVzZXQsIHJlcG9ydGVkIHZpYSBHMkgu Igo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8qCj4gwqDCoMKgwqDCoMKgwqDCoCAqIEtlcm5lbCBq b2JzIHNob3VsZCBuZXZlciBmYWlsLCBub3Igc2hvdWxkIFZNIGpvYnMgaWYgdGhleSBkbwo+IEBA IC0xOTc5LDggKzE5OTIsNiBAQCBpbnQgeGVfZ3VjX2V4ZWNfcXVldWVfcmVzZXRfaGFuZGxlcihz dHJ1Y3QgeGVfZ3VjICpndWMsIHUzMiAqbXNnLCB1MzIgbGVuKQo+IMKgwqDCoMKgwqDCoMKgwqB4 ZV9ndF9pbmZvKGd0LCAiRW5naW5lIHJlc2V0OiBlbmdpbmVfY2xhc3M9JXMsIGxvZ2ljYWxfbWFz azogMHgleCwgZ3VjX2lkPSVkIiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgeGVfaHdfZW5naW5lX2NsYXNzX3RvX3N0cihxLT5jbGFzcyksIHEtPmxvZ2ljYWxfbWFzaywg Z3VjX2lkKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIEZJWE1FOiBEbyBlcnJvciBjYXB0dXJl LCBtb3N0IGxpa2VseSBhc3luYyAqLwo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgdHJhY2VfeGVfZXhl Y19xdWV1ZV9yZXNldChxKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKgo+IEBAIC0yMDA2LDcg KzIwMTcsNyBAQCBpbnQgeGVfZ3VjX2V4ZWNfcXVldWVfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgeGVf Z3VjICpndWMsIHUzMiAqbXNnLCB1MzIgbGVuKQo+IMKgICogWEVfR1VDX0FDVElPTl9TVEFURV9D QVBUVVJFX05PVElGSUNBVElPTiB0byBob3N0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUKPiDCoCAq IGNhbGxlZCAxc3QgdG8gY2hlY2sgc3RhdHVzIGJlZm9yZSBwcm9jZXNzIHRoZSBkYXRhIGNvbWVz IHdpdGggdGhlIG1lc3NhZ2UuCj4gwqAgKgo+IC0gKiBSZXR1cm5zOiBOb25lCj4gKyAqIFJldHVy bnM6IGVycm9yIGNvZGUuIDAgaWYgc3VjY2Vzcwo+IMKgICovCj4gwqBpbnQgeGVfZ3VjX2Vycm9y X2NhcHR1cmVfaGFuZGxlcihzdHJ1Y3QgeGVfZ3VjICpndWMsIHUzMiAqbXNnLCB1MzIgbGVuKQo+ IMKgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmMgYi9k cml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmMKPiBpbmRleCAxODk4MDIzOGEyZWEuLmFk M2ExMDhhMjQ5MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5l LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmMKPiBAQCAtMjMsNiAr MjMsOCBAQAo+IMKgI2luY2x1ZGUgInhlX2d0X3ByaW50ay5oIgo+IMKgI2luY2x1ZGUgInhlX2d0 X21jci5oIgo+IMKgI2luY2x1ZGUgInhlX2d0X3RvcG9sb2d5LmgiCj4gKyNpbmNsdWRlICJ4ZV9n dWNfY2FwdHVyZS5oIgo+ICsjaW5jbHVkZSAieGVfZ3VjX2NhcHR1cmVfdHlwZXMuaCIKPiDCoCNp bmNsdWRlICJ4ZV9od19lbmdpbmVfZ3JvdXAuaCIKPiDCoCNpbmNsdWRlICJ4ZV9od19mZW5jZS5o Igo+IMKgI2luY2x1ZGUgInhlX2lycS5oIgo+IEBAIC0zMTIsNiArMzE0LDcgQEAgdm9pZCB4ZV9o d19lbmdpbmVfbW1pb193cml0ZTMyKHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZSwKPiDCoHUzMiB4 ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoc3RydWN0IHhlX2h3X2VuZ2luZSAqaHdlLCBzdHJ1Y3Qg eGVfcmVnIHJlZykKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgeGVfZ3RfYXNzZXJ0KGh3ZS0+Z3Qs ICEocmVnLmFkZHIgJiBod2UtPm1taW9fYmFzZSkpOwo+ICsKPiDCoMKgwqDCoMKgwqDCoMKgeGVf Zm9yY2Vfd2FrZV9hc3NlcnRfaGVsZChndF90b19mdyhod2UtPmd0KSwgaHdlLT5kb21haW4pOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJlZy5hZGRyICs9IGh3ZS0+bW1pb19iYXNlOwo+IEBAIC04 MDksNTQgKzgxMiwyNiBAQCB2b2lkIHhlX2h3X2VuZ2luZV9oYW5kbGVfaXJxKHN0cnVjdCB4ZV9o d19lbmdpbmUgKmh3ZSwgdTE2IGludHJfdmVjKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgeGVfaHdfZmVuY2VfaXJxX3J1bihod2UtPmZlbmNlX2lycSk7Cj4gwqB9Cj4gwqAKPiAt c3RhdGljIGJvb2wKPiAtaXNfc2xpY2VfY29tbW9uX3Blcl9nc2xpY2Uoc3RydWN0IHhlX2Rldmlj ZSAqeGUpCj4gLXsKPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gR1JBUEhJQ1NfVkVSeDEwMCh4ZSkg Pj0gMTI1NTsKPiAtfQo+IC0KPiDCoHN0YXRpYyB2b2lkCj4gLXhlX2h3X2VuZ2luZV9zbmFwc2hv dF9pbnN0ZG9uZV9jYXB0dXJlKHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZSwKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqc25hcHNob3QpCj4gK3hlX2h3 X2VuZ2luZV9zbmFwc2hvdF9mcm9tX2h3KHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZSwgc3RydWN0 IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqc25hcHNob3QsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiB0eXBlKQo+IMKgewo+IMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3QgKmd0ID0gaHdlLT5ndDsKPiAtwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd0X3RvX3hlKGd0KTsKPiAtwqDCoMKgwqDCoMKgwqB1 bnNpZ25lZCBpbnQgZHNzOwo+IC3CoMKgwqDCoMKgwqDCoHUxNiBncm91cCwgaW5zdGFuY2U7Cj4g LQo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcuaW5zdGRvbmUucmluZyA9IHhlX2h3X2Vu Z2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfSU5TVERPTkUoMCkpOwo+ICvCoMKgwqDCoMKgwqDC oGVudW0gZ3VjX2NhcHR1cmVfbGlzdF9jbGFzc190eXBlIGNhcHR1cmVfY2xhc3M7Cj4gK8KgwqDC oMKgwqDCoMKgY29uc3Qgc3RydWN0IF9fZ3VjX21taW9fcmVnX2Rlc2NyX2dyb3VwICpsaXN0Owo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKHNuYXBzaG90LT5od2UtPmNsYXNzICE9IFhFX0VOR0lO RV9DTEFTU19SRU5ERVIpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsK PiArwqDCoMKgwqDCoMKgwqBjYXB0dXJlX2NsYXNzID0geGVfZW5naW5lX2NsYXNzX3RvX2d1Y19j YXB0dXJlX2NsYXNzKGh3ZS0+Y2xhc3MpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKGlzX3Ns aWNlX2NvbW1vbl9wZXJfZ3NsaWNlKHhlKSA9PSBmYWxzZSkgewo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vblswXSA9Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9tbWlvX3Jl YWQzMihndCwgU0NfSU5TVERPTkUpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz bmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vbl9leHRyYVswXSA9Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9tbWlvX3JlYWQzMihndCwg U0NfSU5TVERPTkVfRVhUUkEpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbmFw c2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vbl9leHRyYTJbMF0gPQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfbW1pb19yZWFkMzIoZ3QsIFND X0lOU1RET05FX0VYVFJBMik7Cj4gLcKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yX2VhY2hfZ2VvbWV0cnlfZHNzKGRzcywgZ3QsIGdyb3Vw LCBpbnN0YW5jZSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5zbGljZV9jb21tb25bZHNzXSA9Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg eGVfZ3RfbWNyX3VuaWNhc3RfcmVhZChndCwgWEVIUEdfU0NfSU5TVERPTkUsIGdyb3VwLCBpbnN0 YW5jZSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz bmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vbl9leHRyYVtkc3NdID0KPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4 ZV9ndF9tY3JfdW5pY2FzdF9yZWFkKGd0LCBYRUhQR19TQ19JTlNURE9ORV9FWFRSQSwgZ3JvdXAs IGluc3RhbmNlKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHNuYXBzaG90LT5yZWcuaW5zdGRvbmUuc2xpY2VfY29tbW9uX2V4dHJhMltkc3NdID0KPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB4ZV9ndF9tY3JfdW5pY2FzdF9yZWFkKGd0LCBYRUhQR19TQ19JTlNURE9ORV9FWFRSQTIs IGdyb3VwLCBpbnN0YW5jZSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAt wqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgLyogR2V0IHJlZ2lzdGVyIGxpc3QgZm9y IHRoZSB0eXBlL2NsYXNzICovCj4gK8KgwqDCoMKgwqDCoMKgbGlzdCA9IHhlX2d1Y19jYXB0dXJl X2dldF9yZWdfZGVzY19saXN0KGd0LCBHVUNfQ0FQVFVSRV9MSVNUX0lOREVYX1BGLCB0eXBlLCBj YXB0dXJlX2NsYXNzKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2dlb21ldHJ5X2Rz cyhkc3MsIGd0LCBncm91cCwgaW5zdGFuY2UpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5zYW1wbGVyW2Rzc10gPQo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZ3RfbWNyX3VuaWNhc3RfcmVh ZChndCwgU0FNUExFUl9JTlNURE9ORSwgZ3JvdXAsIGluc3RhbmNlKTsKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5yb3dbZHNzXSA9Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9ndF9tY3JfdW5p Y2FzdF9yZWFkKGd0LCBST1dfSU5TVERPTkUsIGdyb3VwLCBpbnN0YW5jZSk7Cj4gK8KgwqDCoMKg wqDCoMKgeGVfZ3VjX2NhcHR1cmVfbm9kZV9mcm9tX2h3KGh3ZSwgdHlwZSwgbGlzdCk7Cj4gwqAK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKEdSQVBISUNTX1ZFUngxMDAoeGUp ID49IDEyNTUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLmdlb21fc3ZnW2Rzc10gPQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlX2d0X21j cl91bmljYXN0X3JlYWQoZ3QsIFhFSFBHX0lOU1RET05FX0dFT01fU1ZHVU5JVCwKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBncm91cCwgaW5zdGFu Y2UpOwo+ICvCoMKgwqDCoMKgwqDCoC8qIENhcHR1cmUgc3RlZXJpbmcgcmVnaXN0ZXJzIGZvciBy Y3MvY2NzICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGNhcHR1cmVfY2xhc3MgPT0gR1VDX0NBUFRV UkVfTElTVF9DTEFTU19SRU5ERVJfQ09NUFVURSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBsaXN0ID0geGVfZ3VjX2NhcHR1cmVfZ2V0X2V4dF9yZWdfZGVzY19saXN0KGd0LCBH VUNfQ0FQVFVSRV9MSVNUX0lOREVYX1BGLCB0eXBlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXB0dXJlX2NsYXNzKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfZ3VjX2NhcHR1cmVfbm9kZV9mcm9tX2h3 KGh3ZSwgdHlwZSwgbGlzdCk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoH0KPiDCoAo+IEBAIC04 NzQsOCArODQ5LDkgQEAgc3RydWN0IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqCj4gwqB4ZV9od19l bmdpbmVfc25hcHNob3RfY2FwdHVyZShzdHJ1Y3QgeGVfaHdfZW5naW5lICpod2UpCj4gwqB7Cj4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9od19lbmdpbmVfc25hcHNob3QgKnNuYXBzaG90Owo+ IC3CoMKgwqDCoMKgwqDCoHNpemVfdCBsZW47Cj4gLcKgwqDCoMKgwqDCoMKgdTY0IHZhbDsKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZ3QgKmd0ID0gaHdlLT5ndDsKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd0X3RvX3hlKGd0KTsKPiArwqDCoMKgwqDCoMKgwqB1 MzIgdHlwZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXhlX2h3X2VuZ2luZV9pc192YWxp ZChod2UpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4g QEAgLTg4NSwyOCArODYxLDYgQEAgeGVfaHdfZW5naW5lX3NuYXBzaG90X2NhcHR1cmUoc3RydWN0 IHhlX2h3X2VuZ2luZSAqaHdlKQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXNuYXBzaG90KQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqAvKiBCZWNhdXNlIFhFX01BWF9EU1NfRlVTRV9CSVRTIGlzIGRlZmluZWQgaW4geGVf Z3RfdHlwZXMuaCBhbmQgaXQKPiAtwqDCoMKgwqDCoMKgwqAgKiBpbmNsdWRlcyB4ZV9od19lbmdp bmVfdHlwZXMuaCB0aGUgbGVuZ3RoIG9mIHRoaXMgMyByZWdpc3RlcnMgY2FuJ3QgYmUKPiAtwqDC oMKgwqDCoMKgwqAgKiBzZXQgaW4gc3RydWN0IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCwgc28gaGVy ZSBkb2luZyBhZGRpdGlvbmFsCj4gLcKgwqDCoMKgwqDCoMKgICogYWxsb2NhdGlvbnMuCj4gLcKg wqDCoMKgwqDCoMKgICovCj4gLcKgwqDCoMKgwqDCoMKgbGVuID0gKFhFX01BWF9EU1NfRlVTRV9C SVRTICogc2l6ZW9mKHUzMikpOwo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcuaW5zdGRv bmUuc2xpY2VfY29tbW9uID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwo+IC3CoMKgwqDCoMKg wqDCoHNuYXBzaG90LT5yZWcuaW5zdGRvbmUuc2xpY2VfY29tbW9uX2V4dHJhID0ga3phbGxvYyhs ZW4sIEdGUF9BVE9NSUMpOwo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcuaW5zdGRvbmUu c2xpY2VfY29tbW9uX2V4dHJhMiA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKPiAtwqDCoMKg wqDCoMKgwqBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNhbXBsZXIgPSBremFsbG9jKGxlbiwgR0ZQ X0FUT01JQyk7Cj4gLcKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5yb3cgPSBr emFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Cj4gLcKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5p bnN0ZG9uZS5nZW9tX3N2ZyA9IGt6YWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKPiAtwqDCoMKgwqDC oMKgwqBpZiAoIXNuYXBzaG90LT5yZWcuaW5zdGRvbmUuc2xpY2VfY29tbW9uIHx8Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgICFzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vbl9leHRy YSB8fAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCAhc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5zbGlj ZV9jb21tb25fZXh0cmEyIHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgICFzbmFwc2hvdC0+cmVn Lmluc3Rkb25lLnNhbXBsZXIgfHwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgIXNuYXBzaG90LT5y ZWcuaW5zdGRvbmUucm93IHx8Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgICFzbmFwc2hvdC0+cmVn Lmluc3Rkb25lLmdlb21fc3ZnKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhl X2h3X2VuZ2luZV9zbmFwc2hvdF9mcmVlKHNuYXBzaG90KTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0KPiDCoMKgwqDC oMKgwqDCoMKgc25hcHNob3QtPm5hbWUgPSBrc3RyZHVwKGh3ZS0+bmFtZSwgR0ZQX0FUT01JQyk7 Cj4gwqDCoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5od2UgPSBod2U7Cj4gwqDCoMKgwqDCoMKgwqDC oHNuYXBzaG90LT5sb2dpY2FsX2luc3RhbmNlID0gaHdlLT5sb2dpY2FsX2luc3RhbmNlOwo+IEBA IC05MTYsMTU2ICs4NzAsNjkgQEAgeGVfaHdfZW5naW5lX3NuYXBzaG90X2NhcHR1cmUoc3RydWN0 IHhlX2h3X2VuZ2luZSAqaHdlKQo+IMKgwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+bW1pb19iYXNl ID0gaHdlLT5tbWlvX2Jhc2U7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogbm8gbW9yZSBWRiBh Y2Nlc3NpYmxlIGRhdGEgYmVsb3cgdGhpcyBwb2ludCAqLwo+IC3CoMKgwqDCoMKgwqDCoGlmIChJ U19TUklPVl9WRihndF90b194ZShod2UtPmd0KSkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX1NS SU9WX1ZGKHhlKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzbmFw c2hvdDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcucmluZ19leGVjbGlzdF9z dGF0dXMgPQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9od19lbmdpbmVfbW1p b19yZWFkMzIoaHdlLCBSSU5HX0VYRUNMSVNUX1NUQVRVU19MTygwKSk7Cj4gLcKgwqDCoMKgwqDC oMKgdmFsID0geGVfaHdfZW5naW5lX21taW9fcmVhZDMyKGh3ZSwgUklOR19FWEVDTElTVF9TVEFU VVNfSEkoMCkpOwo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcucmluZ19leGVjbGlzdF9z dGF0dXMgfD0gdmFsIDw8IDMyOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLnJp bmdfZXhlY2xpc3Rfc3FfY29udGVudHMgPQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBSSU5HX0VYRUNMSVNUX1NRX0NPTlRFTlRT X0xPKDApKTsKPiAtwqDCoMKgwqDCoMKgwqB2YWwgPSB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIo aHdlLCBSSU5HX0VYRUNMSVNUX1NRX0NPTlRFTlRTX0hJKDApKTsKPiAtwqDCoMKgwqDCoMKgwqBz bmFwc2hvdC0+cmVnLnJpbmdfZXhlY2xpc3Rfc3FfY29udGVudHMgfD0gdmFsIDw8IDMyOwo+IC0K PiAtwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLnJpbmdfYWN0aGQgPSB4ZV9od19lbmdpbmVf bW1pb19yZWFkMzIoaHdlLCBSSU5HX0FDVEhEKDApKTsKPiAtwqDCoMKgwqDCoMKgwqB2YWwgPSB4 ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBSSU5HX0FDVEhEX1VEVygwKSk7Cj4gLcKgwqDC oMKgwqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX2FjdGhkIHw9IHZhbCA8PCAzMjsKPiAtCj4gLcKg wqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX2JiYWRkciA9IHhlX2h3X2VuZ2luZV9tbWlv X3JlYWQzMihod2UsIFJJTkdfQkJBRERSKDApKTsKPiAtwqDCoMKgwqDCoMKgwqB2YWwgPSB4ZV9o d19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBSSU5HX0JCQUREUl9VRFcoMCkpOwo+IC3CoMKgwqDC oMKgwqDCoHNuYXBzaG90LT5yZWcucmluZ19iYmFkZHIgfD0gdmFsIDw8IDMyOwo+IC0KPiAtwqDC oMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLnJpbmdfZG1hX2ZhZGQgPQo+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBSSU5HX0RNQV9G QUREKDApKTsKPiAtwqDCoMKgwqDCoMKgwqB2YWwgPSB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIo aHdlLCBSSU5HX0RNQV9GQUREX1VEVygwKSk7Cj4gLcKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJl Zy5yaW5nX2RtYV9mYWRkIHw9IHZhbCA8PCAzMjsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgc25hcHNo b3QtPnJlZy5yaW5nX2h3c3RhbSA9IHhlX2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdf SFdTVEFNKDApKTsKPiAtwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLnJpbmdfaHdzX3BnYSA9 IHhlX2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfSFdTX1BHQSgwKSk7Cj4gLcKgwqDC oMKgwqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX3N0YXJ0ID0geGVfaHdfZW5naW5lX21taW9fcmVh ZDMyKGh3ZSwgUklOR19TVEFSVCgwKSk7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKEdSQVBISUNTX1ZF UngxMDAoaHdlLT5ndC0+dGlsZS0+eGUpID49IDIwMDApIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsID0geGVfaHdfZW5naW5lX21taW9fcmVhZDMyKGh3ZSwgUklOR19TVEFS VF9VRFcoMCkpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVn LnJpbmdfc3RhcnQgfD0gdmFsIDw8IDMyOwo+IC3CoMKgwqDCoMKgwqDCoH0KPiAtwqDCoMKgwqDC oMKgwqBpZiAoeGVfZ3RfaGFzX2luZGlyZWN0X3Jpbmdfc3RhdGUoaHdlLT5ndCkpIHsKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5pbmRpcmVjdF9yaW5nX3N0 YXRlID0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhl X2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIElORElSRUNUX1JJTkdfU1RBVEUoMCkpOwo+ICvC oMKgwqDCoMKgwqDCoC8qIElmIEd1QyBub3QgZW5hYmxlZCwgYW5kIGNhcHR1cmUgb3V0bGlzdCBo YXMgbm8gam9iIGRhdGEsIHRha2UgaXQgZnJvbSBlbmdpbmUgKi8KPiArwqDCoMKgwqDCoMKgwqBp ZiAoeGVfZGV2aWNlX3VjX2VuYWJsZWQoeGUpICYmIHhlLT53ZWRnZWQubW9kZSA+PSAxICYmIHhl LT5kZXZjb3JlZHVtcC5qb2IgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVfZ3VjX2NhcHR1 cmVfaXNfcmVhZHlfZm9yKHhlLT5kZXZjb3JlZHVtcC5qb2IpKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5zb3VyY2UgPSBYRV9IV19FTkdJTkVfU09VUkNFX0dV Q19DQVBUVVJFOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBHdUMgd29uJ3Qg cmVwb3J0IGRpcmVjdCByZWFkIHJlZ2lzdGVycywgcmVhZCBoZXJlICovCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHhlX2h3X2VuZ2luZV9zbmFwc2hvdF9mcm9tX2h3KGh3ZSwgc25h cHNob3QsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR1VDX1NUQVRFX0NBUFRV UkVfVFlQRV9IT1NUX0RJUkVDVF9SRUFEKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+c291cmNlID0gWEVfSFdfRU5H SU5FX1NPVVJDRV9IV19FTkdJTkU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZv ciAodHlwZSA9IEdVQ19TVEFURV9DQVBUVVJFX1RZUEVfR0xPQkFMOyB0eXBlIDwgR1VDX0hPU1Rf Q0FQVFVSRV9UWVBFX01BWDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdHlwZSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeGVfaHdfZW5naW5lX3NuYXBzaG90X2Zyb21faHcoaHdlLCBzbmFwc2hvdCwgdHlwZSk7Cj4g wqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcucmlu Z19oZWFkID0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVfaHdfZW5naW5lX21t aW9fcmVhZDMyKGh3ZSwgUklOR19IRUFEKDApKSAmIEhFQURfQUREUjsKPiAtwqDCoMKgwqDCoMKg wqBzbmFwc2hvdC0+cmVnLnJpbmdfdGFpbCA9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhlX2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfVEFJTCgwKSkgJiBUQUlMX0FE RFI7Cj4gLcKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX2N0bCA9IHhlX2h3X2VuZ2lu ZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfQ1RMKDApKTsKPiAtwqDCoMKgwqDCoMKgwqBzbmFwc2hv dC0+cmVnLnJpbmdfbWlfbW9kZSA9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhl X2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfTUlfTU9ERSgwKSk7Cj4gLcKgwqDCoMKg wqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX21vZGUgPSB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIo aHdlLCBSSU5HX01PREUoMCkpOwo+IC3CoMKgwqDCoMKgwqDCoHNuYXBzaG90LT5yZWcucmluZ19p bXIgPSB4ZV9od19lbmdpbmVfbW1pb19yZWFkMzIoaHdlLCBSSU5HX0lNUigwKSk7Cj4gLcKgwqDC oMKgwqDCoMKgc25hcHNob3QtPnJlZy5yaW5nX2VzciA9IHhlX2h3X2VuZ2luZV9tbWlvX3JlYWQz Mihod2UsIFJJTkdfRVNSKDApKTsKPiAtwqDCoMKgwqDCoMKgwqBzbmFwc2hvdC0+cmVnLnJpbmdf ZW1yID0geGVfaHdfZW5naW5lX21taW9fcmVhZDMyKGh3ZSwgUklOR19FTVIoMCkpOwo+IC3CoMKg wqDCoMKgwqDCoHNuYXBzaG90LT5yZWcucmluZ19laXIgPSB4ZV9od19lbmdpbmVfbW1pb19yZWFk MzIoaHdlLCBSSU5HX0VJUigwKSk7Cj4gLcKgwqDCoMKgwqDCoMKgc25hcHNob3QtPnJlZy5pcGVo ciA9IHhlX2h3X2VuZ2luZV9tbWlvX3JlYWQzMihod2UsIFJJTkdfSVBFSFIoMCkpOwo+IC3CoMKg wqDCoMKgwqDCoHhlX2h3X2VuZ2luZV9zbmFwc2hvdF9pbnN0ZG9uZV9jYXB0dXJlKGh3ZSwgc25h cHNob3QpOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqBpZiAoc25hcHNob3QtPmh3ZS0+Y2xhc3MgPT0g WEVfRU5HSU5FX0NMQVNTX0NPTVBVVEUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNuYXBzaG90LT5yZWcucmN1X21vZGUgPSB4ZV9tbWlvX3JlYWQzMihod2UtPmd0LCBSQ1VfTU9E RSk7Cj4gLQo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc25hcHNob3Q7Cj4gwqB9Cj4gwqAKPiAt c3RhdGljIHZvaWQKPiAteGVfaHdfZW5naW5lX3NuYXBzaG90X2luc3Rkb25lX3ByaW50KHN0cnVj dCB4ZV9od19lbmdpbmVfc25hcHNob3QgKnNuYXBzaG90LCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAp Cj4gKy8qKgo+ICsgKiB4ZV9od19lbmdpbmVfc25hcHNob3RfY2FwdHVyZV9mb3Jfam9iIC0gVGFr ZSBzbmFwc2hvdCBvZiBhc3NvY2lhdGVkIGVuZ2luZQo+ICsgKiBAam9iOiBUaGUgam9iIG9iamVj dAo+ICsgKgo+ICsgKiBUYWtlIHNuYXBzaG90IG9mIGFzc29jaWF0ZWQgSFcgRW5naW5lCj4gKyAq Cj4gKyAqIFJldHVybnM6IE5vbmUuCj4gKyAqLwo+ICt2b2lkCj4gK3hlX2h3X2VuZ2luZV9zbmFw c2hvdF9jYXB0dXJlX2Zvcl9qb2Ioc3RydWN0IHhlX3NjaGVkX2pvYiAqam9iKQo+IMKgewo+IC3C oMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9ndCAqZ3QgPSBzbmFwc2hvdC0+aHdlLT5ndDsKPiAtwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgeGVfZGV2aWNlICp4ZSA9IGd0X3RvX3hlKGd0KTsKPiAtwqDCoMKg wqDCoMKgwqB1MTYgZ3JvdXAsIGluc3RhbmNlOwo+IC3CoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGlu dCBkc3M7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoGRybV9wcmludGYocCwgIlx0UklOR19JTlNURE9O RTogMHglMDh4XG4iLCBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnJpbmcpOwo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZV9leGVjX3F1ZXVlICpxID0gam9iLT5xOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9kZXZpY2UgKnhlID0gZ3RfdG9feGUocS0+Z3QpOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB4ZV9kZXZjb3JlZHVtcCAqY29yZWR1bXAgPSAmeGUtPmRldmNvcmVkdW1wOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCB4ZV9od19lbmdpbmUgKmh3ZTsKPiArwqDCoMKgwqDCoMKgwqBlbnVt IHhlX2h3X2VuZ2luZV9pZCBpZDsKPiArwqDCoMKgwqDCoMKgwqB1MzIgYWRqX2xvZ2ljYWxfbWFz ayA9IHEtPmxvZ2ljYWxfbWFzazsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmIChzbmFwc2hvdC0+ aHdlLT5jbGFzcyAhPSBYRV9FTkdJTkVfQ0xBU1NfUkVOREVSKQo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgZm9yX2VhY2hfaHdfZW5naW5l KGh3ZSwgcS0+Z3QsIGlkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICho d2UtPmNsYXNzICE9IHEtPmh3ZS0+Y2xhc3MgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICEoQklUKGh3ZS0+bG9naWNhbF9pbnN0YW5jZSkgJiBhZGpfbG9naWNhbF9t YXNrKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNv bnRpbnVlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKGlzX3NsaWNlX2NvbW1vbl9wZXJfZ3Ns aWNlKHhlKSA9PSBmYWxzZSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f cHJpbnRmKHAsICJcdFNDX0lOU1RET05FWzBdOiAweCUwOHhcbiIsCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNuYXBzaG90LT5yZWcuaW5zdGRv bmUuc2xpY2VfY29tbW9uWzBdKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJt X3ByaW50ZihwLCAiXHRTQ19JTlNURE9ORV9FWFRSQVswXTogMHglMDh4XG4iLAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+cmVn Lmluc3Rkb25lLnNsaWNlX2NvbW1vbl9leHRyYVswXSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRybV9wcmludGYocCwgIlx0U0NfSU5TVERPTkVfRVhUUkEyWzBdOiAweCUwOHhc biIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNuYXBzaG90LT5yZWcuaW5zdGRvbmUuc2xpY2VfY29tbW9uX2V4dHJhMlswXSk7Cj4gLcKgwqDC oMKgwqDCoMKgfSBlbHNlIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yX2Vh Y2hfZ2VvbWV0cnlfZHNzKGRzcywgZ3QsIGdyb3VwLCBpbnN0YW5jZSkgewo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3ByaW50ZihwLCAiXHRTQ19J TlNURE9ORVsldV06IDB4JTA4eFxuIiwgZHNzLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc25hcHNob3QtPnJlZy5p bnN0ZG9uZS5zbGljZV9jb21tb25bZHNzXSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fcHJpbnRmKHAsICJcdFNDX0lOU1RET05FX0VYVFJBWyV1 XTogMHglMDh4XG4iLCBkc3MsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNs aWNlX2NvbW1vbl9leHRyYVtkc3NdKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRybV9wcmludGYocCwgIlx0U0NfSU5TVERPTkVfRVhUUkEyWyV1XTog MHglMDh4XG4iLCBkc3MsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNl X2NvbW1vbl9leHRyYTJbZHNzXSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghY29yZWR1bXAtPnNuYXBzaG90Lmh3ZVtpZF0pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvcmVkdW1wLT5zbmFwc2hvdC5od2VbaWRdID0geGVf aHdfZW5naW5lX3NuYXBzaG90X2NhcHR1cmUoaHdlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC8qIElmIHByZS1jYXB0dXJlZCBhbmQgR3VjIGNhcHR1cmUgcmVhZHkgbm93ICov Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeGVf ZGV2aWNlX3VjX2VuYWJsZWQoeGUpICYmIHhlLT53ZWRnZWQubW9kZSA+PSAxICYmCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVfZ3VjX2Nh cHR1cmVfaXNfcmVhZHlfZm9yKGpvYikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFJlbW92ZSB0 aGUgcHJlLWNhcHR1cmVkIG5vZGVzIGZyb20gb3V0bGlzdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBvbmx5IGtlZXAg dGhlIEd1QyByZXBvcnRlZCBkYXRhLgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEV4Y2VwdCBkaXJlY3QgcmVhZCByZWdp c3RlcnMsIHdoaWNoIGlzIHJlYWQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBieSBob3N0IG9ubHkuCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICov Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeGVfZ3VjX2NhcHR1cmVfZnJlZV9wcmVfY2FwdHVyZSgmcS0+Z3QtPnVjLmd1Yyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKgwqDCoMKgwqDCoMKgfQo+IC0KPiAt wqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9nZW9tZXRyeV9kc3MoZHNzLCBndCwgZ3JvdXAsIGluc3Rh bmNlKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9wcmludGYocCwgIlx0 U0FNUExFUl9JTlNURE9ORVsldV06IDB4JTA4eFxuIiwgZHNzLAo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+cmVnLmluc3Rkb25l LnNhbXBsZXJbZHNzXSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9wcmlu dGYocCwgIlx0Uk9XX0lOU1RET05FWyV1XTogMHglMDh4XG4iLCBkc3MsCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNuYXBzaG90LT5yZWcuaW5z dGRvbmUucm93W2Rzc10pOwo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KEdSQVBISUNTX1ZFUngxMDAoeGUpID49IDEyNTUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fcHJpbnRmKHAsICJcdElOU1RET05FX0dFT01fU1ZH VU5JVFsldV06IDB4JTA4eFxuIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRzcywgc25hcHNob3QtPnJlZy5pbnN0 ZG9uZS5nZW9tX3N2Z1tkc3NdKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoH0KPiDCoAo+IC0vKioKPiAtICogeGVfaHdfZW5n aW5lX3NuYXBzaG90X3ByaW50IC0gUHJpbnQgb3V0IGEgZ2l2ZW4gWGUgSFcgRW5naW5lIHNuYXBz aG90Lgo+IC0gKiBAc25hcHNob3Q6IFhlIEhXIEVuZ2luZSBzbmFwc2hvdCBvYmplY3QuCj4gLSAq IEBwOiBkcm1fcHJpbnRlciB3aGVyZSBpdCB3aWxsIGJlIHByaW50ZWQgb3V0Lgo+IC0gKgo+IC0g KiBUaGlzIGZ1bmN0aW9uIHByaW50cyBvdXQgYSBnaXZlbiBYZSBIVyBFbmdpbmUgc25hcHNob3Qg b2JqZWN0Lgo+IC0gKi8KPiAtdm9pZCB4ZV9od19lbmdpbmVfc25hcHNob3RfcHJpbnQoc3RydWN0 IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqc25hcHNob3QsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fcHJp bnRlciAqcCkKPiAtewo+IC3CoMKgwqDCoMKgwqDCoGlmICghc25hcHNob3QpCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGRybV9w cmludGYocCwgIiVzIChwaHlzaWNhbCksIGxvZ2ljYWwgaW5zdGFuY2U9JWRcbiIsCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc25hcHNob3QtPm5hbWUgPyBzbmFwc2hvdC0+ bmFtZSA6ICIiLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNuYXBzaG90 LT5sb2dpY2FsX2luc3RhbmNlKTsKPiAtwqDCoMKgwqDCoMKgwqBkcm1fcHJpbnRmKHAsICJcdEZv cmNld2FrZTogZG9tYWluIDB4JXgsIHJlZiAlZFxuIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzbmFwc2hvdC0+Zm9yY2V3YWtlLmRvbWFpbiwgc25hcHNob3QtPmZvcmNl d2FrZS5yZWYpOwphbGFuOnNuaXAKPiAtwqDCoMKgwqDCoMKgwqBkcm1fcHV0cyhwLCAiXG4iKTsK PiAtfQo+IMKgCj4gwqAvKioKPiDCoCAqIHhlX2h3X2VuZ2luZV9zbmFwc2hvdF9mcmVlIC0gRnJl ZSBhbGwgYWxsb2NhdGVkIG9iamVjdHMgZm9yIGEgZ2l2ZW4gc25hcHNob3QuCj4gQEAgLTEwNzks MTIgKzk0Niw2IEBAIHZvaWQgeGVfaHdfZW5naW5lX3NuYXBzaG90X2ZyZWUoc3RydWN0IHhlX2h3 X2VuZ2luZV9zbmFwc2hvdCAqc25hcHNob3QpCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghc25hcHNo b3QpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqBrZnJlZShzbmFwc2hvdC0+cmVnLmluc3Rkb25lLnNsaWNlX2NvbW1vbik7Cj4g LcKgwqDCoMKgwqDCoMKga2ZyZWUoc25hcHNob3QtPnJlZy5pbnN0ZG9uZS5zbGljZV9jb21tb25f ZXh0cmEpOwo+IC3CoMKgwqDCoMKgwqDCoGtmcmVlKHNuYXBzaG90LT5yZWcuaW5zdGRvbmUuc2xp Y2VfY29tbW9uX2V4dHJhMik7Cj4gLcKgwqDCoMKgwqDCoMKga2ZyZWUoc25hcHNob3QtPnJlZy5p bnN0ZG9uZS5zYW1wbGVyKTsKPiAtwqDCoMKgwqDCoMKgwqBrZnJlZShzbmFwc2hvdC0+cmVnLmlu c3Rkb25lLnJvdyk7Cj4gLcKgwqDCoMKgwqDCoMKga2ZyZWUoc25hcHNob3QtPnJlZy5pbnN0ZG9u ZS5nZW9tX3N2Zyk7Cj4gwqDCoMKgwqDCoMKgwqDCoGtmcmVlKHNuYXBzaG90LT5uYW1lKTsKPiDC oMKgwqDCoMKgwqDCoMKga2ZyZWUoc25hcHNob3QpOwo+IMKgfQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdf ZW5naW5lLmgKPiBpbmRleCAwMjI4MTlhNGE4ZWIuLjFkZjZhMDgyNDg3YyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lLmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0veGUveGVfaHdfZW5naW5lLmgKPiBAQCAtMTEsNiArMTEsNyBAQAo+IMKgc3RydWN0IGRybV9w cmludGVyOwo+IMKgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2U7Cj4gwqBzdHJ1 Y3QgeGVfZGV2aWNlOwo+ICtzdHJ1Y3QgeGVfc2NoZWRfam9iOwo+IMKgCj4gwqAjaWZkZWYgQ09O RklHX0RSTV9YRV9KT0JfVElNRU9VVF9NSU4KPiDCoCNkZWZpbmUgWEVfSFdfRU5HSU5FX0pPQl9U SU1FT1VUX01JTiBDT05GSUdfRFJNX1hFX0pPQl9USU1FT1VUX01JTgo+IEBAIC01Nyw2ICs1OCw3 IEBAIHUzMiB4ZV9od19lbmdpbmVfbWFza19wZXJfY2xhc3Moc3RydWN0IHhlX2d0ICpndCwKPiDC oAo+IMKgc3RydWN0IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqCj4gwqB4ZV9od19lbmdpbmVfc25h cHNob3RfY2FwdHVyZShzdHJ1Y3QgeGVfaHdfZW5naW5lICpod2UpOwo+ICt2b2lkIHhlX2h3X2Vu Z2luZV9zbmFwc2hvdF9jYXB0dXJlX2Zvcl9qb2Ioc3RydWN0IHhlX3NjaGVkX2pvYiAqam9iKTsK PiDCoHZvaWQgeGVfaHdfZW5naW5lX3NuYXBzaG90X2ZyZWUoc3RydWN0IHhlX2h3X2VuZ2luZV9z bmFwc2hvdCAqc25hcHNob3QpOwo+IMKgdm9pZCB4ZV9od19lbmdpbmVfc25hcHNob3RfcHJpbnQo c3RydWN0IHhlX2h3X2VuZ2luZV9zbmFwc2hvdCAqc25hcHNob3QsCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZHJtX3ByaW50ZXIgKnApOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdf ZW5naW5lX3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0veGUveGVfaHdfZW5naW5lX3R5cGVzLmgK PiBpbmRleCAzOWYyNDAxMmQwZjQuLjRlM2U5ZGRmNWY1YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0veGUveGVfaHdfZW5naW5lX3R5cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v eGUveGVfaHdfZW5naW5lX3R5cGVzLmgKPiBAQCAtMTU0LDYgKzE1NCwxMSBAQCBzdHJ1Y3QgeGVf aHdfZW5naW5lIHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2h3X2VuZ2luZV9ncm91cCAq aHdfZW5naW5lX2dyb3VwOwo+IMKgfTsKPiDCoAo+ICtlbnVtIHhlX2h3X2VuZ2luZV9zbmFwc2hv dF9zb3VyY2VfaWQgewo+ICvCoMKgwqDCoMKgwqDCoFhFX0hXX0VOR0lORV9TT1VSQ0VfSFdfRU5H SU5FLAo+ICvCoMKgwqDCoMKgwqDCoFhFX0hXX0VOR0lORV9TT1VSQ0VfR1VDX0NBUFRVUkUKYWxh bjogbWVudGlvbmVkIGFib3ZlIGluIG9uZSBvciBtb3JlIHBsYWNlcyBidXQgdGhlIGZpcnN0IG5h bWVzCmlzIHJlcGV0aXRpdmUgYnV0IG1vcmUgaW1wb3J0YW50bHksIG5vdCBzZWxmLWV4cGxhbmF0 b3J5LgpQZXJoYXBzIGEgc2ltcGxlciwgbW9yZSByZWFkYWJsZSBvcHRpb24gaXM6CiJYRV9FTkdJ TkVfRFVNUF9NQU5VQUwgdnMgWEVfRU5HSU5FX0RVTVBfR1VDIgoKPiArfTsKPiArCj4gwqAvKioK PiDCoCAqIHN0cnVjdCB4ZV9od19lbmdpbmVfc25hcHNob3QgLSBIYXJkd2FyZSBlbmdpbmUgc25h cHNob3QKPiDCoCAqCj4gQEAgLTE2Miw2ICsxNjcsOCBAQCBzdHJ1Y3QgeGVfaHdfZW5naW5lIHsK PiDCoHN0cnVjdCB4ZV9od19lbmdpbmVfc25hcHNob3Qgewo+IMKgwqDCoMKgwqDCoMKgwqAvKiog QG5hbWU6IG5hbWUgb2YgdGhlIGh3IGVuZ2luZSAqLwo+IMKgwqDCoMKgwqDCoMKgwqBjaGFyICpu YW1lOwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAc291cmNlOiBEYXRhIHNvdXJjZSwgZWl0aGVyIGh3 X2VuZ2luZSBvciBHdUMgY2FwdHVyZSAqLwo+ICvCoMKgwqDCoMKgwqDCoGVudW0geGVfaHdfZW5n aW5lX3NuYXBzaG90X3NvdXJjZV9pZCBzb3VyY2U7Cj4gwqDCoMKgwqDCoMKgwqDCoC8qKiBAaHdl OiBodyBlbmdpbmUgKi8KPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlX2h3X2VuZ2luZSAqaHdl Owo+IMKgwqDCoMKgwqDCoMKgwqAvKiogQGxvZ2ljYWxfaW5zdGFuY2U6IGxvZ2ljYWwgaW5zdGFu Y2Ugb2YgdGhpcyBodyBlbmdpbmUgKi8KPiBAQCAtMTc1LDY1ICsxODIsNiBAQCBzdHJ1Y3QgeGVf aHdfZW5naW5lX3NuYXBzaG90IHsKPiDCoMKgwqDCoMKgwqDCoMKgfSBmb3JjZXdha2U7Cj4gwqDC oMKgwqDCoMKgwqDCoC8qKiBAbW1pb19iYXNlOiBNTUlPIGJhc2UgYWRkcmVzcyBvZiB0aGlzIGh3 IGVuZ2luZSovCj4gwqDCoMKgwqDCoMKgwqDCoHUzMiBtbWlvX2Jhc2U7Cj4gLcKgwqDCoMKgwqDC oMKgLyoqIEByZWc6IFVzZWZ1bCBNTUlPIHJlZ2lzdGVyIHNuYXBzaG90ICovCj4gLcKgwqDCoMKg wqDCoMKgc3RydWN0IHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqIEByZWcu cmluZ19leGVjbGlzdF9zdGF0dXM6IFJJTkdfRVhFQ0xJU1RfU1RBVFVTICovCj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU2NCByaW5nX2V4ZWNsaXN0X3N0YXR1czsKPiAKYWxhbjpz bmlwCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gaW5zdGRvbmU7Cj4gLcKgwqDC oMKgwqDCoMKgfSByZWc7Cj4gwqB9Owo+IMKgCj4gwqAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3hlL3hlX2xyYy5oIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2xyYy5oCj4g aW5kZXggYzI0NTQyZTg5MzE4Li5jYzAwZmE4NzhkM2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3hlL3hlX2xyYy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlL3hlX2xyYy5oCj4g QEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IHhlX2xyY19zbmFwc2hvdDsKPiDCoHN0cnVjdCB4ZV92 bTsKPiDCoAo+IMKgI2RlZmluZSBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUiAoMHgzNCAqIDQpCj4g KyNkZWZpbmUgTFJDX0dUVF9BRERSRVNTX01BU0vCoMKgwqBHRU5NQVNLKDMxLCAxMikKPiDCoAo+ IMKgc3RydWN0IHhlX2xyYyAqeGVfbHJjX2NyZWF0ZShzdHJ1Y3QgeGVfaHdfZW5naW5lICpod2Us IHN0cnVjdCB4ZV92bSAqdm0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHJpbmdfc2l6ZSk7Cgo=