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 EFE40C433EF for ; Mon, 3 Jan 2022 20:56:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229632AbiACU42 (ORCPT ); Mon, 3 Jan 2022 15:56:28 -0500 Received: from mail-mw2nam08on2094.outbound.protection.outlook.com ([40.107.101.94]:57280 "EHLO NAM04-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S229478AbiACU41 (ORCPT ); Mon, 3 Jan 2022 15:56:27 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MqMBD6QFlaOk+vw/2InFI42/wngdf0UzVswcQPCkyVUkYY5XXUczAlCR/6EuJC5zXa0xXGSt5BgGq+v62yMUWP0nLDXtaj6zMPmMHrco7CTHMM+USiUcVu65WfvJN81tQT1oR4UgD9a4K1NyztTd2UIhHJ8BLA/O2SC68mxojTZNf1K2JFyCcV+pUpQC3qCEvaxCMGGWKl7JE1kJOa20F6CC1ko3lbN+eVxDfIKD/zT87Vd/V3YQyBcoYk4HRimknMjv2NQcu0HBNI/JsnPnaK8NNUNahX3tLOtmEqVCNiFKHecG2eV+ZzNNzOXukE/Z7zxw59XFhMCYXY0aNOjO4Q== 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=2EgsTnqUgRh04sTWwpUDeNZ1bdjMa93qg+wwkqeLdR4=; b=Vx52m3cGUB6rJ7G11dkZjBrl0SJALFiwmXSP8Qx3uS735hRblo2Xn5LD5rhnBxliTTwrjxnivjA4LtUGgAj0DDezOEsJKZ2xI9uvUdrtdY4wm7KZBGgC3y1sogB0nWNKtygSV44fekot6ItzfA+PxKhylkwCRJhNArRjRwA7joaZaUE4p0ZEC2RTPO6cZDw24vI42Q87+zIJVOvgUS3SZTQ7Vn7Aw/mMVWroz2jFuzfBm6YX+DVk8lrNYdpU/EzFD6uj4/DJv12KU4lafQpWFxwy5jtuWnexvCmSUQX722VprvmM6x6kFVz4z7u9dvPnKOA0S4xCLTdOY2AVNWP7Dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2EgsTnqUgRh04sTWwpUDeNZ1bdjMa93qg+wwkqeLdR4=; b=DDxK0oSwYXFt7XkxwB1hvtREHuwtD1lcwkXc3vpS+mzTGII11eu+G+UchY4dywTtX+M/dwJKtNN3La5+HPxAquzFD38m35hUfAaTkcF6FelkwiApvyZqKhaULNV2PF6uFNQ2yAzOeDWRlteosCTbdarXGCEZxb6c7WazPBJSelU= Received: from CH0PR13MB5084.namprd13.prod.outlook.com (2603:10b6:610:111::7) by DM5PR13MB1385.namprd13.prod.outlook.com (2603:10b6:3:28::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.6; Mon, 3 Jan 2022 20:56:22 +0000 Received: from CH0PR13MB5084.namprd13.prod.outlook.com ([fe80::288c:e4f1:334a:a08]) by CH0PR13MB5084.namprd13.prod.outlook.com ([fe80::288c:e4f1:334a:a08%4]) with mapi id 15.20.4867.006; Mon, 3 Jan 2022 20:56:22 +0000 From: Trond Myklebust To: "bfields@fieldses.org" , "trondmy@kernel.org" CC: "linux-nfs@vger.kernel.org" , "anna.schumaker@netapp.com" Subject: Re: [PATCH 7/8] NFS: Support statx_get and statx_set ioctls Thread-Topic: [PATCH 7/8] NFS: Support statx_get and statx_set ioctls Thread-Index: AQHX84hgOTihDVFRr0ibMgfyDSFYfaxR4ImAgAABHQA= Date: Mon, 3 Jan 2022 20:56:22 +0000 Message-ID: <93a2dd1fac3f34c3e81d1ffe1f2ab781f68676c7.camel@hammerspace.com> References: <20211217204854.439578-1-trondmy@kernel.org> <20211217204854.439578-2-trondmy@kernel.org> <20211217204854.439578-3-trondmy@kernel.org> <20211217204854.439578-4-trondmy@kernel.org> <20211217204854.439578-5-trondmy@kernel.org> <20211217204854.439578-6-trondmy@kernel.org> <20211217204854.439578-7-trondmy@kernel.org> <20211217204854.439578-8-trondmy@kernel.org> <20220103205221.GJ21514@fieldses.org> In-Reply-To: <20220103205221.GJ21514@fieldses.org> Accept-Language: en-US, en-GB 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=hammerspace.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 021fa398-66a4-4922-5a86-08d9cefb7fb9 x-ms-traffictypediagnostic: DM5PR13MB1385:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4714; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gOzMPQVnR33/ghtVaZ/pyWnk1wbdfQ2pWr5BIsBAo1omiAyrNF6e9bAOS2NZMoDLsOFFBlRoTAgCPqmzEorp8R8+PzjhqOGBvZxMLjAvfKcwacjfrd8pkJNPdGSpOGIw6BdubNRq75ZCjBQAwCu5YaotZgefm8uIJy+S4YRTC3OFOg5FXnLIbsoMwViJscMWEj13I5ClSXLJPCbjBJX+jIs13BnI81PcuR3yrwwbRk9aFY/nUpWbP07NvxATwPrCLdmiE+P9bVh9gNmwYccPOFHi4W/Nqhh3G40bQJsBcW+gzR5IkXerHglBxrIkEI+YLVlUp62/PGlnkrffNjkN/r97zZSltqyIFbmAMjxcOtZAqC5gzVJhrfYPE+z+FhY8fqJDddut9kE7O9FHluk8RLlbnSUe7W7RXetaBPnWuKm1v/FIHW7xM+xcskw0t7g2zT9BZct70DQ26ajVizRhrts+7GXBy2/W7wNcnf2r5l8dBjLyhkYKuAs/Rg3ZEkqblRSAP1ySrfeUNhgmuaegGMQSYAClli8XRkCN5lhp4/Su6F93brgNCtwWR/GkjDTlnWorutj6L+6N4XNKLvT2JhFyTDGkPjWWDCCrMpReitpf2nn9GK5NeXh4slEc1vy3XjHmYDZNKxHtcmdxLVKrSMtkDweAnf0EFgT7kIBolZZ8FPp9dA9+Vl9W485hZkzVb5qzOvUIRMPtN6J+ySLmpA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR13MB5084.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(39830400003)(376002)(396003)(136003)(346002)(316002)(71200400001)(110136005)(26005)(38100700002)(508600001)(186003)(6506007)(6486002)(6512007)(76116006)(122000001)(54906003)(86362001)(2616005)(30864003)(38070700005)(83380400001)(2906002)(66476007)(5660300002)(8936002)(66446008)(64756008)(66946007)(66556008)(8676002)(36756003)(4326008)(559001)(579004)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Ykc1bUp5Mk92cDFaSUdCT09UZlJjbXEwRElRT0VMSjdMbkJIRHdlQmVlbDZi?= =?utf-8?B?RFNwRFpMdWJEQm1rS3MxcTREbGkwUkpWbktqZitLbkZUallsOFZsZ1dKUldx?= =?utf-8?B?S2tHYmFtbkRIWXNERkJ0R2JmWU5rdWRZQlRFRVVTTnJRR0pyMFZvandkYzBt?= =?utf-8?B?RGp3L0VncmIwZmVvWlJraFdSTmFEcnZXRXBhTnhmYWxPNkRpa3B1UnlyTnhL?= =?utf-8?B?d2NERk5IV3FlRHBBbjRmcXliYXdXVFZzWC81aEJqVlNxYWkzQ0ZPaVlzU1Vq?= =?utf-8?B?QlZ3Q1c3TGJBYmFSa1h3Mjlwa1VvQUZrT3B3QzdPWXgrb211QUxHMlg2dk1l?= =?utf-8?B?aGx3UExUKzNPUDNJaVRmSHl6VjVtaU8rNkM5MGRkNDJNMzJvcy9mVmw1Zit4?= =?utf-8?B?bGZGaStsMG5BTTZncUJSMUY3WmVsWE5qSUR0NEJwTE41QktzUEZlN3MrQk1G?= =?utf-8?B?WHo3dEdlQmhqZDNTSzN1STRJUVhGUm92VDV1amdGdDR0UngvSnc0K2hLa0ln?= =?utf-8?B?QXoyRDd6MkVYVEZkWjdac2hRWUJDbVluUHN3RENMTkR6aEdzZXJQbEw0NUh5?= =?utf-8?B?WFI0bDRJb3k0Qjh3Q3crdmJYa1Z4UW1PN1pYNmR0ZkE2TjlvRVozSXA3bStP?= =?utf-8?B?Q2lWWWtGaWp2eExkTFRoZ0pOLzI2azgyVkRmY3ZuVlRtK3RPclR6aisxWUd0?= =?utf-8?B?UXM3TTNyOEF6M3h6WjJlQ0dvRFlHRWUyTmpqSUdGV2x4RDVValkrdTdzUXNX?= =?utf-8?B?K24wMVIyeStzMFBWRUp1ODF5NUhrTnA4M2g3WDVIaENUZnlHcEhKMFZwNTlV?= =?utf-8?B?dm9Xc0hORTVCbUlNVDZVS0xxcFNPZmdnZHdMWE5PdlBDZUQ3eHJPYVFGSzZE?= =?utf-8?B?bzVQM0ZCR2dUV0J0VGh6ZlBZZzV4N1A4dURSZ1RCUzRCdWJ2eXlCZTJKMktH?= =?utf-8?B?cTNySXBiNjFIaFZUN2lMdFc5N0RJaUloRDV0YTlMQ0NEZ1I1QzF4ZDZGbHV3?= =?utf-8?B?WHZhZFR5cElkQXZGajlhbzVwbHh0bnlIQ2tGZTBURy9mTkJQcEtnN2htYjIv?= =?utf-8?B?ekFHNWxLcFVHWWorQWIrQjBLLzFJVlR4em9IUTdWRnhFbVRPbzcxdXYxRnhO?= =?utf-8?B?WkRERzd0RjZFRURXVFk4VHhCRzNGZ0xLVlFFYzkwc3d0a2owcUZ1aGtFSWRy?= =?utf-8?B?MW9CSS9qaGc1VmlTNDBPaE5CSnVaOEdNclY0WlpXWlJoWE5kTUpqVFZVRXVr?= =?utf-8?B?K3dvL1pDM01iNXlmcHVid3ZxaW83WWFCbzNNaW9yZlI4WmQxcnlmMmZBOXRy?= =?utf-8?B?OTd1b1RVZ2s1MzZmWERKQ3poSXVFSUhsU2I5K3kzQm1PN0pwUXVjSjlCbi9R?= =?utf-8?B?T3RielRwNTR1Tkk2OURXZWhhcnN4aVlXa2NoSVJ0Qm01VGh3Zk1YKzN2KzA1?= =?utf-8?B?MDZ4L0swaEI4MUVTb2g0MHFROHUrUFpFajZpOE0xQjAydUd2UXJMQWRIaXlv?= =?utf-8?B?MlNTZGpkYXBrOUFGbFVXaWVqaWJzSlNtckx6RzRzWGNxQWVwMEt1NzAxa0lP?= =?utf-8?B?U3dtbWx0cGU0N1BHRmY4M3JMVFVDSnJObTVvTjBkNUxPWGNVOExaMVdQUlNi?= =?utf-8?B?alp4OC9Dd0J4ZHp0YmxncHhSS3lRRGxRcTZjSjA5WGt3bkhhYU0zNHVEbkNU?= =?utf-8?B?NmFUb2hhSmJBK0tvd2VoazljQUZJTXRIUDlTYUo0SGo5SFI3WUV4U3BPY1Zu?= =?utf-8?B?OFNRR0E3WlQwUXRmaW5ibVJhSnIwa29VUlc4TTNlMTJ2VElYK2Y3Y21rWXRv?= =?utf-8?B?Y1VxbUthSHFNeVk1eWpTYmxaT1ArN29GdUFqV28wb2dEek0xcTRFZ2JVcnpF?= =?utf-8?B?SGJ3SXJFMzlna3RlS0dRdFV0NG5UeGF6Wm13dGVmeDhrclZIVkxqWUUvNHFX?= =?utf-8?B?NmtvMStJUGt4OU1Cck5WOWVLWVYyWjgrb3p4blhmcUl0aE85NHRyUGhJZGxl?= =?utf-8?B?SU9pRHowdFdHTDVsRzR5UDFKNnVmUndpOXRiakVZQTN6MDZtZWJEQ1VMVDJs?= =?utf-8?B?Yk1zd2xMYi9udloycEJtNFpFVmZ0cmsrMmt5T3lxam5kZ2dPNTBoamJaWTJ6?= =?utf-8?B?enRENTZkN2RzQUJ6SHpKdEhyYktJajdaR3pEMjRtY3pKS3NhY29naHlUWGRt?= =?utf-8?Q?bzv1POM7uyoOKm0NjXFe8Yk=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <2CC01B16D143F14183067730A20FDAB5@namprd13.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH0PR13MB5084.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 021fa398-66a4-4922-5a86-08d9cefb7fb9 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jan 2022 20:56:22.2920 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ofx7L2hi88+ErOQfnXQakpm7naHhx/3GIgVKQZs6OMEnYbhvm+5utJeBq1dFrqIdRomSTsGWi/Z5htDO+GBwFQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR13MB1385 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gTW9uLCAyMDIyLTAxLTAzIGF0IDE1OjUyIC0wNTAwLCBKLiBCcnVjZSBGaWVsZHMgd3JvdGU6 Cj4gT24gRnJpLCBEZWMgMTcsIDIwMjEgYXQgMDM6NDg6NTNQTSAtMDUwMCwgdHJvbmRteUBrZXJu ZWwub3JnwqB3cm90ZToKPiA+IEZyb206IFJpY2hhcmQgU2hhcnBlIDxyaWNoYXJkLnNoYXJwZUBw cmltYXJ5ZGF0YS5jb20+Cj4gPiAKPiA+IEFkZCBzdXBwb3J0IGZvciByZXR1cm5pbmcgYWxsIG9m IHRoZSBXaW5kb3dzIGF0dHJpYnV0ZXMgd2l0aCBhCj4gPiBzdGF0eAo+ID4gaW9jdGwuCj4gCj4g SSBzdXBwb3NlIEknbSBqdXN0IHdvb2RzaGVkZGluZywgYnV0ICJzdGF0eCBpb2N0bCIgaXMgYSBs aXR0bGUKPiBjb25mdXNpbmctLWl0IGRvZXNuJ3QgaGF2ZSBhbnkgYWN0dWFsIGNvbm5lY3Rpb24g d2l0aCB0aGUgc3RhdHgKPiBzeXN0ZW0gY2FsbCwgcmlnaHQ/Cj4gCj4gQnV0LCB3aHkgbm90IGFk ZCB0aGlzIHRvIHN0YXR4PwoKV2UgY291bGQgZGVmaW5pdGVseSBhZGQgdGhlIGF0dHJpYnV0ZSBy ZXRyaWV2YWwgdG8gdGhlIHN0YXR4KCkgc3lzdGVtCmNhbGwuIEkgYmVsaWV2ZSB0aGF0IFN0ZXZl IEZyZW5jaCBkaWQgc3VnZ2VzdCB0aGF0IGF0IG9uZSBwb2ludC4gVGhlcmUKd2FzIHB1c2ggYmFj ayBiZWNhdXNlIHRoZSBudW1iZXIgb2YgYXBwbGljYXRpb25zIHRoYXQgY2FyZSBpcyBsaW1pdGVk LgpQZXJoYXBzIHRoZXJlIG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3Qgbm93IHRoYXQgd2UgaGF2ZSBt b3JlIGV4dGVuc2l2ZQpzdXBwb3J0IGZvciBOVEZTIGluIHRoZSBrZXJuZWwuCgpIb3dldmVyIHRo ZXJlIGlzIG5vIHN0YXR4KCkgY2FsbCB0byBhY3R1YWxseSBfc2V0XyB0aGVzZSBhdHRyaWJ1dGVz LAphbmQgdGhhdCBpcyBhIHJlYXNvbiB0byBzdGljayB3aXRoIHRoZSBpb2N0bCgpIGFwcHJvYWNo IGZvciBub3cuCgoKPiAKPiAtLWIuCj4gCj4gPiBBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyBhbGwg b2YgdGhlIFdpbmRvd3MgYXR0cmlidXRlcyB1c2luZyBhbgo+ID4gaW9jdGwuCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IFJpY2hhcmQgU2hhcnBlIDxyaWNoYXJkLnNoYXJwZUBwcmltYXJ5ZGF0YS5j b20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBMYW5jZSBTaGVsdG9uIDxsYW5jZS5zaGVsdG9uQGhhbW1l cnNwYWNlLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFRyb25kIE15a2xlYnVzdCA8dHJvbmQubXlr bGVidXN0QGhhbW1lcnNwYWNlLmNvbT4KPiA+IC0tLQo+ID4gwqBmcy9uZnMvZGlyLmPCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI0ICstCj4gPiDCoGZzL25mcy9nZXRyb290LmPCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDMgKy0KPiA+IMKgZnMvbmZzL2lub2RlLmPCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgNDEgKysrLQo+ID4gwqBmcy9uZnMvaW50ZXJuYWwuaMKgwqDCoMKgwqDCoMKgIHzC oMKgIDggKwo+ID4gwqBmcy9uZnMvbmZzM3Byb2MuY8KgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ ID4gwqBmcy9uZnMvbmZzNF9mcy5owqDCoMKgwqDCoMKgwqDCoCB8wqAgMzEgKysrCj4gPiDCoGZz L25mcy9uZnM0ZmlsZS5jwqDCoMKgwqDCoMKgwqAgfCA1MTEKPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ID4gwqBmcy9uZnMvbmZzNHByb2MuY8KgwqDCoMKgwqDC oMKgIHwgMTI0ICsrKysrKysrKysKPiA+IMKgZnMvbmZzL25mczR4ZHIuY8KgwqDCoMKgwqDCoMKg wqAgfMKgIDYzICsrKystCj4gPiDCoGZzL25mcy9uZnN0cmFjZS5jwqDCoMKgwqDCoMKgwqAgfMKg wqAgNSArCj4gPiDCoGZzL25mcy9uZnN0cmFjZS5owqDCoMKgwqDCoMKgwqAgfMKgwqAgNSArCj4g PiDCoGZzL25mcy9wcm9jLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gwqBp bmNsdWRlL2xpbnV4L25mc19mcy5owqDCoCB8wqDCoCAxICsKPiA+IMKgaW5jbHVkZS9saW51eC9u ZnNfeGRyLmjCoCB8wqDCoCAzICsKPiA+IMKgaW5jbHVkZS91YXBpL2xpbnV4L25mcy5oIHzCoCA5 MCArKysrKysrCj4gPiDCoDE1IGZpbGVzIGNoYW5nZWQsIDg4NyBpbnNlcnRpb25zKCspLCAyNCBk ZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9k aXIuYwo+ID4gaW5kZXggNzMxZDMxMDE1YjZhLi5mNmZjNjA4MjIxNTMgMTAwNjQ0Cj4gPiAtLS0g YS9mcy9uZnMvZGlyLmMKPiA+ICsrKyBiL2ZzL25mcy9kaXIuYwo+ID4gQEAgLTQ4LDExICs0OCw2 IEBACj4gPiDCoAo+ID4gwqAvKiAjZGVmaW5lIE5GU19ERUJVR19WRVJCT1NFIDEgKi8KPiA+IMKg Cj4gPiAtc3RhdGljIGludCBuZnNfb3BlbmRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUg Kik7Cj4gPiAtc3RhdGljIGludCBuZnNfY2xvc2VkaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBm aWxlICopOwo+ID4gLXN0YXRpYyBpbnQgbmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgc3RydWN0 IGRpcl9jb250ZXh0ICopOwo+ID4gLXN0YXRpYyBpbnQgbmZzX2ZzeW5jX2RpcihzdHJ1Y3QgZmls ZSAqLCBsb2ZmX3QsIGxvZmZfdCwgaW50KTsKPiA+IC1zdGF0aWMgbG9mZl90IG5mc19sbHNlZWtf ZGlyKHN0cnVjdCBmaWxlICosIGxvZmZfdCwgaW50KTsKPiA+IMKgc3RhdGljIHZvaWQgbmZzX3Jl YWRkaXJfY2xlYXJfYXJyYXkoc3RydWN0IHBhZ2UqKTsKPiA+IMKgCj4gPiDCoGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgbmZzX2Rpcl9vcGVyYXRpb25zID0gewo+ID4gQEAgLTYzLDYgKzU4 LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZGlyX29wZXJhdGlvbnMgPQo+ ID4gewo+ID4gwqDCoMKgwqDCoMKgwqDCoC5yZWxlYXNlwqDCoMKgwqDCoMKgwqDCoD0gbmZzX2Ns b3NlZGlyLAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5mc3luY8KgwqDCoMKgwqDCoMKgwqDCoMKgPSBu ZnNfZnN5bmNfZGlyLAo+ID4gwqB9Owo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKG5mc19kaXJfb3Bl cmF0aW9ucyk7Cj4gPiDCoAo+ID4gwqBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRp b25zIG5mc19kaXJfYW9wcyA9IHsKPiA+IMKgwqDCoMKgwqDCoMKgwqAuZnJlZXBhZ2UgPSBuZnNf cmVhZGRpcl9jbGVhcl9hcnJheSwKPiA+IEBAIC0xMDQsOCArMTAwLDcgQEAgc3RhdGljIHZvaWQg cHV0X25mc19vcGVuX2Rpcl9jb250ZXh0KHN0cnVjdAo+ID4gaW5vZGUgKmRpciwgc3RydWN0IG5m c19vcGVuX2Rpcl9jb250Cj4gPiDCoC8qCj4gPiDCoCAqIE9wZW4gZmlsZQo+ID4gwqAgKi8KPiA+ IC1zdGF0aWMgaW50Cj4gPiAtbmZzX29wZW5kaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbHApCj4gPiAraW50IG5mc19vcGVuZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxwKQo+ID4gwqB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHJlcyA9IDA7 Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19vcGVuX2Rpcl9jb250ZXh0ICpjdHg7Cj4g PiBAQCAtMTIzLDEzICsxMTgsMTQgQEAgbmZzX29wZW5kaXIoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0IGZpbGUKPiA+ICpmaWxwKQo+ID4gwqBvdXQ6Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJlczsKPiA+IMKgfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKG5mc19vcGVuZGlyKTsKPiA+ IMKgCj4gPiAtc3RhdGljIGludAo+ID4gLW5mc19jbG9zZWRpcihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZSAqZmlscCkKPiA+ICtpbnQgbmZzX2Nsb3NlZGlyKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQo+ID4gwqB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcHV0 X25mc19vcGVuX2Rpcl9jb250ZXh0KGZpbGVfaW5vZGUoZmlscCksIGZpbHAtCj4gPiA+cHJpdmF0 ZV9kYXRhKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+IMKgfQo+ID4gK0VYUE9S VF9TWU1CT0xfR1BMKG5mc19jbG9zZWRpcik7Cj4gPiDCoAo+ID4gwqBzdHJ1Y3QgbmZzX2NhY2hl X2FycmF5X2VudHJ5IHsKPiA+IMKgwqDCoMKgwqDCoMKgwqB1NjQgY29va2llOwo+ID4gQEAgLTEw NjQsNyArMTA2MCw3IEBAIHN0YXRpYyBpbnQgdW5jYWNoZWRfcmVhZGRpcihzdHJ1Y3QKPiA+IG5m c19yZWFkZGlyX2Rlc2NyaXB0b3IgKmRlc2MpCj4gPiDCoMKgwqAgbGFzdCBjb29raWUgY2FjaGUg dGFrZXMgY2FyZSBvZiB0aGUgY29tbW9uIGNhc2Ugb2YgcmVhZGluZyB0aGUKPiA+IMKgwqDCoCB3 aG9sZSBkaXJlY3RvcnkuCj4gPiDCoCAqLwo+ID4gLXN0YXRpYyBpbnQgbmZzX3JlYWRkaXIoc3Ry dWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KQo+ID4gK2ludCBuZnNfcmVh ZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpCj4gPiDCoHsK PiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGVudHJ5wqDCoMKgKmRlbnRyeSA9IGZpbGVfZGVu dHJ5KGZpbGUpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbm9kZcKgwqDCoMKgKmlub2Rl ID0gZF9pbm9kZShkZW50cnkpOwo+ID4gQEAgLTExNTcsOCArMTE1Myw5IEBAIHN0YXRpYyBpbnQg bmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsCj4gPiBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0 eCkKPiA+IMKgwqDCoMKgwqDCoMKgwqBkZnByaW50ayhGSUxFLCAiTkZTOiByZWFkZGlyKCVwRDIp IHJldHVybnMgJWRcbiIsIGZpbGUsCj4gPiByZXMpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXM7Cj4gPiDCoH0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChuZnNfcmVhZGRpcik7Cj4gPiDC oAo+ID4gLXN0YXRpYyBsb2ZmX3QgbmZzX2xsc2Vla19kaXIoc3RydWN0IGZpbGUgKmZpbHAsIGxv ZmZfdCBvZmZzZXQsIGludAo+ID4gd2hlbmNlKQo+ID4gK2xvZmZfdCBuZnNfbGxzZWVrX2Rpcihz dHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwgaW50Cj4gPiB3aGVuY2UpCj4gPiDCoHsK PiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzX29wZW5fZGlyX2NvbnRleHQgKmRpcl9jdHgg PSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4gPiDCoAo+ID4gQEAgLTExOTYsMTkgKzExOTMsMjAgQEAg c3RhdGljIGxvZmZfdCBuZnNfbGxzZWVrX2RpcihzdHJ1Y3QgZmlsZQo+ID4gKmZpbHAsIGxvZmZf dCBvZmZzZXQsIGludCB3aGVuY2UpCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2soJmZp bHAtPmZfbG9jayk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG9mZnNldDsKPiA+IMKgfQo+ ID4gK0VYUE9SVF9TWU1CT0xfR1BMKG5mc19sbHNlZWtfZGlyKTsKPiA+IMKgCj4gPiDCoC8qCj4g PiDCoCAqIEFsbCBkaXJlY3Rvcnkgb3BlcmF0aW9ucyB1bmRlciBORlMgYXJlIHN5bmNocm9ub3Vz LCBzbyBmc3luYygpCj4gPiDCoCAqIGlzIGEgZHVtbXkgb3BlcmF0aW9uLgo+ID4gwqAgKi8KPiA+ IC1zdGF0aWMgaW50IG5mc19mc3luY19kaXIoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFy dCwgbG9mZl90Cj4gPiBlbmQsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpbnQgZGF0YXN5bmMpCj4gPiAraW50IG5mc19mc3luY19kaXIoc3RydWN0 IGZpbGUgKmZpbHAsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwgaW50Cj4gPiBkYXRhc3luYykK PiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoGRmcHJpbnRrKEZJTEUsICJORlM6IGZzeW5jIGRp ciglcEQyKSBkYXRhc3luYyAlZFxuIiwgZmlscCwKPiA+IGRhdGFzeW5jKTsKPiA+IMKgCj4gPiDC oMKgwqDCoMKgwqDCoMKgbmZzX2luY19zdGF0cyhmaWxlX2lub2RlKGZpbHApLCBORlNJT1NfVkZT RlNZTkMpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gwqB9Cj4gPiArRVhQT1JU X1NZTUJPTF9HUEwobmZzX2ZzeW5jX2Rpcik7Cj4gPiDCoAo+ID4gwqAvKioKPiA+IMKgICogbmZz X2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlIC0gTWFyayB0aGUgZGlyZWN0b3J5IGFzIGhhdmluZwo+ ID4gY2hhbmdlZAo+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9nZXRyb290LmMgYi9mcy9uZnMvZ2V0 cm9vdC5jCj4gPiBpbmRleCAxMWZmMmIyZTA2MGYuLmY4NzI5NzBkNjI0MCAxMDA2NDQKPiA+IC0t LSBhL2ZzL25mcy9nZXRyb290LmMKPiA+ICsrKyBiL2ZzL25mcy9nZXRyb290LmMKPiA+IEBAIC0x MjcsNyArMTI3LDggQEAgaW50IG5mc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0 cnVjdAo+ID4gZnNfY29udGV4dCAqZmMpCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHNlcnZlci0+ Y2FwcyAmIE5GU19DQVBfU0VDVVJJVFlfTEFCRUwpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGtmbGFncyB8PSBTRUNVUklUWV9MU01fTkFUSVZFX0xBQkVMUzsKPiA+IMKgwqDC oMKgwqDCoMKgwqBpZiAoY3R4LT5jbG9uZV9kYXRhLnNiKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGRfaW5vZGUoZmMtPnJvb3QpLT5pX2ZvcCAhPQo+ID4gJm5mc19k aXJfb3BlcmF0aW9ucykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChk X2lub2RlKGZjLT5yb290KS0+aV9mb3AgIT0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2VydmVyLT5uZnNfY2xpZW50LT5ycGNfb3BzLT5kaXJfb3BzKSB7Cj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcnJvciA9IC1F U1RBTEU7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIGVycm9yX3NwbGF0X3Jvb3Q7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiA+IGRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCj4g PiBpbmRleCAzM2Y0NDEwMTkwYjYuLjhkYTY2MmE0OTUzZCAxMDA2NDQKPiA+IC0tLSBhL2ZzL25m cy9pbm9kZS5jCj4gPiArKysgYi9mcy9uZnMvaW5vZGUuYwo+ID4gQEAgLTEwOCw2ICsxMDgsNyBA QCB1NjQgbmZzX2NvbXBhdF91c2VyX2lubzY0KHU2NCBmaWxlaWQpCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlubyBePSBmaWxlaWQgPj4gKHNpemVvZihmaWxlaWQpLXNpemVv Zihpbm8pKSAqIDg7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGlubzsKPiA+IMKgfQo+ID4g K0VYUE9SVF9TWU1CT0xfR1BMKG5mc19jb21wYXRfdXNlcl9pbm82NCk7Cj4gPiDCoAo+ID4gwqBp bnQgbmZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKPiA+IMKgewo+ID4gQEAgLTUw MSw3ICs1MDIsNyBAQCBuZnNfZmhnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5m c19maAo+ID4gKmZoLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5mc19pbm9kZV9pbml0X3JlZ3VsYXIo bmZzaSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoU19J U0RJUihpbm9kZS0+aV9tb2RlKSkgewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW5vZGUtPmlfb3AgPSBORlNfU0Ioc2IpLT5uZnNfY2xpZW50LQo+ ID4gPnJwY19vcHMtPmRpcl9pbm9kZV9vcHM7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlub2RlLT5pX2ZvcCA9ICZuZnNfZGlyX29wZXJhdGlvbnM7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlub2Rl LT5pX2ZvcCA9IE5GU19TQihzYiktPm5mc19jbGllbnQtCj4gPiA+cnBjX29wcy0+ZGlyX29wczsK PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlub2Rl LT5pX2RhdGEuYV9vcHMgPSAmbmZzX2Rpcl9hb3BzOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZzX2lub2RlX2luaXRfZGlyKG5mc2kpOwo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRGVhbCB3 aXRoIGNyb3NzaW5nIG1vdW50cG9pbnRzICovCj4gPiBAQCAtODY3LDYgKzg2OCw0NCBAQCBzdGF0 aWMgdTMyIG5mc19nZXRfdmFsaWRfYXR0cm1hc2soc3RydWN0IGlub2RlCj4gPiAqaW5vZGUpCj4g PiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJlcGx5X21hc2s7Cj4gPiDCoH0KPiA+IMKgCj4gPiAr c3RhdGljIGludCBuZnNfZ2V0YXR0cl9yZXZhbGlkYXRlX2ZvcmNlKHN0cnVjdCBkZW50cnkgKmRl bnRyeSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9p bm9kZShkZW50cnkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZl ciA9IE5GU19TRVJWRVIoaW5vZGUpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCEoc2Vy dmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT0FDKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBuZnNfcmVhZGRpcnBsdXNfcGFyZW50X2NhY2hlX21pc3MoZGVudHJ5KTsKPiA+ICvC oMKgwqDCoMKgwqDCoGVsc2UKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZnNf cmVhZGRpcnBsdXNfcGFyZW50X2NhY2hlX2hpdChkZW50cnkpOwo+ID4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIF9fbmZzX3JldmFsaWRhdGVfaW5vZGUoc2VydmVyLCBpbm9kZSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbmZzX2dldGF0dHJfcmV2YWxpZGF0ZV9ub25lKHN0cnVjdCBkZW50 cnkgKmRlbnRyeSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBuZnNfcmVhZGRpcnBsdXNfcGFy ZW50X2NhY2hlX2hpdChkZW50cnkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIE5GU19TVEFM RShkX2lub2RlKGRlbnRyeSkpID8gLUVTVEFMRSA6IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgbmZzX2dldGF0dHJfcmV2YWxpZGF0ZV9tYXliZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnks Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBmbGFncykKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqBpZiAobmZzX2NoZWNrX2NhY2hlX2ludmFsaWQoZF9pbm9kZShkZW50 cnkpLCBmbGFncykpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG5m c19nZXRhdHRyX3JldmFsaWRhdGVfZm9yY2UoZGVudHJ5KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBuZnNfZ2V0YXR0cl9yZXZhbGlkYXRlX25vbmUoZGVudHJ5KTsKPiA+ICt9Cj4gPiArCj4g PiAraW50IG5mc19nZXRhdHRyX3JldmFsaWRhdGUoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgbG9uZyBmbGFncywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHF1ZXJ5X2ZsYWdzICYgQVRfU1RBVFhfRk9SQ0VfU1lOQykKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbmZzX2dldGF0dHJfcmV2YWxpZGF0 ZV9mb3JjZShwYXRoLT5kZW50cnkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCEocXVlcnlfZmxh Z3MgJiBBVF9TVEFUWF9ET05UX1NZTkMpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBuZnNfZ2V0YXR0cl9yZXZhbGlkYXRlX21heWJlKHBhdGgtPmRlbnRyeSwKPiA+ IGZsYWdzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBuZnNfZ2V0YXR0cl9yZXZhbGlkYXRl X25vbmUocGF0aC0+ZGVudHJ5KTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwobmZzX2dl dGF0dHJfcmV2YWxpZGF0ZSk7Cj4gPiArCj4gPiDCoGludCBuZnNfZ2V0YXR0cihzdHJ1Y3QgdXNl cl9uYW1lc3BhY2UgKm1udF91c2VybnMsIGNvbnN0IHN0cnVjdAo+ID4gcGF0aCAqcGF0aCwKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIg cmVxdWVzdF9tYXNrLCB1bnNpZ25lZCBpbnQKPiA+IHF1ZXJ5X2ZsYWdzKQo+ID4gwqB7Cj4gPiBk aWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAo+ID4gaW5k ZXggMTJmNmFjYjQ4M2JiLi45NjAyYTg4NmYwZjAgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9uZnMvaW50 ZXJuYWwuaAo+ID4gKysrIGIvZnMvbmZzL2ludGVybmFsLmgKPiA+IEBAIC0zNjYsNiArMzY2LDEy IEBAIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudAo+ID4gKm5mc19pbml0X2NsaWVudChzdHJ1Y3Qg bmZzX2NsaWVudCAqY2xwLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgbmZzX2NsaWVudF9pbml0ZGF0YSAqKTsKPiA+ IMKgCj4gPiDCoC8qIGRpci5jICovCj4gPiAraW50IG5mc19vcGVuZGlyKHN0cnVjdCBpbm9kZSAq LCBzdHJ1Y3QgZmlsZSAqKTsKPiA+ICtpbnQgbmZzX2Nsb3NlZGlyKHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZmlsZSAqKTsKPiA+ICtpbnQgbmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0 cnVjdCBkaXJfY29udGV4dCAqY3R4KTsKPiA+ICtpbnQgbmZzX2ZzeW5jX2RpcihzdHJ1Y3QgZmls ZSAqLCBsb2ZmX3QsIGxvZmZfdCwgaW50KTsKPiA+ICtsb2ZmX3QgbmZzX2xsc2Vla19kaXIoc3Ry dWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmZzZXQsIGludAo+ID4gd2hlbmNlKTsKPiA+ICsKPiA+ IMKgZXh0ZXJuIHZvaWQgbmZzX2FkdmlzZV91c2VfcmVhZGRpcnBsdXMoc3RydWN0IGlub2RlICpk aXIpOwo+ID4gwqBleHRlcm4gdm9pZCBuZnNfZm9yY2VfdXNlX3JlYWRkaXJwbHVzKHN0cnVjdCBp bm9kZSAqZGlyKTsKPiA+IMKgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmZzX2FjY2Vzc19jYWNoZV9j b3VudChzdHJ1Y3Qgc2hyaW5rZXIKPiA+ICpzaHJpbmssCj4gPiBAQCAtNDExLDYgKzQxNyw4IEBA IGV4dGVybiB2b2lkIG5mc19zZXRfY2FjaGVfaW52YWxpZChzdHJ1Y3QgaW5vZGUKPiA+ICppbm9k ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7Cj4gPiDCoGV4dGVybiBib29sIG5mc19jaGVja19jYWNo ZV9pbnZhbGlkKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZAo+ID4gbG9uZyk7Cj4gPiDCoGV4dGVy biBpbnQgbmZzX3dhaXRfYml0X2tpbGxhYmxlKHN0cnVjdCB3YWl0X2JpdF9rZXkgKmtleSwgaW50 Cj4gPiBtb2RlKTsKPiA+IMKgZXh0ZXJuIGludCBuZnNfd2FpdF9hdG9taWNfa2lsbGFibGUoYXRv bWljX3QgKnAsIHVuc2lnbmVkIGludAo+ID4gbW9kZSk7Cj4gPiArZXh0ZXJuIGludCBuZnNfZ2V0 YXR0cl9yZXZhbGlkYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAo+ID4gdW5zaWduZWQgbG9u ZyBmbGFncywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7Cj4gPiDCoAo+ ID4gwqAvKiBzdXBlci5jICovCj4gPiDCoGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0 aW9ucyBuZnNfc29wczsKPiA+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3Byb2MuYyBiL2ZzL25m cy9uZnMzcHJvYy5jCj4gPiBpbmRleCA3MTAwNTE0ZDMwNmIuLjA5MTAwNWUxNjliNyAxMDA2NDQK PiA+IC0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCj4gPiArKysgYi9mcy9uZnMvbmZzM3Byb2MuYwo+ ID4gQEAgLTEwMTgsNiArMTAxOCw3IEBAIGNvbnN0IHN0cnVjdCBuZnNfcnBjX29wcyBuZnNfdjNf Y2xpZW50b3BzID0gewo+ID4gwqDCoMKgwqDCoMKgwqDCoC5kaXJfaW5vZGVfb3BzwqDCoD0gJm5m czNfZGlyX2lub2RlX29wZXJhdGlvbnMsCj4gPiDCoMKgwqDCoMKgwqDCoMKgLmZpbGVfaW5vZGVf b3BzwqA9ICZuZnMzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucywKPiA+IMKgwqDCoMKgwqDCoMKgwqAu ZmlsZV9vcHPCoMKgwqDCoMKgwqDCoD0gJm5mc19maWxlX29wZXJhdGlvbnMsCj4gPiArwqDCoMKg wqDCoMKgwqAuZGlyX29wc8KgwqDCoMKgwqDCoMKgwqA9ICZuZnNfZGlyX29wZXJhdGlvbnMsCj4g PiDCoMKgwqDCoMKgwqDCoMKgLm5sbWNsbnRfb3BzwqDCoMKgwqA9ICZubG1jbG50X2ZsX2Nsb3Nl X2xvY2tfb3BzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5nZXRyb290wqDCoMKgwqDCoMKgwqDCoD0g bmZzM19wcm9jX2dldF9yb290LAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5zdWJtb3VudMKgwqDCoMKg wqDCoMKgPSBuZnNfc3VibW91bnQsCj4gPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBi L2ZzL25mcy9uZnM0X2ZzLmgKPiA+IGluZGV4IGVkNWVhY2E2ODAxZS4uOWYyMWQ4NTIwZTk5IDEw MDY0NAo+ID4gLS0tIGEvZnMvbmZzL25mczRfZnMuaAo+ID4gKysrIGIvZnMvbmZzL25mczRfZnMu aAo+ID4gQEAgLTI0OCw2ICsyNDgsMzQgQEAgc3RydWN0IG5mczRfb3BlbmRhdGEgewo+ID4gwqDC oMKgwqDCoMKgwqDCoGludCBycGNfc3RhdHVzOwo+ID4gwqB9Owo+ID4gwqAKPiA+ICtzdHJ1Y3Qg bmZzNF9zdGF0eCB7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJlYWxfZmQ7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiByZWFsIEZEIHRv IHVzZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtMSBt ZWFucyB1c2UKPiA+IGN1cnJlbnQgZmlsZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZmFfb3B0aW9uczvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IHN0YXR4IGZsYWdzICovCj4gPiArwqDCoMKgwqDCoMKgwqBfX3U2NMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBmYV9yZXF1ZXN0WzJdO8KgwqDCoMKgwqDCoMKgwqDCoMKgLyogQXR0cmlidXRlcwo+ID4g cmVxdWVzdGVkICovCj4gPiArwqDCoMKgwqDCoMKgwqBfX3U2NMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmYV92YWxpZFsyXTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBBdHRyaWJ1dGVzIHNldAo+ ID4gKi8KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB0aW1lc3BlYzY0IGZhX3RpbWVf YmFja3VwO8KgwqDCoMKgwqDCoMKgLyogQmFja3VwIHRpbWUgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCB0aW1lc3BlYzY0IGZhX2J0aW1lO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyog QmlydGggdGltZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogRmxhZyBhdHRyaWJ1dGVzICovCj4g PiArwqDCoMKgwqDCoMKgwqBfX3U2NCBmYV9mbGFnczsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCB0aW1lc3BlYzY0IGZhX2F0aW1lO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQWNjZXNz IHRpbWUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB0aW1lc3BlYzY0IGZhX210aW1lO8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogTW9kaWZ5IHRpbWUgKi8KPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCB0aW1lc3BlYzY0IGZhX2N0aW1lO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogQ2hhbmdlIHRpbWUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGt1aWRfdMKgwqDCoMKgwqDCoMKg wqDCoMKgZmFfb3duZXJfdWlkO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBPd25lciBVc2VyIElE ICovCj4gPiArwqDCoMKgwqDCoMKgwqBrZ2lkX3TCoMKgwqDCoMKgwqDCoMKgwqDCoGZhX2dyb3Vw X2dpZDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogUHJpbWFyeSBHcm91cCBJRAo+ID4gKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoCAvKiBOb3JtYWwgc3RhdCBmaWVsZHMgYWZ0ZXIgdGhpcyAqLwo+ID4g K8KgwqDCoMKgwqDCoMKgX191MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfbW9kZTvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE1vZGUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHVu c2lnbmVkIGludMKgwqDCoMKgZmFfbmxpbms7Cj4gPiArwqDCoMKgwqDCoMKgwqBfX3UzMsKgwqDC oMKgwqDCoMKgwqDCoMKgwqBmYV9ibGtzaXplOwo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZmFfc3BhcmU7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogQWxpZ25tZW50ICovCj4gPiArwqDCoMKgwqDCoMKgwqBfX3U2NMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBmYV9pbm87Cj4gPiArwqDCoMKgwqDCoMKgwqBkZXZfdMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmYV9kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBkZXZfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBm YV9yZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgbG9mZl90wqDCoMKgwqDCoMKgwqDCoMKgwqBmYV9z aXplOwo+ID4gK8KgwqDCoMKgwqDCoMKgX191NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfYmxv Y2tzOwo+ID4gK307Cj4gPiArCj4gPiDCoHN0cnVjdCBuZnM0X2FkZF94cHJ0X2RhdGEgewo+ID4g wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfY2xpZW50wqDCoMKgwqDCoMKgwqAqY2xwOwo+ID4g wqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBjcmVkwqDCoMKgwqDCoMKgwqAqY3JlZDsKPiA+ IEBAIC0zMTUsNiArMzQzLDkgQEAgZXh0ZXJuIGludCBuZnM0X3NldF9yd19zdGF0ZWlkKG5mczRf c3RhdGVpZAo+ID4gKnN0YXRlaWQsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvbnN0IHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsX2N0eCwKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm1vZGVfdCBmbW9kZSk7Cj4gPiAraW50 IG5mczRfc2V0X25mczRfc3RhdHgoc3RydWN0IGlub2RlICppbm9kZSwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzNF9zdGF0eCAqc3RhdHgsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOwo+ID4gwqBl eHRlcm4gaW50IG5mczRfcHJvY19nZXRhdHRyKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0 cnVjdAo+ID4gbmZzX2ZoICpmaGFuZGxlLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIsIHN0 cnVjdCBpbm9kZQo+ID4gKmlub2RlKTsKPiA+IMKgZXh0ZXJuIGludCB1cGRhdGVfb3Blbl9zdGF0 ZWlkKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwKPiA+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZz NGZpbGUuYyBiL2ZzL25mcy9uZnM0ZmlsZS5jCj4gPiBpbmRleCBlNzlhZTRjYmMzOTUuLjQ5NGVi YzdjZDFjMCAxMDA2NDQKPiA+IC0tLSBhL2ZzL25mcy9uZnM0ZmlsZS5jCj4gPiArKysgYi9mcy9u ZnMvbmZzNGZpbGUuYwo+ID4gQEAgLTksNiArOSw4IEBACj4gPiDCoCNpbmNsdWRlIDxsaW51eC9m YWxsb2MuaD4KPiA+IMKgI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Cj4gPiDCoCNpbmNsdWRlIDxs aW51eC9uZnNfZnMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvdGltZTMyLmg+Cj4gPiArI2luY2x1 ZGUgPGxpbnV4L2NvbXBhdC5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvbmZzX3NzYy5oPgo+ID4g wqAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgo+ID4gwqAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ IEBAIC0xMzIsNiArMTM0LDUwMyBAQCBuZnM0X2ZpbGVfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUs IGZsX293bmVyX3QKPiA+IGlkKQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmaWxlbWFwX2No ZWNrX3diX2VycihmaWxlLT5mX21hcHBpbmcsIHNpbmNlKTsKPiA+IMKgfQo+ID4gwqAKPiA+ICtz dGF0aWMgaW50IG5mc19nZXRfdGltZXNwZWM2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3Qgc3RydWN0IG5mc19pb2N0bF90aW1lc3BlYwo+ID4gX191c2VyICp1dHMpCj4gPiArewo+ ID4gK8KgwqDCoMKgwqDCoMKgX19zNjQgZHVtbXk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAodW5s aWtlbHkoZ2V0X3VzZXIoZHVtbXksICZ1dHMtPnR2X3NlYykgIT0gMCkpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVGQVVMVDsKPiA+ICvCoMKgwqDCoMKgwqDCoHRz LT50dl9zZWMgPSBkdW1teTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseShnZXRfdXNl cihkdW1teSwgJnV0cy0+dHZfbnNlYykgIT0gMCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIEVGQVVMVDsKPiA+ICvCoMKgwqDCoMKgwqDCoHRzLT50dl9uc2VjID0g ZHVtbXk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGludCBuZnNfcHV0X3RpbWVzcGVjNjQoY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBuZnNfaW9jdGxfdGltZXNwZWMgX191c2VyCj4gPiAqdXRzKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqDCoF9fczY0IGR1bW15Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZHVt bXkgPSB0cy0+dHZfc2VjOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KHB1dF91c2Vy KGR1bW15LCAmdXRzLT50dl9zZWMpICE9IDApKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBFRkFVTFQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBkdW1teSA9IHRzLT50dl9u c2VjOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KHB1dF91c2VyKGR1bW15LCAmdXRz LT50dl9uc2VjKSAhPSAwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gRUZBVUxUOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgZmlsZSAqbmZzNF9nZXRfcmVhbF9maWxlKHN0cnVjdCBmaWxlICpzcmMs IHVuc2lnbmVkCj4gPiBpbnQgZmQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGZp bGUgKmZpbHAgPSBmZ2V0X3JhdyhmZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gLUVC QURGOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFmaWxwKQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgLyogVmFsaWRh dGUgdGhhdCB0aGUgZmlsZXMgc2hhcmUgdGhlIHNhbWUgdW5kZXJseWluZwo+ID4gZmlsZXN5c3Rl bSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gLUVYREVWOwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKGZpbGVfaW5vZGUoZmlscCktPmlfc2IgIT0gZmlsZV9pbm9kZShzcmMpLT5pX3NiKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0X3B1dDsKPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiBmaWxwOwo+ID4gK291dF9wdXQ6Cj4gPiArwqDCoMKgwqDCoMKgwqBmcHV0 KGZpbHApOwo+ID4gK291dDoKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mczRfc3RhdHhfcmVxdWVz dF90b19jYWNoZV92YWxpZGl0eShfX3U2NAo+ID4gcmVxdWVzdCwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NAo+ID4gZmF0dHJf c3VwcG9ydGVkKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcmV0ID0g MDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXF1ZXN0ICYgTkZTX0ZBX1ZBTElEX0FU SU1FKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCB8PSBORlNfSU5PX0lO VkFMSURfQVRJTUU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmVxdWVzdCAmIE5GU19GQV9WQUxJ RF9DVElNRSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgfD0gTkZTX0lO T19JTlZBTElEX0NUSU1FOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcXVlc3QgJiBORlNfRkFf VkFMSURfTVRJTUUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0IHw9IE5G U19JTk9fSU5WQUxJRF9NVElNRTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXF1ZXN0ICYgTkZT X0ZBX1ZBTElEX1NJWkUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0IHw9 IE5GU19JTk9fSU5WQUxJRF9TSVpFOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcXVl c3QgJiBORlNfRkFfVkFMSURfTU9ERSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQgfD0gTkZTX0lOT19JTlZBTElEX01PREU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmVx dWVzdCAmIChORlNfRkFfVkFMSURfT1dORVIgfAo+ID4gTkZTX0ZBX1ZBTElEX09XTkVSX0dST1VQ KSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgfD0gTkZTX0lOT19JTlZB TElEX09USEVSOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcXVlc3QgJiBORlNfRkFf VkFMSURfTkxJTkspCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0IHw9IE5G U19JTk9fSU5WQUxJRF9OTElOSzsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXF1ZXN0ICYgTkZT X0ZBX1ZBTElEX0JMT0NLUykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg fD0gTkZTX0lOT19JTlZBTElEX0JMT0NLUzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXF1ZXN0ICYgTkZTX0ZBX1ZBTElEX1RJTUVfQ1JFQVRFKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCB8PSBORlNfSU5PX0lOVkFMSURfQlRJTUU7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAocmVxdWVzdCAmIE5GU19GQV9WQUxJRF9BUkNISVZFKSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGZhdHRyX3N1cHBvcnRlZCAmIE5GU19BVFRS X0ZBVFRSX0FSQ0hJVkUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCB8PSBORlNfSU5PX0lOVkFMSURfV0lOQVRUUjsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChmYXR0cl9zdXBwb3J0ZWQgJgo+ID4gTkZTX0FU VFJfRkFUVFJfVElNRV9CQUNLVVApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCB8PSBORlNfSU5PX0lOVkFMSURfV0lOQVRUUiB8Cj4gPiBORlNf SU5PX0lOVkFMSURfTVRJTUU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKg wqBpZiAocmVxdWVzdCAmIChORlNfRkFfVkFMSURfVElNRV9CQUNLVVAgfAo+ID4gTkZTX0ZBX1ZB TElEX0hJRERFTiB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIE5GU19GQV9WQUxJRF9TWVNURU0gfCBORlNfRkFfVkFMSURfT0ZGTElORSkpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9XSU5BVFRS Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldCA/IChyZXQgfCBORlNfSU5PX0lO VkFMSURfQ0hBTkdFKSA6IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBsb25nIG5mczRfaW9j dGxfZmlsZV9zdGF0eF9nZXQoc3RydWN0IGZpbGUgKmRzdF9maWxlLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgbmZzX2lvY3RsX25mczRfc3RhdHgKPiA+IF9fdXNlciAqdWFyZykKPiA+ICt7 Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzNF9zdGF0eCBhcmdzID0gewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5yZWFsX2ZkID0gLTEsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLmZhX3ZhbGlkID0geyAwIH0sCj4gPiArwqDCoMKgwqDCoMKgwqB9 Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlub2RlICppbm9kZTsKPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBuZnNfaW5vZGUgKm5mc2k7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZz X3NlcnZlciAqc2VydmVyOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTY0IGZhdHRyX3N1cHBvcnRlZDsK PiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgcmV2YWxfYXR0cjsKPiA+ICvCoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGludCByZXZhbF9mbGFnczsKPiA+ICvCoMKgwqDCoMKgwqDCoF9fdTMy IHRtcDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAvKgo+ID4gK8KgwqDCoMKgwqDCoMKgICogV2UgZ2V0IHRoZSBmaXJzdCB3b3JkIGZyb20gdGhl IHVhcmcgYXMgaXQgdGVsbHMgdXMKPiA+IHdoZXRoZXIKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHRv IHVzZSB0aGUgcGFzc2VkIGluIHN0cnVjdCBmaWxlIG9yIHVzZSB0aGF0IGZkIHRvIGZpbmQKPiA+ IHRoZQo+ID4gK8KgwqDCoMKgwqDCoMKgICogc3RydWN0IGZpbGUuCj4gPiArwqDCoMKgwqDCoMKg wqAgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChnZXRfdXNlcihhcmdzLnJlYWxfZmQsICZ1YXJn LT5yZWFsX2ZkKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVG QVVMVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChnZXRfdXNlcihhcmdzLmZhX29wdGlv bnMsICZ1YXJnLT5mYV9vcHRpb25zKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVGQVVMVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChnZXRfdXNlcihh cmdzLmZhX3JlcXVlc3RbMF0sICZ1YXJnLT5mYV9yZXF1ZXN0WzBdKSkKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChhcmdzLnJlYWxfZmQgPj0gMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRzdF9maWxlID0gbmZzNF9nZXRfcmVhbF9maWxlKGRzdF9maWxlLAo+ID4gYXJncy5y ZWFsX2ZkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRz dF9maWxlKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIFBUUl9FUlIoZHN0X2ZpbGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgLyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIEJhY2t3YXJkIGNvbXBh dGliaWxpdHk6IHdlIHN0b2xlIHRoZSB0b3AgMzIgYml0cyBvZgo+ID4gJ3JlYWxfZmQnCj4gPiAr wqDCoMKgwqDCoMKgwqAgKiB0byBjcmVhdGUgdGhlIGZhX29wdGlvbnMgZmllbGQsIHNvIGlmIGl0 cyB2YWx1ZSBpcyAtMSwKPiA+IHRoZW4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGFzc3VtZSBpdCBp cyB0aGUgaGlnaCB3b3JkIG9mIChfX3M2NClyZWFsX2ZkID09IC0xLCBhbmQKPiA+IGp1c3QKPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIHNldCBpdCB0byB6ZXJvLgo+ID4gK8KgwqDCoMKgwqDCoMKgICov Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYXJncy5mYV9vcHRpb25zID09IDB4RkZGRikKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX29wdGlvbnMgPSAwOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaW5vZGUgPSBmaWxlX2lub2RlKGRzdF9maWxlKTsKPiA+ICvCoMKg wqDCoMKgwqDCoG5mc2kgPSBORlNfSShpbm9kZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzZXJ2ZXIg PSBORlNfU0VSVkVSKGlub2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGZhdHRyX3N1cHBvcnRlZCA9 IHNlcnZlci0+ZmF0dHJfdmFsaWQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB0cmFjZV9uZnNf aW9jdGxfZmlsZV9zdGF0eF9nZXRfZW50ZXIoaW5vZGUpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKGFyZ3MuZmFfb3B0aW9ucyAmIE5GU19GQV9PUFRJT05TX0ZPUkNFX1NZTkMpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV2YWxfZmxhZ3MgPSBBVF9TVEFUWF9GT1JD RV9TWU5DOwo+ID4gK8KgwqDCoMKgwqDCoMKgZWxzZSBpZiAoYXJncy5mYV9vcHRpb25zICYgTkZT X0ZBX09QVElPTlNfRE9OVF9TWU5DKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldmFsX2ZsYWdzID0gQVRfU1RBVFhfRE9OVF9TWU5DOwo+ID4gK8KgwqDCoMKgwqDCoMKgZWxz ZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldmFsX2ZsYWdzID0gQVRfU1RB VFhfU1lOQ19BU19TVEFUOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV2YWxfYXR0ciA9Cj4g PiBuZnM0X3N0YXR4X3JlcXVlc3RfdG9fY2FjaGVfdmFsaWRpdHkoYXJncy5mYV9yZXF1ZXN0WzBd LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAKPiA+IGZhdHRyX3N1cHBvcnRlZCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo KHJldmFsX2F0dHIgJiAoTkZTX0lOT19JTlZBTElEX0NUSU1FIHwKPiA+IE5GU19JTk9fSU5WQUxJ RF9NVElNRSkpICYmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV2YWxfZmxhZ3MgIT0gQVRf U1RBVFhfRE9OVF9TWU5DICYmIFNfSVNSRUcoaW5vZGUtCj4gPiA+aV9tb2RlKSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQo aW5vZGUtPmlfbWFwcGluZyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoKGRzdF9maWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9BVElNRSkgfHwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKGRzdF9maWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3Mg JiBNTlRfTk9ESVJBVElNRSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNfSVNESVIo aW5vZGUtPmlfbW9kZSkpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldmFs X2F0dHIgJj0gfk5GU19JTk9fSU5WQUxJRF9BVElNRTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldCA9IG5mc19nZXRhdHRyX3JldmFsaWRhdGUoJmRzdF9maWxlLT5mX3BhdGgsIHJldmFsX2F0 dHIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXZhbF9mbGFncyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0ICE9IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSAtRUZBVUxUOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9PV05FUikgJiYKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX09X TkVSKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcCA9IGZyb21fa3Vp ZF9tdW5nZWQoY3VycmVudF91c2VyX25zKCksIGlub2RlLQo+ID4gPmlfdWlkKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkocHV0X3VzZXIodG1wLCAmdWFy Zy0+ZmFfb3duZXJfdWlkKSAhPQo+ID4gMCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX09XTkVSOwo+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0 ZWQgJiBORlNfQVRUUl9GQVRUUl9HUk9VUCkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAo YXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX09XTkVSX0dST1VQKSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcCA9IGZyb21fa2dpZF9tdW5nZWQoY3VycmVu dF91c2VyX25zKCksIGlub2RlLQo+ID4gPmlfZ2lkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAodW5saWtlbHkocHV0X3VzZXIodG1wLCAmdWFyZy0+ZmFfZ3JvdXBfZ2lk KSAhPQo+ID4gMCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFyZ3Mu ZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX09XTkVSX0dST1VQOwo+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQgJiBORlNf QVRUUl9GQVRUUl9USU1FX0JBQ0tVUCkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAoYXJn cy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX1RJTUVfQkFDS1VQKSkgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChuZnNfcHV0X3RpbWVzcGVjNjQoJm5mc2ktPnRp bWViYWNrdXAsICZ1YXJnLQo+ID4gPmZhX3RpbWVfYmFja3VwKSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFfVkFMSURfVElN RV9CQUNLVVA7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoKGZhdHRyX3N1cHBvcnRlZCAmIE5GU19BVFRSX0ZBVFRSX0JUSU1FKSAmJgo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIChhcmdzLmZhX3JlcXVlc3RbMF0gJiBORlNfRkFfVkFMSURfVElNRV9D UkVBVEUpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG5mc19wdXRf dGltZXNwZWM2NCgmbmZzaS0+YnRpbWUsICZ1YXJnLQo+ID4gPmZhX2J0aW1lKSkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFf VkFMSURfVElNRV9DUkVBVEU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqAvKiBhdGltZSwgbXRpbWUsIGFuZCBjdGltZSBhcmUgYWxsIHN0b3JlZCBpbiB0aGUg cmVndWxhcgo+ID4gaW5vZGUsCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBub3QgdGhlIG5mcyBpbm9k ZS4KPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9z dXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9BVElNRSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX0FUSU1FKSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChuZnNfcHV0X3RpbWVzcGVjNjQoJmlub2Rl LT5pX2F0aW1lLCAmdWFyZy0KPiA+ID5mYV9hdGltZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX0FUSU1FOwo+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9z dXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX01USU1FKSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChuZnNfcHV0X3RpbWVzcGVjNjQoJmlub2Rl LT5pX210aW1lLCAmdWFyZy0KPiA+ID5mYV9tdGltZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX3ZhbGlkWzBdIHw9IE5GU19GQV9WQUxJRF9NVElNRTsK PiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgoZmF0dHJf c3VwcG9ydGVkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpICYmCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgKGFyZ3MuZmFfcmVxdWVzdFswXSAmIE5GU19GQV9WQUxJRF9DVElNRSkpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobmZzX3B1dF90aW1lc3BlYzY0KCZpbm9k ZS0+aV9jdGltZSwgJnVhcmctCj4gPiA+ZmFfY3RpbWUpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX3ZhbGlkWzBdIHw9IE5GU19GQV9WQUxJRF9DVElNRTsK PiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCAvKgo+ID4gK8Kg wqDCoMKgwqDCoMKgwqAgKiBJdCBsb29rcyBsaWtlIFBERlMgZG9lcyBub3Qgc3VwcG9ydCBvciBw cm9wZXJseSBoYW5kbGUKPiA+IHRoZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAgKiBhcmNoaXZlIGJp dC4KPiA+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoKGZhdHRy X3N1cHBvcnRlZCAmIE5GU19BVFRSX0ZBVFRSX0FSQ0hJVkUpICYmCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgKGFyZ3MuZmFfcmVxdWVzdFswXSAmIE5GU19GQV9WQUxJRF9BUkNISVZFKSkgewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChuZnNpLT5hcmNoaXZlKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX2Zs YWdzIHw9IE5GU19GQV9GTEFHX0FSQ0hJVkU7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFfVkFMSURfQVJDSElWRTsKPiA+ICvCoMKg wqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICgoZmF0dHJfc3VwcG9ydGVk ICYgTkZTX0FUVFJfRkFUVFJfVElNRV9CQUNLVVApICYmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgKGFyZ3MuZmFfcmVxdWVzdFswXSAmIE5GU19GQV9WQUxJRF9BUkNISVZFKSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0aW1lc3BlYzY0X2NvbXBhcmUoJmlub2Rl LT5pX210aW1lLCAmbmZzaS0KPiA+ID50aW1lYmFja3VwKSA+IDApCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFyZ3MuZmFfZmxhZ3MgfD0gTkZTX0ZB X0ZMQUdfQVJDSElWRTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZh X3ZhbGlkWzBdIHw9IE5GU19GQV9WQUxJRF9BUkNISVZFOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQgJiBORlNfQVRUUl9G QVRUUl9ISURERU4pICYmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGFyZ3MuZmFfcmVxdWVz dFswXSAmIE5GU19GQV9WQUxJRF9ISURERU4pKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKG5mc2ktPmhpZGRlbikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV9mbGFncyB8PSBORlNfRkFfRkxBR19ISURERU47 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBO RlNfRkFfVkFMSURfSElEREVOOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9TWVNURU0pICYmCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgKGFyZ3MuZmFfcmVxdWVzdFswXSAmIE5GU19GQV9WQUxJRF9T WVNURU0pKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG5mc2ktPnN5 c3RlbSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YXJncy5mYV9mbGFncyB8PSBORlNfRkFfRkxBR19TWVNURU07Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFfVkFMSURfU1lTVEVNOwo+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9z dXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9PRkZMSU5FKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIChhcmdzLmZhX3JlcXVlc3RbMF0gJiBORlNfRkFfVkFMSURfT0ZGTElORSkpIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobmZzaS0+b2ZmbGluZSkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV9mbGFn cyB8PSBORlNfRkFfRkxBR19PRkZMSU5FOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX09GRkxJTkU7Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoKGFyZ3MuZmFfdmFsaWRbMF0g JiAoTkZTX0ZBX1ZBTElEX0FSQ0hJVkUgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTkZTX0ZBX1ZBTElEX0hJRERFTiB8 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBORlNfRkFfVkFMSURfU1lTVEVNIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9P RkZMSU5FKSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdXRfdXNlcihhcmdzLmZhX2Zs YWdzLCAmdWFyZy0+ZmFfZmxhZ3MpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gb3V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQg JiBORlNfQVRUUl9GQVRUUl9NT0RFKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChhcmdz LmZhX3JlcXVlc3RbMF0gJiBORlNfRkFfVkFMSURfTU9ERSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB0bXAgPSBpbm9kZS0+aV9tb2RlOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoC8qIFRoaXMgaXMgYW4gdW5zaWduZWQgc2hvcnQgd2UgcHV0IGludG8g YW4gX191MzIKPiA+ICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHVu bGlrZWx5KHB1dF91c2VyKHRtcCwgJnVhcmctPmZhX21vZGUpICE9IDApKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX3ZhbGlkWzBdIHw9IE5GU19GQV9WQUxJ RF9NT0RFOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KChmYXR0cl9zdXBwb3J0ZWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykgJiYKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX05MSU5LKSkg ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcCA9IGlub2RlLT5pX25saW5r Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseShwdXRfdXNl cih0bXAsICZ1YXJnLT5mYV9ubGluaykgIT0gMCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX05MSU5LOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGFyZ3MuZmFfcmVx dWVzdFswXSAmIE5GU19GQV9WQUxJRF9CTEtTSVpFKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdG1wID0gaV9ibG9ja3NpemUoaW5vZGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0bXAgPSBORlNfU0VSVkVSKGlu b2RlKS0+ZHRzaXplOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh1bmxp a2VseShwdXRfdXNlcih0bXAsICZ1YXJnLT5mYV9ibGtzaXplKSAhPQo+ID4gMCkpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZB X1ZBTElEX0JMS1NJWkU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX0lOTykgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fdTY0IGlubyA9Cj4gPiBuZnNfY29tcGF0X3Vz ZXJfaW5vNjQoTkZTX0ZJTEVJRChpbm9kZSkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICh1bmxpa2VseShwdXRfdXNlcihpbm8sICZ1YXJnLT5mYV9pbm8pICE9IDApKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91 dDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX3ZhbGlkWzBdIHw9 IE5GU19GQV9WQUxJRF9JTk87Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBpZiAoYXJncy5mYV9yZXF1ZXN0WzBdICYgTkZTX0ZBX1ZBTElEX0RFVikgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRtcCA9IGlub2RlLT5pX3NiLT5zX2RldjsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkocHV0X3VzZXIo dG1wLCAmdWFyZy0+ZmFfZGV2KSAhPSAwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFfVkFMSURfREVWOwo+ID4gK8KgwqDC oMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQg JiBORlNfQVRUUl9GQVRUUl9SREVWKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChhcmdz LmZhX3JlcXVlc3RbMF0gJiBORlNfRkFfVkFMSURfUkRFVikpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB0bXAgPSBpbm9kZS0+aV9yZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseShwdXRfdXNlcih0bXAsICZ1YXJnLT5mYV9yZGV2 KSAhPSAwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV92 YWxpZFswXSB8PSBORlNfRkFfVkFMSURfUkRFVjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmICgoZmF0dHJfc3VwcG9ydGVkICYgTkZTX0FUVFJfRkFUVFJf U0laRSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAoYXJncy5mYV9yZXF1ZXN0WzBdICYg TkZTX0ZBX1ZBTElEX1NJWkUpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg X19zNjQgc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAodW5saWtlbHkocHV0X3VzZXIoc2l6ZSwgJnVhcmctPmZhX3NpemUpICE9 IDApKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBn b3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcmdzLmZhX3ZhbGlk WzBdIHw9IE5GU19GQV9WQUxJRF9TSVpFOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKChmYXR0cl9zdXBwb3J0ZWQgJgo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKE5GU19BVFRSX0ZBVFRSX0JMT0NLU19VU0VEIHwKPiA+IE5GU19BVFRSX0ZBVFRS X1NQQUNFX1VTRUQpKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChhcmdzLmZhX3JlcXVl c3RbMF0gJiBORlNfRkFfVkFMSURfQkxPQ0tTKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoF9fczY0IGJsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkocHV0X3VzZXIoYmxvY2tzLCAmdWFyZy0+ ZmFfYmxvY2tzKSAhPQo+ID4gMCkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGFyZ3MuZmFfdmFsaWRbMF0gfD0gTkZTX0ZBX1ZBTElEX0JMT0NLUzsKPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseShwdXRfdXNlcihh cmdzLmZhX3ZhbGlkWzBdLCAmdWFyZy0+ZmFfdmFsaWRbMF0pCj4gPiAhPSAwKSkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm ICh1bmxpa2VseShwdXRfdXNlcihhcmdzLmZhX3ZhbGlkWzFdLCAmdWFyZy0+ZmFfdmFsaWRbMV0p Cj4gPiAhPSAwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IDA7Cj4gPiArb3V0Ogo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKGFyZ3MucmVhbF9mZCA+PSAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGZwdXQoZHN0X2ZpbGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdHJhY2VfbmZzX2lvY3Rs X2ZpbGVfc3RhdHhfZ2V0X2V4aXQoaW5vZGUsIHJldCk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgbG9uZyBuZnM0X2lvY3RsX2ZpbGVfc3Rh dHhfc2V0KHN0cnVjdCBmaWxlICpkc3RfZmlsZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IG5mc19pb2N0bF9uZnM0X3N0YXR4Cj4gPiBfX3VzZXIgKnVhcmcpCj4gPiArewo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IG5mczRfc3RhdHggYXJncyA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAucmVhbF9mZCA9IC0xLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC5mYV92YWxpZCA9IHsgMCB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgfTsKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyID0gbmZzX2FsbG9jX2ZhdHRyKCk7Cj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW5vZGUgKmlub2RlOwo+ID4gK8KgwqDCoMKgwqDCoMKg LyoKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IGVycm9yIGNv ZGUgYmVsb3csIHlvdSBuZWVkIHRvCj4gPiBzZXQgaXQKPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IC1FRkFVTFQ7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoZmF0dHIgPT0gTlVMTCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKg wqDCoMKgwqAgKiBXZSBnZXQgdGhlIGZpcnN0IHU2NCB3b3JkIGZyb20gdGhlIHVhcmcgYXMgaXQg dGVsbHMgdXMKPiA+IHdoZXRoZXIKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHRvIHVzZSB0aGUgcGFz c2VkIGluIHN0cnVjdCBmaWxlIG9yIHVzZSB0aGF0IGZkIHRvIGZpbmQKPiA+IHRoZQo+ID4gK8Kg wqDCoMKgwqDCoMKgICogc3RydWN0IGZpbGUuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChnZXRfdXNlcihhcmdzLnJlYWxfZmQsICZ1YXJnLT5yZWFsX2ZkKSkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dF9mcmVlOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGFyZ3MucmVhbF9mZCA+PSAwKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHN0X2ZpbGUgPSBuZnM0X2dldF9yZWFsX2ZpbGUoZHN0X2Zp bGUsCj4gPiBhcmdzLnJlYWxfZmQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChJU19FUlIoZHN0X2ZpbGUpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZHN0X2ZpbGUpOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dF9mcmVlOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ ICvCoMKgwqDCoMKgwqDCoGlub2RlID0gZmlsZV9pbm9kZShkc3RfZmlsZSk7Cj4gPiArwqDCoMKg wqDCoMKgwqB0cmFjZV9uZnNfaW9jdGxfZmlsZV9zdGF0eF9zZXRfZW50ZXIoaW5vZGUpOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgaW5vZGVfbG9jayhpbm9kZSk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqAvKiBXcml0ZSBhbGwgZGlydHkgZGF0YSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSBuZnNfc3luY19pbm9kZShpbm9kZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByZXQgPSAtRUZBVUxUOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGdldF91 c2VyKGFyZ3MuZmFfdmFsaWRbMF0sICZ1YXJnLT5mYV92YWxpZFswXSkpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBhcmdzLmZh X3ZhbGlkWzBdICY9IE5GU19GQV9WQUxJRF9BTExfQVRUUl8wOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKGFyZ3MuZmFfdmFsaWRbMF0gJiBORlNfRkFfVkFMSURfT1dORVIpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aWRfdCB1aWQ7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHVubGlrZWx5KGdldF91c2VyKHVpZCwgJnVhcmct PmZhX293bmVyX3VpZCkgIT0KPiA+IDApKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBhcmdzLmZhX293bmVyX3VpZCA9IG1ha2Vfa3VpZChjdXJyZW50X3VzZXJfbnMoKSwK PiA+IHVpZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCF1aWRfdmFs aWQoYXJncy5mYV9vd25lcl91aWQpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChhcmdzLmZhX3ZhbGlkWzBdICYgTkZTX0ZBX1ZBTElEX09XTkVSX0dST1VQKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ2lkX3QgZ2lkOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh1bmxpa2VseShnZXRfdXNlcihnaWQs ICZ1YXJnLT5mYV9ncm91cF9naWQpICE9Cj4gPiAwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgYXJncy5mYV9ncm91cF9naWQgPSBtYWtlX2tnaWQoY3VycmVudF91c2Vy X25zKCksCj4gPiBnaWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgh Z2lkX3ZhbGlkKGFyZ3MuZmFfZ3JvdXBfZ2lkKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRUlOVkFMOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoKGFyZ3MuZmFfdmFsaWRbMF0gJiAoTkZTX0ZBX1ZBTElEX0FSQ0hJ VkUgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9ISURERU4gfAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9TWVNURU0pKSAmJgo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIGdldF91c2VyKGFyZ3MuZmFfZmxhZ3MsICZ1YXJnLT5mYV9mbGFncykp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoKGFyZ3MuZmFfdmFsaWRbMF0gJiBORlNfRkFfVkFMSURfVElNRV9D UkVBVEUpICYmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmZzX2dldF90aW1lc3BlYzY0KCZh cmdzLmZhX2J0aW1lLCAmdWFyZy0+ZmFfYnRpbWUpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKChhcmdzLmZh X3ZhbGlkWzBdICYgTkZTX0ZBX1ZBTElEX0FUSU1FKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgIG5mc19nZXRfdGltZXNwZWM2NCgmYXJncy5mYV9hdGltZSwgJnVhcmctPmZhX2F0aW1lKSkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmICgoYXJncy5mYV92YWxpZFswXSAmIE5GU19GQV9WQUxJRF9NVElNRSkg JiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZnNfZ2V0X3RpbWVzcGVjNjQoJmFyZ3MuZmFf bXRpbWUsICZ1YXJnLT5mYV9tdGltZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBvdXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYXJncy5mYV92YWxpZFsw XSAmIE5GU19GQV9WQUxJRF9USU1FX0JBQ0tVUCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChuZnNfZ2V0X3RpbWVzcGVjNjQoJmFyZ3MuZmFfdGltZV9iYWNrdXAsICZ1 YXJnLQo+ID4gPmZhX3RpbWVfYmFja3VwKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ug aWYgKChhcmdzLmZhX3ZhbGlkWzBdICYgTkZTX0ZBX1ZBTElEX0FSQ0hJVkUpICYmCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCEoTkZTX1NFUlZFUihp bm9kZSktPmZhdHRyX3ZhbGlkICYKPiA+IE5GU19BVFRSX0ZBVFRSX0FSQ0hJVkUpKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV92YWxpZFswXSB8PSBORlNfRkFf VkFMSURfVElNRV9CQUNLVVA7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KCEoYXJncy5mYV9mbGFncyAmIE5GU19GQV9GTEFHX0FSQ0hJVkUpKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5mc19yZXZhbGlkYXRlX2lub2Rl KGlub2RlLAo+ID4gTkZTX0lOT19JTlZBTElEX01USU1FKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV90aW1lX2JhY2t1cC50dl9zZWMg PSBpbm9kZS0KPiA+ID5pX210aW1lLnR2X3NlYzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJncy5mYV90aW1lX2JhY2t1cC50dl9uc2VjID0gaW5v ZGUtCj4gPiA+aV9tdGltZS50dl9uc2VjOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0gZWxzZSBpZiAoYXJncy5mYV92YWxpZFswXSAmCj4gPiBORlNfRkFfVkFMSURfVElNRV9D UkVBVEUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGFyZ3MuZmFfdGltZV9iYWNrdXAgPSBhcmdzLmZhX2J0aW1lOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVsc2Ugewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBuZnNfcmV2YWxpZGF0ZV9pbm9kZShpbm9kZSwKPiA+IE5GU19JTk9f SU5WQUxJRF9CVElNRSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGFyZ3MuZmFfdGltZV9iYWNrdXAgPSBORlNfSShpbm9kZSktPmJ0aW1lOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXJncy5mYV92YWxpZFswXSAmIE5GU19GQV9WQUxJ RF9TSVpFKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNvcHlfZnJv bV91c2VyKCZhcmdzLmZhX3NpemUsICZ1YXJnLT5mYV9zaXplLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNpemVvZihhcmdzLmZhX3NpemUpKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSxhcmdzLmZhX3NpemUpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gb3V0Owo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChhcmdzLmZhX3NpemUgPT0gaV9zaXplX3JlYWQo aW5vZGUpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBhcmdzLmZhX3ZhbGlkWzBdICY9IH5ORlNfRkFfVkFMSURfU0laRTsKPiA+ICvCoMKgwqDCoMKg wqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBO byBuZWVkIHRvIHVwZGF0ZSB0aGUgaW5vZGUgYmVjYXVzZSB0aGF0IGlzIGRvbmUgaW4KPiA+IG5m czRfc2V0X25mczRfc3RhdHgKPiA+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gbmZzNF9zZXRfbmZzNF9zdGF0eChpbm9kZSwgJmFyZ3MsIGZhdHRyKTsKPiA+ICsK PiA+ICtvdXQ6Cj4gPiArwqDCoMKgwqDCoMKgwqBpbm9kZV91bmxvY2soaW5vZGUpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKGFyZ3MucmVhbF9mZCA+PSAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGZwdXQoZHN0X2ZpbGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdHJhY2VfbmZz X2lvY3RsX2ZpbGVfc3RhdHhfc2V0X2V4aXQoaW5vZGUsIHJldCk7Cj4gPiArb3V0X2ZyZWU6Cj4g PiArwqDCoMKgwqDCoMKgwqBuZnNfZnJlZV9mYXR0cihmYXR0cik7Cj4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgbG9uZyBuZnM0X2lvY3RsKHN0 cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAo+ID4gdW5zaWduZWQgbG9uZyBhcmcp Cj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3Vz ZXIgKilhcmc7Cj4gPiArwqDCoMKgwqDCoMKgwqBsb25nIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHN3aXRjaCAoY21kKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIE5GU19JT0NfRklM RV9TVEFUWF9HRVQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gbmZz NF9pb2N0bF9maWxlX3N0YXR4X2dldChmaWxlLCBhcmdwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTkZTX0lPQ19GSUxF X1NUQVRYX1NFVDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBuZnM0 X2lvY3RsX2ZpbGVfc3RhdHhfc2V0KGZpbGUsIGFyZ3ApOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRU5PSU9DVExDTUQ7Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkcHJpbnRrKCIlczogZmlsZT0lcEQy LCBjbWQ9JXUsIHJldD0lbGRcbiIsIF9fZnVuY19fLCBmaWxlLAo+ID4gY21kLCByZXQpOwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiDCoCNpZmRlZiBDT05G SUdfTkZTX1Y0XzIKPiA+IMKgc3RhdGljIHNzaXplX3QgX19uZnM0X2NvcHlfZmlsZV9yYW5nZShz dHJ1Y3QgZmlsZSAqZmlsZV9pbiwgbG9mZl90Cj4gPiBwb3NfaW4sCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdAo+ID4gcG9zX291dCwKPiA+IEBAIC0x ODcsNiArNjg2LDcgQEAgc3RhdGljIHNzaXplX3QgX19uZnM0X2NvcHlfZmlsZV9yYW5nZShzdHJ1 Y3QKPiA+IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sCj4gPiDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiA+IMKgfQo+ID4gwqAKPiA+ICsKPiA+IMKgc3RhdGljIHNzaXplX3QgbmZz NF9jb3B5X2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdAo+ID4gcG9zX2lu LAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZmlsZSAqZmlsZV9vdXQsIGxvZmZfdAo+ID4gcG9z X291dCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBpbnQKPiA+IGZs YWdzKQo+ID4gQEAgLTQ2MSw0ICs5NjEsMTUgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cwo+ID4gbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7Cj4gPiDCoCNlbHNlCj4gPiDCoMKgwqDCoMKg wqDCoMKgLmxsc2Vla8KgwqDCoMKgwqDCoMKgwqDCoD0gbmZzX2ZpbGVfbGxzZWVrLAo+ID4gwqAj ZW5kaWYKPiA+ICvCoMKgwqDCoMKgwqDCoC51bmxvY2tlZF9pb2N0bMKgPSBuZnM0X2lvY3RsLAo+ ID4gK307Cj4gPiArCj4gPiArY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9v cGVyYXRpb25zID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLmxsc2Vla8KgwqDCoMKgwqDCoMKgwqDC oD0gbmZzX2xsc2Vla19kaXIsCj4gPiArwqDCoMKgwqDCoMKgwqAucmVhZMKgwqDCoMKgwqDCoMKg wqDCoMKgwqA9IGdlbmVyaWNfcmVhZF9kaXIsCj4gPiArwqDCoMKgwqDCoMKgwqAuaXRlcmF0ZV9z aGFyZWTCoD0gbmZzX3JlYWRkaXIsCj4gPiArwqDCoMKgwqDCoMKgwqAub3BlbsKgwqDCoMKgwqDC oMKgwqDCoMKgwqA9IG5mc19vcGVuZGlyLAo+ID4gK8KgwqDCoMKgwqDCoMKgLnJlbGVhc2XCoMKg wqDCoMKgwqDCoMKgPSBuZnNfY2xvc2VkaXIsCj4gPiArwqDCoMKgwqDCoMKgwqAuZnN5bmPCoMKg wqDCoMKgwqDCoMKgwqDCoD0gbmZzX2ZzeW5jX2RpciwKPiA+ICvCoMKgwqDCoMKgwqDCoC51bmxv Y2tlZF9pb2N0bMKgPSBuZnM0X2lvY3RsLAo+ID4gwqB9Owo+ID4gZGlmZiAtLWdpdCBhL2ZzL25m cy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKPiA+IGluZGV4IGQ0OTc2MTZjYTE0OS4u N2MwMzI1ODNmZmEyIDEwMDY0NAo+ID4gLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKPiA+ICsrKyBi L2ZzL25mcy9uZnM0cHJvYy5jCj4gPiBAQCAtNzk1OSw2ICs3OTU5LDEyOSBAQCBzdGF0aWMgaW50 IF9uZnM0MV9wcm9jX2dldF9sb2NhdGlvbnMoc3RydWN0Cj4gPiBpbm9kZSAqaW5vZGUsCj4gPiDC oAo+ID4gwqAjZW5kaWbCoC8qIENPTkZJR19ORlNfVjRfMSAqLwo+ID4gwqAKPiA+ICtzdGF0aWMg aW50IF9uZnM0X3NldF9uZnM0X3N0YXR4KHN0cnVjdCBpbm9kZSAqaW5vZGUsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mczRfc3RhdHggKnN0YXR4LAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IF9fdTY0IHN0YXR4X3dpbiA9IE5GU19GQV9WQUxJ RF9USU1FX0NSRUFURSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBORlNfRkFfVkFMSURfVElNRV9CQUNLVVAgfAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgTkZTX0ZBX1ZBTElEX0FSQ0hJVkUgfAo+ID4gTkZTX0ZBX1ZBTElEX0hJRERFTiB8Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBORlNfRkFfVkFMSURfU1lTVEVNOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlh dHRyIHNhdHRyID0gezB9Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19zZXJ2ZXIgKnNl cnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzIgYml0bWFz a1szXTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfc2V0YXR0cmFyZ3MgYXJnID0gewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5maMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA9IE5GU19GSChpbm9kZSksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LmlhcMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAmc2F0dHIsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLnNlcnZlcsKgwqDCoMKgwqDCoMKgwqDCoD0gc2VydmVyLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5iaXRtYXNrwqDCoMKgwqDCoMKgwqDCoD0gYml0 bWFzaywKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc3RhdHjCoMKgwqDCoMKg wqDCoMKgwqDCoD0gc3RhdHgsCj4gPiArwqDCoMKgwqDCoMKgwqB9Owo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IG5mc19zZXRhdHRycmVzIHJlcyA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuZmF0dHLCoMKgwqDCoMKgwqDCoMKgwqDCoD0gZmF0dHIsCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnNlcnZlcsKgwqDCoMKgwqDCoMKgwqDCoD0gc2VydmVy LAo+ID4gK8KgwqDCoMKgwqDCoMKgfTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBycGNfbWVz c2FnZSBtc2cgPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnJwY19wcm9j wqDCoMKgwqDCoMKgID0KPiA+ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9TRVRBVFRS XSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucnBjX2FyZ3DCoMKgwqDCoMKg wqAgPSAmYXJnLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ycGNfcmVzcMKg wqDCoMKgwqDCoCA9ICZyZXMsCj4gPiArwqDCoMKgwqDCoMKgwqB9Owo+ID4gK8KgwqDCoMKgwqDC oMKgaW50IHN0YXR1czsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG5mczRfYml0bWFwX2NvcHlf YWRqdXN0KAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJpdG1hc2ssIHNlcnZl ci0+YXR0cl9iaXRtYXNrLCBpbm9kZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBORlNfSU5PX0lOVkFMSURfQ0hBTkdFIHwgTkZTX0lOT19JTlZBTElEX0NUSU1FIHwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTkZTX0lOT19JTlZB TElEX1NJWkUgfAo+ID4gTkZTX0lOT19JTlZBTElEX09USEVSIHwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTkZTX0lOT19JTlZBTElEX0JUSU1FIHwK PiA+IE5GU19JTk9fSU5WQUxJRF9XSU5BVFRSKTsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFVzZSB0 aGUgaWF0dHIgc3RydWN0dXJlIHRvIHNldCBhdGltZSBhbmQgbXRpbWUgc2luY2UKPiA+IGhhbmRs aW5nIGFscmVhZHkKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIGV4aXN0cyBmb3IgdGhlbSB1c2luZyB0 aGUgaWF0dHIgc3RydWN0IGluIHRoZQo+ID4gZW5jb2RlX2F0dHJzKCkKPiA+ICvCoMKgwqDCoMKg wqDCoCAqICh4ZHIgZW5jb2RpbmcpIHJvdXRpbmUuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChzdGF0eCAmJiAoc3RhdHgtPmZhX3ZhbGlkWzBdICYgTkZTX0ZB X1ZBTElEX01USU1FKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNhdHRy LmlhX3ZhbGlkIHw9IEFUVFJfTVRJTUVfU0VUOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNhdHRyLmlhX210aW1lLnR2X3NlYyA9IHN0YXR4LT5mYV9tdGltZS50dl9zZWM7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2F0dHIuaWFfbXRpbWUudHZfbnNlYyA9 IHN0YXR4LT5mYV9tdGltZS50dl9uc2VjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR4ICYmIChzdGF0eC0+ZmFfdmFsaWRbMF0gJiBORlNfRkFf VkFMSURfQVRJTUUpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2F0dHIu aWFfdmFsaWQgfD0gQVRUUl9BVElNRV9TRVQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2F0dHIuaWFfYXRpbWUudHZfc2VjID0gc3RhdHgtPmZhX2F0aW1lLnR2X3NlYzsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzYXR0ci5pYV9hdGltZS50dl9uc2VjID0g c3RhdHgtPmZhX2F0aW1lLnR2X25zZWM7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoc3RhdHggJiYgKHN0YXR4LT5mYV92YWxpZFswXSAmIE5GU19GQV9W QUxJRF9PV05FUikpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzYXR0ci5p YV92YWxpZCB8PSBBVFRSX1VJRDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz YXR0ci5pYV91aWQgPSBzdGF0eC0+ZmFfb3duZXJfdWlkOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0YXR4ICYmIChzdGF0eC0+ZmFfdmFsaWRbMF0g Jgo+ID4gTkZTX0ZBX1ZBTElEX09XTkVSX0dST1VQKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNhdHRyLmlhX3ZhbGlkIHw9IEFUVFJfR0lEOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHNhdHRyLmlhX2dpZCA9IHN0YXR4LT5mYV9ncm91cF9naWQ7Cj4g PiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoc3RhdHggJiYg KHN0YXR4LT5mYV92YWxpZFswXSAmIE5GU19GQV9WQUxJRF9TSVpFKSkgewo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNhdHRyLmlhX3ZhbGlkIHw9IEFUVFJfU0laRTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzYXR0ci5pYV9zaXplID0gc3RhdHgtPmZhX3Np emU7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBuZnM0X3N0 YXRlaWRfY29weSgmYXJnLnN0YXRlaWQsICZ6ZXJvX3N0YXRlaWQpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgc3RhdHVzID0gbmZzNF9jYWxsX3N5bmMoc2VydmVyLT5jbGllbnQsIHNlcnZlciwg Jm1zZywKPiA+ICZhcmcuc2VxX2FyZ3MsICZyZXMuc2VxX3JlcywgMSk7Cj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoIXN0YXR1cykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChzdGF0eC0+ZmFfdmFsaWRbMF0gJiBzdGF0eF93aW4pIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5G U19JKGlub2RlKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0YXR4LT5mYV92YWxpZFswXSAm Cj4gPiBORlNfRkFfVkFMSURfVElNRV9DUkVBVEUpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZnNpLT5idGltZSA9IHN0 YXR4LT5mYV9idGltZTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHN0YXR4LT5mYV92YWxpZFswXSAmCj4gPiBORlNfRkFfVkFMSURfVElNRV9C QUNLVVApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBuZnNpLT50aW1lYmFja3VwID0gc3RhdHgtCj4gPiA+ZmFfdGltZV9i YWNrdXA7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChzdGF0eC0+ZmFfdmFsaWRbMF0gJgo+ID4gTkZTX0ZBX1ZBTElEX0FSQ0hJVkUpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBuZnNpLT5hcmNoaXZlID0gKHN0YXR4LT5mYV9mbGFncyAmCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+ID4gTkZTX0ZBX0ZMQUdfQVJDSElWRSkgIT0gMDsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0 YXR4LT5mYV92YWxpZFswXSAmCj4gPiBORlNfRkFfVkFMSURfU1lTVEVNKQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZz aS0+c3lzdGVtID0gKHN0YXR4LT5mYV9mbGFncyAmCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoE5GU19GQV9GTEFHX1NZU1RFTSkKPiA+ICE9IDA7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdGF0eC0+ZmFfdmFs aWRbMF0gJgo+ID4gTkZTX0ZBX1ZBTElEX0hJRERFTikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5mc2ktPmhpZGRlbiA9 IChzdGF0eC0+ZmFfZmxhZ3MgJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBORlNfRkFfRkxBR19ISURERU4pCj4gPiAhPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3RhdHgtPmZhX3ZhbGlkWzBdICYKPiA+ IE5GU19GQV9WQUxJRF9PRkZMSU5FKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZzaS0+b2ZmbGluZSA9IChzdGF0eC0+ ZmFfZmxhZ3MgJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ IE5GU19GQV9GTEFHX09GRkxJTkUpICE9IDA7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9Cj4gPiB+ TkZTX0lOT19JTlZBTElEX0NUSU1FOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUp Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpbm9kZS0+aV9jdGltZSA9IGZhdHRyLT5jdGltZTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZzX3Nl dF9jYWNoZV9pbnZhbGlkKAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlub2RlLAo+ID4gTkZT X0lOT19JTlZBTElEX0NIQU5HRSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAKPiA+IE5GU19JTk9fSU5WQUxJRF9DVElNRSk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrKCZpbm9kZS0+aV9s b2NrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZzX3NldGF0dHJfdXBkYXRlX2lub2RlKGlub2Rl LCAmc2F0dHIsIGZhdHRyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRwcmludGsoIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVuY19f LCBzdGF0dXMpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHN0YXR1czsKPiA+ICt9 Cj4gPiArCj4gPiAraW50IG5mczRfc2V0X25mczRfc3RhdHgoc3RydWN0IGlub2RlICppbm9kZSwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzNF9zdGF0eCAqc3Rh dHgsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19mYXR0ciAq ZmF0dHIpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5mczRfZXhjZXB0aW9uIGV4 Y2VwdGlvbiA9IHsgfTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2 ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBlcnI7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqBkbyB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9uZnM0X3Nl dF9uZnM0X3N0YXR4KGlub2RlLCBzdGF0eCwKPiA+IGZhdHRyKSwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZleGNlcHRp b24pOwo+ID4gK8KgwqDCoMKgwqDCoMKgfSB3aGlsZSAoZXhjZXB0aW9uLnJldHJ5KTsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBlcnI7Cj4gPiArfQo+ID4gKwo+ID4gwqAvKioKPiA+IMKgICog bmZzNF9wcm9jX2dldF9sb2NhdGlvbnMgLSBkaXNjb3ZlciBsb2NhdGlvbnMgZm9yIGEgbWlncmF0 ZWQKPiA+IEZTSUQKPiA+IMKgICogQGlub2RlOiBpbm9kZSBvbiBGU0lEIHRoYXQgaXMgbWlncmF0 aW5nCj4gPiBAQCAtMTA0MTksNiArMTA1NDIsNyBAQCBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMg bmZzX3Y0X2NsaWVudG9wcyA9Cj4gPiB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgLmRpcl9pbm9kZV9v cHPCoMKgPSAmbmZzNF9kaXJfaW5vZGVfb3BlcmF0aW9ucywKPiA+IMKgwqDCoMKgwqDCoMKgwqAu ZmlsZV9pbm9kZV9vcHPCoD0gJm5mczRfZmlsZV9pbm9kZV9vcGVyYXRpb25zLAo+ID4gwqDCoMKg wqDCoMKgwqDCoC5maWxlX29wc8KgwqDCoMKgwqDCoMKgPSAmbmZzNF9maWxlX29wZXJhdGlvbnMs Cj4gPiArwqDCoMKgwqDCoMKgwqAuZGlyX29wc8KgwqDCoMKgwqDCoMKgwqA9ICZuZnM0X2Rpcl9v cGVyYXRpb25zLAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5nZXRyb290wqDCoMKgwqDCoMKgwqDCoD0g bmZzNF9wcm9jX2dldF9yb290LAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5zdWJtb3VudMKgwqDCoMKg wqDCoMKgPSBuZnM0X3N1Ym1vdW50LAo+ID4gwqDCoMKgwqDCoMKgwqDCoC50cnlfZ2V0X3RyZWXC oMKgwqA9IG5mczRfdHJ5X2dldF90cmVlLAo+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRy LmMgYi9mcy9uZnMvbmZzNHhkci5jCj4gPiBpbmRleCBkMmMyNDBlZmZjODcuLmU1MzAwZDdlZDcx MiAxMDA2NDQKPiA+IC0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKPiA+ICsrKyBiL2ZzL25mcy9uZnM0 eGRyLmMKPiA+IEBAIC0xMjksMTIgKzEyOSwxNSBAQCBzdGF0aWMgaW50IGRlY29kZV9sYXlvdXRn ZXQoc3RydWN0IHhkcl9zdHJlYW0KPiA+ICp4ZHIsIHN0cnVjdCBycGNfcnFzdCAqcmVxLAo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG5mczRfZmF0dHJfdmFsdWVfbWF4c3opCj4gPiDCoCNkZWZpbmUgZGVjb2RlX2dldGF0 dHJfbWF4c3rCoMKgwqAgKG9wX2RlY29kZV9oZHJfbWF4c3ogKwo+ID4gbmZzNF9mYXR0cl9tYXhz eikKPiA+IMKgI2RlZmluZSBlbmNvZGVfYXR0cnNfbWF4c3rCoMKgwqDCoMKgKG5mczRfZmF0dHJf Yml0bWFwX21heHN6ICsgXAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEgKyAyICsgMSArIFwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxICsg MiArIDEgKyAxICsgMSArIFwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZnM0X293bmVyX21heHN6ICsgXAo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG5mczRfZ3JvdXBfbWF4c3ogKyBcCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZnM0X2xhYmVsX21heHN6ICsgXAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMSArIFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEgKyBuZnN0aW1lNF9tYXhzeiArIFwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG5mc3RpbWU0X21heHN6ICsgbmZzdGltZTRfbWF4c3ogKyBcCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMSArIG5mc3Rp bWU0X21heHN6ICsgXAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMSArIG5mc3RpbWU0X21heHN6KQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmZz NF9sYWJlbF9tYXhzeiArIFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDIpCj4gPiDCoCNkZWZpbmUgZW5jb2RlX3NhdmVm aF9tYXhzesKgwqDCoMKgIChvcF9lbmNvZGVfaGRyX21heHN6KQo+ID4gwqAjZGVmaW5lIGRlY29k ZV9zYXZlZmhfbWF4c3rCoMKgwqDCoCAob3BfZGVjb2RlX2hkcl9tYXhzeikKPiA+IMKgI2RlZmlu ZSBlbmNvZGVfcmVzdG9yZWZoX21heHN6wqAgKG9wX2VuY29kZV9oZHJfbWF4c3opCj4gPiBAQCAt MTA4MSw2ICsxMDg0LDcgQEAgeGRyX2VuY29kZV9uZnN0aW1lNChfX2JlMzIgKnAsIGNvbnN0IHN0 cnVjdAo+ID4gdGltZXNwZWM2NCAqdCkKPiA+IMKgc3RhdGljIHZvaWQgZW5jb2RlX2F0dHJzKHN0 cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdAo+ID4gaWF0dHIgKmlhcCwKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb25zdCBzdHJ1Y3QgbmZzNF9sYWJlbCAqbGFiZWwsCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgdW1v ZGVfdCAqdW1hc2ssCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgbmZzNF9zdGF0eCAqc3RhdHgsCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25z dCB1aW50MzJfdCBhdHRybWFza1tdKQo+ID4gwqB7Cj4gPiBAQCAtMTE1Myw2ICsxMTU3LDM0IEBA IHN0YXRpYyB2b2lkIGVuY29kZV9hdHRycyhzdHJ1Y3QgeGRyX3N0cmVhbQo+ID4gKnhkciwgY29u c3Qgc3RydWN0IGlhdHRyICppYXAsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDCoAo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0 YXR4ICYmIChzdGF0eC0+ZmFfdmFsaWRbMF0gJgo+ID4gTkZTX0ZBX1ZBTElEX1RJTUVfQkFDS1VQ KSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIChhdHRybWFza1sxXSAmIEZBVFRSNF9XT1JE MV9USU1FX0JBQ0tVUCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBibXZh bFsxXSB8PSBGQVRUUjRfV09SRDFfVElNRV9CQUNLVVA7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbGVuICs9IChuZnN0aW1lNF9tYXhzeiA8PCAyKTsKPiA+ICvCoMKgwqDCoMKg wqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChzdGF0eCAmJiAoc3RhdHgtPmZhX3ZhbGlkWzBd ICYKPiA+IE5GU19GQV9WQUxJRF9USU1FX0NSRUFURSkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCAoYXR0cm1hc2tbMV0gJiBGQVRUUjRfV09SRDFfVElNRV9DUkVBVEUpKSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm12YWxbMV0gfD0gRkFUVFI0X1dPUkQxX1RJTUVf Q1JFQVRFOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiArPSAobmZzdGlt ZTRfbWF4c3ogPDwgMik7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoc3RhdHggJiYgKHN0YXR4LT5mYV92YWxpZFswXSAmIE5GU19GQV9WQUxJRF9BUkNI SVZFKSAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCAoYXR0cm1hc2tbMF0gJiBGQVRUUjRfV09S RDBfQVJDSElWRSkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBibXZhbFsw XSB8PSBGQVRUUjRfV09SRDBfQVJDSElWRTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBsZW4gKz0gNDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChzdGF0eCAmJiAoc3RhdHgtPmZhX3ZhbGlkWzBdICYgTkZTX0ZBX1ZBTElEX0hJRERFTikgJiYK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAgKGF0dHJtYXNrWzBdICYgRkFUVFI0X1dPUkQwX0hJRERF TikpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBibXZhbFswXSB8PSBGQVRU UjRfV09SRDBfSElEREVOOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlbiAr PSA0Owo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0 YXR4ICYmIChzdGF0eC0+ZmFfdmFsaWRbMF0gJiBORlNfRkFfVkFMSURfU1lTVEVNKSAmJgo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoCAoYXR0cm1hc2tbMV0gJiBGQVRUUjRfV09SRDFfU1lTVEVNKSkg ewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJtdmFsWzFdIHw9IEZBVFRSNF9X T1JEMV9TWVNURU07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuICs9IDQ7 Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGxhYmVs ICYmIChhdHRybWFza1syXSAmIEZBVFRSNF9XT1JEMl9TRUNVUklUWV9MQUJFTCkpIHsKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuICs9IDQgKyA0ICsgNCArIChYRFJfUVVB RExFTihsYWJlbC0+bGVuKSA8PCAyKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYm12YWxbMl0gfD0gRkFUVFI0X1dPUkQyX1NFQ1VSSVRZX0xBQkVMOwo+ID4gQEAgLTExNjMs MTIgKzExOTUsMjEgQEAgc3RhdGljIHZvaWQgZW5jb2RlX2F0dHJzKHN0cnVjdCB4ZHJfc3RyZWFt Cj4gPiAqeGRyLCBjb25zdCBzdHJ1Y3QgaWF0dHIgKmlhcCwKPiA+IMKgCj4gPiDCoMKgwqDCoMKg wqDCoMKgaWYgKGJtdmFsWzBdICYgRkFUVFI0X1dPUkQwX1NJWkUpCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGlhcC0+aWFfc2l6ZSk7 Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYm12YWxbMF0gJiBGQVRUUjRfV09SRDBfQVJDSElWRSkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcCsrID0gKHN0YXR4LT5mYV9mbGFn cyAmIE5GU19GQV9GTEFHX0FSQ0hJVkUpID8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY3B1X3RvX2JlMzIoMSkgOiBjcHVfdG9fYmUzMigwKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChibXZhbFswXSAmIEZBVFRSNF9XT1JEMF9ISURERU4pCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnArKyA9IChzdGF0eC0+ZmFfZmxhZ3MgJiBO RlNfRkFfRkxBR19ISURERU4pID8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY3B1X3RvX2JlMzIoMSkgOiBjcHVfdG9fYmUzMigwKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqBpZiAoYm12YWxbMV0gJiBGQVRUUjRfV09SRDFfTU9ERSkKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnArKyA9IGNwdV90b19iZTMyKGlhcC0+aWFfbW9kZSAm IFNfSUFMTFVHTyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dP UkQxX09XTkVSKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwID0geGRyX2Vu Y29kZV9vcGFxdWUocCwgb3duZXJfbmFtZSwKPiA+IG93bmVyX25hbWVsZW4pOwo+ID4gwqDCoMKg wqDCoMKgwqDCoGlmIChibXZhbFsxXSAmIEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCkKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcCA9IHhkcl9lbmNvZGVfb3BhcXVlKHAsIG93 bmVyX2dyb3VwLAo+ID4gb3duZXJfZ3JvdXBsZW4pOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGJt dmFsWzFdICYgRkFUVFI0X1dPUkQxX1NZU1RFTSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAqcCsrID0gKHN0YXR4LT5mYV9mbGFncyAmIE5GU19GQV9GTEFHX1NZU1RFTSkgPwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfdG9f YmUzMigxKSA6IGNwdV90b19iZTMyKDApOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChibXZhbFsx XSAmIEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU19TRVQpIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkgewo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnArKyA9Cj4g PiBjcHVfdG9fYmUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7Cj4gPiBAQCAtMTE3Niw2ICsx MjE3LDEwIEBAIHN0YXRpYyB2b2lkIGVuY29kZV9hdHRycyhzdHJ1Y3QgeGRyX3N0cmVhbQo+ID4g KnhkciwgY29uc3Qgc3RydWN0IGlhdHRyICppYXAsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0gZWxzZQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKnArKyA9Cj4gPiBjcHVfdG9fYmUzMihORlM0X1NFVF9UT19TRVJWRVJfVElN RSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGJtdmFsWzFd ICYgRkFUVFI0X1dPUkQxX1RJTUVfQkFDS1VQKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHAgPSB4ZHJfZW5jb2RlX25mc3RpbWU0KHAsICZzdGF0eC0+ZmFfdGltZV9iYWNrdXAp Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQ1JF QVRFKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHAgPSB4ZHJfZW5jb2RlX25m c3RpbWU0KHAsICZzdGF0eC0+ZmFfYnRpbWUpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChibXZh bFsxXSAmIEZBVFRSNF9XT1JEMV9USU1FX01PRElGWV9TRVQpIHsKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01USU1FX1NFVCkgewo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnArKyA9 Cj4gPiBjcHVfdG9fYmUzMihORlM0X1NFVF9UT19DTElFTlRfVElNRSk7Cj4gPiBAQCAtMTI0OCw3 ICsxMjkzLDcgQEAgc3RhdGljIHZvaWQgZW5jb2RlX2NyZWF0ZShzdHJ1Y3QgeGRyX3N0cmVhbQo+ ID4gKnhkciwgY29uc3Qgc3RydWN0IG5mczRfY3JlYXRlX2FyZyAqCj4gPiDCoAo+ID4gwqDCoMKg wqDCoMKgwqDCoGVuY29kZV9zdHJpbmcoeGRyLCBjcmVhdGUtPm5hbWUtPmxlbiwgY3JlYXRlLT5u YW1lLT5uYW1lKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBlbmNvZGVfYXR0cnMoeGRyLCBjcmVhdGUt PmF0dHJzLCBjcmVhdGUtPmxhYmVsLCAmY3JlYXRlLQo+ID4gPnVtYXNrLAo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcmVhdGUtPnNlcnZlciwgY3Jl YXRlLT5zZXJ2ZXItCj4gPiA+YXR0cl9iaXRtYXNrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLCBjcmVhdGUtPnNlcnZlciwgY3JlYXRlLT5zZXJ2ZXIt Cj4gPiA+YXR0cl9iaXRtYXNrKTsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgc3RhdGljIHZvaWQgZW5j b2RlX2dldGF0dHIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKPiA+IEBAIC0xNDM0LDEyICsxNDc5 LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmNvZGVfY3JlYXRlbW9kZShzdHJ1Y3QKPiA+IHhk cl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19vcAo+ID4gwqDCoMKgwqDCoMKgwqDCoGNh c2UgTkZTNF9DUkVBVEVfVU5DSEVDS0VEOgo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX1VOQ0hFQ0tFRCk7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuY29kZV9hdHRycyh4ZHIsIGFyZy0+dS5hdHRycywg YXJnLT5sYWJlbCwgJmFyZy0KPiA+ID51bWFzaywKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFyZy0+c2VydmVyLCBhcmct PnNlcnZlci0KPiA+ID5hdHRyX2JpdG1hc2spOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLCBhcmctPnNlcnZlciwgYXJnLT5z ZXJ2ZXItCj4gPiA+YXR0cl9iaXRtYXNrKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBORlM0X0NSRUFURV9HVUFSREVE Ogo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcCA9IGNwdV90b19iZTMyKE5G UzRfQ1JFQVRFX0dVQVJERUQpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl bmNvZGVfYXR0cnMoeGRyLCBhcmctPnUuYXR0cnMsIGFyZy0+bGFiZWwsICZhcmctCj4gPiA+dW1h c2ssCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBhcmctPnNlcnZlciwgYXJnLT5zZXJ2ZXItCj4gPiA+YXR0cl9iaXRtYXNr KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgTlVMTCwgYXJnLT5zZXJ2ZXIsIGFyZy0+c2VydmVyLQo+ID4gPmF0dHJfYml0bWFzayk7 Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ID4gwqDCoMKgwqDC oMKgwqDCoGNhc2UgTkZTNF9DUkVBVEVfRVhDTFVTSVZFOgo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqcCA9IGNwdV90b19iZTMyKE5GUzRfQ1JFQVRFX0VYQ0xVU0lWRSk7Cj4g PiBAQCAtMTQ0OSw3ICsxNDk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuY29kZV9jcmVhdGVt b2RlKHN0cnVjdAo+ID4geGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX29wCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCpwID0gY3B1X3RvX2JlMzIoTkZTNF9DUkVB VEVfRVhDTFVTSVZFNF8xKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5j b2RlX25mczRfdmVyaWZpZXIoeGRyLCAmYXJnLT51LnZlcmlmaWVyKTsKPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5jb2RlX2F0dHJzKHhkciwgYXJnLT51LmF0dHJzLCBhcmct PmxhYmVsLCAmYXJnLQo+ID4gPnVtYXNrLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJnLT5zZXJ2ZXIsIGFyZy0+c2Vy dmVyLQo+ID4gPmV4Y2xjcmVhdF9iaXRtYXNrKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCwgYXJnLT5zZXJ2ZXIsIGFyZy0+ c2VydmVyLQo+ID4gPmV4Y2xjcmVhdF9iaXRtYXNrKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g PiDCoH0KPiA+IMKgCj4gPiBAQCAtMTcxMiw4ICsxNzU3LDggQEAgc3RhdGljIHZvaWQgZW5jb2Rl X3NldGF0dHIoc3RydWN0IHhkcl9zdHJlYW0KPiA+ICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfc2V0 YXR0cmFyZ3MKPiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoGVuY29kZV9vcF9oZHIoeGRyLCBP UF9TRVRBVFRSLCBkZWNvZGVfc2V0YXR0cl9tYXhzeiwgaGRyKTsKPiA+IMKgwqDCoMKgwqDCoMKg wqBlbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgJmFyZy0+c3RhdGVpZCk7Cj4gPiAtwqDCoMKgwqDC oMKgwqBlbmNvZGVfYXR0cnMoeGRyLCBhcmctPmlhcCwgYXJnLT5sYWJlbCwgTlVMTCwgc2VydmVy LAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXJ2 ZXItPmF0dHJfYml0bWFzayk7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbmNvZGVfYXR0cnMoeGRyLCBh cmctPmlhcCwgYXJnLT5sYWJlbCwgTlVMTCwgYXJnLT5zdGF0eCwKPiA+IHNlcnZlciwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXJ2ZXItPmF0dHJfYml0bWFz ayk7Cj4gPiDCoH0KPiA+IMKgCj4gPiDCoHN0YXRpYyB2b2lkIGVuY29kZV9zZXRjbGllbnRpZChz dHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdAo+ID4gc3RydWN0IG5mczRfc2V0Y2xpZW50aWQg KnNldGNsaWVudGlkLCBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCj4gPiBkaWZmIC0tZ2l0IGEv ZnMvbmZzL25mc3RyYWNlLmMgYi9mcy9uZnMvbmZzdHJhY2UuYwo+ID4gaW5kZXggNWQxYmZjY2Ji NGRhLi4wYjg4ZGViMDIxNmUgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9uZnMvbmZzdHJhY2UuYwo+ID4g KysrIGIvZnMvbmZzL25mc3RyYWNlLmMKPiA+IEBAIC05LDYgKzksMTEgQEAKPiA+IMKgI2RlZmlu ZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCj4gPiDCoCNpbmNsdWRlICJuZnN0cmFjZS5oIgo+ID4gwqAK PiA+ICtFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKG5mc19pb2N0bF9maWxlX3N0YXR4X2dl dF9lbnRlcik7Cj4gPiArRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChuZnNfaW9jdGxfZmls ZV9zdGF0eF9nZXRfZXhpdCk7Cj4gPiArRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChuZnNf aW9jdGxfZmlsZV9zdGF0eF9zZXRfZW50ZXIpOwo+ID4gK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJP TF9HUEwobmZzX2lvY3RsX2ZpbGVfc3RhdHhfc2V0X2V4aXQpOwo+ID4gKwo+ID4gwqBFWFBPUlRf VFJBQ0VQT0lOVF9TWU1CT0xfR1BMKG5mc19mc3luY19lbnRlcik7Cj4gPiDCoEVYUE9SVF9UUkFD RVBPSU5UX1NZTUJPTF9HUEwobmZzX2ZzeW5jX2V4aXQpOwo+ID4gwqBFWFBPUlRfVFJBQ0VQT0lO VF9TWU1CT0xfR1BMKG5mc194ZHJfc3RhdHVzKTsKPiA+IGRpZmYgLS1naXQgYS9mcy9uZnMvbmZz dHJhY2UuaCBiL2ZzL25mcy9uZnN0cmFjZS5oCj4gPiBpbmRleCAyZWY3Y2ZmOGE0YmEuLmI2N2Rk MDg3ZmI0NyAxMDA2NDQKPiA+IC0tLSBhL2ZzL25mcy9uZnN0cmFjZS5oCj4gPiArKysgYi9mcy9u ZnMvbmZzdHJhY2UuaAo+ID4gQEAgLTE2Niw2ICsxNjYsMTEgQEAgREVGSU5FX05GU19JTk9ERV9F VkVOVF9ET05FKG5mc19mc3luY19leGl0KTsKPiA+IMKgREVGSU5FX05GU19JTk9ERV9FVkVOVChu ZnNfYWNjZXNzX2VudGVyKTsKPiA+IMKgREVGSU5FX05GU19JTk9ERV9FVkVOVF9ET05FKG5mc19z ZXRfY2FjaGVfaW52YWxpZCk7Cj4gPiDCoAo+ID4gK0RFRklORV9ORlNfSU5PREVfRVZFTlQobmZz X2lvY3RsX2ZpbGVfc3RhdHhfZ2V0X2VudGVyKTsKPiA+ICtERUZJTkVfTkZTX0lOT0RFX0VWRU5U X0RPTkUobmZzX2lvY3RsX2ZpbGVfc3RhdHhfZ2V0X2V4aXQpOwo+ID4gK0RFRklORV9ORlNfSU5P REVfRVZFTlQobmZzX2lvY3RsX2ZpbGVfc3RhdHhfc2V0X2VudGVyKTsKPiA+ICtERUZJTkVfTkZT X0lOT0RFX0VWRU5UX0RPTkUobmZzX2lvY3RsX2ZpbGVfc3RhdHhfc2V0X2V4aXQpOwo+ID4gKwo+ ID4gwqBUUkFDRV9FVkVOVChuZnNfYWNjZXNzX2V4aXQsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFRQX1BST1RPKAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKPiA+IGRpZmYgLS1n aXQgYS9mcy9uZnMvcHJvYy5jIGIvZnMvbmZzL3Byb2MuYwo+ID4gaW5kZXggNzNkY2FhOTlmYTli Li44ZmQ5NmQ5MzYzMGEgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9uZnMvcHJvYy5jCj4gPiArKysgYi9m cy9uZnMvcHJvYy5jCj4gPiBAQCAtNzE3LDYgKzcxNyw3IEBAIGNvbnN0IHN0cnVjdCBuZnNfcnBj X29wcyBuZnNfdjJfY2xpZW50b3BzID0gewo+ID4gwqDCoMKgwqDCoMKgwqDCoC5kaXJfaW5vZGVf b3BzwqDCoD0gJm5mc19kaXJfaW5vZGVfb3BlcmF0aW9ucywKPiA+IMKgwqDCoMKgwqDCoMKgwqAu ZmlsZV9pbm9kZV9vcHPCoD0gJm5mc19maWxlX2lub2RlX29wZXJhdGlvbnMsCj4gPiDCoMKgwqDC oMKgwqDCoMKgLmZpbGVfb3BzwqDCoMKgwqDCoMKgwqA9ICZuZnNfZmlsZV9vcGVyYXRpb25zLAo+ ID4gK8KgwqDCoMKgwqDCoMKgLmRpcl9vcHPCoMKgwqDCoMKgwqDCoMKgPSAmbmZzX2Rpcl9vcGVy YXRpb25zLAo+ID4gwqDCoMKgwqDCoMKgwqDCoC5nZXRyb290wqDCoMKgwqDCoMKgwqDCoD0gbmZz X3Byb2NfZ2V0X3Jvb3QsCj4gPiDCoMKgwqDCoMKgwqDCoMKgLnN1Ym1vdW50wqDCoMKgwqDCoMKg wqA9IG5mc19zdWJtb3VudCwKPiA+IMKgwqDCoMKgwqDCoMKgwqAudHJ5X2dldF90cmVlwqDCoMKg PSBuZnNfdHJ5X2dldF90cmVlLAo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2Zz LmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCj4gPiBpbmRleCAwNThmYzExMzM4ZDkuLjBjM2E1 ODU5ZjdmMyAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKPiA+ICsrKyBi L2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKPiA+IEBAIC01MDEsNiArNTAxLDcgQEAgZXh0ZXJuIF9f YmUzMiByb290X25mc19wYXJzZV9hZGRyKGNoYXIgKm5hbWUpOwo+ID4gLypfX2luaXQqLwo+ID4g wqBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnNfZmlsZV9vcGVyYXRpb25z Owo+ID4gwqAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZTX1Y0KQo+ID4gwqBleHRlcm4gY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2ZpbGVfb3BlcmF0aW9uczsKPiA+ICtleHRlcm4g Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9vcGVyYXRpb25zOwo+ID4gwqAj ZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwo+ID4gwqBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJl c3Nfc3BhY2Vfb3BlcmF0aW9ucyBuZnNfZmlsZV9hb3BzOwo+ID4gwqBleHRlcm4gY29uc3Qgc3Ry dWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuZnNfZGlyX2FvcHM7Cj4gPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAo+ID4g aW5kZXggMGQ1YjExYzFiZmVjLi45Y2U2MWY2ODBhMTMgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRl L2xpbnV4L25mc194ZHIuaAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKPiA+IEBA IC04MTIsNiArODEyLDcgQEAgc3RydWN0IG5mc19jcmVhdGVhcmdzIHsKPiA+IMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgaWF0dHIgKsKgwqDCoMKgwqDCoMKgwqDCoMKgc2F0dHI7Cj4gPiDCoH07Cj4g PiDCoAo+ID4gK3N0cnVjdCBuZnM0X3N0YXR4Owo+ID4gwqBzdHJ1Y3QgbmZzX3NldGF0dHJhcmdz IHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzwqDCoMKgwqDC oMKgwqBzZXFfYXJnczsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbmZzX2ZoICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmaDsKPiA+IEBAIC04MjAsNiArODIxLDcgQEAgc3Ry dWN0IG5mc19zZXRhdHRyYXJncyB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IG5m c19zZXJ2ZXIgKsKgwqDCoMKgwqDCoMKgc2VydmVyOyAvKiBOZWVkZWQgZm9yIG5hbWUKPiA+IG1h cHBpbmcgKi8KPiA+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1MzIgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJpdG1hc2s7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgY29u c3Qgc3RydWN0IG5mczRfbGFiZWzCoMKgwqDCoMKgwqDCoMKgwqAqbGFiZWw7Cj4gPiArwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgbmZzNF9zdGF0eMKgwqDCoMKgwqDCoMKgwqDCoCpzdGF0eDsK PiA+IMKgfTsKPiA+IMKgCj4gPiDCoHN0cnVjdCBuZnNfc2V0YWNsYXJncyB7Cj4gPiBAQCAtMTc0 NCw2ICsxNzQ2LDcgQEAgc3RydWN0IG5mc19ycGNfb3BzIHsKPiA+IMKgwqDCoMKgwqDCoMKgwqBj b25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqZGlyX2lub2RlX29wczsKPiA+IMKgwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqZmlsZV9pbm9kZV9vcHM7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZmlsZV9vcHM7 Cj4gPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpkaXJfb3Bz Owo+ID4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBubG1jbG50X29wZXJhdGlvbnMgKm5s bWNsbnRfb3BzOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnTCoMKgwqDCoMKgKCpnZXRy b290KSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvdWFwaS9saW51eC9uZnMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZnMuaAo+ ID4gaW5kZXggOTQ2Y2I2MmQ2NGIwLi5kZjg3ZGEzOWJjNDMgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNs dWRlL3VhcGkvbGludXgvbmZzLmgKPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZnMuaAo+ ID4gQEAgLTksNiArOSw4IEBACj4gPiDCoCNkZWZpbmUgX1VBUElfTElOVVhfTkZTX0gKPiA+IMKg Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKyNpbmNsdWRlIDxhc20vYnl0ZW9y ZGVyLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KPiA+IMKgCj4gPiDCoCNkZWZpbmUg TkZTX1BST0dSQU3CoMKgwqDCoDEwMDAwMwo+ID4gwqAjZGVmaW5lIE5GU19QT1JUwqDCoMKgwqDC oMKgwqAyMDQ5Cj4gPiBAQCAtMzUsNiArMzcsOTQgQEAKPiA+IMKgCj4gPiDCoCNkZWZpbmUgTkZT X1BJUEVfRElSTkFNRSAibmZzIgo+ID4gwqAKPiA+ICsvKiBORlMgaW9jdGxzICovCj4gPiArI2Rl ZmluZSBORlNfSU9DX0ZJTEVfU1RBVFhfR0VUwqBfSU9SKCdOJywgMiwgc3RydWN0Cj4gPiBuZnNf aW9jdGxfbmZzNF9zdGF0eCkKPiA+ICsjZGVmaW5lIE5GU19JT0NfRklMRV9TVEFUWF9TRVTCoF9J T1coJ04nLCAzLCBzdHJ1Y3QKPiA+IG5mc19pb2N0bF9uZnM0X3N0YXR4KQo+ID4gKwo+ID4gKy8q IE9wdGlvbnMgZm9yIHN0cnVjdCBuZnNfaW9jdGxfbmZzNF9zdGF0eCAqLwo+ID4gKyNkZWZpbmUg TkZTX0ZBX09QVElPTlNfU1lOQ19BU19TVEFUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDB4MDAwMAo+ID4gKyNkZWZpbmUgTkZTX0ZBX09QVElPTlNfRk9SQ0VfU1lOQ8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMDAwIC8qCj4gPiBT ZWUgc3RhdHggKi8KPiA+ICsjZGVmaW5lIE5GU19GQV9PUFRJT05TX0RPTlRfU1lOQ8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDQwMDAgLyoKPiA+IFNlZSBz dGF0eCAqLwo+ID4gKwo+ID4gKyNkZWZpbmUgTkZTX0ZBX1ZBTElEX1RJTUVfQ1JFQVRFwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMDFVTAo+ID4gKyNk ZWZpbmUgTkZTX0ZBX1ZBTElEX1RJTUVfQkFDS1VQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMDJVTAo+ID4gKyNkZWZpbmUgTkZTX0ZBX1ZBTElEX0FS Q0hJVkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDAwMDA0VUwKPiA+ICsjZGVmaW5lIE5GU19GQV9WQUxJRF9ISURERU7CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMDhVTAo+ID4g KyNkZWZpbmUgTkZTX0ZBX1ZBTElEX1NZU1RFTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMDAxMFVMCj4gPiArI2RlZmluZSBORlNfRkFf VkFMSURfT1dORVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgwMDAyMFVMCj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfT1dORVJfR1JP VVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMDA0MFVM Cj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfQVRJTUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMDA4MFVMCj4gPiArI2RlZmluZSBO RlNfRkFfVkFMSURfTVRJTUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgwMDEwMFVMCj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfQ1RJ TUXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgwMDIwMFVMCj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfT0ZGTElORcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDA0MDBVTAo+ID4g KyNkZWZpbmUgTkZTX0ZBX1ZBTElEX01PREXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwODAwVUwKPiA+ICsjZGVmaW5lIE5GU19G QV9WQUxJRF9OTElOS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDAxMDAwVUwKPiA+ICsjZGVmaW5lIE5GU19GQV9WQUxJRF9CTEtTSVpF wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgw MjAwMFVMCj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfSU5PwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA0MDAwVUwKPiA+ICsj ZGVmaW5lIE5GU19GQV9WQUxJRF9ERVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDgwMDBVTAo+ID4gKyNkZWZpbmUgTkZTX0ZB X1ZBTElEX1JERVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDEwMDAwVUwKPiA+ICsjZGVmaW5lIE5GU19GQV9WQUxJRF9TSVpFwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgyMDAwMFVMCj4gPiArI2RlZmluZSBORlNfRkFfVkFMSURfQkxPQ0tTwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDQwMDAwVUwKPiA+ICsK PiA+ICsjZGVmaW5lIE5GU19GQV9WQUxJRF9BTExfQVRUUl8wICggTkZTX0ZBX1ZBTElEX1RJTUVf Q1JFQVRFIHwgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJ RF9USU1FX0JBQ0tVUCB8IFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBORlNf RkFfVkFMSURfQVJDSElWRSB8IFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBO RlNfRkFfVkFMSURfSElEREVOIHwgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oE5GU19GQV9WQUxJRF9TWVNURU0gfCBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgTkZTX0ZBX1ZBTElEX09XTkVSIHwgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoE5GU19GQV9WQUxJRF9PV05FUl9HUk9VUCB8IFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBORlNfRkFfVkFMSURfQVRJTUUgfCBcCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgTkZTX0ZBX1ZBTElEX01USU1FIHwgXAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9DVElNRSB8IFwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBORlNfRkFfVkFMSURfT0ZGTElORSB8IFwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBORlNfRkFfVkFMSURfTU9ERSB8IFwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBORlNfRkFfVkFMSURfTkxJTksgfCBcCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgTkZTX0ZBX1ZBTElEX0JMS1NJWkUgfCBcCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgTkZTX0ZBX1ZBTElEX0lOTyB8IFwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBORlNfRkFfVkFMSURfREVWIHwgXAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9SREVWIHwgXAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9TSVpFIHwgXAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoE5GU19GQV9WQUxJRF9CTE9DS1MpCj4gPiArCj4gPiArI2RlZmlu ZSBORlNfRkFfRkxBR19BUkNISVZFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoMVVMIDw8IDApCj4gPiArI2RlZmluZSBORlNfRkFfRkxBR19I SURERU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKDFVTCA8PCAxKQo+ID4gKyNkZWZpbmUgTkZTX0ZBX0ZMQUdfU1lTVEVNwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgxVUwgPDwg MikKPiA+ICsjZGVmaW5lIE5GU19GQV9GTEFHX09GRkxJTkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgxVUwgPDwgMykKPiA+ICsKPiA+ICtz dHJ1Y3QgbmZzX2lvY3RsX3RpbWVzcGVjIHsKPiA+ICvCoMKgwqDCoMKgwqDCoF9fczY0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoHR2X3NlYzsKPiA+ICvCoMKgwqDCoMKgwqDCoF9fczY0wqDCoMKgwqDC oMKgwqDCoMKgwqDCoHR2X25zZWM7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbmZzX2lvY3Rs X25mczRfc3RhdHggewo+ID4gK8KgwqDCoMKgwqDCoMKgX19zMzLCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmVhbF9mZDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHJlYWwgRkQgdG8g dXNlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0xIG1l YW5zIHVzZQo+ID4gY3VycmVudCBmaWxlICovCj4gPiArwqDCoMKgwqDCoMKgwqBfX3UzMsKgwqDC oMKgwqDCoMKgwqDCoMKgwqBmYV9vcHRpb25zOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgX191 NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfcmVxdWVzdFsyXTvCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIEF0dHJpYnV0ZXMgdG8KPiA+IHJldHJpZXZlICovCj4gPiArwqDCoMKgwqDCoMKgwqBfX3U2 NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYV92YWxpZFsyXTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAvKiBBdHRyaWJ1dGVzIHNldAo+ID4gKi8KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBuZnNfaW9jdGxfdGltZXNwZWMgZmFfdGltZV9iYWNrdXA7LyogQmFja3VwIHRpbWUgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfaW9jdGxfdGltZXNwZWMgZmFfYnRpbWU7wqDCoMKg wqAgLyogQmlydGggdGltZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgX191NjTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZmFfZmxhZ3M7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmxhZyBh dHRyaWJ1dGVzCj4gPiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogT3JkaW5hcnkgYXR0cmlidXRl cyBmb2xsb3cgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBuZnNfaW9jdGxfdGltZXNwZWMg ZmFfYXRpbWU7wqDCoMKgwqDCoC8qIEFjY2VzcyB0aW1lICovCj4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbmZzX2lvY3RsX3RpbWVzcGVjIGZhX210aW1lO8KgwqDCoMKgwqAvKiBNb2RpZnkgdGlt ZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19pb2N0bF90aW1lc3BlYyBmYV9jdGlt ZTvCoMKgwqDCoMKgLyogQ2hhbmdlIHRpbWUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoF9fdTMywqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZhX293bmVyX3VpZDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyog T3duZXIgVXNlciBJRCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzLCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZmFfZ3JvdXBfZ2lkO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBQcmltYXJ5IEdyb3Vw IElECj4gPiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZmFfbW9kZTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE1vZGUgKi8KPiA+ICvC oMKgwqDCoMKgwqDCoF9fdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhX25saW5rOwo+ID4gK8Kg wqDCoMKgwqDCoMKgX191MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfYmxrc2l6ZTsKPiA+ICvC oMKgwqDCoMKgwqDCoF9fdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhX3NwYXJlO8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEFsaWdubWVudCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKg X191NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfaW5vOwo+ID4gK8KgwqDCoMKgwqDCoMKgX191 MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgX191MzLC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZmFfcmRldjsKPiA+ICvCoMKgwqDCoMKgwqDCoF9fczY0wqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZhX3NpemU7Cj4gPiArwqDCoMKgwqDCoMKgwqBfX3M2NMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBmYV9ibG9ja3M7Cj4gPiArwqDCoMKgwqDCoMKgwqBfX3U2NMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBmYV9wYWRkaW5nWzRdOwo+ID4gK307Cj4gPiArCj4gPiDCoC8qCj4g PiDCoCAqIE5GUyBzdGF0cy4gVGhlIGdvb2QgdGhpbmcgd2l0aCB0aGVzZSB2YWx1ZXMgaXMgdGhh dCBORlN2Mwo+ID4gZXJyb3JzIGFyZQo+ID4gwqAgKiBhIHN1cGVyc2V0IG9mIE5GU3YyIGVycm9y cyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIE5GU0VSUl9XRkxVU0gKPiA+IHdoaWNoCj4gPiAtLSAK PiA+IDIuMzMuMQoKLS0gClRyb25kIE15a2xlYnVzdApMaW51eCBORlMgY2xpZW50IG1haW50YWlu ZXIsIEhhbW1lcnNwYWNlCnRyb25kLm15a2xlYnVzdEBoYW1tZXJzcGFjZS5jb20KCgo=