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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 835B9C4332F for ; Tue, 8 Nov 2022 23:03:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229702AbiKHXDN (ORCPT ); Tue, 8 Nov 2022 18:03:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229776AbiKHXDM (ORCPT ); Tue, 8 Nov 2022 18:03:12 -0500 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6659FDF68 for ; Tue, 8 Nov 2022 15:03:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1667948590; x=1699484590; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=2Vi0qjL2jt3604pMHSN/ZDgEiecp9GW5QeFcTEEzsUI=; b=aMtza0yPwIp9rPOA9n++tldOxIsi2Tb9R44e6g4ZnP9oS4BRsiSnTqLV gJd0fLgPm4CB7M/Jx1MzKfGXDlOiMMqUgLZah2bEzNrdaFpnt5uUn9AbO 2eGWS+utKEWwGDbgFLjFZ5qnR/63oXFFoqO7wmYEXL66GR65o/pqD++M0 DSeUY49AAfVH8csosEMep2R0hqvs9XQxfjxguB7Ivb67ECWZRS1r2p0zC hQG7LEPFjxd31dYjmI28BEURkZO0EoV1tnx7aLoXC3f/uCOpIFbjIRQXq ytThk7ziAQs7t1uZHnY3LqwVNftKwEU0C4BtTRymhBPBjdrnY/xCsLiRb A==; X-IronPort-AV: E=McAfee;i="6500,9779,10525"; a="294202265" X-IronPort-AV: E=Sophos;i="5.96,149,1665471600"; d="scan'208";a="294202265" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Nov 2022 15:02:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10525"; a="638968986" X-IronPort-AV: E=Sophos;i="5.96,148,1665471600"; d="scan'208";a="638968986" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga007.fm.intel.com with ESMTP; 08 Nov 2022 15:02:26 -0800 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 8 Nov 2022 15:02:26 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 8 Nov 2022 15:02:25 -0800 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) 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.2375.31 via Frontend Transport; Tue, 8 Nov 2022 15:02:25 -0800 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.49) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Tue, 8 Nov 2022 15:02:25 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MLcPh+FSGu5tFMprBgNMvYD2YwywnrMadn9riV+BBGHk6W8WSoFGZPaWtZiVYTMYNN/t8Spe5oaNtAF2faN2sXLlqhqE94XSXY+e0B54M0eiG8iY4l5SxcTRpupnVMRdBa9r9ufyE1q3zbhyAGKtNCCZBfciqeCpgASGjL7Uzjqc0NgEpQiq2oqT7GjUKfq61g5gQIsvkhSCBn8MTSi5selJPf5KInTcx3wEGQPqGvR/G8yPKubOZkbroRbiZigFQr9JSnTkSkDZNM5ZaoV/uXQnxD1ddjChldX3Q4hG9YCBMOq4N9+mtmlMpp/HpDUOZgH5UvplbQZcAEBQL+2Sug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2Vi0qjL2jt3604pMHSN/ZDgEiecp9GW5QeFcTEEzsUI=; b=BKcElwH19kcXSBlmkqXy7FT/AFZnGrYV9iPcRpVEZ6ICAM+In8QQZpwc7i8zfomwah5G8zVHsNZofeL8y3zRMVIbSwXmvS15FKQFz8hOXUwYZj9EVpd8dvjpZQz90w8jes0YjdCzX3h7MeWI0PN88jU6vu8j9qg8ODUT7goWNz4QAavQVEIFxyWSi8GqmfGk7BxuD0SMAdvTz6mc0O50GcTrz+bBTGoSm3cwwnBHDUu2uFGW/X9Ac7HIo0aoNotLsHmPtcvyscluDrTgHwTlEAU6Wv5x/d8LEbps1PeI5ZvE0ypSv0jn6Tp+xPGhnIuwrnS0U64vnUagsvL232BBHA== 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 MN2PR11MB3999.namprd11.prod.outlook.com (2603:10b6:208:154::32) by PH8PR11MB6903.namprd11.prod.outlook.com (2603:10b6:510:228::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.26; Tue, 8 Nov 2022 23:02:23 +0000 Received: from MN2PR11MB3999.namprd11.prod.outlook.com ([fe80::c275:940e:a871:646e]) by MN2PR11MB3999.namprd11.prod.outlook.com ([fe80::c275:940e:a871:646e%7]) with mapi id 15.20.5791.026; Tue, 8 Nov 2022 23:02:22 +0000 From: "Verma, Vishal L" To: "Jiang, Dave" , "linux-cxl@vger.kernel.org" CC: "Williams, Dan J" , "Schofield, Alison" , "rostedt@goodmis.org" , "Weiny, Ira" Subject: Re: [PATCH v4 01/10] cxl: add helper function to parse trace event to json object Thread-Topic: [PATCH v4 01/10] cxl: add helper function to parse trace event to json object Thread-Index: AQHY86AdYGjS8n1MA0idGp1r1EYN+K41pRCA Date: Tue, 8 Nov 2022 23:02:22 +0000 Message-ID: References: <166793212765.3768752.4370741471494095451.stgit@djiang5-desk3.ch.intel.com> <166793219376.3768752.15370223291855764073.stgit@djiang5-desk3.ch.intel.com> In-Reply-To: <166793219376.3768752.15370223291855764073.stgit@djiang5-desk3.ch.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4 (3.44.4-2.fc36) 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: MN2PR11MB3999:EE_|PH8PR11MB6903:EE_ x-ms-office365-filtering-correlation-id: 3e0ab1f5-b120-4000-4e4e-08dac1dd4b8f x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: +YmTsvl0Wp/e/ax6cVKveCDMbRIz0ajHZXroJvUHZmeF3oPBCwY1xAeK6EpwVHUG7F7hBbC6HuGjvpu7sf4TWNhpmcWmBezHV1ZUTnPlMLNRaUgLIU3hWtB2vQaPJqFeu5KlESqkGW9/s+52X0a6CsjyvBY3sl+mW0hSO+UNtZFqgjtzJlym/BOlhO7dRS2jjaz2N0e1r6eg0K+VSe5bSTz/Bz2uR06yKEaMuRDf0XaZMuCOt2CMrCKvFoLzPicMD+Y4YiFJvuoyYwMD5fPIC/c7Wz2k078RJe/HtZA8+qkhdcBPAeHAK59H0Kt2bTcdPJtugiR/znTdUxBR0IbX0zNh6r7m+dUtF7ZbJr1e3OWxIAcpnN0pe1S/vjRSmJN5HrfRNw5WC7z2XCqYUXLAxW8V9kbK2MY9b0N/SoW9kL5HThUKrVF0IL9Y1ofAw/6zFTkfd5QxHbq2N424sLU9b0YVmsdf6pPZacPfR4rT9U05dMUM+JBWczwkYsgiWozhWmAtaX5eWc1KjzQ7yj9vHdJ+yJFAIm0aLioKfyhZdtev7O333P5ciXcGHchgUFJa6shLx/s505zX7Q/3/uAA8TQtshlWX2v+hgm8G2hvsintbEUzBYWHncrgRHwEPHRHjApDz9sUIZDRy977Gt/qchrJY/rlHycxal5dl/0V3IZsTsKX2g9q9EaqXoJTRzQqlsy8Y3bVAK5tyhdF1+riHF2M6qFPc7F9x0LpQtS5MI1/801QU3Ek2IYUDvsLPJVlz6r+cKnn9jz51bRCHSMR4w== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB3999.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(396003)(366004)(376002)(346002)(39860400002)(136003)(451199015)(36756003)(38070700005)(82960400001)(86362001)(2906002)(26005)(6512007)(38100700002)(107886003)(186003)(6506007)(122000001)(66556008)(4326008)(66946007)(8676002)(66476007)(64756008)(66446008)(2616005)(316002)(54906003)(110136005)(91956017)(8936002)(6486002)(76116006)(71200400001)(478600001)(5660300002)(41300700001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WjNPMVVrS2o1SEtaOWJEWTdHaEd1M1ZHOC9YaWsrWHJqSFpjaWc4MUxCVVEy?= =?utf-8?B?dlJvdkN0bGsvSTFxNGdvd2pzNkZETG9vSjRRMkxhSG9MSWhaQThnSkJGRU1G?= =?utf-8?B?L214elN5cW90ekRlZmUxTHVqMkM3aE0ybS9XWTNxbjJmRVhhQnN2RTJZbGVG?= =?utf-8?B?SjR5NGYvZzEvMVBXZVJTeUs4TVZ4WG5KMTk2Tk1EMWx5NzdVM25aZUxiQTFN?= =?utf-8?B?bjhhVS9ENm9IZjJVRHFNUEdwSVlZREhnSW1pSEpiYUl4YUpDTDFoNnVVRjdL?= =?utf-8?B?QVludEo2cXUvdWZISTByLzdHQ0RWMVVsbitnc0QrUTQ3SWpjQ1lNRldROFZH?= =?utf-8?B?cjMwdnpEQWd3TEVoWDJHL2xYU3p0Rzlyc3JNZ2VwNEJoTDBBRi9Fc2xpOHUy?= =?utf-8?B?Q1lTVXd6WTFhenZyR3VOSkw5NHdyZU9oYW1EUjY3dUl1SHBITldtbmJTbE44?= =?utf-8?B?Wko1czNIZzdnMmpQYllLMXlucDZ0ZWhSMHg5eUt5NU1SU3FWMWhvaUV2V1Qz?= =?utf-8?B?bjE3c0NxS2JrOU5GbjExcUlxVllDYWg5LzJFdzRtMVNDMEhOT1NMRWY4QS90?= =?utf-8?B?S3J2YXNhWC9MNmx4ZDZnM25jalc5SGpVT01SVEJoTzNLTHNndEdqbkErUHdU?= =?utf-8?B?WWlVYW5DQmtOUlBjSnhINWVsRkptYWI4anRzdTZtczRMbll5dHh3RHc5aG5q?= =?utf-8?B?Y1BhZklhZ2N1T2ZXNEJhay9QWlBNRlo0YTZOY1BON1c5MjdmTVczbjV6ZDBX?= =?utf-8?B?MHBNcW81WTkxWGRYcUIraDhOSUNabWhMTWlaU25YMklzcnppU0EzMUc3aFI1?= =?utf-8?B?dFl4ZmpHT1g0UUNrYTBvSEliZm5sL0RCTXhaaHdBdEZ1WlpxOTBCU3phckYy?= =?utf-8?B?ZkMyeTNYajB1L0UrSnB6SXBPaXptYWRuaUIzaXBwMjd4Rm5kTXJ5Q05iVDUr?= =?utf-8?B?OTJZNVFtdTdjMnhVNlFhNW1GM2VkZTZhRHBFS0pGNnlDK3BoM0Q3aHRkU1JT?= =?utf-8?B?QzFHalBXZ2hKU2tSZFUwZDN6VlM2eFNnaWFmNFY4alFBaHZIbkE4THB6ckVs?= =?utf-8?B?VytDLzduYUxSQngzaDJSVlhaOURCcEQvYUNvTmtGaHdnQWdmYlc2ZzJkVVJo?= =?utf-8?B?M0VqeWREckExSzlFTms4eDdsWFNuVUc4aWFuc2NCVWlydnVpRmNBVmYrZDkw?= =?utf-8?B?SUJ5dVJzdEhaR1ZtakpwdUhOMXRxTlNGd1B2MXBQTzZDYStDY3h5S3AyZ1pT?= =?utf-8?B?NmptUkJsQ2hRLzhja1FLMGVUa2huRklCVFN0ZFZhR1YwV1JmT3c3YnBhVmFn?= =?utf-8?B?Q2RBU3NzYVorVW10QjNyMnFNME90UUtlTm1jM2VocWdZeE01Z0d0OG5NZ3lt?= =?utf-8?B?L1ZyOExwV2tGQ1JncTJhamhucW5NZ0FLRnpnK0QvTHAzL3BwRDM2ZDdKMlUy?= =?utf-8?B?VTBvZVhEQ2tJL2NqK0RVanEvZkh2TmNkTURBNHR4bnpENlIyNTJvWi9xSkhI?= =?utf-8?B?anp2RVYvczN5WThJV3BWbFlOZHFFVUNTZDBrUHNuSnR2b0wvWU1jMzU4bk40?= =?utf-8?B?RUFjREZZNVpMY2tUU1ptakQ3UVJIUDNRaHY3bmdYNHVXSGEvcWlhR2xvRXpk?= =?utf-8?B?UlhVcHg2TnM0M1pJbDZZR25nV0dldzFRZ1JSY2hTMjEzRk9mSVlyUWZlYTdO?= =?utf-8?B?UTgrNGxET1RUQmkyaEM3QS9SazMyek02VXFJS0J2cDZSdzQrR3Y5T0pDb0Fv?= =?utf-8?B?ZmduN1hHMnUrdnRmNFRmbkYycU56aEIxMWlMdlNPZnRCWUk0dkx2VE92Szhq?= =?utf-8?B?ejJ1Yk42UE8xNS9GMytkaDBsZHphR0xGMXZkeUwzKzhMMkRvc285ZEpmQ2FW?= =?utf-8?B?TWdyc0pFREF3K0V1MFdVcFBMRkMvL3V5T2lkMWYyNTgxM1Q2c3lPN1QwUVhr?= =?utf-8?B?dEF5VldvTEhQSGVCeFI3SUtNRDRoNmRpZ2xralhZdXBTQ3kvL0Z6amRtaFpQ?= =?utf-8?B?SXIvZXV5eDlkRmQ1bDlNYmdYcGJRa29wdWVtdWM3YnppTmtORGphMTNGbUh3?= =?utf-8?B?dzJLeDFSaUxVVVlyQTl3TDhQUENybE9kUUp2c2hKbnYwS3F6V1RSWWl2dE1s?= =?utf-8?B?S01hanpYZXlraTluOW1saWtFWnhtRGlrYzQ5Rmd2SW9OYVlMYVRFVGprbXpt?= =?utf-8?B?ZHc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <9046583CB5E78942A213C5F8C8BF58F2@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB3999.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e0ab1f5-b120-4000-4e4e-08dac1dd4b8f X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Nov 2022 23:02:22.5337 (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: OdEo7OXBoTxvz2OznTAcllAL9VQyKC3zWsFwG29DuugKx2aRu/Y/ELWK12AYaNQM5+iQK/Frps6yO2UYzMzCYIe4R4lCFNnk+nym9nnYSlw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB6903 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-cxl@vger.kernel.org T24gVHVlLCAyMDIyLTExLTA4IGF0IDExOjI5IC0wNzAwLCBEYXZlIEppYW5nIHdyb3RlOgo+IEFk ZCB0aGUgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgdHJhY2UgZXZlbnQgY2FwdHVyZWQg YnkKPiBsaWJ0cmFjZWV2ZW50IGluIGEgdGVwIGhhbmRsZS4gQWxsIHRoZSBwYXJzZWQgZmllbGRz IGFyZSBhZGRlZCB0byBhIGpzb24KPiBvYmplY3QuIFRoZSBqc29uIG9iamVjdCBpcyBhZGRlZCB0 byB0aGUgcHJvdmlkZWQgbGlzdCBpbiB0aGUgaW5wdXQgcGFyYW1ldGVyLgo+IAo+IFRlc3RlZC1i eTogQWxpc29uIFNjaG9maWVsZCA8YWxpc29uLnNjaG9maWVsZEBpbnRlbC5jb20+Cj4gU2lnbmVk LW9mZi1ieTogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+Cj4gLS0tCj4gwqBjeGwv ZXZlbnRfdHJhY2UuYyB8wqAgMjAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gwqBjeGwvZXZlbnRfdHJhY2UuaCB8wqDCoCAxNCArKysrCj4g wqBjeGwvbWVzb24uYnVpbGTCoMKgIHzCoMKgwqAgMiArCj4gwqBtZXNvbi5idWlsZMKgwqDCoMKg wqDCoCB8wqDCoMKgIDEgCj4gwqA0IGZpbGVzIGNoYW5nZWQsIDIxOCBpbnNlcnRpb25zKCspCj4g wqBjcmVhdGUgbW9kZSAxMDA2NDQgY3hsL2V2ZW50X3RyYWNlLmMKPiDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBjeGwvZXZlbnRfdHJhY2UuaAo+IAo+IGRpZmYgLS1naXQgYS9jeGwvZXZlbnRfdHJhY2Uu YyBiL2N4bC9ldmVudF90cmFjZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjFiMWIwMzdlNDhiZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9jeGwvZXZlbnRf dHJhY2UuYwo+IEBAIC0wLDAgKzEsMjAxIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCj4gKy8vIENvcHlyaWdodCAoQykgMjAyMiwgSW50ZWwgQ29ycC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxqc29uLWMvanNv bi5oPgo+ICsjaW5jbHVkZSA8dXRpbC9qc29uLmg+Cj4gKyNpbmNsdWRlIDx1dGlsL3V0aWwuaD4K PiArI2luY2x1ZGUgPHV0aWwvcGFyc2Utb3B0aW9ucy5oPgo+ICsjaW5jbHVkZSA8dXRpbC9wYXJz ZS1jb25maWdzLmg+CgpUaGUgYWJvdmUgdHdvIHNlZW0gdW5uZWNlc3NhcnkuCgo+ICsjaW5jbHVk ZSA8dXRpbC9zdHJidWYuaD4KPiArI2luY2x1ZGUgPHV0aWwvc3lzZnMuaD4KClNhbWUgd2l0aCB0 aGlzLgoKPiArI2luY2x1ZGUgPGNjYW4vbGlzdC9saXN0Lmg+Cj4gKyNpbmNsdWRlIDxuZGN0bC9u ZGN0bC5oPgo+ICsjaW5jbHVkZSA8bmRjdGwvbGlibmRjdGwuaD4KCkFyZSB0aGUgbmRjdGwgaW5j bHVkZXMgbmVlZGVkIGZvciBhbnl0aGluZz8KCj4gKyNpbmNsdWRlIDxzeXMvZXBvbGwuaD4KPiAr I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CgpUaGVzZSB0d28gbG9vayB1bnVzZWQgdG9vLgoKPiArI2lu Y2x1ZGUgPGxpYmN4bC5oPgoKVGhpcyBjb3VsZCBiZSBkcm9wcGVkIHRvby4KCj4gKyNpbmNsdWRl IDx1dWlkL3V1aWQuaD4KPiArI2luY2x1ZGUgPHRyYWNlZXZlbnQvZXZlbnQtcGFyc2UuaD4KPiAr I2luY2x1ZGUgImpzb24uaCIKPiArI2luY2x1ZGUgImV2ZW50X3RyYWNlLmgiCj4gKwo+ICsjZGVm aW5lIF9HTlVfU09VUkNFCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArCj4gK3N0YXRpYyBzdHJ1 Y3QganNvbl9vYmplY3QgKm51bV90b19qc29uKHZvaWQgKm51bSwgaW50IGVsZW1fc2l6ZSwgdW5z aWduZWQgbG9uZyBmbGFncykKPiArewo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgc2lnbiA9IGZsYWdz ICYgVEVQX0ZJRUxEX0lTX1NJR05FRDsKPiArwqDCoMKgwqDCoMKgwqBpbnQ2NF90IHZhbCA9IDA7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIHNwZWNpYWwgY2FzZSA2NCBiaXQgYXMgdGhlIGNhbGwg ZGVwZW5kcyBvbiBzaWduICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGVsZW1fc2l6ZSA9PSA4KSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzaWduKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGpzb25fb2JqZWN0X25l d19pbnQ2NCgqKGludDY0X3QgKiludW0pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4ganNvbl9vYmplY3RfbmV3X3VpbnQ2NCgqKHVpbnQ2NF90ICopbnVtKTsKPiArwqDCoMKg wqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIEFsbCBvdGhlcnMgZml0IGluIGEgc2ln bmVkIDY0IGJpdCAqLwo+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAoZWxlbV9zaXplKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgY2FzZSAxOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo c2lnbikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZh bCA9ICooaW50OF90ICopbnVtOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNl Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSAq KHVpbnQ4X3QgKiludW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ ICvCoMKgwqDCoMKgwqDCoGNhc2UgMjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHNpZ24pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2YWwgPSAqKGludDE2X3QgKiludW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZh bCA9ICoodWludDE2X3QgKiludW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgNDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHNpZ24pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2YWwgPSAqKGludDMyX3QgKiludW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHZhbCA9ICoodWludDMyX3QgKiludW07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIE9kZCBz aXplcyBhcmUgY29udmVydGVkIGluIHRoZSBrZXJuZWwgdG8gb25lIG9mIHRoZSBhYm92ZS4KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogSXQgaXMgYW4gZXJyb3IgdG8gc2VlIHRo ZW0gaGVyZS4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGpzb25fb2JqZWN0X25ld19pbnQ2NCh2YWwpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGN4bF9ldmVudF90b19qc29uX2NhbGxiYWNrKHN0cnVjdCB0ZXBf ZXZlbnQgKmV2ZW50LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdGVw X3JlY29yZCAqcmVjb3JkLCBzdHJ1Y3QgbGlzdF9oZWFkICpqbGlzdF9oZWFkKQoKSW5zdGVhZCBv ZiB0aGUgb2xkIGRvdWJsZS10YWIgc3R5bGUgY29udGludWF0aW9ucywgd2UgYWRkZWQgYSAuY2xh bmctCmZvcm1hdCB0byBuZGN0bCwgd2hpY2ggd2lsbCBmb3JtYXQgdGhpcyBzbGlnaHRseSBkaWZm ZXJlbnRseSAobWF0Y2hpbmcKdGhlIGNvbnRpbnVhdGlvbiB0byB0aGUgZmlyc3QgY2hhciBhZnRl ciB0aGUgb3BlbmluZyBwYXJlbnMpLgoKQWxzbywgaXMgJ2NhbGxiYWNrJyBpbiB0aGUgbmFtZSB1 c2VmdWw/IEknZCBjb25zaWRlciBkcm9wcGluZyBpdCAtCidjeGxfZXZlbnRfdG9fanNvbicgY29u dmV5cyBqdXN0IGFzIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpdApkb2VzLgoKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB0ZXBfZm9ybWF0X2ZpZWxkICoqZmllbGRzOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBqc29uX29iamVjdCAqamV2ZW50LCAqam9iaiwgKmphcnJheTsKCk1p bm9yL29wdGlvbmFsIG5pdCwgYnV0IHRoZXNlIGxvb2sgbmljZSBhbmQgY2xlYW4gaW4gcmV2ZXJz ZS1jaHJpc3RtYXMKdHJlZSB1c2VkIGVsc2V3aGVyZSA6KQoKPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3Qgamxpc3Rfbm9kZSAqam5vZGU7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGksIGosIHJjID0gMDsK PiArCj4gK8KgwqDCoMKgwqDCoMKgam5vZGUgPSBtYWxsb2Moc2l6ZW9mKCpqbm9kZSkpOwo+ICvC oMKgwqDCoMKgwqDCoGlmICgham5vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRU5PTUVNOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBqZXZlbnQgPSBqc29uX29iamVj dF9uZXdfb2JqZWN0KCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqZXZlbnQpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSAtRU5PTUVNOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIGVycl9qZXZlbnQ7CgpBbHNvIG1pbm9yLCBidXQgdGhlIGxhYmVs IHNob3VsZCBwcm9iYWJseSBiZSBjYWxsZWQgZXJyX2ZyZWUgb3IKc29tZXRoaW5nIHNpbmNlIHlv dSBnb3RvIGl0IGJlZm9yZSBqZXZlbnQgbmVlZHMgdG8gYmUgZnJlZWQuCgo+ICvCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqDCoMKgwqBqbm9kZS0+am9iaiA9IGpldmVudDsKPiArCj4gK8KgwqDC oMKgwqDCoMKgZmllbGRzID0gdGVwX2V2ZW50X2ZpZWxkcyhldmVudCk7Cj4gK8KgwqDCoMKgwqDC oMKgaWYgKCFmaWVsZHMpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSAt RU5PRU5UOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArwqDC oMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGpvYmogPSBqc29uX29iamVjdF9uZXdf c3RyaW5nKGV2ZW50LT5zeXN0ZW0pOwo+ICvCoMKgwqDCoMKgwqDCoGlmICgham9iaikgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKg wqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpldmVudCwgInN5c3RlbSIsIGpvYmopOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBqb2JqID0ganNvbl9vYmplY3RfbmV3X3N0cmluZyhldmVudC0+ bmFtZSk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqb2JqKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJjID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2Jq ZWN0X29iamVjdF9hZGQoamV2ZW50LCAiZXZlbnQiLCBqb2JqKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgam9iaiA9IGpzb25fb2JqZWN0X25ld191aW50NjQocmVjb3JkLT50cyk7Cj4gK8KgwqDCoMKg wqDCoMKgaWYgKCFqb2JqKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0g LUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoamV2 ZW50LCAidGltZXN0YW1wIiwgam9iaik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7 IGZpZWxkc1tpXTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCB0ZXBfZm9ybWF0X2ZpZWxkICpmID0gZmllbGRzW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpbnQgbGVuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKGYtPmZsYWdzICYgVEVQX0ZJRUxEX0lTX1NUUklORykgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciAqc3RyOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0ciA9IHRlcF9nZXRfZmllbGRf cmF3KE5VTEwsIGV2ZW50LCBmLT5uYW1lLCByZWNvcmQsICZsZW4sIDApOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzdHIpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29u dGludWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgam9iaiA9IGpzb25fb2JqZWN0X25ld19zdHJpbmcoc3RyKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgham9iaikgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0g LUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpldmVudCwgZi0+bmFtZSwg am9iaik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoZi0+Zmxh Z3MgJiBURVBfRklFTERfSVNfQVJSQVkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGNoYXIgKmRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgY2h1bmtzOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgPSB0ZXBfZ2V0X2Zp ZWxkX3JhdyhOVUxMLCBldmVudCwgZi0+bmFtZSwgcmVjb3JkLCAmbGVuLCAwKTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZGF0YSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb250aW51ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBqYXJyYXkgPSBqc29uX29iamVjdF9uZXdfYXJyYXkoKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghamFycmF5KSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmMgPSAtRU5PTUVNOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNodW5rcyA9IGYtPnNpemUgLyBmLT5lbGVtZW50c2l6ZTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaiA9 IDA7IGogPCBjaHVua3M7IGorKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpvYmogPSBudW1fdG9fanNvbihkYXRhLCBm LT5lbGVtZW50c2l6ZSwgZi0+ZmxhZ3MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgham9iaikgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9wdXQoamFycmF5KTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X2FycmF5 X2FkZChqYXJyYXksIGpvYmopOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGEgKz0gZi0+ZWxlbWVudHNpemU7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2Jq ZWN0X2FkZChqZXZlbnQsIGYtPm5hbWUsIGphcnJheSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0gZWxzZSB7IC8qIHNpbmdsZSBudW1iZXIgKi8KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGNoYXIgKmRhdGE7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFyICp0bXA7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9 IHRlcF9nZXRfZmllbGRfcmF3KE5VTEwsIGV2ZW50LCBmLT5uYW1lLCByZWNvcmQsICZsZW4sIDAp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFk YXRhKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgVVVJRCAqLwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdG1wID0gc3Ry Y2FzZXN0cihmLT50eXBlLCAidXVpZF90Iik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodG1wKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciB1dWlkW1NZU0ZTX0FU VFJfU0laRV07CgpEb2VzIHRoaXMgbmVlZCB0byBiZSBTWVNGU19BVFRSX1NJWkU/IExvb2tzIGxp a2UgaGlzdG9yaWNhbGx5IHdlJ3ZlCmp1c3QgY3JlYXRlZCBzdWNoIFVVSUQgYnVmZmVycyB0byBi ZSBidWZbNDBdLiBJIHRoaW5rIHRoZSBzeXNmcyBzaXplIGlzCjQwOTYuCgo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1 dWlkX3VucGFyc2UoZGF0YSwgdXVpZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgam9iaiA9IGpzb25fb2JqZWN0X25ld19z dHJpbmcodXVpZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqb2JqKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJjID0gLUVOT01FTTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpldmVudCwgZi0+bmFtZSwgam9i aik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29udGludWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgam9iaiA9IG51bV90b19qc29uKGRhdGEsIGYtPmVsZW1lbnRzaXplLCBmLT5m bGFncyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIWpvYmopIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IC1FTk9NRU07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2Jq ZWN0X2FkZChqZXZlbnQsIGYtPm5hbWUsIGpvYmopOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Fk ZF90YWlsKGpsaXN0X2hlYWQsICZqbm9kZS0+bGlzdCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IDA7Cj4gKwo+ICtlcnI6Cj4gK8KgwqDCoMKgwqDCoMKganNvbl9vYmplY3RfcHV0KGpldmVudCk7 Cj4gK2Vycl9qZXZlbnQ6Cj4gK8KgwqDCoMKgwqDCoMKgZnJlZShqbm9kZSk7Cj4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIHJjOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2N4bC9ldmVudF90cmFjZS5oIGIv Y3hsL2V2ZW50X3RyYWNlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMDA5NzVhMGI1NjgwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2N4bC9ldmVudF90cmFj ZS5oCj4gQEAgLTAsMCArMSwxNCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLwo+ICsvKiBDb3B5cmlnaHQgKEMpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICovCj4gKyNpZm5kZWYgX19DWExfRVZFTlRfVFJBQ0VfSF9fCj4gKyNk ZWZpbmUgX19DWExfRVZFTlRfVFJBQ0VfSF9fCj4gKwo+ICsjaW5jbHVkZSA8anNvbi1jL2pzb24u aD4KPiArI2luY2x1ZGUgPGNjYW4vbGlzdC9saXN0Lmg+Cj4gKwo+ICtzdHJ1Y3Qgamxpc3Rfbm9k ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGpzb25fb2JqZWN0ICpqb2JqOwo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBsaXN0X25vZGUgbGlzdDsKPiArfTsKPiArCj4gKyNlbmRpZgo+IGRpZmYg LS1naXQgYS9jeGwvbWVzb24uYnVpbGQgYi9jeGwvbWVzb24uYnVpbGQKPiBpbmRleCBmMjQ3NGFh YTZlMmUuLjhjNzczMzQzMTYxMyAxMDA2NDQKPiAtLS0gYS9jeGwvbWVzb24uYnVpbGQKPiArKysg Yi9jeGwvbWVzb24uYnVpbGQKPiBAQCAtNyw2ICs3LDcgQEAgY3hsX3NyYyA9IFsKPiDCoMKgICdt ZW1kZXYuYycsCj4gwqDCoCAnanNvbi5jJywKPiDCoMKgICdmaWx0ZXIuYycsCj4gK8KgICdldmVu dF90cmFjZS5jJywKPiDCoF0KPiDCoAo+IMKgY3hsX3Rvb2wgPSBleGVjdXRhYmxlKCdjeGwnLAo+ IEBAIC0xOSw2ICsyMCw3IEBAIGN4bF90b29sID0gZXhlY3V0YWJsZSgnY3hsJywKPiDCoMKgwqDC oCBrbW9kLAo+IMKgwqDCoMKgIGpzb24sCj4gwqDCoMKgwqAgdmVyc2lvbmRlcCwKPiArwqDCoMKg IHRyYWNlZXZlbnQsCj4gwqDCoCBdLAo+IMKgwqAgaW5zdGFsbCA6IHRydWUsCj4gwqDCoCBpbnN0 YWxsX2RpciA6IHJvb3RiaW5kaXIsCj4gZGlmZiAtLWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24u YnVpbGQKPiBpbmRleCAyMGE2NDZkMTM1YzcuLmY2MTFlMGJkZDdmMyAxMDA2NDQKPiAtLS0gYS9t ZXNvbi5idWlsZAo+ICsrKyBiL21lc29uLmJ1aWxkCj4gQEAgLTE0Miw2ICsxNDIsNyBAQCBrbW9k ID0gZGVwZW5kZW5jeSgnbGlia21vZCcpCj4gwqBsaWJ1ZGV2ID0gZGVwZW5kZW5jeSgnbGlidWRl dicpCj4gwqB1dWlkID0gZGVwZW5kZW5jeSgndXVpZCcpCj4gwqBqc29uID0gZGVwZW5kZW5jeSgn anNvbi1jJykKPiArdHJhY2VldmVudCA9IGRlcGVuZGVuY3koJ2xpYnRyYWNlZXZlbnQnKQo+IMKg aWYgZ2V0X29wdGlvbignZG9jcycpLmVuYWJsZWQoKQo+IMKgwqAgaWYgZ2V0X29wdGlvbignYXNj aWlkb2N0b3InKS5lbmFibGVkKCkKPiDCoMKgwqDCoCBhc2NpaWRvYyA9IGZpbmRfcHJvZ3JhbSgn YXNjaWlkb2N0b3InLCByZXF1aXJlZCA6IHRydWUpCj4gCj4gCgo=