From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B1F4B425EC; Wed, 20 Sep 2023 11:11:30 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6307F40649; Wed, 20 Sep 2023 11:11:30 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 5C7474027B; Wed, 20 Sep 2023 11:11:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695201088; x=1726737088; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=B28JYc8aKMC5uJlsn7bwermkzWuPBQ0wWyNjVherhB8=; b=XuLVkbDgGycOtn1f6Se/7OYt2NnTw3y5pNcKvlRfAMX2lOJrINHHeHy7 67Zs5Zkb62TXnXUouj8BtgrE4xP3j26TRh+duFvWKxOLHCJN/rfpkl6p3 E6PqS8OPyO+VNHRm6/hJ3inFmgjwHFzADLpsN+5VW5CQYDSEGI28vVdJM /AJjr8aRdGrCGsX1htOnJFxmviu+U9+FAQPnFvIVJVBFVXMwl2ZM6zp5E CI2Cpn4mc73DWoJWD+EcZRn3AU3tLCGF/4iECQ0SxSjOTCUSRmsfKlInn 7rg8pcfUn365WaG1JFRKFjN3PVBOZvGhr15tM8mWcGQMeGb3GJaBAvTt9 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10838"; a="370484903" X-IronPort-AV: E=Sophos;i="6.02,161,1688454000"; d="scan'208";a="370484903" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Sep 2023 02:11:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10838"; a="816828321" X-IronPort-AV: E=Sophos;i="6.02,161,1688454000"; d="scan'208";a="816828321" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga004.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 20 Sep 2023 02:11:25 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Wed, 20 Sep 2023 02:11:25 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Wed, 20 Sep 2023 02:11:25 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.41) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Wed, 20 Sep 2023 02:11:24 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hJuPjMxcgDKGmmdoZTOgA9iN+bLhyfcJgxvDyvw3/GwBLFouYQt3uajfFRIwny3DlIrMTlERZ7L6ctBrCDhaFZEq6kzOIXb0lZJWtyl+UzpQIkVD0LhAvIL0kFwynkg48aorA8rkcb9w1sALILjyXRjHjzWyYSUT/uxuMR4mjIFuGiPP/EFapA0H9NK1kztl1oIbooRah2pI31CU9Jsq/rbcXgzH/ekNRJg3HwXmusAOLz83XWNyrbOs4fpm38we36J2uzKTSFDk0hrcj54qjAs48jL/J5LBvGmw3ZC+1y2ITj/V0woNkZvYr7/UD2NnxvRRHhQBxSDePI1GO2xhXw== 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=B28JYc8aKMC5uJlsn7bwermkzWuPBQ0wWyNjVherhB8=; b=YmUyOJhZ4Xl6N+oJkiJsKyR17xl8U0jRBwQDLgJXyy41ZrSSV4XpYMqvpxPQaWxcXtK83Ykee1hE3fCEjospGddKaWut4wl7dlJVDI1yvMOILOEsyZxn++87RLpnsSq0Mvui6GttKUXxUk8UQcHtx5R+tSqowWneLtnSL4si5kdjMIOyll+1mcPs2Xo7+f2vY4MZZ5uatwL4llva5rRJBixr+JIIESkFZs7oRYHVDGDjo/HL6NZnnRUnBQXR52meVZSwwJK/Z6D6eVCha0zomFwtsNvW1/22TBcbhP8Y8Kg1mNaiOgp12ixWeursvfNQ6aV5NIl/Src2IfJdahYQ/w== 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 DM6PR11MB3868.namprd11.prod.outlook.com (2603:10b6:5:19f::13) by DM6PR11MB4516.namprd11.prod.outlook.com (2603:10b6:5:2a5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.20; Wed, 20 Sep 2023 09:11:01 +0000 Received: from DM6PR11MB3868.namprd11.prod.outlook.com ([fe80::ea65:2100:3091:875a]) by DM6PR11MB3868.namprd11.prod.outlook.com ([fe80::ea65:2100:3091:875a%7]) with mapi id 15.20.6792.026; Wed, 20 Sep 2023 09:11:01 +0000 From: "Naga Harish K, S V" To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , mattias.ronnblom , "dev@dpdk.org" CC: Jerin Jacob , "techboard@dpdk.org" , "Van Haaren, Harry" , "Nilsson, Peter" , Heng Wang , Pavan Nikhilesh , "Gujjar, Abhinandan S" , "Carrillo, Erik G" , Shijith Thotton , "Hemant Agrawal" , Sachin Saxena , Liang Ma , "Mccarthy, Peter" , "Yan, Zhirun" Subject: RE: [PATCH v3 1/3] lib: introduce dispatcher library Thread-Topic: [PATCH v3 1/3] lib: introduce dispatcher library Thread-Index: AQHZ3zEFWjX+hk46dEKV8Z0r2eMwKrAaHtFQgAfX7ACAAXLQwA== Date: Wed, 20 Sep 2023 09:11:00 +0000 Message-ID: References: <20230616074041.159675-2-mattias.ronnblom@ericsson.com> <20230904130313.327809-1-mattias.ronnblom@ericsson.com> <20230904130313.327809-2-mattias.ronnblom@ericsson.com> <482e090b-b2ad-d795-6d90-cde0127adbe6@lysator.liu.se> In-Reply-To: <482e090b-b2ad-d795-6d90-cde0127adbe6@lysator.liu.se> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM6PR11MB3868:EE_|DM6PR11MB4516:EE_ x-ms-office365-filtering-correlation-id: fa226947-fe0c-453b-12dc-08dbb9b9823e 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: YgrzLiWodLxktI/uyJIKUGOT35/ZdNlTiy8Xg4tYGooFCKAyolMTPLMbJLIr9XlGHEbtTVFKtAT7l+y24UZWpF3If5+oGAlYdXbovXZVxqe7G4oCfyMEOqMJIgZ1P96GQefky9FT/EGjXHB62HVA1tVXpaj0TW5f/1Q+WYdsedaRBZnAOkj8WMGRdb1PtNBNKYAwLUWn6Z5s0lptLZcW2FCJFJpfkdYDxi2V1OutxCVSLhxVedWnbrHmPWcQzfjM2jXKNEk0JalOez5dfAQ5njg5RxhT9BlkabGbhS31iwvPVKkuPkaYTX/55tbnEqnfVozzuH40FvgWcefES3vUBPZKJzJuegx8cNxe9pbEataNdrJYRh9FVdHXhHMl2yrsIBxPkCo5t6gJ50pB5CRMvJUdOJTMIdcFnf+fPdz0MN6bS1Y6wQHS5TQ8YMjFgOaYPZrW1qnZFBsdr5nEWKJj0AvnVncZP6JKWUOMUbtOyCR3uq0E4b1G4l+Sg0f4lTAy1e6+R87L2Zq3prPTSaCpUz5wuAHMOgaUKc+2u6gycsMMCH0XkchCkmq7JkNRNAcSq9kpiV+9s+SB5a1Ij5yGnaaAnEVm3V9V8PH8k8xS+ZNmXFt/g303l/VvmbrGU6dZ x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB3868.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(366004)(136003)(376002)(39860400002)(346002)(451199024)(186009)(1800799009)(38100700002)(6506007)(53546011)(7696005)(38070700005)(33656002)(122000001)(55016003)(82960400001)(86362001)(107886003)(26005)(2906002)(66574015)(30864003)(9686003)(71200400001)(478600001)(83380400001)(4326008)(8676002)(5660300002)(52536014)(110136005)(41300700001)(8936002)(7416002)(66946007)(76116006)(66476007)(66446008)(64756008)(54906003)(66556008)(316002)(296002)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZjBkUi9OQ2xMOE82dmptQ1VPakxTam0reW5IMldqZGl6SHpWUERtOGRWSHAx?= =?utf-8?B?THhNand5Z1I0MjFTcWJoWmovdVBnbUtwVXdNS3RSL2RNM0VpWWpyTW9xM1Nn?= =?utf-8?B?VFg1SjJLSHBVelk1aXhuSXBWcVBXMTVHakpmNXdZVGlPd3R3c3RUaUZDZ25n?= =?utf-8?B?M1VleG1YNzBnNWVSUHNEWmNWSGZ2OXhTZ0hkbUlaSGM1aVdDUGdweG8wWk9X?= =?utf-8?B?MnArbEFPaTdmUjVoVDNzdmNWNFVzaDZKNEFZMW1qZWR6eEhVb0JMaVdRUDVw?= =?utf-8?B?Ylk4a29nMVgvWDdzczBRZlozVWFndzVjK2thQzZ5UXNpQTNkL2d3MTJFbVVh?= =?utf-8?B?RzlRZi9lWU9QNGllWjA3OUJTN0ozYlpFcHdabzUzRGZUWmJVYW9qMzZFU3Ez?= =?utf-8?B?UHp0U3cwZmREbUFCbndISUtDSTZxN0tqTmQ1eE02czJhWCtiU2xKd3l1eGNr?= =?utf-8?B?U1o1bU5lOHdUNFdaN1V6L3RkUzArN1Mvc3VQWnhuNDlDQUdYYmUzZG1aYTlH?= =?utf-8?B?ZnlzdmdZdGE0Yml2MVRLTlFzbGFVZStsMUNsd0g2NmZ3clRKbFNOWG9nL0h2?= =?utf-8?B?cWZQMzR0RjQwRkwyOVFlck1IcUNJaThzdmtmUm1LNktSZmRiS1ljanB6K0hX?= =?utf-8?B?UFMxaFFEMGVVdTZsbmdxeTZLSFNXVWNDbDBFWnJoaCsvdlFTZ3kxSThETEIv?= =?utf-8?B?aXhaMWowcndydjhsSXo4c3A1UVBSNzJ2cDIza1ZSQkV0a3duNS83cThIazlr?= =?utf-8?B?VFBpZWIzL3RYbmRqT0lleWo5Q1l0eW9NeG9zNW43Tmc4YnZxNFpGT2lZSFZY?= =?utf-8?B?RnlYLzFCb1RvNERxdlExVVI2c0w4MC9TcTRRMktrQ0FlSTh2VVMrSWhCZmdp?= =?utf-8?B?NVJRWkp6b0lYTmxsdUxHMjBFL1BLUjVLWXRlRld1WWJUNDRKa0NUamtCYkdU?= =?utf-8?B?MGRaV0JEWHdwejJCU2dDNTVnU0tha2R4SGpaMHBXN3BkRm1ZdENjdlV0YzFS?= =?utf-8?B?V1dKTE1TUVZxRFZ4M0pkNXhvN0F0R3AzTythUHZsYzhIZlR0QTNPM2c3c1cy?= =?utf-8?B?VjBrLytXeGg3N2ZZSytlYWZQS3o4Z1ZzS253eTBKbTIvL3BGbXhKRXdvVmxk?= =?utf-8?B?V01saVJ2WThoRVMveno4K2VpQzZXR3FVQzZkYklFMC9JdUgraGhKM0VUeG80?= =?utf-8?B?aDdEb1NPWWN3a1NGZzhHMWFXZU4xcU0vNmllSmlCWTBTaTFjL2NLaXJTaUNB?= =?utf-8?B?UWpSbEVXYlZDMVVyQVEvdm9xRXFjb1JJQ1VzQ1RHWVRRbm5NeUdKMW1lZ083?= =?utf-8?B?TndGY2hUaXY5dno0UXZsSVFuOXNzaXRSL2U1ajIzTVFkZEFjSmwwLzdlZERX?= =?utf-8?B?MTlxcDN3RWpkOEs1Y3FTN3laNEl4cit2clJPM1Foa1dIWHM4YktFRmdJLzQw?= =?utf-8?B?QStlMDN2S0hMVmdmKzB2ME92ZnR2SVVBWlRMY0FyS3RXelIyejUrMTdhS3lr?= =?utf-8?B?dllIS3VJYTdxdUhnZzNoU2VZUEpBbU1US08ySmJBMmZvL21oQ0RxcVE0cGhk?= =?utf-8?B?UEppYUlvVXE1R0w0emN6bHg3RzVSS2pVeEJ3QVY3eUwwVGkvZjNkMGJjWUYy?= =?utf-8?B?aXRSeGl4YnZPMEIxSWtnUHlpVFBma0RRdFhvTXNMRmtpazhkM1l5Y3V4TTVa?= =?utf-8?B?ckJLS2pBSmJUbFNLUnpkMHpKaTBQZFlCaEtSVTQ0R0YxTXZUV0N2SnZNb3Zs?= =?utf-8?B?SXhUT1FqQlVpMnpPa0xLbEJUbFhnSXZueHd4UmNFYnBlZ3lNZ2pCNVE5Tmt6?= =?utf-8?B?YWhFemZHUVhoU2psNUdtMXE4NWRLV1RSQmcxU2lDTi8zSzVmMG03M3lTRXRI?= =?utf-8?B?bDB1azF3c0xXZlcwWDIxaEZPU1VRN0pRbFBBWlVtK2RCYmVrVmdrSjE5d1M3?= =?utf-8?B?Uk91cXY5Ri80dVBaUTdlMW9mWm5mQm8yM1ErbkFjODEyYnM0UWRSelhGaFZQ?= =?utf-8?B?MXhpWGZkM3lzWjJlOTVmaUtiS2dKWUhoYUQrRmQxTzFTekJEVWtONnFlZDQ1?= =?utf-8?B?amE1OTlpNjJBSms0R3NoZWg0RllkTmkwUHJMaDNHQmVPWWhtbXVmdTJZckNJ?= =?utf-8?B?UzN6Y0hmbFNoVHNoaVducmFzOVFSbWM4TlRRcTQrbjY3SU1ENFUzK3NKOVhC?= =?utf-8?B?SHc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB3868.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa226947-fe0c-453b-12dc-08dbb9b9823e X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2023 09:11:00.6668 (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: oKKs6HAieyfNekpsKEEhWgOktdRaN7RVFjgITJ+rVaOc0h8VyCD75xRkzQA5T3CusfBBxIr5MAS4ozD8GQuzy3Q2znQ6HvlMfxoxrKvoL18= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4516 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF0dGlhcyBSw7ZubmJs b20gPGhvZm9yc0BseXNhdG9yLmxpdS5zZT4NCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDE5 LCAyMDIzIDI6NTEgUE0NCj4gVG86IE5hZ2EgSGFyaXNoIEssIFMgViA8cy52Lm5hZ2EuaGFyaXNo LmtAaW50ZWwuY29tPjsgbWF0dGlhcy5yb25uYmxvbQ0KPiA8bWF0dGlhcy5yb25uYmxvbUBlcmlj c3Nvbi5jb20+OyBkZXZAZHBkay5vcmcNCj4gQ2M6IEplcmluIEphY29iIDxqZXJpbmpAbWFydmVs bC5jb20+OyB0ZWNoYm9hcmRAZHBkay5vcmc7IFZhbiBIYWFyZW4sDQo+IEhhcnJ5IDxoYXJyeS52 YW4uaGFhcmVuQGludGVsLmNvbT47IE5pbHNzb24sIFBldGVyDQo+IDxwZXRlci5qLm5pbHNzb25A ZXJpY3Nzb24uY29tPjsgSGVuZyBXYW5nIDxoZW5nLndhbmdAZXJpY3Nzb24uY29tPjsNCj4gUGF2 YW4gTmlraGlsZXNoIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+OyBHdWpqYXIsIEFiaGluYW5k YW4gUw0KPiA8YWJoaW5hbmRhbi5ndWpqYXJAaW50ZWwuY29tPjsgQ2FycmlsbG8sIEVyaWsgRyA8 ZXJpay5nLmNhcnJpbGxvQGludGVsLmNvbT47DQo+IFNoaWppdGggVGhvdHRvbiA8c3Rob3R0b25A bWFydmVsbC5jb20+OyBIZW1hbnQgQWdyYXdhbA0KPiA8aGVtYW50LmFncmF3YWxAbnhwLmNvbT47 IFNhY2hpbiBTYXhlbmEgPHNhY2hpbi5zYXhlbmFAb3NzLm54cC5jb20+Ow0KPiBMaWFuZyBNYSA8 bGlhbmdtYUBsaWFuZ2JpdC5jb20+OyBNY2NhcnRoeSwgUGV0ZXINCj4gPHBldGVyLm1jY2FydGh5 QGludGVsLmNvbT47IFlhbiwgWmhpcnVuIDx6aGlydW4ueWFuQGludGVsLmNvbT4NCj4gU3ViamVj dDogUmU6IFtQQVRDSCB2MyAxLzNdIGxpYjogaW50cm9kdWNlIGRpc3BhdGNoZXIgbGlicmFyeQ0K PiANCj4gT24gMjAyMy0wOS0xNyAxODo0NiwgTmFnYSBIYXJpc2ggSywgUyBWIHdyb3RlOg0KPiA+ DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogTWF0dGlh cyBSw7ZubmJsb20gPG1hdHRpYXMucm9ubmJsb21AZXJpY3Nzb24uY29tPg0KPiA+PiBTZW50OiBN b25kYXksIFNlcHRlbWJlciA0LCAyMDIzIDY6MzMgUE0NCj4gPj4gVG86IGRldkBkcGRrLm9yZw0K PiA+PiBDYzogSmVyaW4gSmFjb2IgPGplcmluakBtYXJ2ZWxsLmNvbT47IHRlY2hib2FyZEBkcGRr Lm9yZzsgVmFuIEhhYXJlbiwNCj4gPj4gSGFycnkgPGhhcnJ5LnZhbi5oYWFyZW5AaW50ZWwuY29t PjsgaG9mb3JzQGx5c2F0b3IubGl1LnNlOyBOaWxzc29uLA0KPiA+PiBQZXRlciA8cGV0ZXIuai5u aWxzc29uQGVyaWNzc29uLmNvbT47IEhlbmcgV2FuZw0KPiA+PiA8aGVuZy53YW5nQGVyaWNzc29u LmNvbT47IE5hZ2EgSGFyaXNoIEssIFMgVg0KPiA+PiA8cy52Lm5hZ2EuaGFyaXNoLmtAaW50ZWwu Y29tPjsgUGF2YW4gTmlraGlsZXNoDQo+ID4+IDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+OyBH dWpqYXIsIEFiaGluYW5kYW4gUw0KPiA+PiA8YWJoaW5hbmRhbi5ndWpqYXJAaW50ZWwuY29tPjsg Q2FycmlsbG8sIEVyaWsgRw0KPiA+PiA8RXJpay5HLkNhcnJpbGxvQGludGVsLmNvbT47IFNoaWpp dGggVGhvdHRvbiA8c3Rob3R0b25AbWFydmVsbC5jb20+Ow0KPiA+PiBIZW1hbnQgQWdyYXdhbCA8 aGVtYW50LmFncmF3YWxAbnhwLmNvbT47IFNhY2hpbiBTYXhlbmENCj4gPj4gPHNhY2hpbi5zYXhl bmFAb3NzLm54cC5jb20+OyBMaWFuZyBNYSA8bGlhbmdtYUBsaWFuZ2JpdC5jb20+Ow0KPiA+PiBN Y2NhcnRoeSwgUGV0ZXIgPFBldGVyLk1jY2FydGh5QGludGVsLmNvbT47IFlhbiwgWmhpcnVuDQo+ ID4+IDxaaGlydW4uWWFuQGludGVsLmNvbT47IG1hdHRpYXMucm9ubmJsb20NCj4gPj4gPG1hdHRp YXMucm9ubmJsb21AZXJpY3Nzb24uY29tPg0KPiA+PiBTdWJqZWN0OiBbUEFUQ0ggdjMgMS8zXSBs aWI6IGludHJvZHVjZSBkaXNwYXRjaGVyIGxpYnJhcnkNCj4gPj4NCj4gPj4gVGhlIHB1cnBvc2Ug b2YgdGhlIGRpc3BhdGNoZXIgbGlicmFyeSBpcyB0byBoZWxwIHJlZHVjZSBjb3VwbGluZyBpbg0K PiA+PiBhbiBFdmVudGRldi1iYXNlZCBEUERLIGFwcGxpY2F0aW9uLg0KPiA+Pg0KPiA+PiBJbiBh ZGRpdGlvbiwgdGhlIGRpc3BhdGNoZXIgYWxzbyBwcm92aWRlcyBhIGNvbnZlbmllbnQgYW5kIGZs ZXhpYmxlDQo+ID4+IHdheSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSBzZXJ2aWNlIGNvcmVz IGZvciBhcHBsaWNhdGlvbi1sZXZlbCBwcm9jZXNzaW5nLg0KPiA+Pg0KPiA+PiBTaWduZWQtb2Zm LWJ5OiBNYXR0aWFzIFLDtm5uYmxvbSA8bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+DQo+ ID4+IFRlc3RlZC1ieTogUGV0ZXIgTmlsc3NvbiA8cGV0ZXIuai5uaWxzc29uQGVyaWNzc29uLmNv bT4NCj4gPj4gUmV2aWV3ZWQtYnk6IEhlbmcgV2FuZyA8aGVuZy53YW5nQGVyaWNzc29uLmNvbT4N Cj4gPj4NCj4gPj4gLS0NCj4gPj4NCj4gPj4gUEFUQ0ggdjM6DQo+ID4+ICAgbyBUbyB1bmRlcmxp bmUgaXRzIG9wdGlvbmFsIGNoYXJhY3RlciBhbmQgc2luY2UgaXQgZG9lcyBub3QgcHJvdmlkZQ0K PiA+PiAgICAgaGFyZHdhcmUgYWJzdHJhY3Rpb24sIHRoZSBldmVudCBkaXNwYXRjaGVyIGlzIG5v dyBhIHNlcGFyYXRlDQo+ID4+ICAgICBsaWJyYXJ5Lg0KPiA+PiAgIG8gQ2hhbmdlIG5hbWUgZnJv bSBydGVfZXZlbnRfZGlzcGF0Y2hlciAtPiBydGVfZGlzcGF0Y2hlciwgdG8gbWFrZSBpdA0KPiA+ PiAgICAgc2hvcnRlciBhbmQgdG8gYXZvaWQgdGhlIHJ0ZV9ldmVudF8qIG5hbWVzcGFjZS4NCj4g Pj4NCj4gPg0KPiA+IFJ0ZV9kaXNwYXRjaGVyIGlzIGJhc2ljYWxseSBkaXNwYXRjaGluZyBldmVu dHMgYnV0IGl0IGZlZWxzIGxpa2UgdGhlIG5hbWUgZG9lcw0KPiBub3QgY29udmV5IHRoYXQuDQo+ ID4gQWxzbywgaXQgaXMgbGlrZSBhbnkgb3RoZXIgYWRhcHRlciBzZXJ2aWNlIHRoYXQgY2FuIHJl c2lkZSB3aXRoaW4gdGhlIGV2ZW50ZGV2DQo+IGRpcmVjdG9yeS4NCj4gPg0KPiA+IEkgY2FuIHNl ZSBzb21lIGRpc2N1c3Npb24gaW4gcHJldmlvdXMgdGhyZWFkcyByZWxhdGVkIHRvIHRoZSBwbGFj ZW1lbnQgb2YgdGhlDQo+IGRpc3BhdGNoZXIgbGlicmFyeS4NCj4gPg0KPiA+IEl0IGlzIGFuIG9w dGlvbmFsIGV2ZW50ZGV2IGFwcGxpY2F0aW9uIHNlcnZpY2UsIG5vdCBlbmZvcmNpbmcgdGhpcw0K PiBwcm9ncmFtbWluZyBtb2RlbCB0byB0aGUgYXBwbGljYXRpb24uDQo+ID4gVGhlIGRvY3VtZW50 YXRpb24gbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBhbmQgbWVudGlvbiB0aGF0IHRoaXMgaXMNCj4g b3B0aW9uYWwuDQo+ID4NCj4gPiBJZiBhbnkgaGFyZHdhcmUgY29tZXMgdXAgd2l0aCB0aGUgZGlz cGF0Y2hlciBmZWF0dXJlLCB0aGVuIHRoaXMgbGlicmFyeSBtYXkNCj4gbmVlZCB0byBiZSBtb3Zl ZCBpbnNpZGUgZXZlbnRkZXYgbGlicmFyeSBsYXRlci4NCj4gPg0KPiANCj4gSXQgc2VlbXMgdG8g bWUgdGhhdCB0aGUgZGVjaWRpbmcgZmFjdG9yIGZvciB3aGF0IGZ1bmN0aW9uYWxpdHkgZ29lcyBp bnRvIGEgRFBESw0KPiBsaWJyYXJ5IG9yIG5vdCBpcyBub3Qgc3VjaCBtdWNoIGRlcGVuZGVudCBv biBpZiBpdCdzIGltcGxlbWVudGVkIGluIGhhcmR3YXJlLA0KPiBpbiBzb2Z0d2FyZSwgb3Igc29t ZSBjb21iaW5hdGlvbiB0aGVyZW9mLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhlDQo+ IGxpYnJhcnkgaXMgYmUgYWJsZSB0byBwcmVzZW50IGEgY29oZXJlbnQgQVBJIHRvIHRoZSBhcHBs aWNhdGlvbiAob3Igb3RoZXINCj4gbGlicmFyaWVzKS4NCj4gDQo+IFRoYXQgc2FpZCwgYXMgSSd2 ZSBtZW50aW9uZWQgYmVmb3JlLCBJIGhhdmUgbm8gc3Ryb25nIG9waW9uaW9uIG9uIHRoaXMgc3Vi amVjdC4NCj4gDQoNCldoYXQgaXMgdGhlIG5leHQgc3RlcCBoZXJlPyANClRoZSByZXNwb25zZSBp cyBub3QgY29uY2x1c2l2ZSBhcyBJdCBsb29rcyBsaWtlIGJvdGggeWVzIGFuZCBubyB0byBjaGFu Z2UgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuDQoNCg0KPiA+IFNvLCBJdCBtYWtlcyBzZW5zZSB0 byBrZWVwIHRoaXMgb3B0aW9uYWwgc2VydmljZSBpbiB0aGUgZXZlbnRkZXYgZm9sZGVyIGFzIGFu DQo+IG9wdGlvbmFsIGZlYXR1cmUuDQo+ID4NCj4gPj4gUEFUQ0ggdjI6DQo+ID4+ICAgbyBBZGQg ZGVxdWV1ZSBiYXRjaCBjb3VudCBzdGF0aXN0aWMuDQo+ID4+ICAgbyBBZGQgc3RhdGlzdGljcyBy ZXNldCBmdW5jdGlvbiB0byBBUEkuDQo+ID4+ICAgbyBDbGFyaWZ5IE1UIHNhZmV0eSBndWFyYW50 ZWVzIChvciBsYWNrIHRoZXJlb2YpIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbi4NCj4gPj4gICBv IENoYW5nZSBsb29wIHZhcmlhYmxlIHR5cGUgaW4gZXZkX2xjb3JlX2dldF9oYW5kbGVyX2J5X2lk KCkgdG8gdWludDE2X3QsDQo+ID4+ICAgICB0byBiZSBjb25zaXN0ZW50IHdpdGggc2ltaWxhciBs b29wcyBlbHNld2hlcmUgaW4gdGhlIGRpc3BhdGNoZXIuDQo+ID4+ICAgbyBGaXggdmFyaWFibGUg bmFtZXMgaW4gZmluYWxpemVyIHVucmVnaXN0ZXIgZnVuY3Rpb24uDQo+ID4+DQo+ID4+IFBBVENI Og0KPiA+PiAgIG8gQ2hhbmdlIHByZWZpeCBmcm9tIFJFRCB0byBFVkQsIHRvIGF2b2lkIGNvbmZ1 c2lvbiB3aXRoIHJhbmRvbQ0KPiA+PiAgICAgZWFybHkgZGV0ZWN0aW9uLg0KPiA+Pg0KPiA+PiBS RkMgdjQ6DQo+ID4+ICAgbyBNb3ZlIGhhbmRsZXJzIHRvIHBlci1sY29yZSBkYXRhIHN0cnVjdHVy ZXMuDQo+ID4+ICAgbyBJbnRyb2R1Y2UgbWVjaGFuaXNtIHdoaWNoIHJlYXJyYW5nZXMgaGFuZGxl cnMgc28gdGhhdCBvZnRlbi11c2VkDQo+ID4+ICAgICBoYW5kbGVycyB0ZW5kIHRvIGJlIHRyaWVk IGZpcnN0Lg0KPiA+PiAgIG8gVGVybWluYXRlIGRpc3BhdGNoIGxvb3AgaW4gY2FzZSBhbGwgZXZl bnRzIGFyZSBkZWxpdmVyZWQuDQo+ID4+ICAgbyBUbyBhdm9pZCB0aGUgZGlzcGF0Y2hlcidzIHNl cnZpY2UgZnVuY3Rpb24gaG9nZ2luZyB0aGUgQ1BVLCBwcm9jZXNzDQo+ID4+ICAgICBvbmx5IG9u ZSBiYXRjaCBwZXIgY2FsbC4NCj4gPj4gICBvIEhhdmUgc2VydmljZSBmdW5jdGlvbiByZXR1cm4g LUVBR0FJTiBpZiBubyB3b3JrIGlzIHBlcmZvcm1lZC4NCj4gPj4gICBvIEV2ZW50cyBkZWxpdmVy ZWQgaW4gdGhlIHByb2Nlc3MgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIG1hcmtlZCAnY29uc3QnLA0K PiA+PiAgICAgc2luY2UgbW9kaWZ5aW5nIHRoZW0gbWF5IGJlIHVzZWZ1bCBmb3IgdGhlIGFwcGxp Y2F0aW9uIGFuZCBjYXVzZQ0KPiA+PiAgICAgbm8gZGlmZmljdWx0aWVzIGZvciB0aGUgZGlzcGF0 Y2hlci4NCj4gPj4gICBvIFZhcmlvdXMgbWlub3IgQVBJIGRvY3VtZW50YXRpb24gaW1wcm92ZW1l bnRzLg0KPiA+Pg0KPiA+PiBSRkMgdjM6DQo+ID4+ICAgbyBBZGQgc3RhdHNfZ2V0KCkgZnVuY3Rp b24gdG8gdGhlIHZlcnNpb24ubWFwIGZpbGUuDQo+ID4+IC0tLQ0KPiA+PiAgIE1BSU5UQUlORVJT ICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKw0KPiA+PiAgIGxpYi9kaXNwYXRjaGVyL21lc29u LmJ1aWxkICAgICAgfCAgMTcgKw0KPiA+PiAgIGxpYi9kaXNwYXRjaGVyL3J0ZV9kaXNwYXRjaGVy LmMgfCA3OTENCj4gPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgIGxpYi9kaXNw YXRjaGVyL3J0ZV9kaXNwYXRjaGVyLmgNCj4gfA0KPiA+PiA0ODAgKysrKysrKysrKysrKysrKysr Kw0KPiA+PiAgIGxpYi9kaXNwYXRjaGVyL3ZlcnNpb24ubWFwICAgICAgfCAgMjAgKw0KPiA+PiAg IGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiA+PiAgIDYgZmlsZXMg Y2hhbmdlZCwgMTMxMyBpbnNlcnRpb25zKCspDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Yi9kaXNwYXRjaGVyL21lc29uLmJ1aWxkICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPj4gbGliL2Rp c3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuYyAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4+IGxpYi9k aXNwYXRjaGVyL3J0ZV9kaXNwYXRjaGVyLmggIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+PiBsaWIv ZGlzcGF0Y2hlci92ZXJzaW9uLm1hcA0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUyBpbmRleCBhOTI2MTU1ZjI2Li42NzA0Y2Q1YjJjDQo+ID4+IDEwMDY0 NA0KPiA+PiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+PiArKysgYi9NQUlOVEFJTkVSUw0KPiA+PiBA QCAtMTcyNiw2ICsxNzI2LDkgQEAgTTogTml0aGluIERhYmlscHVyYW0NCj4gPG5kYWJpbHB1cmFt QG1hcnZlbGwuY29tPg0KPiA+PiAgIE06IFBhdmFuIE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1h cnZlbGwuY29tPg0KPiA+PiAgIEY6IGxpYi9ub2RlLw0KPiA+Pg0KPiA+PiArRGlzcGF0Y2hlciAt IEVYUEVSSU1FTlRBTA0KPiA+PiArTTogTWF0dGlhcyBSw7ZubmJsb20gPG1hdHRpYXMucm9ubmJs b21AZXJpY3Nzb24uY29tPg0KPiA+PiArRjogbGliL2Rpc3BhdGNoZXIvDQo+ID4+DQo+ID4+ICAg VGVzdCBBcHBsaWNhdGlvbnMNCj4gPj4gICAtLS0tLS0tLS0tLS0tLS0tLQ0KPiA+PiBkaWZmIC0t Z2l0IGEvbGliL2Rpc3BhdGNoZXIvbWVzb24uYnVpbGQgYi9saWIvZGlzcGF0Y2hlci9tZXNvbi5i dWlsZA0KPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi5jNjA1NGEz YTVkDQo+ID4+IC0tLSAvZGV2L251bGwNCj4gPj4gKysrIGIvbGliL2Rpc3BhdGNoZXIvbWVzb24u YnVpbGQNCj4gPj4gQEAgLTAsMCArMSwxNyBAQA0KPiA+PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlICMgQ29weXJpZ2h0KGMpIDIwMjMgRXJpY3Nzb24NCj4gPj4gK0FC DQo+ID4+ICsNCj4gPj4gK2lmIGlzX3dpbmRvd3MNCj4gPj4gKyAgICBidWlsZCA9IGZhbHNlDQo+ ID4+ICsgICAgcmVhc29uID0gJ25vdCBzdXBwb3J0ZWQgb24gV2luZG93cycNCj4gPj4gKyAgICBz dWJkaXJfZG9uZSgpDQo+ID4+ICtlbmRpZg0KPiA+PiArDQo+ID4+ICtzb3VyY2VzID0gZmlsZXMo DQo+ID4+ICsgICAgICAgICdydGVfZGlzcGF0Y2hlci5jJywNCj4gPj4gKykNCj4gPj4gK2hlYWRl cnMgPSBmaWxlcygNCj4gPj4gKyAgICAgICAgJ3J0ZV9kaXNwYXRjaGVyLmgnLA0KPiA+PiArKQ0K PiA+PiArDQo+ID4+ICtkZXBzICs9IFsnZXZlbnRkZXYnXQ0KPiA+PiBkaWZmIC0tZ2l0IGEvbGli L2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuYw0KPiA+PiBiL2xpYi9kaXNwYXRjaGVyL3J0ZV9k aXNwYXRjaGVyLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4gPj4gMDAwMDAwMDAwMC4u MzMxOWZlMDlmMg0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL2xpYi9kaXNwYXRjaGVy L3J0ZV9kaXNwYXRjaGVyLmMNCj4gPj4gQEAgLTAsMCArMSw3OTEgQEANCj4gPj4gKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPj4gKyAqIENvcHlyaWdodChjKSAy MDIzIEVyaWNzc29uIEFCDQo+ID4+ICsgKi8NCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUgPHN0ZGJv b2wuaD4NCj4gPj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUg PHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPg0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4N Cj4gPj4gKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gPj4gKyNpbmNsdWRlIDxydGVfcmFuZG9t Lmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX3NlcnZpY2VfY29tcG9uZW50Lmg+DQo+ID4+ICsNCj4g Pj4gKyNpbmNsdWRlICJldmVudGRldl9wbWQuaCINCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUgPHJ0 ZV9kaXNwYXRjaGVyLmg+DQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUgRVZEX01BWF9QT1JUU19QRVJf TENPUkUgNA0KPiA+PiArI2RlZmluZSBFVkRfTUFYX0hBTkRMRVJTIDMyDQo+ID4+ICsjZGVmaW5l IEVWRF9NQVhfRklOQUxJWkVSUyAxNg0KPiA+PiArI2RlZmluZSBFVkRfQVZHX1BSSU9fSU5URVJW QUwgMjAwMA0KPiA+PiArDQo+ID4+ICtzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9ydCB7 DQo+ID4+ICsJdWludDhfdCBwb3J0X2lkOw0KPiA+PiArCXVpbnQxNl90IGJhdGNoX3NpemU7DQo+ ID4+ICsJdWludDY0X3QgdGltZW91dDsNCj4gPj4gK307DQo+ID4+ICsNCj4gPj4gK3N0cnVjdCBy dGVfZGlzcGF0Y2hlcl9oYW5kbGVyIHsNCj4gPj4gKwlpbnQgaWQ7DQo+ID4+ICsJcnRlX2Rpc3Bh dGNoZXJfbWF0Y2hfdCBtYXRjaF9mdW47DQo+ID4+ICsJdm9pZCAqbWF0Y2hfZGF0YTsNCj4gPj4g KwlydGVfZGlzcGF0Y2hlcl9wcm9jZXNzX3QgcHJvY2Vzc19mdW47DQo+ID4+ICsJdm9pZCAqcHJv Y2Vzc19kYXRhOw0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiArc3RydWN0IHJ0ZV9kaXNwYXRjaGVy X2ZpbmFsaXplciB7DQo+ID4+ICsJaW50IGlkOw0KPiA+PiArCXJ0ZV9kaXNwYXRjaGVyX2ZpbmFs aXplX3QgZmluYWxpemVfZnVuOw0KPiA+PiArCXZvaWQgKmZpbmFsaXplX2RhdGE7DQo+ID4+ICt9 Ow0KPiA+PiArDQo+ID4+ICtzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgew0KPiA+PiArCXVp bnQ4X3QgbnVtX3BvcnRzOw0KPiA+PiArCXVpbnQxNl90IG51bV9oYW5kbGVyczsNCj4gPj4gKwlp bnQzMl90IHByaW9fY291bnQ7DQo+ID4+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlX3Bv cnQNCj4gPj4gcG9ydHNbRVZEX01BWF9QT1JUU19QRVJfTENPUkVdOw0KPiA+PiArCXN0cnVjdCBy dGVfZGlzcGF0Y2hlcl9oYW5kbGVyIGhhbmRsZXJzW0VWRF9NQVhfSEFORExFUlNdOw0KPiA+PiAr CXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9zdGF0cyBzdGF0czsNCj4gPj4gK30gX19ydGVfY2FjaGVf YWxpZ25lZDsNCj4gPj4gKw0KPiA+PiArc3RydWN0IHJ0ZV9kaXNwYXRjaGVyIHsNCj4gPj4gKwl1 aW50OF90IGlkOw0KPiA+PiArCXVpbnQ4X3QgZXZlbnRfZGV2X2lkOw0KPiA+PiArCWludCBzb2Nr ZXRfaWQ7DQo+ID4+ICsJdWludDMyX3Qgc2VydmljZV9pZDsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rp c3BhdGNoZXJfbGNvcmUgbGNvcmVzW1JURV9NQVhfTENPUkVdOw0KPiA+PiArCXVpbnQxNl90IG51 bV9maW5hbGl6ZXJzOw0KPiA+PiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgZmlu YWxpemVyc1tFVkRfTUFYX0ZJTkFMSVpFUlNdOyB9Ow0KPiA+PiArDQo+ID4+ICtzdGF0aWMgc3Ry dWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyc1tVSU5UOF9NQVhdOw0KPiA+PiArDQo+ID4+ ICtzdGF0aWMgYm9vbA0KPiA+PiArZXZkX2hhc19kaXNwYXRjaGVyKHVpbnQ4X3QgaWQpDQo+ID4+ ICt7DQo+ID4+ICsJcmV0dXJuIGRpc3BhdGNoZXJzW2lkXSAhPSBOVUxMOw0KPiA+PiArfQ0KPiA+ PiArDQo+ID4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICoNCj4gPj4gK2V2ZF9nZXRf ZGlzcGF0Y2hlcih1aW50OF90IGlkKQ0KPiA+PiArew0KPiA+PiArCXJldHVybiBkaXNwYXRjaGVy c1tpZF07DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyB2b2lkDQo+ID4+ICtldmRfc2V0 X2Rpc3BhdGNoZXIodWludDhfdCBpZCwgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVy KSB7DQo+ID4+ICsJZGlzcGF0Y2hlcnNbaWRdID0gZGlzcGF0Y2hlcjsNCj4gPj4gK30NCj4gPj4g Kw0KPiA+PiArI2RlZmluZSBFVkRfVkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCkNCj4gPj4gCVwN Cj4gPj4gKwlkbyB7CQkJCQkJCQlcDQo+ID4+ICsJCWlmICh1bmxpa2VseSghZXZkX2hhc19kaXNw YXRjaGVyKGlkKSkpIHsJCVwNCj4gPj4gKwkJCVJURV9FREVWX0xPR19FUlIoIkludmFsaWQgZGlz cGF0Y2hlciBpZCAlZFxuIiwgaWQpOw0KPiA+PiBcDQo+ID4+ICsJCQlyZXR1cm4gLUVJTlZBTDsJ CQkJCVwNCj4gPj4gKwkJfQkJCQkJCQlcDQo+ID4+ICsJfSB3aGlsZSAoMCkNCj4gPj4gKw0KPiA+ PiArc3RhdGljIGludA0KPiA+PiArZXZkX2xvb2t1cF9oYW5kbGVyX2lkeChzdHJ1Y3QgcnRlX2Rp c3BhdGNoZXJfbGNvcmUgKmxjb3JlLA0KPiA+PiArCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9l dmVudCAqZXZlbnQpIHsNCj4gPj4gKwl1aW50MTZfdCBpOw0KPiA+PiArDQo+ID4+ICsJZm9yIChp ID0gMDsgaSA8IGxjb3JlLT5udW1faGFuZGxlcnM7IGkrKykgew0KPiA+PiArCQlzdHJ1Y3QgcnRl X2Rpc3BhdGNoZXJfaGFuZGxlciAqaGFuZGxlciA9DQo+ID4+ICsJCQkmbGNvcmUtPmhhbmRsZXJz W2ldOw0KPiA+PiArDQo+ID4+ICsJCWlmIChoYW5kbGVyLT5tYXRjaF9mdW4oZXZlbnQsIGhhbmRs ZXItPm1hdGNoX2RhdGEpKQ0KPiA+PiArCQkJcmV0dXJuIGk7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ ID4+ICsJcmV0dXJuIC0xOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgdm9pZA0KPiA+ PiArZXZkX3ByaW9yaXRpemVfaGFuZGxlcihzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxj b3JlLA0KPiA+PiArCQkgICAgICAgaW50IGhhbmRsZXJfaWR4KQ0KPiA+PiArew0KPiA+PiArCXN0 cnVjdCBydGVfZGlzcGF0Y2hlcl9oYW5kbGVyIHRtcDsNCj4gPj4gKw0KPiA+PiArCWlmIChoYW5k bGVyX2lkeCA9PSAwKQ0KPiA+PiArCQlyZXR1cm47DQo+ID4+ICsNCj4gPj4gKwkvKiBMZXQgdGhl IGx1Y2t5IGhhbmRsZXIgImJ1YmJsZSIgdXAgdGhlIGxpc3QgKi8NCj4gPj4gKw0KPiA+PiArCXRt cCA9IGxjb3JlLT5oYW5kbGVyc1toYW5kbGVyX2lkeCAtIDFdOw0KPiA+PiArDQo+ID4+ICsJbGNv cmUtPmhhbmRsZXJzW2hhbmRsZXJfaWR4IC0gMV0gPSBsY29yZS0+aGFuZGxlcnNbaGFuZGxlcl9p ZHhdOw0KPiA+PiArDQo+ID4+ICsJbGNvcmUtPmhhbmRsZXJzW2hhbmRsZXJfaWR4XSA9IHRtcDsg fQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPj4gK2V2ZF9jb25zaWRlcl9w cmlvcml0aXplX2hhbmRsZXIoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29yZSwNCj4g Pj4gKwkJCQlpbnQgaGFuZGxlcl9pZHgsIHVpbnQxNl90IGhhbmRsZXJfZXZlbnRzKSB7DQo+ID4+ ICsJbGNvcmUtPnByaW9fY291bnQgLT0gaGFuZGxlcl9ldmVudHM7DQo+ID4+ICsNCj4gPj4gKwlp ZiAodW5saWtlbHkobGNvcmUtPnByaW9fY291bnQgPD0gMCkpIHsNCj4gPj4gKwkJZXZkX3ByaW9y aXRpemVfaGFuZGxlcihsY29yZSwgaGFuZGxlcl9pZHgpOw0KPiA+PiArDQo+ID4+ICsJCS8qDQo+ ID4+ICsJCSAqIFJhbmRvbWl6ZSB0aGUgaW50ZXJ2YWwgaW4gdGhlIHVubGlrZWx5IGNhc2UNCj4g Pj4gKwkJICogdGhlIHRyYWZmaWMgZm9sbG93IHNvbWUgdmVyeSBzdHJpY3QgcGF0dGVybi4NCj4g Pj4gKwkJICovDQo+ID4+ICsJCWxjb3JlLT5wcmlvX2NvdW50ID0NCj4gPj4gKwkJCXJ0ZV9yYW5k X21heChFVkRfQVZHX1BSSU9fSU5URVJWQUwpICsNCj4gPj4gKwkJCUVWRF9BVkdfUFJJT19JTlRF UlZBTCAvIDI7DQo+ID4+ICsJfQ0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW5saW5l IHZvaWQNCj4gPj4gK2V2ZF9kaXNwYXRjaF9ldmVudHMoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpk aXNwYXRjaGVyLA0KPiA+PiArCQkgICAgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29y ZSwNCj4gPj4gKwkJICAgIHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9sY29yZV9wb3J0ICpwb3J0LA0K PiA+PiArCQkgICAgc3RydWN0IHJ0ZV9ldmVudCAqZXZlbnRzLCB1aW50MTZfdCBudW1fZXZlbnRz KSB7DQo+ID4+ICsJaW50IGk7DQo+ID4+ICsJc3RydWN0IHJ0ZV9ldmVudCBidXJzdHNbRVZEX01B WF9IQU5ETEVSU11bbnVtX2V2ZW50c107DQo+ID4+ICsJdWludDE2X3QgYnVyc3RfbGVuc1tFVkRf TUFYX0hBTkRMRVJTXSA9IHsgMCB9Ow0KPiA+PiArCXVpbnQxNl90IGRyb3BfY291bnQgPSAwOw0K PiA+PiArCXVpbnQxNl90IGRpc3BhdGNoX2NvdW50Ow0KPiA+PiArCXVpbnQxNl90IGRpc3BhdGNo ZWQgPSAwOw0KPiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7IGkrKykg ew0KPiA+PiArCQlzdHJ1Y3QgcnRlX2V2ZW50ICpldmVudCA9ICZldmVudHNbaV07DQo+ID4+ICsJ CWludCBoYW5kbGVyX2lkeDsNCj4gPj4gKw0KPiA+PiArCQloYW5kbGVyX2lkeCA9IGV2ZF9sb29r dXBfaGFuZGxlcl9pZHgobGNvcmUsIGV2ZW50KTsNCj4gPj4gKw0KPiA+PiArCQlpZiAodW5saWtl bHkoaGFuZGxlcl9pZHggPCAwKSkgew0KPiA+PiArCQkJZHJvcF9jb3VudCsrOw0KPiA+PiArCQkJ Y29udGludWU7DQo+ID4+ICsJCX0NCj4gPj4gKw0KPiA+PiArCQlidXJzdHNbaGFuZGxlcl9pZHhd W2J1cnN0X2xlbnNbaGFuZGxlcl9pZHhdXSA9ICpldmVudDsNCj4gPj4gKwkJYnVyc3RfbGVuc1to YW5kbGVyX2lkeF0rKzsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlkaXNwYXRjaF9jb3VudCA9 IG51bV9ldmVudHMgLSBkcm9wX2NvdW50Ow0KPiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8 IGxjb3JlLT5udW1faGFuZGxlcnMgJiYNCj4gPj4gKwkJIGRpc3BhdGNoZWQgPCBkaXNwYXRjaF9j b3VudDsgaSsrKSB7DQo+ID4+ICsJCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9oYW5kbGVyICpoYW5k bGVyID0NCj4gPj4gKwkJCSZsY29yZS0+aGFuZGxlcnNbaV07DQo+ID4+ICsJCXVpbnQxNl90IGxl biA9IGJ1cnN0X2xlbnNbaV07DQo+ID4+ICsNCj4gPj4gKwkJaWYgKGxlbiA9PSAwKQ0KPiA+PiAr CQkJY29udGludWU7DQo+ID4+ICsNCj4gPj4gKwkJaGFuZGxlci0+cHJvY2Vzc19mdW4oZGlzcGF0 Y2hlci0+ZXZlbnRfZGV2X2lkLCBwb3J0LQ0KPiA+Pj4gcG9ydF9pZCwNCj4gPj4gKwkJCQkgICAg IGJ1cnN0c1tpXSwgbGVuLCBoYW5kbGVyLT5wcm9jZXNzX2RhdGEpOw0KPiA+PiArDQo+ID4+ICsJ CWRpc3BhdGNoZWQgKz0gbGVuOw0KPiA+PiArDQo+ID4+ICsJCS8qDQo+ID4+ICsJCSAqIFNhZmUs IHNpbmNlIGFueSByZXNodWZmbGluZyB3aWxsIG9ubHkgaW52b2x2ZQ0KPiA+PiArCQkgKiBhbHJl YWR5LXByb2Nlc3NlZCBoYW5kbGVycy4NCj4gPj4gKwkJICovDQo+ID4+ICsJCWV2ZF9jb25zaWRl cl9wcmlvcml0aXplX2hhbmRsZXIobGNvcmUsIGksIGxlbik7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ ID4+ICsJbGNvcmUtPnN0YXRzLmV2X2JhdGNoX2NvdW50Kys7DQo+ID4+ICsJbGNvcmUtPnN0YXRz LmV2X2Rpc3BhdGNoX2NvdW50ICs9IGRpc3BhdGNoX2NvdW50Ow0KPiA+PiArCWxjb3JlLT5zdGF0 cy5ldl9kcm9wX2NvdW50ICs9IGRyb3BfY291bnQ7DQo+ID4+ICsNCj4gPj4gKwlmb3IgKGkgPSAw OyBpIDwgZGlzcGF0Y2hlci0+bnVtX2ZpbmFsaXplcnM7IGkrKykgew0KPiA+PiArCQlzdHJ1Y3Qg cnRlX2Rpc3BhdGNoZXJfZmluYWxpemVyICpmaW5hbGl6ZXIgPQ0KPiA+PiArCQkJJmRpc3BhdGNo ZXItPmZpbmFsaXplcnNbaV07DQo+ID4+ICsNCj4gPj4gKwkJZmluYWxpemVyLT5maW5hbGl6ZV9m dW4oZGlzcGF0Y2hlci0+ZXZlbnRfZGV2X2lkLA0KPiA+PiArCQkJCQlwb3J0LT5wb3J0X2lkLA0K PiA+PiArCQkJCQlmaW5hbGl6ZXItPmZpbmFsaXplX2RhdGEpOw0KPiA+PiArCX0NCj4gPj4gK30N Cj4gPj4gKw0KPiA+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDE2X3QNCj4gPj4g K2V2ZF9wb3J0X2RlcXVldWUoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyLA0KPiA+ PiArCQkgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29yZSwNCj4gPj4gKwkJIHN0cnVj dCBydGVfZGlzcGF0Y2hlcl9sY29yZV9wb3J0ICpwb3J0KSB7DQo+ID4+ICsJdWludDE2X3QgYmF0 Y2hfc2l6ZSA9IHBvcnQtPmJhdGNoX3NpemU7DQo+ID4+ICsJc3RydWN0IHJ0ZV9ldmVudCBldmVu dHNbYmF0Y2hfc2l6ZV07DQo+ID4+ICsJdWludDE2X3QgbjsNCj4gPj4gKw0KPiA+PiArCW4gPSBy dGVfZXZlbnRfZGVxdWV1ZV9idXJzdChkaXNwYXRjaGVyLT5ldmVudF9kZXZfaWQsIHBvcnQtDQo+ ID4+PiBwb3J0X2lkLA0KPiA+PiArCQkJCSAgICBldmVudHMsIGJhdGNoX3NpemUsIHBvcnQtPnRp bWVvdXQpOw0KPiA+PiArDQo+ID4+ICsJaWYgKGxpa2VseShuID4gMCkpDQo+ID4+ICsJCWV2ZF9k aXNwYXRjaF9ldmVudHMoZGlzcGF0Y2hlciwgbGNvcmUsIHBvcnQsIGV2ZW50cywgbik7DQo+ID4+ ICsNCj4gPj4gKwlsY29yZS0+c3RhdHMucG9sbF9jb3VudCsrOw0KPiA+PiArDQo+ID4+ICsJcmV0 dXJuIG47DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IHVpbnQxNl90DQo+ID4+ICtldmRfbGNvcmVfcHJvY2VzcyhzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIg KmRpc3BhdGNoZXIsDQo+ID4+ICsJCSAgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29y ZSkgew0KPiA+PiArCXVpbnQxNl90IGk7DQo+ID4+ICsJdWludDE2X3QgZXZlbnRfY291bnQgPSAw Ow0KPiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IGxjb3JlLT5udW1fcG9ydHM7IGkrKykg ew0KPiA+PiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9ydCAqcG9ydCA9DQo+ID4+ ICsJCQkmbGNvcmUtPnBvcnRzW2ldOw0KPiA+PiArDQo+ID4+ICsJCWV2ZW50X2NvdW50ICs9IGV2 ZF9wb3J0X2RlcXVldWUoZGlzcGF0Y2hlciwgbGNvcmUsIHBvcnQpOw0KPiA+PiArCX0NCj4gPj4g Kw0KPiA+PiArCXJldHVybiBldmVudF9jb3VudDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3Rh dGljIGludDMyX3QNCj4gPj4gK2V2ZF9wcm9jZXNzKHZvaWQgKnVzZXJkYXRhKQ0KPiA+PiArew0K PiA+PiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlciA9IHVzZXJkYXRhOw0KPiA+ PiArCXVuc2lnbmVkIGludCBsY29yZV9pZCA9IHJ0ZV9sY29yZV9pZCgpOw0KPiA+PiArCXN0cnVj dCBydGVfZGlzcGF0Y2hlcl9sY29yZSAqbGNvcmUgPQ0KPiA+PiArCQkmZGlzcGF0Y2hlci0+bGNv cmVzW2xjb3JlX2lkXTsNCj4gPj4gKwl1aW50NjRfdCBldmVudF9jb3VudDsNCj4gPj4gKw0KPiA+ PiArCWV2ZW50X2NvdW50ID0gZXZkX2xjb3JlX3Byb2Nlc3MoZGlzcGF0Y2hlciwgbGNvcmUpOw0K PiA+PiArDQo+ID4+ICsJaWYgKHVubGlrZWx5KGV2ZW50X2NvdW50ID09IDApKQ0KPiA+PiArCQly ZXR1cm4gLUVBR0FJTjsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiAr DQo+ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtldmRfc2VydmljZV9yZWdpc3RlcihzdHJ1Y3QgcnRl X2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIpIHsNCj4gPj4gKwlzdHJ1Y3QgcnRlX3NlcnZpY2Vfc3Bl YyBzZXJ2aWNlID0gew0KPiA+PiArCQkuY2FsbGJhY2sgPSBldmRfcHJvY2VzcywNCj4gPj4gKwkJ LmNhbGxiYWNrX3VzZXJkYXRhID0gZGlzcGF0Y2hlciwNCj4gPj4gKwkJLmNhcGFiaWxpdGllcyA9 IFJURV9TRVJWSUNFX0NBUF9NVF9TQUZFLA0KPiA+PiArCQkuc29ja2V0X2lkID0gZGlzcGF0Y2hl ci0+c29ja2V0X2lkDQo+ID4+ICsJfTsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlz bnByaW50ZihzZXJ2aWNlLm5hbWUsIFJURV9TRVJWSUNFX05BTUVfTUFYIC0gMSwgImV2ZF8lZCIs DQo+ID4+ICsJCSBkaXNwYXRjaGVyLT5pZCk7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0ZV9zZXJ2 aWNlX2NvbXBvbmVudF9yZWdpc3Rlcigmc2VydmljZSwNCj4gPj4gKyZkaXNwYXRjaGVyLT5zZXJ2 aWNlX2lkKTsNCj4gPj4gKw0KPiA+PiArCWlmIChyYykNCj4gPj4gKwkJUlRFX0VERVZfTE9HX0VS UigiUmVnaXN0cmF0aW9uIG9mIGRpc3BhdGNoZXIgc2VydmljZSAiDQo+ID4+ICsJCQkJICIlcyBm YWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLA0KPiA+PiArCQkJCSBzZXJ2aWNlLm5hbWUsIHJj KTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiByYzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3Rh dGljIGludA0KPiA+PiArZXZkX3NlcnZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcnRlX2Rpc3BhdGNo ZXIgKmRpc3BhdGNoZXIpIHsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IHJ0 ZV9zZXJ2aWNlX2NvbXBvbmVudF91bnJlZ2lzdGVyKGRpc3BhdGNoZXItPnNlcnZpY2VfaWQpOw0K PiA+PiArDQo+ID4+ICsJaWYgKHJjKQ0KPiA+PiArCQlSVEVfRURFVl9MT0dfRVJSKCJVbnJlZ2lz dHJhdGlvbiBvZiBkaXNwYXRjaGVyIHNlcnZpY2UgIg0KPiA+PiArCQkJCSAiZmFpbGVkIHdpdGgg ZXJyb3IgY29kZSAlZFxuIiwgcmMpOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIHJjOw0KPiA+PiAr fQ0KPiA+PiArDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9kaXNwYXRjaGVyX2NyZWF0ZSh1aW50OF90 IGlkLCB1aW50OF90IGV2ZW50X2Rldl9pZCkgew0KPiA+PiArCWludCBzb2NrZXRfaWQ7DQo+ID4+ ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyOw0KPiA+PiArCWludCByYzsNCj4g Pj4gKw0KPiA+PiArCWlmIChldmRfaGFzX2Rpc3BhdGNoZXIoaWQpKSB7DQo+ID4+ICsJCVJURV9F REVWX0xPR19FUlIoIkRpc3BhdGNoZXIgd2l0aCBpZCAlZCBhbHJlYWR5IGV4aXN0c1xuIiwNCj4g Pj4gKwkJCQkgaWQpOw0KPiA+PiArCQlyZXR1cm4gLUVFWElTVDsNCj4gPj4gKwl9DQo+ID4+ICsN Cj4gPj4gKwlzb2NrZXRfaWQgPSBydGVfZXZlbnRfZGV2X3NvY2tldF9pZChldmVudF9kZXZfaWQp Ow0KPiA+PiArDQo+ID4+ICsJZGlzcGF0Y2hlciA9DQo+ID4+ICsJCXJ0ZV9tYWxsb2Nfc29ja2V0 KCJkaXNwYXRjaGVyIiwgc2l6ZW9mKHN0cnVjdCBydGVfZGlzcGF0Y2hlciksDQo+ID4+ICsJCQkJ ICBSVEVfQ0FDSEVfTElORV9TSVpFLCBzb2NrZXRfaWQpOw0KPiA+PiArDQo+ID4+ICsJaWYgKGRp c3BhdGNoZXIgPT0gTlVMTCkgew0KPiA+PiArCQlSVEVfRURFVl9MT0dfRVJSKCJVbmFibGUgdG8g YWxsb2NhdGUgbWVtb3J5IGZvcg0KPiA+PiBkaXNwYXRjaGVyXG4iKTsNCj4gPj4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJKmRpc3BhdGNoZXIgPSAoc3RydWN0 IHJ0ZV9kaXNwYXRjaGVyKSB7DQo+ID4+ICsJCS5pZCA9IGlkLA0KPiA+PiArCQkuZXZlbnRfZGV2 X2lkID0gZXZlbnRfZGV2X2lkLA0KPiA+PiArCQkuc29ja2V0X2lkID0gc29ja2V0X2lkDQo+ID4+ ICsJfTsNCj4gPj4gKw0KPiA+PiArCXJjID0gZXZkX3NlcnZpY2VfcmVnaXN0ZXIoZGlzcGF0Y2hl cik7DQo+ID4+ICsNCj4gPj4gKwlpZiAocmMgPCAwKSB7DQo+ID4+ICsJCXJ0ZV9mcmVlKGRpc3Bh dGNoZXIpOw0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJZXZk X3NldF9kaXNwYXRjaGVyKGlkLCBkaXNwYXRjaGVyKTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAw Ow0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9kaXNwYXRjaGVyX2ZyZWUo dWludDhfdCBpZCkNCj4gPj4gK3sNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3Bh dGNoZXI7DQo+ID4+ICsJaW50IHJjOw0KPiA+PiArDQo+ID4+ICsJRVZEX1ZBTElEX0lEX09SX1JF VF9FSU5WQUwoaWQpOw0KPiA+PiArCWRpc3BhdGNoZXIgPSBldmRfZ2V0X2Rpc3BhdGNoZXIoaWQp Ow0KPiA+PiArDQo+ID4+ICsJcmMgPSBldmRfc2VydmljZV91bnJlZ2lzdGVyKGRpc3BhdGNoZXIp Ow0KPiA+PiArDQo+ID4+ICsJaWYgKHJjKQ0KPiA+PiArCQlyZXR1cm4gcmM7DQo+ID4+ICsNCj4g Pj4gKwlldmRfc2V0X2Rpc3BhdGNoZXIoaWQsIE5VTEwpOw0KPiA+PiArDQo+ID4+ICsJcnRlX2Zy ZWUoZGlzcGF0Y2hlcik7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4g Kw0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9zZXJ2aWNlX2lkX2dldCh1aW50OF90 IGlkLCB1aW50MzJfdCAqc2VydmljZV9pZCkgew0KPiA+PiArCXN0cnVjdCBydGVfZGlzcGF0Y2hl ciAqZGlzcGF0Y2hlcjsNCj4gPj4gKw0KPiA+PiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlOVkFM KGlkKTsNCj4gPj4gKwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4gPj4g Kw0KPiA+DQo+ID4gU2VydmljZV9pZCBwb2ludGVyIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBmb3Ig TlVMTCBiZWZvcmUgYWNjZXNzaW5nDQo+ID4NCj4gPg0KPiANCj4gTm90ZWQuDQo+IA0KPiBSZXR1 cm5pbmcgZXJyb3IgY29kZXMgb24gQVBJIHZpb2xhdGlvbnMgaXMgYmFkIHByYWN0aWNlIChzdWNo IHNob3VsZCBiZSBtZXQNCj4gd2l0aCBhc3NlcnRpb25zKSwgYnV0IGl0IGlzIERQREsgc3RhbmRh cmQgcHJhY3RpY2UgYW5kIGhvdyBFdmVudGRldiBkb2VzDQo+IHRoaW5ncyBhcyB3ZWxsLCBzbyBJ J2xsIGNoYW5nZSBpdC4NCj4gDQo+IEl0IHdvdWxkIGFsc28gYmUgY29uc2lzdGVudCB3aXRoIGFs bG93aW5nIGludmFsaWQgJ2lkJyBwYXJhbWV0ZXIgdmFsdWVzLg0KPiANCj4gPj4gKwkqc2Vydmlj ZV9pZCA9IGRpc3BhdGNoZXItPnNlcnZpY2VfaWQ7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsN Cj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArbGNvcmVfcG9ydF9pbmRl eChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlLA0KPiA+PiArCQkgdWludDhfdCBl dmVudF9wb3J0X2lkKQ0KPiA+PiArew0KPiA+PiArCXVpbnQxNl90IGk7DQo+ID4+ICsNCj4gPj4g Kwlmb3IgKGkgPSAwOyBpIDwgbGNvcmUtPm51bV9wb3J0czsgaSsrKSB7DQo+ID4+ICsJCXN0cnVj dCBydGVfZGlzcGF0Y2hlcl9sY29yZV9wb3J0ICpwb3J0ID0NCj4gPj4gKwkJCSZsY29yZS0+cG9y dHNbaV07DQo+ID4+ICsNCj4gPj4gKwkJaWYgKHBvcnQtPnBvcnRfaWQgPT0gZXZlbnRfcG9ydF9p ZCkNCj4gPj4gKwkJCXJldHVybiBpOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJldHVybiAt MTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9iaW5k X3BvcnRfdG9fbGNvcmUodWludDhfdCBpZCwgdWludDhfdCBldmVudF9wb3J0X2lkLA0KPiA+PiAr CQkJCQl1aW50MTZfdCBiYXRjaF9zaXplLCB1aW50NjRfdA0KPiA+PiB0aW1lb3V0LA0KPiA+PiAr CQkJCQl1bnNpZ25lZCBpbnQgbGNvcmVfaWQpDQo+ID4+ICt7DQo+ID4+ICsJc3RydWN0IHJ0ZV9k aXNwYXRjaGVyICpkaXNwYXRjaGVyOw0KPiA+PiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9sY29y ZSAqbGNvcmU7DQo+ID4+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlX3BvcnQgKnBvcnQ7 DQo+ID4+ICsNCj4gPj4gKwlFVkRfVkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCk7DQo+ID4+ICsJ ZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihpZCk7DQo+ID4+ICsNCj4gPj4gKwlsY29y ZSA9CSZkaXNwYXRjaGVyLT5sY29yZXNbbGNvcmVfaWRdOw0KPiA+PiArDQo+ID4+ICsJaWYgKGxj b3JlLT5udW1fcG9ydHMgPT0gRVZEX01BWF9QT1JUU19QRVJfTENPUkUpDQo+ID4+ICsJCXJldHVy biAtRU5PTUVNOw0KPiA+PiArDQo+ID4+ICsJaWYgKGxjb3JlX3BvcnRfaW5kZXgobGNvcmUsIGV2 ZW50X3BvcnRfaWQpID49IDApDQo+ID4+ICsJCXJldHVybiAtRUVYSVNUOw0KPiA+PiArDQo+ID4+ ICsJcG9ydCA9ICZsY29yZS0+cG9ydHNbbGNvcmUtPm51bV9wb3J0c107DQo+ID4+ICsNCj4gPj4g KwkqcG9ydCA9IChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVfcG9ydCkgew0KPiA+PiArCQku cG9ydF9pZCA9IGV2ZW50X3BvcnRfaWQsDQo+ID4+ICsJCS5iYXRjaF9zaXplID0gYmF0Y2hfc2l6 ZSwNCj4gPj4gKwkJLnRpbWVvdXQgPSB0aW1lb3V0DQo+ID4+ICsJfTsNCj4gPj4gKw0KPiA+PiAr CWxjb3JlLT5udW1fcG9ydHMrKzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0K PiA+PiArDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9kaXNwYXRjaGVyX3VuYmluZF9wb3J0X2Zyb21f bGNvcmUodWludDhfdCBpZCwgdWludDhfdA0KPiBldmVudF9wb3J0X2lkLA0KPiA+PiArCQkJCQkg ICAgdW5zaWduZWQgaW50IGxjb3JlX2lkKQ0KPiA+PiArew0KPiA+PiArCXN0cnVjdCBydGVfZGlz cGF0Y2hlciAqZGlzcGF0Y2hlcjsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUg Kmxjb3JlOw0KPiA+PiArCWludCBwb3J0X2lkeDsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNo ZXJfbGNvcmVfcG9ydCAqcG9ydDsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmVf cG9ydCAqbGFzdDsNCj4gPj4gKw0KPiA+PiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlOVkFMKGlk KTsNCj4gPj4gKwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4gPj4gKw0K PiA+PiArCWxjb3JlID0JJmRpc3BhdGNoZXItPmxjb3Jlc1tsY29yZV9pZF07DQo+ID4+ICsNCj4g Pj4gKwlwb3J0X2lkeCA9IGxjb3JlX3BvcnRfaW5kZXgobGNvcmUsIGV2ZW50X3BvcnRfaWQpOw0K PiA+PiArDQo+ID4+ICsJaWYgKHBvcnRfaWR4IDwgMCkNCj4gPj4gKwkJcmV0dXJuIC1FTk9FTlQ7 DQo+ID4+ICsNCj4gPj4gKwlwb3J0ID0gJmxjb3JlLT5wb3J0c1twb3J0X2lkeF07DQo+ID4+ICsJ bGFzdCA9ICZsY29yZS0+cG9ydHNbbGNvcmUtPm51bV9wb3J0cyAtIDFdOw0KPiA+PiArDQo+ID4+ ICsJaWYgKHBvcnQgIT0gbGFzdCkNCj4gPj4gKwkJKnBvcnQgPSAqbGFzdDsNCj4gPj4gKw0KPiA+ PiArCWxjb3JlLT5udW1fcG9ydHMtLTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiAr fQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIqDQo+ ID4+ICtldmRfbGNvcmVfZ2V0X2hhbmRsZXJfYnlfaWQoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xj b3JlICpsY29yZSwNCj4gPj4gKwkJCSAgICBpbnQgaGFuZGxlcl9pZCkNCj4gPj4gK3sNCj4gPj4g Kwl1aW50MTZfdCBpOw0KPiA+PiArDQo+ID4+ICsJZm9yIChpID0gMDsgaSA8IGxjb3JlLT5udW1f aGFuZGxlcnM7IGkrKykgew0KPiA+PiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlciAq aGFuZGxlciA9DQo+ID4+ICsJCQkmbGNvcmUtPmhhbmRsZXJzW2ldOw0KPiA+PiArDQo+ID4+ICsJ CWlmIChoYW5kbGVyLT5pZCA9PSBoYW5kbGVyX2lkKQ0KPiA+PiArCQkJcmV0dXJuIGhhbmRsZXI7 DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIE5VTEw7DQo+ID4+ICt9DQo+ID4+ICsN Cj4gPj4gK3N0YXRpYyBpbnQNCj4gPj4gK2V2ZF9hbGxvY19oYW5kbGVyX2lkKHN0cnVjdCBydGVf ZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcikgew0KPiA+PiArCWludCBoYW5kbGVyX2lkID0gMDsNCj4g Pj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKnJlZmVyZW5jZV9sY29yZSA9DQo+ID4+ ICsJCSZkaXNwYXRjaGVyLT5sY29yZXNbMF07DQo+ID4+ICsNCj4gPj4gKwlpZiAocmVmZXJlbmNl X2xjb3JlLT5udW1faGFuZGxlcnMgPT0gRVZEX01BWF9IQU5ETEVSUykNCj4gPj4gKwkJcmV0dXJu IC0xOw0KPiA+PiArDQo+ID4+ICsJd2hpbGUgKGV2ZF9sY29yZV9nZXRfaGFuZGxlcl9ieV9pZChy ZWZlcmVuY2VfbGNvcmUsIGhhbmRsZXJfaWQpICE9DQo+ID4+IE5VTEwpDQo+ID4+ICsJCWhhbmRs ZXJfaWQrKzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiBoYW5kbGVyX2lkOw0KPiA+PiArfQ0KPiA+ PiArDQo+ID4+ICtzdGF0aWMgdm9pZA0KPiA+PiArZXZkX2xjb3JlX2luc3RhbGxfaGFuZGxlcihz dHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxjb3JlLA0KPiA+PiArCQkgICAgY29uc3Qgc3Ry dWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgKmhhbmRsZXIpIHsNCj4gPj4gKwlpbnQgaGFuZGxl cl9pZHggPSBsY29yZS0+bnVtX2hhbmRsZXJzOw0KPiA+PiArDQo+ID4+ICsJbGNvcmUtPmhhbmRs ZXJzW2hhbmRsZXJfaWR4XSA9ICpoYW5kbGVyOw0KPiA+PiArCWxjb3JlLT5udW1faGFuZGxlcnMr KzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHZvaWQNCj4gPj4gK2V2ZF9pbnN0YWxs X2hhbmRsZXIoc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyLA0KPiA+PiArCQkgICAg Y29uc3Qgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgKmhhbmRsZXIpIHsNCj4gPj4gKwlp bnQgaTsNCj4gPj4gKw0KPiA+PiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUFYX0xDT1JFOyBpKysp IHsNCj4gPj4gKwkJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX2xjb3JlICpsY29yZSA9DQo+ID4+ICsJ CQkmZGlzcGF0Y2hlci0+bGNvcmVzW2ldOw0KPiA+PiArCQlldmRfbGNvcmVfaW5zdGFsbF9oYW5k bGVyKGxjb3JlLCBoYW5kbGVyKTsNCj4gPj4gKwl9DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK2lu dA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfcmVnaXN0ZXIodWludDhfdCBpZCwNCj4gPj4gKwkJCSAg ICAgIHJ0ZV9kaXNwYXRjaGVyX21hdGNoX3QgbWF0Y2hfZnVuLA0KPiA+PiArCQkJICAgICAgdm9p ZCAqbWF0Y2hfZGF0YSwNCj4gPj4gKwkJCSAgICAgIHJ0ZV9kaXNwYXRjaGVyX3Byb2Nlc3NfdCBw cm9jZXNzX2Z1biwNCj4gPj4gKwkJCSAgICAgIHZvaWQgKnByb2Nlc3NfZGF0YSkNCj4gPj4gK3sN Cj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXI7DQo+ID4+ICsJc3RydWN0 IHJ0ZV9kaXNwYXRjaGVyX2hhbmRsZXIgaGFuZGxlciA9IHsNCj4gPj4gKwkJLm1hdGNoX2Z1biA9 IG1hdGNoX2Z1biwNCj4gPj4gKwkJLm1hdGNoX2RhdGEgPSBtYXRjaF9kYXRhLA0KPiA+DQo+ID4g V2UgY2FuIGhhdmUgYSBkZWZhdWx0IGZ1bmN0aW9uIHdoaWNoIHVzZXMgcXVldWVfaWQgYXMgbWF0 Y2hpbmcgZGF0YS4NCj4gPiBUaGlzIHJlZHVjZXMgdGhlIGFwcGxpY2F0aW9uIGxvYWQgdG8gcHJv dmlkZSB0d28gY2FsbGJhY2tzLCBvbmUgZm9yIG1hdGNoaW5nDQo+IGFuZCBvbmUgZm9yIHByb2Nl c3NpbmcgdGhlIGV2ZW50Lg0KPiA+IEFwcGxpY2F0aW9uIGNhbiBwYXNzIE5VTEwgcGFyYW1ldGVy IGZvciAibWF0Y2hfZnVuIiwgaW4gdGhhdCBjYXNlIGRlZmF1bHQNCj4gZnVuY3Rpb24gcG9pbnRl ciBjYW4gYmUgdXNlZCBoZXJlLg0KPiA+DQo+IA0KPiBCdXQgd2hpY2ggcXVldWUgaWQgd291bGQg dGhpcyBkZWZhdWx0IGZ1bmN0aW9uIHBvaW50ZXIgbWF0Y2g/DQo+IA0KPiBJIHRoaW5rIHlvdSBu ZWVkIG1vcmUgQVBJIGNhbGxzIHRvIGFsbG93IGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBJJ3Zl IGRpc2N1c3NlZA0KPiB0aGlzIGtpbmQgb2YgQVBJIGluIHNvbWUgcHJldmlvdXMgbWVzc2FnZXIg b24gdGhpcyBsaXN0LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkuDQo+IA0KDQpBZ3JlZSwgaXQgbWF5 IHJlcXVpcmUgc29tZSBtb3JlIEFQSXMgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb25hbGl0eS4N CkkgYW0gZmluZSB0byBjb250aW51ZSB3aXRoIHRoZSBjdXJyZW50IGxvZ2ljLg0KDQoNCj4gPg0K PiA+PiArCQkucHJvY2Vzc19mdW4gPSBwcm9jZXNzX2Z1biwNCj4gPj4gKwkJLnByb2Nlc3NfZGF0 YSA9IHByb2Nlc3NfZGF0YQ0KPiA+PiArCX07DQo+ID4+ICsNCj4gPj4gKwlFVkRfVkFMSURfSURf T1JfUkVUX0VJTlZBTChpZCk7DQo+ID4+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hl cihpZCk7DQo+ID4+ICsNCj4gPj4gKwloYW5kbGVyLmlkID0gZXZkX2FsbG9jX2hhbmRsZXJfaWQo ZGlzcGF0Y2hlcik7DQo+ID4+ICsNCj4gPj4gKwlpZiAoaGFuZGxlci5pZCA8IDApDQo+ID4+ICsJ CXJldHVybiAtRU5PTUVNOw0KPiA+PiArDQo+ID4+ICsJZXZkX2luc3RhbGxfaGFuZGxlcihkaXNw YXRjaGVyLCAmaGFuZGxlcik7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gaGFuZGxlci5pZDsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArZXZkX2xjb3JlX3VuaW5zdGFs bF9oYW5kbGVyKHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9sY29yZSAqbGNvcmUsDQo+ID4+ICsJCQkg ICAgaW50IGhhbmRsZXJfaWQpDQo+ID4+ICt7DQo+ID4+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVy X2hhbmRsZXIgKnVucmVnX2hhbmRsZXI7DQo+ID4+ICsJaW50IGhhbmRsZXJfaWR4Ow0KPiA+PiAr CXVpbnQxNl90IGxhc3RfaWR4Ow0KPiA+PiArDQo+ID4+ICsJdW5yZWdfaGFuZGxlciA9IGV2ZF9s Y29yZV9nZXRfaGFuZGxlcl9ieV9pZChsY29yZSwgaGFuZGxlcl9pZCk7DQo+ID4+ICsNCj4gPj4g KwlpZiAodW5yZWdfaGFuZGxlciA9PSBOVUxMKQ0KPiA+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Pj4gKw0KPiA+DQo+ID4gU2hvdWxkbid0IHRoZSBsb2dpYyBiZSAiIGhhbmRsZXJfaWR4ID0gdW5y ZWdfaGFuZGxlciAtICZsY29yZS0+aGFuZGxlcnNbMF07Ig0KPiA+IEJlY2F1c2UsIHVucmVnX2hh bmRsZXIgd2lsbCBiZSBhIGhpZ2hlciBvciBlcXVhbCBhZGRyZXNzIHRvIHRoZQ0KPiA+IGhhbmRs ZXIgYmFzZSBhZGRyZXNzICgmbGNvcmUtPmhhbmRsZXJzWzBdKQ0KPiA+DQo+IA0KPiBUcnVlLiBX aWxsIGZpeC4NCj4gDQo+ID4NCj4gPj4gKwloYW5kbGVyX2lkeCA9ICZsY29yZS0+aGFuZGxlcnNb MF0gLSB1bnJlZ19oYW5kbGVyOw0KPiA+PiArDQo+ID4+ICsJbGFzdF9pZHggPSBsY29yZS0+bnVt X2hhbmRsZXJzIC0gMTsNCj4gPj4gKw0KPiA+PiArCWlmIChoYW5kbGVyX2lkeCAhPSBsYXN0X2lk eCkgew0KPiA+PiArCQkvKiBtb3ZlIGFsbCBoYW5kbGVycyB0byBtYWludGFpbiBoYW5kbGVyIG9y ZGVyICovDQo+ID4+ICsJCWludCBuID0gbGFzdF9pZHggLSBoYW5kbGVyX2lkeDsNCj4gPj4gKwkJ bWVtbW92ZSh1bnJlZ19oYW5kbGVyLCB1bnJlZ19oYW5kbGVyICsgMSwNCj4gPj4gKwkJCXNpemVv ZihzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfaGFuZGxlcikgKiBuKTsNCj4gPj4gKwl9DQo+ID4+ICsN Cj4gPj4gKwlsY29yZS0+bnVtX2hhbmRsZXJzLS07DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsN Cj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArZXZkX3VuaW5zdGFsbF9o YW5kbGVyKHN0cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlciwNCj4gPj4gKwkJICAgICAg aW50IGhhbmRsZXJfaWQpDQo+ID4+ICt7DQo+ID4+ICsJdW5zaWduZWQgaW50IGxjb3JlX2lkOw0K PiA+PiArDQo+ID4+ICsJZm9yIChsY29yZV9pZCA9IDA7IGxjb3JlX2lkIDwgUlRFX01BWF9MQ09S RTsgbGNvcmVfaWQrKykgew0KPiA+PiArCQlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfbGNvcmUgKmxj b3JlID0NCj4gPj4gKwkJCSZkaXNwYXRjaGVyLT5sY29yZXNbbGNvcmVfaWRdOw0KPiA+PiArCQlp bnQgcmM7DQo+ID4+ICsNCj4gPj4gKwkJcmMgPSBldmRfbGNvcmVfdW5pbnN0YWxsX2hhbmRsZXIo bGNvcmUsIGhhbmRsZXJfaWQpOw0KPiA+PiArDQo+ID4+ICsJCWlmIChyYyA8IDApDQo+ID4+ICsJ CQlyZXR1cm4gcmM7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIDA7DQo+ID4+ICt9 DQo+ID4+ICsNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfdW5yZWdpc3Rlcih1aW50 OF90IGlkLCBpbnQgaGFuZGxlcl9pZCkgew0KPiA+PiArCXN0cnVjdCBydGVfZGlzcGF0Y2hlciAq ZGlzcGF0Y2hlcjsNCj4gPj4gKwlpbnQgcmM7DQo+ID4+ICsNCj4gPj4gKwlFVkRfVkFMSURfSURf T1JfUkVUX0VJTlZBTChpZCk7DQo+ID4+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hl cihpZCk7DQo+ID4+ICsNCj4gPj4gKwlyYyA9IGV2ZF91bmluc3RhbGxfaGFuZGxlcihkaXNwYXRj aGVyLCBoYW5kbGVyX2lkKTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiByYzsNCj4gPj4gK30NCj4g Pj4gKw0KPiA+PiArc3RhdGljIHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIqDQo+ID4+ ICtldmRfZ2V0X2ZpbmFsaXplcl9ieV9pZChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNo ZXIsDQo+ID4+ICsJCSAgICAgICBpbnQgaGFuZGxlcl9pZCkNCj4gPj4gK3sNCj4gPj4gKwlpbnQg aTsNCj4gPj4gKw0KPiA+PiArCWZvciAoaSA9IDA7IGkgPCBkaXNwYXRjaGVyLT5udW1fZmluYWxp emVyczsgaSsrKSB7DQo+ID4+ICsJCXN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgKmZp bmFsaXplciA9DQo+ID4+ICsJCQkmZGlzcGF0Y2hlci0+ZmluYWxpemVyc1tpXTsNCj4gPj4gKw0K PiA+PiArCQlpZiAoZmluYWxpemVyLT5pZCA9PSBoYW5kbGVyX2lkKQ0KPiA+PiArCQkJcmV0dXJu IGZpbmFsaXplcjsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gTlVMTDsNCj4gPj4g K30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludA0KPiA+PiArZXZkX2FsbG9jX2ZpbmFsaXplcl9p ZChzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIpIHsNCj4gPj4gKwlpbnQgZmluYWxp emVyX2lkID0gMDsNCj4gPj4gKw0KPiA+PiArCXdoaWxlIChldmRfZ2V0X2ZpbmFsaXplcl9ieV9p ZChkaXNwYXRjaGVyLCBmaW5hbGl6ZXJfaWQpICE9IE5VTEwpDQo+ID4+ICsJCWZpbmFsaXplcl9p ZCsrOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIGZpbmFsaXplcl9pZDsNCj4gPj4gK30NCj4gPj4g Kw0KPiA+PiArc3RhdGljIHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZXIgKiBldmRfYWxs b2NfZmluYWxpemVyKHN0cnVjdA0KPiA+PiArcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXIpIHsN Cj4gPj4gKwlpbnQgZmluYWxpemVyX2lkeDsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJf ZmluYWxpemVyICpmaW5hbGl6ZXI7DQo+ID4+ICsNCj4gPj4gKwlpZiAoZGlzcGF0Y2hlci0+bnVt X2ZpbmFsaXplcnMgPT0gRVZEX01BWF9GSU5BTElaRVJTKQ0KPiA+PiArCQlyZXR1cm4gTlVMTDsN Cj4gPj4gKw0KPiA+PiArCWZpbmFsaXplcl9pZHggPSBkaXNwYXRjaGVyLT5udW1fZmluYWxpemVy czsNCj4gPj4gKwlmaW5hbGl6ZXIgPSAmZGlzcGF0Y2hlci0+ZmluYWxpemVyc1tmaW5hbGl6ZXJf aWR4XTsNCj4gPj4gKw0KPiA+PiArCWZpbmFsaXplci0+aWQgPSBldmRfYWxsb2NfZmluYWxpemVy X2lkKGRpc3BhdGNoZXIpOw0KPiA+PiArDQo+ID4+ICsJZGlzcGF0Y2hlci0+bnVtX2ZpbmFsaXpl cnMrKzsNCj4gPj4gKw0KPiA+PiArCXJldHVybiBmaW5hbGl6ZXI7DQo+ID4+ICt9DQo+ID4+ICsN Cj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfcmVnaXN0ZXIodWludDhf dCBpZCwNCj4gPj4gKwkJCSAgICAgIHJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3QgZmluYWxpemVf ZnVuLA0KPiA+PiArCQkJICAgICAgdm9pZCAqZmluYWxpemVfZGF0YSkNCj4gPj4gK3sNCj4gPj4g KwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXIgKmRpc3BhdGNoZXI7DQo+ID4+ICsJc3RydWN0IHJ0ZV9k aXNwYXRjaGVyX2ZpbmFsaXplciAqZmluYWxpemVyOw0KPiA+PiArDQo+ID4+ICsJRVZEX1ZBTElE X0lEX09SX1JFVF9FSU5WQUwoaWQpOw0KPiA+PiArCWRpc3BhdGNoZXIgPSBldmRfZ2V0X2Rpc3Bh dGNoZXIoaWQpOw0KPiA+PiArDQo+ID4+ICsJZmluYWxpemVyID0gZXZkX2FsbG9jX2ZpbmFsaXpl cihkaXNwYXRjaGVyKTsNCj4gPj4gKw0KPiA+PiArCWlmIChmaW5hbGl6ZXIgPT0gTlVMTCkNCj4g Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4+ICsNCj4gPj4gKwlmaW5hbGl6ZXItPmZpbmFsaXpl X2Z1biA9IGZpbmFsaXplX2Z1bjsNCj4gPj4gKwlmaW5hbGl6ZXItPmZpbmFsaXplX2RhdGEgPSBm aW5hbGl6ZV9kYXRhOw0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIGZpbmFsaXplci0+aWQ7DQo+ID4+ ICt9DQo+ID4+ICsNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfdW5y ZWdpc3Rlcih1aW50OF90IGlkLCBpbnQgaGFuZGxlcl9pZCkgew0KPiA+PiArCXN0cnVjdCBydGVf ZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcjsNCj4gPj4gKwlzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfZmlu YWxpemVyICp1bnJlZ19maW5hbGl6ZXI7DQo+ID4+ICsJaW50IGZpbmFsaXplcl9pZHg7DQo+ID4+ ICsJdWludDE2X3QgbGFzdF9pZHg7DQo+ID4+ICsNCj4gPj4gKwlFVkRfVkFMSURfSURfT1JfUkVU X0VJTlZBTChpZCk7DQo+ID4+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihpZCk7 DQo+ID4+ICsNCj4gPj4gKwl1bnJlZ19maW5hbGl6ZXIgPSBldmRfZ2V0X2ZpbmFsaXplcl9ieV9p ZChkaXNwYXRjaGVyLCBoYW5kbGVyX2lkKTsNCj4gPj4gKw0KPiA+PiArCWlmICh1bnJlZ19maW5h bGl6ZXIgPT0gTlVMTCkNCj4gPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+ICsNCj4gPg0KPiA+ IFNhbWUgYXMgYWJvdmUgY29tbWVudCBpbiBydGVfZGlzcGF0Y2hlcl91bnJlZ2lzdGVyLCBiYXNl IGFkZHJlc3MgbmVlZHMNCj4gPiB0byBiZSBzdWJ0cmFjdGVkIGZyb20gdW5yZWdfZmluYWxpemVy DQo+ID4NCj4gDQo+IFllcy4NCj4gDQo+ID4NCj4gPj4gKwlmaW5hbGl6ZXJfaWR4ID0gJmRpc3Bh dGNoZXItPmZpbmFsaXplcnNbMF0gLSB1bnJlZ19maW5hbGl6ZXI7DQo+ID4+ICsNCj4gPj4gKwls YXN0X2lkeCA9IGRpc3BhdGNoZXItPm51bV9maW5hbGl6ZXJzIC0gMTsNCj4gPj4gKw0KPiA+PiAr CWlmIChmaW5hbGl6ZXJfaWR4ICE9IGxhc3RfaWR4KSB7DQo+ID4+ICsJCS8qIG1vdmUgYWxsIGZp bmFsaXplcnMgdG8gbWFpbnRhaW4gb3JkZXIgKi8NCj4gPj4gKwkJaW50IG4gPSBsYXN0X2lkeCAt IGZpbmFsaXplcl9pZHg7DQo+ID4+ICsJCW1lbW1vdmUodW5yZWdfZmluYWxpemVyLCB1bnJlZ19m aW5hbGl6ZXIgKyAxLA0KPiA+PiArCQkJc2l6ZW9mKHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9maW5h bGl6ZXIpICogbik7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJZGlzcGF0Y2hlci0+bnVtX2Zp bmFsaXplcnMtLTsNCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiArfQ0KPiA+PiArDQo+ ID4+ICtzdGF0aWMgaW50DQo+ID4+ICtldmRfc2V0X3NlcnZpY2VfcnVuc3RhdGUodWludDhfdCBp ZCwgaW50IHN0YXRlKSB7DQo+ID4+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVy Ow0KPiA+PiArCWludCByYzsNCj4gPj4gKw0KPiA+PiArCUVWRF9WQUxJRF9JRF9PUl9SRVRfRUlO VkFMKGlkKTsNCj4gPj4gKwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVyKGlkKTsNCj4g Pj4gKw0KPiA+PiArCXJjID0gcnRlX3NlcnZpY2VfY29tcG9uZW50X3J1bnN0YXRlX3NldChkaXNw YXRjaGVyLT5zZXJ2aWNlX2lkLA0KPiA+PiArCQkJCQkJc3RhdGUpOw0KPiA+PiArDQo+ID4+ICsJ aWYgKHJjICE9IDApIHsNCj4gPj4gKwkJUlRFX0VERVZfTE9HX0VSUigiVW5leHBlY3RlZCBlcnJv ciAlZCBvY2N1cnJlZCB3aGlsZQ0KPiA+PiBzZXR0aW5nICINCj4gPj4gKwkJCQkgInNlcnZpY2Ug Y29tcG9uZW50IHJ1biBzdGF0ZSB0byAlZFxuIiwgcmMsDQo+ID4+ICsJCQkJIHN0YXRlKTsNCj4g Pj4gKwkJUlRFX0FTU0VSVCgwKTsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsN Cj4gPj4gK30NCj4gPj4gKw0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9zdGFydCh1 aW50OF90IGlkKQ0KPiA+PiArew0KPiA+PiArCXJldHVybiBldmRfc2V0X3NlcnZpY2VfcnVuc3Rh dGUoaWQsIDEpOyB9DQo+ID4+ICsNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfc3Rv cCh1aW50OF90IGlkKQ0KPiA+PiArew0KPiA+PiArCXJldHVybiBldmRfc2V0X3NlcnZpY2VfcnVu c3RhdGUoaWQsIDApOyB9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyB2b2lkDQo+ID4+ICtldmRfYWdn cmVnYXRlX3N0YXRzKHN0cnVjdCBydGVfZGlzcGF0Y2hlcl9zdGF0cyAqcmVzdWx0LA0KPiA+PiAr CQkgICAgY29uc3Qgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX3N0YXRzICpwYXJ0KSB7DQo+ID4+ICsJ cmVzdWx0LT5wb2xsX2NvdW50ICs9IHBhcnQtPnBvbGxfY291bnQ7DQo+ID4+ICsJcmVzdWx0LT5l dl9iYXRjaF9jb3VudCArPSBwYXJ0LT5ldl9iYXRjaF9jb3VudDsNCj4gPj4gKwlyZXN1bHQtPmV2 X2Rpc3BhdGNoX2NvdW50ICs9IHBhcnQtPmV2X2Rpc3BhdGNoX2NvdW50Ow0KPiA+PiArCXJlc3Vs dC0+ZXZfZHJvcF9jb3VudCArPSBwYXJ0LT5ldl9kcm9wX2NvdW50OyB9DQo+ID4+ICsNCj4gPj4g K2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfc3RhdHNfZ2V0KHVpbnQ4X3QgaWQsDQo+ID4+ICsJ CQkgICAgICAgc3RydWN0IHJ0ZV9kaXNwYXRjaGVyX3N0YXRzICpzdGF0cykgew0KPiA+PiArCXN0 cnVjdCBydGVfZGlzcGF0Y2hlciAqZGlzcGF0Y2hlcjsNCj4gPj4gKwl1bnNpZ25lZCBpbnQgbGNv cmVfaWQ7DQo+ID4+ICsNCj4gPj4gKwlFVkRfVkFMSURfSURfT1JfUkVUX0VJTlZBTChpZCk7DQo+ ID4+ICsJZGlzcGF0Y2hlciA9IGV2ZF9nZXRfZGlzcGF0Y2hlcihpZCk7DQo+ID4+ICsNCj4gPg0K PiA+IFN0YXRzIHBvaW50ZXIgbmVlZHMgdG8gYmUgdmFsaWRhdGVkIGZvciBOVUxMIGJlZm9yZSBh Y2Nlc3NpbmcNCj4gPg0KPiA+DQo+IA0KPiBZZXMuDQo+IA0KPiBUaGFua3MgYSBsb3QgZm9yIHlv dXIgcmV2aWV3IGNvbW1lbnRzLg0KPiANCj4gPj4gKwkqc3RhdHMgPSAoc3RydWN0IHJ0ZV9kaXNw YXRjaGVyX3N0YXRzKSB7fTsNCj4gPj4gKw0KPiA+PiArCWZvciAobGNvcmVfaWQgPSAwOyBsY29y ZV9pZCA8IFJURV9NQVhfTENPUkU7IGxjb3JlX2lkKyspIHsNCj4gPj4gKwkJc3RydWN0IHJ0ZV9k aXNwYXRjaGVyX2xjb3JlICpsY29yZSA9DQo+ID4+ICsJCQkmZGlzcGF0Y2hlci0+bGNvcmVzW2xj b3JlX2lkXTsNCj4gPj4gKw0KPiA+PiArCQlldmRfYWdncmVnYXRlX3N0YXRzKHN0YXRzLCAmbGNv cmUtPnN0YXRzKTsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30N Cj4gPj4gKw0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9zdGF0c19yZXNldCh1aW50 OF90IGlkKSB7DQo+ID4+ICsJc3RydWN0IHJ0ZV9kaXNwYXRjaGVyICpkaXNwYXRjaGVyOw0KPiA+ PiArCXVuc2lnbmVkIGludCBsY29yZV9pZDsNCj4gPj4gKw0KPiA+PiArCUVWRF9WQUxJRF9JRF9P Ul9SRVRfRUlOVkFMKGlkKTsNCj4gPj4gKwlkaXNwYXRjaGVyID0gZXZkX2dldF9kaXNwYXRjaGVy KGlkKTsNCj4gPj4gKw0KPiA+PiArDQo+ID4+ICsJZm9yIChsY29yZV9pZCA9IDA7IGxjb3JlX2lk IDwgUlRFX01BWF9MQ09SRTsgbGNvcmVfaWQrKykgew0KPiA+PiArCQlzdHJ1Y3QgcnRlX2Rpc3Bh dGNoZXJfbGNvcmUgKmxjb3JlID0NCj4gPj4gKwkJCSZkaXNwYXRjaGVyLT5sY29yZXNbbGNvcmVf aWRdOw0KPiA+PiArDQo+ID4+ICsJCWxjb3JlLT5zdGF0cyA9IChzdHJ1Y3QgcnRlX2Rpc3BhdGNo ZXJfc3RhdHMpIHt9Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXJldHVybiAwOw0KPiA+PiAr DQo+ID4+ICt9DQo+ID4+IGRpZmYgLS1naXQgYS9saWIvZGlzcGF0Y2hlci9ydGVfZGlzcGF0Y2hl ci5oDQo+ID4+IGIvbGliL2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuaCBuZXcgZmlsZSBtb2Rl IDEwMDY0NCBpbmRleA0KPiA+PiAwMDAwMDAwMDAwLi42NzEyNjg3YTA4DQo+ID4+IC0tLSAvZGV2 L251bGwNCj4gPj4gKysrIGIvbGliL2Rpc3BhdGNoZXIvcnRlX2Rpc3BhdGNoZXIuaA0KPiA+PiBA QCAtMCwwICsxLDQ4MCBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z LUNsYXVzZQ0KPiA+PiArICogQ29weXJpZ2h0KGMpIDIwMjMgRXJpY3Nzb24gQUINCj4gPj4gKyAq Lw0KPiA+PiArDQo+ID4+ICsjaWZuZGVmIF9fUlRFX0RJU1BBVENIRVJfSF9fDQo+ID4+ICsjZGVm aW5lIF9fUlRFX0RJU1BBVENIRVJfSF9fDQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQGZp bGUNCj4gPj4gKyAqDQo+ID4+ICsgKiBSVEUgRGlzcGF0Y2hlcg0KPiA+PiArICoNCj4gPj4gKyAq IFRoZSBwdXJwb3NlIG9mIHRoZSBkaXNwYXRjaGVyIGlzIHRvIGhlbHAgZGVjb3VwbGUgZGlmZmVy ZW50IHBhcnRzDQo+ID4+ICsgKiBvZiBhbiBhcHBsaWNhdGlvbiAoZS5nLiwgbW9kdWxlcyksIHNo YXJpbmcgdGhlIHNhbWUgdW5kZXJseWluZw0KPiA+PiArICogZXZlbnQgZGV2aWNlLg0KPiA+PiAr ICovDQo+ID4+ICsNCj4gPj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+PiArZXh0ZXJuICJDIiB7 DQo+ID4+ICsjZW5kaWYNCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9ldmVudGRldi5oPg0K PiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgbWF0Y2gg Y2FsbGJhY2tzLg0KPiA+PiArICoNCj4gPj4gKyAqIE1hdGNoIGNhbGxiYWNrcyBhcmUgdXNlZCBi eSBhbiBhcHBsaWNhdGlvbiB0byBkZWNpZGUgaG93IHRoZQ0KPiA+PiArICogZGlzcGF0Y2hlciBk aXN0cmlidXRlcyBldmVudHMgdG8gZGlmZmVyZW50IHBhcnRzIG9mIHRoZQ0KPiA+PiArICogYXBw bGljYXRpb24uDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBleHBl Y3RlZCB0byBwcm9jZXNzIHRoZSBldmVudCBhdCB0aGUgcG9pbnQNCj4gPj4gKyAqIG9mIHRoZSBt YXRjaCBjYWxsLiBTdWNoIG1hdHRlcnMgc2hvdWxkIGJlIGRlZmVycmVkIHRvIHRoZSBwcm9jZXNz DQo+ID4+ICsgKiBjYWxsYmFjayBpbnZvY2F0aW9uLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBt YXRjaCBjYWxsYmFjayBtYXkgYmUgdXNlZCBhcyBhbiBvcHBvcnR1bml0eSB0byBwcmVmZXRjaCBk YXRhLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBldmVudA0KPiA+PiArICogIFBvaW50ZXIg dG8gZXZlbnQNCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gY2JfZGF0YQ0KPiA+PiArICogIFRo ZSBwb2ludGVyIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpbg0KPiA+PiArICogIHJ0ZV9k aXNwYXRjaGVyX3JlZ2lzdGVyKCkuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiAr ICogICBSZXR1cm5zIHRydWUgaW4gY2FzZSB0aGlzIGV2ZW50cyBzaG91bGQgYmUgZGVsaXZlcmVk ICh2aWENCj4gPj4gKyAqICAgdGhlIHByb2Nlc3MgY2FsbGJhY2spLCBhbmQgZmFsc2Ugb3RoZXJ3 aXNlLg0KPiA+PiArICovDQo+ID4+ICt0eXBlZGVmIGJvb2wNCj4gPj4gKygqcnRlX2Rpc3BhdGNo ZXJfbWF0Y2hfdCkoY29uc3Qgc3RydWN0IHJ0ZV9ldmVudCAqZXZlbnQsIHZvaWQNCj4gPj4gKypj Yl9kYXRhKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBGdW5jdGlvbiBwcm90b3R5cGUg Zm9yIHByb2Nlc3MgY2FsbGJhY2tzLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBwcm9jZXNzIGNh bGxiYWNrcyBhcmUgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBkZWxpdmVyDQo+ID4+ICsgKiBl dmVudHMgZm9yIHByb2Nlc3NpbmcuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGV2ZW50X2Rl dl9pZA0KPiA+PiArICogIFRoZSBvcmlnaW5hdGluZyBldmVudCBkZXZpY2UgaWQuDQo+ID4+ICsg Kg0KPiA+PiArICogQHBhcmFtIGV2ZW50X3BvcnRfaWQNCj4gPj4gKyAqICBUaGUgb3JpZ2luYXRp bmcgZXZlbnQgcG9ydC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZXZlbnRzDQo+ID4+ICsg KiAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBldmVudHMuDQo+ID4+ICsgKg0KPiA+PiArICogQHBh cmFtIG51bQ0KPiA+PiArICogIFRoZSBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBAcCBldmVudHMg YXJyYXkuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGNiX2RhdGENCj4gPj4gKyAqICBUaGUg cG9pbnRlciBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24gaW4NCj4gPj4gKyAqICBydGVfZGlz cGF0Y2hlcl9yZWdpc3RlcigpLg0KPiA+PiArICovDQo+ID4+ICsNCj4gPj4gK3R5cGVkZWYgdm9p ZA0KPiA+PiArKCpydGVfZGlzcGF0Y2hlcl9wcm9jZXNzX3QpKHVpbnQ4X3QgZXZlbnRfZGV2X2lk LCB1aW50OF90IGV2ZW50X3BvcnRfaWQsDQo+ID4+ICsJCQkJICBzdHJ1Y3QgcnRlX2V2ZW50ICpl dmVudHMsIHVpbnQxNl90IG51bSwNCj4gPj4gKwkJCQkgIHZvaWQgKmNiX2RhdGEpOw0KPiA+PiAr DQo+ID4+ICsvKioNCj4gPj4gKyAqIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgZmluYWxpemUgY2Fs bGJhY2tzLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBmaW5hbGl6ZSBjYWxsYmFja3MgYXJlIHVz ZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gbm90aWZ5IHRoZQ0KPiA+PiArICogYXBwbGljYXRpb24g aXQgaGFzIGRlbGl2ZXJlZCBhbGwgZXZlbnRzIGZyb20gYSBwYXJ0aWN1bGFyIGJhdGNoDQo+ID4+ ICsgKiBkZXF1ZXVlZCBmcm9tIHRoZSBldmVudCBkZXZpY2UuDQo+ID4+ICsgKg0KPiA+PiArICog QHBhcmFtIGV2ZW50X2Rldl9pZA0KPiA+PiArICogIFRoZSBvcmlnaW5hdGluZyBldmVudCBkZXZp Y2UgaWQuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGV2ZW50X3BvcnRfaWQNCj4gPj4gKyAq ICBUaGUgb3JpZ2luYXRpbmcgZXZlbnQgcG9ydC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0g Y2JfZGF0YQ0KPiA+PiArICogIFRoZSBwb2ludGVyIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlv biBpbg0KPiA+PiArICogIHJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3JlZ2lzdGVyKCkuDQo+ID4+ ICsgKi8NCj4gPj4gKw0KPiA+PiArdHlwZWRlZiB2b2lkDQo+ID4+ICsoKnJ0ZV9kaXNwYXRjaGVy X2ZpbmFsaXplX3QpKHVpbnQ4X3QgZXZlbnRfZGV2X2lkLCB1aW50OF90IGV2ZW50X3BvcnRfaWQs DQo+ID4+ICsJCQkJICAgdm9pZCAqY2JfZGF0YSk7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiAr ICogRGlzcGF0Y2hlciBzdGF0aXN0aWNzDQo+ID4+ICsgKi8NCj4gPj4gK3N0cnVjdCBydGVfZGlz cGF0Y2hlcl9zdGF0cyB7DQo+ID4+ICsJdWludDY0X3QgcG9sbF9jb3VudDsNCj4gPj4gKwkvKio8 IE51bWJlciBvZiBldmVudCBkZXF1ZXVlIGNhbGxzIG1hZGUgdG93YXJkIHRoZSBldmVudCBkZXZp Y2UuICovDQo+ID4+ICsJdWludDY0X3QgZXZfYmF0Y2hfY291bnQ7DQo+ID4+ICsJLyoqPCBOdW1i ZXIgb2Ygbm9uLWVtcHR5IGV2ZW50IGJhdGNoZXMgZGVxdWV1ZWQgZnJvbSBldmVudA0KPiA+PiBk ZXZpY2UuKi8NCj4gPj4gKwl1aW50NjRfdCBldl9kaXNwYXRjaF9jb3VudDsNCj4gPj4gKwkvKio8 IE51bWJlciBvZiBldmVudHMgZGlzcGF0Y2hlZCB0byBhIGhhbmRsZXIuKi8NCj4gPj4gKwl1aW50 NjRfdCBldl9kcm9wX2NvdW50Ow0KPiA+PiArCS8qKjwgTnVtYmVyIG9mIGV2ZW50cyBkcm9wcGVk IGJlY2F1c2Ugbm8gaGFuZGxlciB3YXMgZm91bmQuICovIH07DQo+ID4+ICsNCj4gPj4gKy8qKg0K PiA+PiArICogQ3JlYXRlIGEgZGlzcGF0Y2hlciB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuDQo+ID4+ ICsgKg0KPiA+PiArICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgQW4gYXBwbGljYXRpb24tc3BlY2lm aWVkLCB1bmlxdWUgKGFjcm9zcyBhbGwgZGlzcGF0Y2hlcg0KPiA+PiArICogIGluc3RhbmNlcykg aWRlbnRpZmllci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZXZlbnRfZGV2X2lkDQo+ID4+ ICsgKiAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGV2ZW50IGRldmljZSBmcm9tIHdoaWNoIHRoaXMg ZGlzcGF0Y2hlcg0KPiA+PiArICogIHdpbGwgZGVxdWV1ZSBldmVudHMuDQo+ID4+ICsgKg0KPiA+ PiArICogQHJldHVybg0KPiA+PiArICogICAtIDA6IFN1Y2Nlc3MNCj4gPj4gKyAqICAgLSA8MDog RXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9jcmVhdGUodWludDhfdCBpZCwgdWlu dDhfdCBldmVudF9kZXZfaWQpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEZyZWUgYSBk aXNwYXRjaGVyLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBpZA0KPiA+PiArICogIFRoZSBk aXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiAr ICogIC0gMDogU3VjY2Vzcw0KPiA+PiArICogIC0gPDA6IEVycm9yIGNvZGUgb24gZmFpbHVyZQ0K PiA+PiArICovDQo+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK2ludA0KPiA+PiArcnRl X2Rpc3BhdGNoZXJfZnJlZSh1aW50OF90IGlkKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsg KiBSZXRyaWV2ZSB0aGUgc2VydmljZSBpZGVudGlmaWVyIG9mIGEgZGlzcGF0Y2hlci4NCj4gPj4g KyAqDQo+ID4+ICsgKiBAcGFyYW0gaWQNCj4gPj4gKyAqICBUaGUgZGlzcGF0Y2hlciBpZGVudGlm aWVyLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBbb3V0XSBzZXJ2aWNlX2lkDQo+ID4+ICsg KiAgQSBwb2ludGVyIHRvIGEgY2FsbGVyLXN1cHBsaWVkIGJ1ZmZlciB3aGVyZSB0aGUgZGlzcGF0 Y2hlcidzDQo+ID4+ICsgKiAgc2VydmljZSBpZCB3aWxsIGJlIHN0b3JlZC4NCj4gPj4gKyAqDQo+ ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgLSAwOiBTdWNjZXNzDQo+ID4+ICsgKiAgLSA8MDog RXJyb3IgY29kZSBvbiBmYWlsdXJlLg0KPiA+PiArICovDQo+ID4+ICtfX3J0ZV9leHBlcmltZW50 YWwNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfc2VydmljZV9pZF9nZXQodWludDhf dCBpZCwgdWludDMyX3QgKnNlcnZpY2VfaWQpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAq IEJpbmRzIGFuIGV2ZW50IGRldmljZSBwb3J0IHRvIGEgc3BlY2lmaWMgbGNvcmUgb24gdGhlIHNw ZWNpZmllZA0KPiA+PiArICogZGlzcGF0Y2hlci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIGZ1 bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGV2ZW50IHBvcnQgaWQgdG8gYmUgdXNlZCBieSB0aGUNCj4g Pj4gK2V2ZW50DQo+ID4+ICsgKiBkaXNwYXRjaGVyIHNlcnZpY2UsIGlmIHJ1biBvbiB0aGUgc3Bl Y2lmaWVkIGxjb3JlLg0KPiA+PiArICoNCj4gPj4gKyAqIE11bHRpcGxlIGV2ZW50IGRldmljZSBw b3J0cyBtYXkgYmUgYm91bmQgdG8gdGhlIHNhbWUgbGNvcmUuIEENCj4gPj4gKyAqIHBhcnRpY3Vs YXIgcG9ydCBtdXN0IG5vdCBiZSBib3VuZCB0byBtb3JlIHRoYW4gb25lIGxjb3JlLg0KPiA+PiAr ICoNCj4gPj4gKyAqIElmIHRoZSBkaXNwYXRjaGVyIHNlcnZpY2UgaXMgbWFwcGVkICh3aXRoDQo+ ID4+ICtydGVfc2VydmljZV9tYXBfbGNvcmVfc2V0KCkpDQo+ID4+ICsgKiB0byBhIGxjb3JlIHRv IHdoaWNoIG5vIHBvcnRzIGFyZSBib3VuZCwgdGhlIHNlcnZpY2UgZnVuY3Rpb24gd2lsbA0KPiA+ PiArYmUgYQ0KPiA+PiArICogbm8tb3BlcmF0aW9uLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoaXMg ZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSBhbnkgdGhyZWFkIChpbmNsdWRpbmcgdW5yZWdpc3Rl cmVkDQo+ID4+ICsgKiBub24tRUFMIHRocmVhZHMpLCBidXQgbm90IHdoaWxlIHRoZSBkaXNwYXRj aGVyIGlzIHJ1bm5pbmcgb24NCj4gPj4gK2xjb3JlDQo+ID4+ICsgKiBzcGVjaWZpZWQgYnkgQGMg bGNvcmVfaWQuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgVGhlIGRp c3BhdGNoZXIgaWRlbnRpZmllci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZXZlbnRfcG9y dF9pZA0KPiA+PiArICogIFRoZSBldmVudCBkZXZpY2UgcG9ydCBpZGVudGlmaWVyLg0KPiA+PiAr ICoNCj4gPj4gKyAqIEBwYXJhbSBiYXRjaF9zaXplDQo+ID4+ICsgKiAgVGhlIGJhdGNoIHNpemUg dG8gdXNlIGluIHJ0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0KCksIGZvciB0aGUNCj4gPj4gKyAqICBj b25maWd1cmVkIGV2ZW50IGRldmljZSBwb3J0IGFuZCBsY29yZS4NCj4gPj4gKyAqDQo+ID4+ICsg KiBAcGFyYW0gdGltZW91dA0KPiA+PiArICogIFRoZSB0aW1lb3V0IHBhcmFtZXRlciB0byB1c2Ug aW4gcnRlX2V2ZW50X2RlcXVldWVfYnVyc3QoKSwgZm9yDQo+ID4+ICt0aGUNCj4gPj4gKyAqICBj b25maWd1cmVkIGV2ZW50IGRldmljZSBwb3J0IGFuZCBsY29yZS4NCj4gPj4gKyAqDQo+ID4+ICsg KiBAcGFyYW0gbGNvcmVfaWQNCj4gPj4gKyAqICBUaGUgbGNvcmUgYnkgd2hpY2ggdGhpcyBldmVu dCBwb3J0IHdpbGwgYmUgdXNlZC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsg KiAgLSAwOiBTdWNjZXNzDQo+ID4+ICsgKiAgLSAtRU5PTUVNOiBVbmFibGUgdG8gYWxsb2NhdGUg c3VmZmljaWVudCByZXNvdXJjZXMuDQo+ID4+ICsgKiAgLSAtRUVYSVNUUzogRXZlbnQgcG9ydCBp cyBhbHJlYWR5IGNvbmZpZ3VyZWQuDQo+ID4+ICsgKiAgLSAtRUlOVkFMOiBJbnZhbGlkIGFyZ3Vt ZW50cy4NCj4gPj4gKyAqLw0KPiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+ICtpbnQNCj4g Pj4gK3J0ZV9kaXNwYXRjaGVyX2JpbmRfcG9ydF90b19sY29yZSh1aW50OF90IGlkLCB1aW50OF90 IGV2ZW50X3BvcnRfaWQsDQo+ID4+ICsJCQkJCXVpbnQxNl90IGJhdGNoX3NpemUsIHVpbnQ2NF90 DQo+ID4+IHRpbWVvdXQsDQo+ID4+ICsJCQkJCXVuc2lnbmVkIGludCBsY29yZV9pZCk7DQo+ID4+ ICsNCj4gPj4gKy8qKg0KPiA+PiArICogVW5iaW5kIGFuIGV2ZW50IGRldmljZSBwb3J0IGZyb20g YSBzcGVjaWZpYyBsY29yZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIGZ1bmN0aW9uIG1heSBi ZSBjYWxsZWQgYnkgYW55IHRocmVhZCAoaW5jbHVkaW5nIHVucmVnaXN0ZXJlZA0KPiA+PiArICog bm9uLUVBTCB0aHJlYWRzKSwgYnV0IG5vdCB3aGlsZSB0aGUgZGlzcGF0Y2hlciBpcyBydW5uaW5n IG9uDQo+ID4+ICsgKiBsY29yZSBzcGVjaWZpZWQgYnkgQGMgbGNvcmVfaWQuDQo+ID4+ICsgKg0K PiA+PiArICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmllci4N Cj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gZXZlbnRfcG9ydF9pZA0KPiA+PiArICogIFRoZSBl dmVudCBkZXZpY2UgcG9ydCBpZGVudGlmaWVyLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBs Y29yZV9pZA0KPiA+PiArICogIFRoZSBsY29yZSB3aGljaCB3YXMgdXNpbmcgdGhpcyBldmVudCBw b3J0Lg0KPiA+PiArICoNCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAtIDA6IFN1Y2Nlc3MN Cj4gPj4gKyAqICAtIC1FSU5WQUw6IEludmFsaWQgQGMgaWQuDQo+ID4+ICsgKiAgLSAtRU5PRU5U OiBFdmVudCBwb3J0IGlkIG5vdCBib3VuZCB0byB0aGlzIEBjIGxjb3JlX2lkLg0KPiA+PiArICov DQo+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNo ZXJfdW5iaW5kX3BvcnRfZnJvbV9sY29yZSh1aW50OF90IGlkLCB1aW50OF90DQo+IGV2ZW50X3Bv cnRfaWQsDQo+ID4+ICsJCQkJCSAgICB1bnNpZ25lZCBpbnQgbGNvcmVfaWQpOw0KPiA+PiArDQo+ ID4+ICsvKioNCj4gPj4gKyAqIFJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIuDQo+ID4+ICsgKg0K PiA+PiArICogVGhlIG1hdGNoIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VsZWN0IGlm IGEgcGFydGljdWxhcg0KPiA+PiArZXZlbnQNCj4gPj4gKyAqIHNob3VsZCBiZSBkZWxpdmVyZWQs IHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIHByb2Nlc3MgY2FsbGJhY2sNCj4gPj4gKyAqIGZ1bmN0 aW9uLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSByZWFzb24gZm9yIGhhdmluZyB0d28gZGlzdGlu Y3Qgc3RlcHMgaXMgdG8gYWxsb3cgdGhlDQo+ID4+ICtkaXNwYXRjaGVyDQo+ID4+ICsgKiB0byBk ZWxpdmVyIGFsbCBldmVudHMgYXMgYSBiYXRjaC4gVGhpcyBpbiB0dXJuIHdpbGwgY2F1c2UNCj4g Pj4gKyAqIHByb2Nlc3Npbmcgb2YgYSBwYXJ0aWN1bGFyIGtpbmQgb2YgZXZlbnRzIHRvIGhhcHBl biBpbiBhDQo+ID4+ICsgKiBiYWNrLXRvLWJhY2sgbWFubmVyLCBpbXByb3ZpbmcgY2FjaGUgbG9j YWxpdHkuDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIGxpc3Qgb2YgaGFuZGxlciBjYWxsYmFjayBm dW5jdGlvbnMgaXMgc2hhcmVkIGFtb25nIGFsbA0KPiA+PiArbGNvcmVzLA0KPiA+PiArICogYnV0 IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBsY29yZXMgd2hpY2ggaGFzIGFuIGV2ZW50ZGV2IHBv cnQNCj4gPj4gKyAqIGJvdW5kIHRvIHRoZW0sIGFuZCB3aGljaCBhcmUgcnVubmluZyB0aGUgZGlz cGF0Y2hlciBzZXJ2aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEFuIGV2ZW50IGlzIGRlbGl2ZXJl ZCB0byBhdCBtb3N0IG9uZSBoYW5kbGVyLiBFdmVudHMgd2hlcmUgbm8NCj4gPj4gKyAqIGhhbmRs ZXIgaXMgZm91bmQgYXJlIGRyb3BwZWQuDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIGFwcGxpY2F0 aW9uIG11c3Qgbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIgb2Ygd2hpY2ggdGhlIG1hdGNoDQo+ID4+ ICsgKiBmdW5jdGlvbnMgYXJlIGludm9rZWQuDQo+ID4+ICsgKg0KPiA+PiArICogT3JkZXJpbmcg b2YgZXZlbnRzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIG1haW50YWluZWQgYmV0d2Vlbg0KPiA+ PiArICogZGlmZmVyZW50IGRlbGl2ZXIgY2FsbGJhY2tzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0 aGVyZSBhcmUgdHdvDQo+ID4+ICsgKiBjYWxsYmFja3MgcmVnaXN0ZXJlZCwgbWF0Y2hpbmcgZGlm ZmVyZW50IHN1YnNldHMgb2YgZXZlbnRzDQo+ID4+ICthcnJpdmluZw0KPiA+PiArICogb24gYW4g YXRvbWljIHF1ZXVlLiBBIGJhdGNoIG9mIGV2ZW50cyBbZXYwLCBldjEsIGV2Ml0gYXJlDQo+ID4+ ICtkZXF1ZXVlZA0KPiA+PiArICogb24gYSBwYXJ0aWN1bGFyIHBvcnQsIGFsbCBwZXJ0YWluaW5n IHRvIHRoZSBzYW1lIGZsb3cuIFRoZSBtYXRjaA0KPiA+PiArICogY2FsbGJhY2sgZm9yIHJlZ2lz dHJhdGlvbiBBIHJldHVybnMgdHJ1ZSBmb3IgZXYwIGFuZCBldjIsIGFuZCB0aGUNCj4gPj4gKyAq IG1hdGNoaW5nIGZ1bmN0aW9uIGZvciByZWdpc3RyYXRpb24gQiBmb3IgZXYxLiBJbiB0aGF0IHNj ZW5hcmlvLA0KPiA+PiArdGhlDQo+ID4+ICsgKiBkaXNwYXRjaGVyIG1heSBjaG9vc2UgdG8gZGVs aXZlciBmaXJzdCBbZXYwLCBldjJdIHVzaW5nIEEncw0KPiA+PiArZGVsaXZlcg0KPiA+PiArICog ZnVuY3Rpb24sIGFuZCB0aGVuIFtldjFdIHRvIEIgLSBvciB2aWNlIHZlcnNhLg0KPiA+PiArICoN Cj4gPj4gKyAqIHJ0ZV9kaXNwYXRjaGVyX3JlZ2lzdGVyKCkgbWF5IGJlIGNhbGxlZCBieSBhbnkg dGhyZWFkDQo+ID4+ICsgKiAoaW5jbHVkaW5nIHVucmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZHMp LCBidXQgbm90IHdoaWxlIHRoZSBldmVudA0KPiA+PiArICogZGlzcGF0Y2hlciBpcyBydW5uaW5n IG9uIGFueSBzZXJ2aWNlIGxjb3JlLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBpZA0KPiA+ PiArICogIFRoZSBkaXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ID4+ICsgKg0KPiA+PiArICogQHBh cmFtIG1hdGNoX2Z1bg0KPiA+PiArICogIFRoZSBtYXRjaCBjYWxsYmFjayBmdW5jdGlvbi4NCj4g Pj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gbWF0Y2hfY2JfZGF0YQ0KPiA+PiArICogIEEgcG9pbnRl ciB0byBzb21lIGFwcGxpY2F0aW9uLXNwZWNpZmljIG9wYXF1ZSBkYXRhIChvciBOVUxMKSwNCj4g Pj4gKyAqICB3aGljaCBpcyBzdXBwbGllZCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiB3aGVuIG1h dGNoX2Z1biBpcw0KPiA+PiArICogIGNhbGxlZC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0g cHJvY2Vzc19mdW4NCj4gPj4gKyAqICBUaGUgcHJvY2VzcyBjYWxsYmFjayBmdW5jdGlvbi4NCj4g Pj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gcHJvY2Vzc19jYl9kYXRhDQo+ID4+ICsgKiAgQSBwb2lu dGVyIHRvIHNvbWUgYXBwbGljYXRpb24tc3BlY2lmaWMgb3BhcXVlIGRhdGEgKG9yIE5VTEwpLA0K PiA+PiArICogIHdoaWNoIGlzIHN1cHBsaWVkIGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4g cHJvY2Vzc19mdW4gaXMNCj4gPj4gKyAqICBjYWxsZWQuDQo+ID4+ICsgKg0KPiA+PiArICogQHJl dHVybg0KPiA+PiArICogIC0gPj0gMDogVGhlIGlkZW50aWZpZXIgZm9yIHRoaXMgcmVnaXN0cmF0 aW9uLg0KPiA+PiArICogIC0gLUVOT01FTTogVW5hYmxlIHRvIGFsbG9jYXRlIHN1ZmZpY2llbnQg cmVzb3VyY2VzLg0KPiA+PiArICovDQo+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK2lu dA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfcmVnaXN0ZXIodWludDhfdCBpZCwNCj4gPj4gKwkJCSAg ICAgIHJ0ZV9kaXNwYXRjaGVyX21hdGNoX3QgbWF0Y2hfZnVuLA0KPiA+PiArCQkJICAgICAgdm9p ZCAqbWF0Y2hfY2JfZGF0YSwNCj4gPj4gKwkJCSAgICAgIHJ0ZV9kaXNwYXRjaGVyX3Byb2Nlc3Nf dCBwcm9jZXNzX2Z1biwNCj4gPj4gKwkJCSAgICAgIHZvaWQgKnByb2Nlc3NfY2JfZGF0YSk7DQo+ ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogVW5yZWdpc3RlciBhbiBldmVudCBoYW5kbGVyLg0K PiA+PiArICoNCj4gPj4gKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSBhbnkgdGhy ZWFkIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkDQo+ID4+ICsgKiBub24tRUFMIHRocmVhZHMpLCBi dXQgbm90IHdoaWxlIHRoZSBkaXNwYXRjaGVyIGlzIHJ1bm5pbmcgb24NCj4gPj4gKyAqIGFueSBz ZXJ2aWNlIGxjb3JlLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBpZA0KPiA+PiArICogIFRo ZSBkaXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGhhbmRs ZXJfaWQNCj4gPj4gKyAqICBUaGUgaGFuZGxlciByZWdpc3RyYXRpb24gaWQgcmV0dXJuZWQgYnkg dGhlIG9yaWdpbmFsDQo+ID4+ICsgKiAgcnRlX2Rpc3BhdGNoZXJfcmVnaXN0ZXIoKSBjYWxsLg0K PiA+PiArICoNCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAtIDA6IFN1Y2Nlc3MNCj4gPj4g KyAqICAtIC1FSU5WQUw6IFRoZSBAYyBpZCBhbmQvb3IgdGhlIEBjIGhhbmRsZXJfaWQgcGFyYW1l dGVyIHdhcyBpbnZhbGlkLg0KPiA+PiArICovDQo+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4g Pj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfdW5yZWdpc3Rlcih1aW50OF90IGlkLCBpbnQg aGFuZGxlcl9pZCk7DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogUmVnaXN0ZXIgYSBmaW5h bGl6ZSBjYWxsYmFjayBmdW5jdGlvbi4NCj4gPj4gKyAqDQo+ID4+ICsgKiBBbiBhcHBsaWNhdGlv biBtYXkgb3B0aW9uYWxseSBpbnN0YWxsIG9uZSBvciBtb3JlIGZpbmFsaXplDQo+ID4+ICsgKiBj YWxsYmFja3MuDQo+ID4+ICsgKg0KPiA+PiArICogQWxsIGZpbmFsaXplIGNhbGxiYWNrcyBhcmUg aW52b2tlZCBieSB0aGUgZGlzcGF0Y2hlciB3aGVuIGENCj4gPj4gKyAqIGNvbXBsZXRlIGJhdGNo IG9mIGV2ZW50cyAocmV0cmlldmUgdXNpbmcNCj4gPj4gK3J0ZV9ldmVudF9kZXF1ZXVlX2J1cnN0 KCkpDQo+ID4+ICsgKiBoYXZlIGJlZW4gZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbiAob3Ig aGF2ZSBiZWVuIGRyb3BwZWQpLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBmaW5hbGl6ZSBjYWxs YmFjayBpcyBub3QgdGllZCB0byBhbnkgcGFydGljdWxhciBoYW5kbGVyLg0KPiA+PiArICoNCj4g Pj4gKyAqIFRoZSBmaW5hbGl6ZSBjYWxsYmFjayBwcm92aWRlcyBhbiBvcHBvcnR1bml0eSBmb3Ig dGhlIGFwcGxpY2F0aW9uDQo+ID4+ICsgKiB0byBkbyBwZXItYmF0Y2ggcHJvY2Vzc2luZy4gT25l IGNhc2Ugd2hlcmUgdGhpcyBtYXkgYmUgdXNlZnVsIGlzDQo+ID4+ICtpZg0KPiA+PiArICogYW4g ZXZlbnQgb3V0cHV0IGJ1ZmZlciBpcyB1c2VkLCBhbmQgaXMgc2hhcmVkIGFtb25nIHNldmVyYWwN Cj4gPj4gKyAqIGhhbmRsZXJzLiBJbiBzdWNoIGEgY2FzZSwgcHJvcGVyIG91dHB1dCBidWZmZXIg Zmx1c2hpbmcgbWF5IGJlDQo+ID4+ICsgKiBhc3N1cmVkIHVzaW5nIGEgZmluYWxpemUgY2FsbGJh Y2suDQo+ID4+ICsgKg0KPiA+PiArICogcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfcmVnaXN0ZXIo KSBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQNCj4gPj4gKyAqIChpbmNsdWRpbmcgdW5yZWdp c3RlcmVkIG5vbi1FQUwgdGhyZWFkcyksIGJ1dCBub3Qgd2hpbGUgdGhlDQo+ID4+ICsgKiBkaXNw YXRjaGVyIGlzIHJ1bm5pbmcgb24gYW55IHNlcnZpY2UgbGNvcmUuDQo+ID4+ICsgKg0KPiA+PiAr ICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmllci4NCj4gPj4g KyAqDQo+ID4+ICsgKiBAcGFyYW0gZmluYWxpemVfZnVuDQo+ID4+ICsgKiAgVGhlIGZ1bmN0aW9u IGNhbGxlZCBhZnRlciBjb21wbGV0aW5nIHRoZSBwcm9jZXNzaW5nIG9mIGENCj4gPj4gKyAqICBk ZXF1ZXVlIGJhdGNoLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBmaW5hbGl6ZV9kYXRhDQo+ ID4+ICsgKiAgQSBwb2ludGVyIHRvIHNvbWUgYXBwbGljYXRpb24tc3BlY2lmaWMgb3BhcXVlIGRh dGEgKG9yIE5VTEwpLA0KPiA+PiArICogIHdoaWNoIGlzIHN1cHBsaWVkIGJhY2sgdG8gdGhlIGFw cGxpY2F0aW9uIHdoZW4gQGMgZmluYWxpemVfZnVuDQo+ID4+ICtpcw0KPiA+PiArICogIGNhbGxl ZC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgLSA+PSAwOiBUaGUgaWRl bnRpZmllciBmb3IgdGhpcyByZWdpc3RyYXRpb24uDQo+ID4+ICsgKiAgLSAtRU5PTUVNOiBVbmFi bGUgdG8gYWxsb2NhdGUgc3VmZmljaWVudCByZXNvdXJjZXMuDQo+ID4+ICsgKi8NCj4gPj4gK19f cnRlX2V4cGVyaW1lbnRhbA0KPiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9maW5hbGl6 ZV9yZWdpc3Rlcih1aW50OF90IGlkLA0KPiA+PiArCQkJCSBydGVfZGlzcGF0Y2hlcl9maW5hbGl6 ZV90IGZpbmFsaXplX2Z1biwNCj4gPj4gKwkJCQkgdm9pZCAqZmluYWxpemVfZGF0YSk7DQo+ID4+ ICsNCj4gPj4gKy8qKg0KPiA+PiArICogVW5yZWdpc3RlciBhIGZpbmFsaXplIGNhbGxiYWNrLg0K PiA+PiArICoNCj4gPj4gKyAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSBhbnkgdGhy ZWFkIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkDQo+ID4+ICsgKiBub24tRUFMIHRocmVhZHMpLCBi dXQgbm90IHdoaWxlIHRoZSBkaXNwYXRjaGVyIGlzIHJ1bm5pbmcgb24NCj4gPj4gKyAqIGFueSBz ZXJ2aWNlIGxjb3JlLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBpZA0KPiA+PiArICogIFRo ZSBkaXNwYXRjaGVyIGlkZW50aWZpZXIuDQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIHJlZ19p ZA0KPiA+PiArICogIFRoZSBmaW5hbGl6ZSByZWdpc3RyYXRpb24gaWQgcmV0dXJuZWQgYnkgdGhl IG9yaWdpbmFsDQo+ID4+ICsgKiAgcnRlX2Rpc3BhdGNoZXJfZmluYWxpemVfcmVnaXN0ZXIoKSBj YWxsLg0KPiA+PiArICoNCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4gKyAqICAtIDA6IFN1Y2Nlc3MN Cj4gPj4gKyAqICAtIC1FSU5WQUw6IFRoZSBAYyBpZCBhbmQvb3IgdGhlIEBjIHJlZ19pZCBwYXJh bWV0ZXIgd2FzIGludmFsaWQuDQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiA+PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9maW5hbGl6ZV91bnJlZ2lzdGVyKHVpbnQ4 X3QgaWQsIGludCByZWdfaWQpOw0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIFN0YXJ0IGEg ZGlzcGF0Y2hlciBpbnN0YW5jZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBFbmFibGVzIHRoZSBkaXNw YXRjaGVyIHNlcnZpY2UuDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIHVuZGVybHlpbmcgZXZlbnQg ZGV2aWNlIG11c3QgaGF2ZSBiZWVuIHN0YXJ0ZWQgcHJpb3IgdG8NCj4gPj4gK2NhbGxpbmcNCj4g Pj4gKyAqIHJ0ZV9kaXNwYXRjaGVyX3N0YXJ0KCkuDQo+ID4+ICsgKg0KPiA+PiArICogRm9yIHRo ZSBkaXNwYXRjaGVyIHRvIGFjdHVhbGx5IHBlcmZvcm0gd29yayAoaS5lLiwgZGlzcGF0Y2gNCj4g Pj4gKyAqIGV2ZW50cyksIGl0cyBzZXJ2aWNlIG11c3QgaGF2ZSBiZWVuIG1hcHBlZCB0byBvbmUg b3IgbW9yZSBzZXJ2aWNlDQo+ID4+ICsgKiBsY29yZXMsIGFuZCBpdHMgc2VydmljZSBydW4gc3Rh dGUgc2V0IHRvICcxJy4gQSBkaXNwYXRjaGVyJ3MNCj4gPj4gKyAqIHNlcnZpY2UgaXMgcmV0cmll dmVkIHVzaW5nIHJ0ZV9kaXNwYXRjaGVyX3NlcnZpY2VfaWRfZ2V0KCkuDQo+ID4+ICsgKg0KPiA+ PiArICogRWFjaCBzZXJ2aWNlIGxjb3JlIHRvIHdoaWNoIHRoZSBkaXNwYXRjaGVyIGlzIG1hcHBl ZCBzaG91bGQNCj4gPj4gKyAqIGhhdmUgYXQgbGVhc3Qgb25lIGV2ZW50IHBvcnQgY29uZmlndXJl ZC4gU3VjaCBjb25maWd1cmF0aW9uIGlzDQo+ID4+ICsgKiBwZXJmb3JtZWQgYnkgY2FsbGluZyBy dGVfZGlzcGF0Y2hlcl9iaW5kX3BvcnRfdG9fbGNvcmUoKSwgcHJpb3INCj4gPj4gK3RvDQo+ID4+ ICsgKiBzdGFydGluZyB0aGUgZGlzcGF0Y2hlci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0g aWQNCj4gPj4gKyAqICBUaGUgZGlzcGF0Y2hlciBpZGVudGlmaWVyLg0KPiA+PiArICoNCj4gPj4g KyAqIEByZXR1cm4NCj4gPj4gKyAqICAtIDA6IFN1Y2Nlc3MNCj4gPj4gKyAqICAtIC1FSU5WQUw6 IEludmFsaWQgQGMgaWQuDQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9zdGFydCh1aW50OF90IGlkKTsNCj4gPj4gKw0K PiA+PiArLyoqDQo+ID4+ICsgKiBTdG9wIGEgcnVubmluZyBkaXNwYXRjaGVyIGluc3RhbmNlLg0K PiA+PiArICoNCj4gPj4gKyAqIERpc2FibGVzIHRoZSBkaXNwYXRjaGVyIHNlcnZpY2UuDQo+ID4+ ICsgKg0KPiA+PiArICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRp Zmllci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKiAgLSAwOiBTdWNjZXNz DQo+ID4+ICsgKiAgLSAtRUlOVkFMOiBJbnZhbGlkIEBjIGlkLg0KPiA+PiArICovDQo+ID4+ICtf X3J0ZV9leHBlcmltZW50YWwNCj4gPj4gK2ludA0KPiA+PiArcnRlX2Rpc3BhdGNoZXJfc3RvcCh1 aW50OF90IGlkKTsNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBSZXRyaWV2ZSBzdGF0aXN0 aWNzIGZvciBhIGRpc3BhdGNoZXIgaW5zdGFuY2UuDQo+ID4+ICsgKg0KPiA+PiArICogVGhpcyBm dW5jdGlvbiBpcyBNVCBzYWZlIGFuZCBtYXkgYmUgY2FsbGVkIGJ5IGFueSB0aHJlYWQNCj4gPj4g KyAqIChpbmNsdWRpbmcgdW5yZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcykuDQo+ID4+ICsgKg0K PiA+PiArICogQHBhcmFtIGlkDQo+ID4+ICsgKiAgVGhlIGRpc3BhdGNoZXIgaWRlbnRpZmllci4N Cj4gPj4gKyAqIEBwYXJhbVtvdXRdIHN0YXRzDQo+ID4+ICsgKiAgIEEgcG9pbnRlciB0byBhIHN0 cnVjdHVyZSB0byBmaWxsIHdpdGggc3RhdGlzdGljcy4NCj4gPj4gKyAqIEByZXR1cm4NCj4gPj4g KyAqICAtIDA6IFN1Y2Nlc3MNCj4gPj4gKyAqICAtIC1FSU5WQUw6IFRoZSBAYyBpZCBwYXJhbWV0 ZXIgd2FzIGludmFsaWQuDQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ PiAraW50DQo+ID4+ICtydGVfZGlzcGF0Y2hlcl9zdGF0c19nZXQodWludDhfdCBpZCwNCj4gPj4g KwkJCSAgICAgICBzdHJ1Y3QgcnRlX2Rpc3BhdGNoZXJfc3RhdHMgKnN0YXRzKTsNCj4gPj4gKw0K PiA+PiArLyoqDQo+ID4+ICsgKiBSZXNldCBzdGF0aXN0aWNzIGZvciBhIGRpc3BhdGNoZXIgaW5z dGFuY2UuDQo+ID4+ICsgKg0KPiA+PiArICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJ5 IGFueSB0aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lzdGVyZWQNCj4gPj4gKyAqIG5vbi1FQUwgdGhy ZWFkcyksIGJ1dCBtYXkgbm90IHByb2R1Y2UgdGhlIGNvcnJlY3QgcmVzdWx0IGlmIHRoZQ0KPiA+ PiArICogZGlzcGF0Y2hlciBpcyBydW5uaW5nIG9uIGFueSBzZXJ2aWNlIGxjb3JlLg0KPiA+PiAr ICoNCj4gPj4gKyAqIEBwYXJhbSBpZA0KPiA+PiArICogIFRoZSBkaXNwYXRjaGVyIGlkZW50aWZp ZXIuDQo+ID4+ICsgKg0KPiA+PiArICogQHJldHVybg0KPiA+PiArICogIC0gMDogU3VjY2Vzcw0K PiA+PiArICogIC0gLUVJTlZBTDogVGhlIEBjIGlkIHBhcmFtZXRlciB3YXMgaW52YWxpZC4NCj4g Pj4gKyAqLw0KPiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9k aXNwYXRjaGVyX3N0YXRzX3Jlc2V0KHVpbnQ4X3QgaWQpOw0KPiA+PiArDQo+ID4+ICsjaWZkZWYg X19jcGx1c3BsdXMNCj4gPj4gK30NCj4gPj4gKyNlbmRpZg0KPiA+PiArDQo+ID4+ICsjZW5kaWYg LyogX19SVEVfRElTUEFUQ0hFUl9fICovDQo+ID4+IGRpZmYgLS1naXQgYS9saWIvZGlzcGF0Y2hl ci92ZXJzaW9uLm1hcCBiL2xpYi9kaXNwYXRjaGVyL3ZlcnNpb24ubWFwDQo+ID4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjhmOWFkOTY1MjINCj4gPj4gLS0tIC9kZXYv bnVsbA0KPiA+PiArKysgYi9saWIvZGlzcGF0Y2hlci92ZXJzaW9uLm1hcA0KPiA+PiBAQCAtMCww ICsxLDIwIEBADQo+ID4+ICtFWFBFUklNRU5UQUwgew0KPiA+PiArCWdsb2JhbDoNCj4gPj4gKw0K PiA+PiArCSMgYWRkZWQgaW4gMjMuMTENCj4gPj4gKwlydGVfZGlzcGF0Y2hlcl9jcmVhdGU7DQo+ ID4+ICsJcnRlX2Rpc3BhdGNoZXJfZnJlZTsNCj4gPj4gKwlydGVfZGlzcGF0Y2hlcl9zZXJ2aWNl X2lkX2dldDsNCj4gPj4gKwlydGVfZGlzcGF0Y2hlcl9iaW5kX3BvcnRfdG9fbGNvcmU7DQo+ID4+ ICsJcnRlX2Rpc3BhdGNoZXJfdW5iaW5kX3BvcnRfZnJvbV9sY29yZTsNCj4gPj4gKwlydGVfZGlz cGF0Y2hlcl9yZWdpc3RlcjsNCj4gPj4gKwlydGVfZGlzcGF0Y2hlcl91bnJlZ2lzdGVyOw0KPiA+ PiArCXJ0ZV9kaXNwYXRjaGVyX2ZpbmFsaXplX3JlZ2lzdGVyOw0KPiA+PiArCXJ0ZV9kaXNwYXRj aGVyX2ZpbmFsaXplX3VucmVnaXN0ZXI7DQo+ID4+ICsJcnRlX2Rpc3BhdGNoZXJfc3RhcnQ7DQo+ ID4+ICsJcnRlX2Rpc3BhdGNoZXJfc3RvcDsNCj4gPj4gKwlydGVfZGlzcGF0Y2hlcl9zdGF0c19n ZXQ7DQo+ID4+ICsJcnRlX2Rpc3BhdGNoZXJfc3RhdHNfcmVzZXQ7DQo+ID4+ICsNCj4gPj4gKwls b2NhbDogKjsNCj4gPj4gK307DQo+ID4+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9s aWIvbWVzb24uYnVpbGQgaW5kZXgNCj4gPj4gMDk5YjBlZDE4YS4uMzA5M2IzMzhkMiAxMDA2NDQN Cj4gPj4gLS0tIGEvbGliL21lc29uLmJ1aWxkDQo+ID4+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0K PiA+PiBAQCAtMzUsNiArMzUsNyBAQCBsaWJyYXJpZXMgPSBbDQo+ID4+ICAgICAgICAgICAnZGlz dHJpYnV0b3InLA0KPiA+PiAgICAgICAgICAgJ2VmZCcsDQo+ID4+ICAgICAgICAgICAnZXZlbnRk ZXYnLA0KPiA+PiArICAgICAgICAnZGlzcGF0Y2hlcicsICMgZGlzcGF0Y2hlciBkZXBlbmRzIG9u IGV2ZW50ZGV2DQo+ID4+ICAgICAgICAgICAnZ3B1ZGV2JywNCj4gPj4gICAgICAgICAgICdncm8n LA0KPiA+PiAgICAgICAgICAgJ2dzbycsDQo+ID4+IEBAIC04MSw2ICs4Miw3IEBAIG9wdGlvbmFs X2xpYnMgPSBbDQo+ID4+ICAgICAgICAgICAnY2ZnZmlsZScsDQo+ID4+ICAgICAgICAgICAnY29t cHJlc3NkZXYnLA0KPiA+PiAgICAgICAgICAgJ2NyeXB0b2RldicsDQo+ID4+ICsgICAgICAgICdk aXNwYXRjaGVyJywNCj4gPj4gICAgICAgICAgICdkaXN0cmlidXRvcicsDQo+ID4+ICAgICAgICAg ICAnZG1hZGV2JywNCj4gPj4gICAgICAgICAgICdlZmQnLA0KPiA+PiAtLQ0KPiA+PiAyLjM0LjEN Cj4gPg0K