From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4B9FCA0543; Thu, 15 Dec 2022 09:33:45 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E4D4A40684; Thu, 15 Dec 2022 09:33:44 +0100 (CET) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2088.outbound.protection.outlook.com [40.107.6.88]) by mails.dpdk.org (Postfix) with ESMTP id 1BECA40223 for ; Thu, 15 Dec 2022 09:33:43 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iRCAr+QULzFFaxzk90nZFe7DLgtW3BpUZY48/98XVW706Q8aQ9GVLH0A9HsUaHB+8khl87gZruMxGOxB2zB8LYZa6MKuslkE0EqPBt/w/2B8G+EYfk1kbQYv8UoRIdFpqaJ6Y/EB8aIRWq0O8KKghMr2h7jdf1MFcX0l5D89Kd1HFhQEdjWgMT0IoRa6nMknJmbSR2XbRq2emSjh428LlI3EudvLdBL6CFW8qIAPec+WrgNfL/htLOS1AJOuBGIg5nSZx7ii9hFyAaeF/kPkE2vj2zjJqLB16d+6kY0r4C9Gi0rpOl+KHW8JCK/EXE5IAB3jfnnYFFR4Kz3b+VpcxA== 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=n2yw1m0kxYyVpJtFKN5lRRwd0gOFGQzX6IPo07zIqyw=; b=R3idWS8IRv18K3P3hR/zh2i5Ya7h2EfxDbQ4R8q8TT7xptzgKZT6bweda0rzOyofjAS2tRYVJrhmfweQMvFmpulAfzYQl9ztWE38sKr6Q+hCtckEmtCh+WsnOSbABth3/SgBfWjkqHu7WdfCxBQhE91rNjKtUSgKp2ehSOSwgBdLl0mExMl5e2WOeuoeLMt5CqMEq9fKFRpzRTXLRdov5yaZdQN5fHzcYxKCo0F1O6cCBHItd6Y/F7gRGMDiZdZ59xcDzqMoKxbqS7Wc4uYm2iMe6BRDUzPlppB4aD+ZeN+LfJtTqMjdjQpXZcptP6rvI1QFRrRRSYpTMlkBDHG5Lg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ericsson.com; dmarc=pass action=none header.from=ericsson.com; dkim=pass header.d=ericsson.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n2yw1m0kxYyVpJtFKN5lRRwd0gOFGQzX6IPo07zIqyw=; b=HFuu2EwID1QTqrkN+iQdWza85WdU8BEeuKfTseWU6PfkSjGReso65Q5HYo65Gcwrh8bTNY5OXmAPysCnMF8bFYDy6ypYrSRNxXFpBjOWryv+EpnTJe3jkP9lYcjf/4Xkw8YzLRWT7mR7sINncje5QZvom4NAATdHKjpvrhHkzIo= Received: from DB7PR07MB5978.eurprd07.prod.outlook.com (2603:10a6:10:80::15) by PR3PR07MB6890.eurprd07.prod.outlook.com (2603:10a6:102:73::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.11; Thu, 15 Dec 2022 08:33:41 +0000 Received: from DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::aa92:63bb:c47:f8e5]) by DB7PR07MB5978.eurprd07.prod.outlook.com ([fe80::aa92:63bb:c47:f8e5%4]) with mapi id 15.20.5924.012; Thu, 15 Dec 2022 08:33:41 +0000 From: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= To: Tomasz Duszynski , "dev@dpdk.org" CC: "thomas@monjalon.net" , "jerinj@marvell.com" Subject: Re: [PATCH 1/4] eal: add generic support for reading PMU events Thread-Topic: [PATCH 1/4] eal: add generic support for reading PMU events Thread-Index: AQHY9bInCzWs1WSPnEStRRWvHAf8OK5u1HkA Date: Thu, 15 Dec 2022 08:33:41 +0000 Message-ID: <1aa8af9a-e47a-4adc-ac55-084b29e7aee7@ericsson.com> References: <20221111094338.2736065-1-tduszynski@marvell.com> <20221111094338.2736065-2-tduszynski@marvell.com> In-Reply-To: <20221111094338.2736065-2-tduszynski@marvell.com> Accept-Language: en-US, sv-SE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ericsson.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DB7PR07MB5978:EE_|PR3PR07MB6890:EE_ x-ms-office365-filtering-correlation-id: 5101177d-0b6b-4041-5156-08dade7711fe x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: s48SNdvYdn9BEp8uIn/NiecqOC5/FhkiJdptUUBNaTxNbNRMilD5xwC8ZlCd+SRoBsJNN/JQ+8QLBKq7fkQE7jtpX1PH22flHhjCAt5UiHROSO890XJK4fdVPHiy5UvlRDt2oxa8sT1IE/rMD+j6o/WB13NOAhqPvbKikKDH9otsyuCXFvvQwXxA8qDwY+SFjb4lhId6SjnwW4ZIuteas8Wi9g9MwFBbIDNGD6aPJ6DMcqn5QtOuvqhiv4v3agDHd07zchBSW53bnNoFpnT12w3hn2qYc/GUuUuu3TbonKZW7EYViU97K08LsS6bxjbu8w2JL/BwX6MwqEawDc3qv++H3lxP03koqlCsU84dK4nOg+PRCARSkOXQYmKnLE7blXQjXA7p9o7CaiOFyJ7tnM4vYLWwm5/Dmch0uOY7Ym36FpWPJtMpBcxPnG+LQwhKIQiKBMYKJwokDJLQvnf4hcDTztO7LMKwKOxFko/s17V7QQSJa9NKkKn3M6J+x2GDG0+6PtcRwcaKQkaZG6qEB2b6ywBzwfuc5CkyuZUO1/5QAsCcwTr0dIRdWf+90oddwDQlSn5rJHeI1ckDPhFbedtdukdZ40oDCBTbLPF6WOJSdC77xVs0Xph3ohv86fGn5Zq/ReYwBVK57M2+brYuohfS2y390RoX4TgJoVn4ZmfOyoSeWNvSWHlmwH+9hTe4zbYpIkJVv5cx4aNi9kX4uUFFpr59ly5cRsB4E1LyWI5olcFe1qnX985rqBW6ePhoAHwxuInAos0UiejzlIaIY/l5XurpjUIL/PWDOXFIL30z9Uhkh4HOMP/fkzXC0y04ScSMCj00rFztEGIjBHTlfg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR07MB5978.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(366004)(376002)(39860400002)(396003)(136003)(346002)(451199015)(85182001)(36756003)(2616005)(6486002)(478600001)(85202003)(26005)(53546011)(186003)(6506007)(71200400001)(82960400001)(38070700005)(6512007)(86362001)(31696002)(83380400001)(5660300002)(38100700002)(122000001)(66899015)(8936002)(30864003)(41300700001)(31686004)(2906002)(4001150100001)(66476007)(64756008)(66446008)(76116006)(66946007)(54906003)(91956017)(66556008)(110136005)(316002)(8676002)(4326008)(41533002)(45980500001)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OXFYb1JqWEN1ZUpLSmNlV0pBVjJxcEcxMmVHOVNEb1UyTGg4SzhMNEJNZkpX?= =?utf-8?B?emh0RFZ3M3F6UysvMUFqUmJjRXdJNTAvazhhR2xZTG03L3F4b3lMZDQvQkJk?= =?utf-8?B?STkrMy9RQ1lDdHlZWWpOYU5Db2xYbXhmSDFYY0VOU0JqVkx1M3Y3VjhlR1l6?= =?utf-8?B?ejIrM1Nsd3F0VUlFNnJCV2NUTC82OVFuUVR3YWl4Y1NWSW5HWVM2dTZmUkxa?= =?utf-8?B?MGFGeVpBa21td1FFdnl5b0gzNjhvZVVZVk9WaVNBTjlLcTlwNndSTENUNmEr?= =?utf-8?B?andRa3FIbWprV1BmQnVUVDBFbFNPWTdWd0t0Y0hVN2Y2blltbjZQWGpvMWdR?= =?utf-8?B?bldxTk5IdWRYNnhpZmRGL1ppWHBJemZSdVNRQVZPU25la3RBMDJhOXAxaHA4?= =?utf-8?B?cFlLTmptemlyZGhpNDJzdzZXRzRXcTlWNGsxOEw0SHBXWVYxOENNb2lLOVB6?= =?utf-8?B?OHppZ051N0J5Z0wyaldVVm41SXFzZ2dkdXNDZGR6NGV4Yy8yUDUvdTFMVHUy?= =?utf-8?B?d0VWMjd2TSsyY08wbW05c05HNFZkUEo0Y2I2S3pFY0dKeTc2dTJ0WDk0T01X?= =?utf-8?B?UUllQ25kNXZJcU5taEo1OWJtQjltaThWc3ZXaWpIZWF2UjUrbUUrWlNkaUlB?= =?utf-8?B?YkUwTTJKT1lIUHhOZUVpVnE1NHFvTHlzd1ZvVUFEVTVqWHg1UVgrSysrSjZs?= =?utf-8?B?UzZLalNUa1p2cDVRWThSa1kzVXhTakR1VElTTjBoYXJxK2ZIT0JRc2paUEV2?= =?utf-8?B?MUxkdjFBdmZpODVXL09QWWVuMWUrb3NJay9XZ3k4RUNvek9Fc0JMdmNCaWdU?= =?utf-8?B?amVsaGFPaStJbEJVUmxXVk9QVXFUSjNVbCtCRDdUdG96UFl2VnBGVlZpaUI2?= =?utf-8?B?MGtVODdiZFBzRTZwZmYxNmFSM3p6TmpFa1hacGp0QS83Z09FVDc5OWY2UEtG?= =?utf-8?B?TW9pNTRZTytUY2NuQW4ra2dXYWpGUk9SOHpoUksxSXBKNklxaGdXNENIdG8z?= =?utf-8?B?UnRVbHcvRXhydkhYVHEyNytraTJkVUgyZ2FWaFhUek1YUEdvZWFFb0FBZStT?= =?utf-8?B?ZHFmT2Jma3JWbXlpcXljWlJOM3U5VlRyZlVKRGRJNDVsWHNBMkJJSUl0bElV?= =?utf-8?B?a0xRazcyOTZMZzZZOVR6alZKM1ZVL01TTXU2TXV2dXVzS1RvRHpOSVZoVUpT?= =?utf-8?B?cW1MaG1xQjdrQU0xR1ZHZ1JiUXg2bTAySjZ6TTVBTkZzSVVJSkxSaDBpL0xF?= =?utf-8?B?elo5UXcyUmNNQWlHbEVPQVM4L2FxSTZvZUtOYlBmUnRBaXBFRFN1ZHAvUHA0?= =?utf-8?B?RTVHbTBST1llMndWMXBpZG5xMTlZSkRzdkp6VGg5N2U4TDN3Mkl4Q1VYZGhv?= =?utf-8?B?aFJvK1p5cnBLN3dSR2EreDA5K1Qxa2NNT1ZkZDF4UkI3SFpyYlNZeHp3UTI3?= =?utf-8?B?VjBKV1I3dkpGc0ROQWZPWllMS1FSRjVRL0szSDBubjFTZ09FcWFCTS84L2Jj?= =?utf-8?B?WU9BYjgwR0oxQ3dKN01MYmdxY2RRNS9YUzIxVWtBY0pqbWNKclVDRHlEZzVn?= =?utf-8?B?MVU0RHVLUDRrSHFhOExpQThsNkRYVGhqK09GRU1lV3lpZ3g3QVFoeXN1VTBu?= =?utf-8?B?WjUwUFpMVnVoS1QvUGVzODRtRFd3NEU3MzdYUHVZdjhTUVF6amliN3RKY2RM?= =?utf-8?B?RkRnRllxaFp5N2FpSjM3TmlKcjdQc0FlZTRkWmFrQkxPcWNuVkw3ei9zQnZN?= =?utf-8?B?ZGxUdERWaWpqMTgrY1JWTURCajRKams5NHdwcVRlSHIwaXMvNzM0WHhXYkRx?= =?utf-8?B?S1hEbFNnd2RzY3dLWlg0RVN3Z1QwS3NPRFNNRGE0eCtTL0kvQnE2bXJKenNm?= =?utf-8?B?QUdsNmQvRktwbEc2dHZjaHgwVlJLVmwwbDRHUkxBM2FLbXBRZlFiRUxvbUR1?= =?utf-8?B?NUswNzVmRFZqL0g1UVpkdzV4NUhvdEhUbGFSNlpFYWh3M1p3VU5henpJc2RI?= =?utf-8?B?aFBwUHFWK054SXhaRkRlK3oyaTFlYVVsWTJNaGZQS2pvc2pDOUo3dXh4a2pz?= =?utf-8?B?TlAvZzBQVjJGQkRUUUk3RjBJMnFkZlRLR1pHcWVCT0pOaWZLWFhtZ3p4T3ls?= =?utf-8?B?L1JBaDVUYnBHWVE4MFkwT2NTVzVsMjA1bkpnT0xYRGNwNi9uZHF3OGlscTBo?= =?utf-8?B?T1E9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DB7PR07MB5978.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5101177d-0b6b-4041-5156-08dade7711fe X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Dec 2022 08:33:41.0388 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /RWqMIAKuYvf1mKqQNXUchyJCT/sc908SeWoXfvOpsVRQGhTrlDLuoW0d8xFPLP7+/WaMPJit5snAZ4EBKrDT3cxwcF4nHZTfL/eSaZIGSc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR07MB6890 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org T24gMjAyMi0xMS0xMSAxMDo0MywgVG9tYXN6IER1c3p5bnNraSB3cm90ZToNCj4gQWRkIHN1cHBv cnQgZm9yIHByb2dyYW1taW5nIFBNVSBjb3VudGVycyBhbmQgcmVhZGluZyB0aGVpciB2YWx1ZXMN Cj4gaW4gcnVudGltZSBieXBhc3Npbmcga2VybmVsIGNvbXBsZXRlbHkuDQo+IA0KPiBUaGlzIGlz IGVzcGVjaWFsbHkgdXNlZnVsIGluIGNhc2VzIHdoZXJlIENQVSBjb3JlcyBhcmUgaXNvbGF0ZWQN Cj4gKG5vaHpfZnVsbCkgaS5lIHJ1biBkZWRpY2F0ZWQgdGFza3MuIEluIHN1Y2ggY2FzZXMgb25l IGNhbm5vdCB1c2UNCj4gc3RhbmRhcmQgcGVyZiB1dGlsaXR5IHdpdGhvdXQgc2FjcmlmaWNpbmcg bGF0ZW5jeSBhbmQgcGVyZm9ybWFuY2UuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBUb21hc3ogRHVz enluc2tpIDx0ZHVzenluc2tpQG1hcnZlbGwuY29tPg0KPiAtLS0NCj4gICBhcHAvdGVzdC9tZXNv bi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsNCj4gICBhcHAvdGVzdC90ZXN0X3BtdS5j ICAgICAgICAgICAgICAgICAgIHwgIDQxICsrKw0KPiAgIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9w cm9maWxlX2FwcC5yc3QgfCAgIDggKw0KPiAgIGxpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkICAg ICAgICAgICAgfCAgIDMgKw0KPiAgIGxpYi9lYWwvY29tbW9uL3BtdV9wcml2YXRlLmggICAgICAg ICAgfCAgNDEgKysrDQo+ICAgbGliL2VhbC9jb21tb24vcnRlX3BtdS5jICAgICAgICAgICAgICB8 IDQ1NSArKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIGxpYi9lYWwvaW5jbHVkZS9tZXNv bi5idWlsZCAgICAgICAgICAgfCAgIDEgKw0KPiAgIGxpYi9lYWwvaW5jbHVkZS9ydGVfcG11Lmgg ICAgICAgICAgICAgfCAyMDQgKysrKysrKysrKysrDQo+ICAgbGliL2VhbC9saW51eC9lYWwuYyAg ICAgICAgICAgICAgICAgICB8ICAgNCArDQo+ICAgbGliL2VhbC92ZXJzaW9uLm1hcCAgICAgICAg ICAgICAgICAgICB8ICAgMyArDQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgNzYxIGluc2VydGlvbnMo KykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgYXBwL3Rlc3QvdGVzdF9wbXUuYw0KPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWIvZWFsL2NvbW1vbi9wbXVfcHJpdmF0ZS5oDQo+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvZWFsL2luY2x1ZGUvcnRlX3BtdS5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3Qv bWVzb24uYnVpbGQgYi9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPiBpbmRleCBmMzRkMTllM2MzLi45 M2IzMzAwMzA5IDEwMDY0NA0KPiAtLS0gYS9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPiArKysgYi9h cHAvdGVzdC9tZXNvbi5idWlsZA0KPiBAQCAtMTQzLDYgKzE0Myw3IEBAIHRlc3Rfc291cmNlcyA9 IGZpbGVzKA0KPiAgICAgICAgICAgJ3Rlc3RfdGltZXJfcmFjZWNvbmQuYycsDQo+ICAgICAgICAg ICAndGVzdF90aW1lcl9zZWNvbmRhcnkuYycsDQo+ICAgICAgICAgICAndGVzdF90aWNrZXRsb2Nr LmMnLA0KPiArICAgICAgICAndGVzdF9wbXUuYycsDQo+ICAgICAgICAgICAndGVzdF90cmFjZS5j JywNCj4gICAgICAgICAgICd0ZXN0X3RyYWNlX3JlZ2lzdGVyLmMnLA0KPiAgICAgICAgICAgJ3Rl c3RfdHJhY2VfcGVyZi5jJywNCj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0L3Rlc3RfcG11LmMgYi9h cHAvdGVzdC90ZXN0X3BtdS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAuLmZkMzMxYWY5ZWUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9hcHAvdGVzdC90ZXN0 X3BtdS5jDQo+IEBAIC0wLDAgKzEsNDEgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChDKSAyMDIyIE1hcnZlbGwgSW50ZXJuYXRp b25hbCBMdGQuDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9wbXUuaD4NCj4gKw0KPiAr I2luY2x1ZGUgInRlc3QuaCINCj4gKw0KPiArc3RhdGljIGludA0KPiArdGVzdF9wbXVfcmVhZCh2 b2lkKQ0KPiArew0KPiArCXVpbnQ2NF90IHZhbCA9IDA7DQo+ICsJaW50IHRyaWVzID0gMTA7DQo+ ICsJaW50IGV2ZW50ID0gLTE7DQo+ICsNCj4gKwl3aGlsZSAodHJpZXMtLSkNCj4gKwkJdmFsICs9 IHJ0ZV9wbXVfcmVhZChldmVudCk7DQo+ICsNCj4gKwlpZiAodmFsID09IDApDQo+ICsJCXJldHVy biBURVNUX0ZBSUxFRDsNCj4gKw0KPiArCXJldHVybiBURVNUX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBzdHJ1Y3QgdW5pdF90ZXN0X3N1aXRlIHBtdV90ZXN0cyA9IHsNCj4gKwkuc3Vp dGVfbmFtZSA9ICJwbXUgYXV0b3Rlc3QiLA0KPiArCS5zZXR1cCA9IE5VTEwsDQo+ICsJLnRlYXJk b3duID0gTlVMTCwNCj4gKwkudW5pdF90ZXN0X2Nhc2VzID0gew0KPiArCQlURVNUX0NBU0UodGVz dF9wbXVfcmVhZCksDQo+ICsJCVRFU1RfQ0FTRVNfRU5EKCkNCj4gKwl9DQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgaW50DQo+ICt0ZXN0X3BtdSh2b2lkKQ0KPiArew0KPiArCXJldHVybiB1bml0X3Rl c3Rfc3VpdGVfcnVubmVyKCZwbXVfdGVzdHMpOw0KPiArfQ0KPiArDQo+ICtSRUdJU1RFUl9URVNU X0NPTU1BTkQocG11X2F1dG90ZXN0LCB0ZXN0X3BtdSk7DQo+IGRpZmYgLS1naXQgYS9kb2MvZ3Vp ZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3By b2ZpbGVfYXBwLnJzdA0KPiBpbmRleCBiZDY3MDBlZjg1Li44ZmMxYjIwY2FiIDEwMDY0NA0KPiAt LS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+ICsrKyBiL2RvYy9n dWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4gQEAgLTcsNiArNywxNCBAQCBQcm9m aWxlIFlvdXIgQXBwbGljYXRpb24NCj4gICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJl IG1ldGhvZHMgb2YgcHJvZmlsaW5nIERQREsgYXBwbGljYXRpb25zIG9uDQo+ICAgZGlmZmVyZW50 IGFyY2hpdGVjdHVyZXMuDQo+ICAgDQo+ICtQZXJmb3JtYW5jZSBjb3VudGVyIGJhc2VkIHByb2Zp bGluZw0KPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKw0KPiArTWFq b3JpdHkgb2YgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0IHNvbWUgc29ydCBoYXJkd2FyZSBtZWFzdXJl bWVudCB1bml0IHdoaWNoIHByb3ZpZGVzIGEgc2V0IG9mDQo+ICtwcm9ncmFtbWFibGUgY291bnRl cnMgdGhhdCBtb25pdG9yIHNwZWNpZmljIGV2ZW50cy4gVGhlcmUgYXJlIGRpZmZlcmVudCB0b29s cyB3aGljaCBjYW4gZ2F0aGVyDQo+ICt0aGF0IGluZm9ybWF0aW9uLCBwZXJmIGJlaW5nIGFuIGV4 YW1wbGUgaGVyZS4gVGhvdWdoIGluIHNvbWUgc2NlbmFyaW9zLCBlZy4gd2hlbiBDUFUgY29yZXMg YXJlDQo+ICtpc29sYXRlZCAobm9oel9mdWxsKSBhbmQgcnVuIGRlZGljYXRlZCB0YXNrcywgdXNp bmcgcGVyZiBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIHN1Y2ggY2FzZXMgb25lIGNhbg0KPiArcmVh ZCBzcGVjaWZpYyBldmVudHMgZGlyZWN0bHkgZnJvbSBhcHBsaWNhdGlvbiB2aWEgYGBydGVfcG11 X3JlYWQoKWBgLg0KPiAgIA0KPiAgIFByb2ZpbGluZyBvbiB4ODYNCj4gICAtLS0tLS0tLS0tLS0t LS0tDQo+IGRpZmYgLS1naXQgYS9saWIvZWFsL2NvbW1vbi9tZXNvbi5idWlsZCBiL2xpYi9lYWwv Y29tbW9uL21lc29uLmJ1aWxkDQo+IGluZGV4IDkxNzc1OGNjNjUuLmQ2ZDA1YjU2ZjMgMTAwNjQ0 DQo+IC0tLSBhL2xpYi9lYWwvY29tbW9uL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9lYWwvY29t bW9uL21lc29uLmJ1aWxkDQo+IEBAIC0zOCw2ICszOCw5IEBAIHNvdXJjZXMgKz0gZmlsZXMoDQo+ ICAgICAgICAgICAncnRlX3NlcnZpY2UuYycsDQo+ICAgICAgICAgICAncnRlX3ZlcnNpb24uYycs DQo+ICAgKQ0KPiAraWYgaXNfbGludXgNCj4gKyAgICBzb3VyY2VzICs9IGZpbGVzKCdydGVfcG11 LmMnKQ0KPiArZW5kaWYNCj4gICBpZiBpc19saW51eCBvciBpc193aW5kb3dzDQo+ICAgICAgIHNv dXJjZXMgKz0gZmlsZXMoJ2VhbF9jb21tb25fZHlubWVtLmMnKQ0KPiAgIGVuZGlmDQo+IGRpZmYg LS1naXQgYS9saWIvZWFsL2NvbW1vbi9wbXVfcHJpdmF0ZS5oIGIvbGliL2VhbC9jb21tb24vcG11 X3ByaXZhdGUuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5j YWRlNDI0NWU2DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9jb21tb24vcG11X3By aXZhdGUuaA0KPiBAQCAtMCwwICsxLDQxIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBNYXJ2ZWxsDQo+ICsgKi8N Cj4gKw0KPiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4gKyNkZWZpbmUgX1BNVV9QUklWQVRF X0hfDQo+ICsNCj4gKy8qKg0KPiArICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIFBNVSBpbml0IGNh bGxiYWNrLg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nl c3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gKyAqLw0KPiAraW50DQo+ICtwbXVfYXJj aF9pbml0KHZvaWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBQ TVUgY2xlYW51cCBjYWxsYmFjay4NCj4gKyAqLw0KPiArdm9pZA0KPiArcG11X2FyY2hfZmluaSh2 b2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBBcHBseSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2V0 dGluZ3MgdG8gY29uZmlnIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHN5c2NhbGwuDQo+ICsgKi8NCj4g K3ZvaWQNCj4gK3BtdV9hcmNoX2ZpeHVwX2NvbmZpZyh1aW50NjRfdCBjb25maWdbM10pOw0KPiAr DQo+ICsvKioNCj4gKyAqIEluaXRpYWxpemUgUE1VIHRyYWNpbmcgaW50ZXJuYWxzLg0KPiArICov DQo+ICt2b2lkDQo+ICtlYWxfcG11X2luaXQodm9pZCk7DQo+ICsNCj4gKy8qKg0KPiArICogQ2xl YW51cCBQTVUgaW50ZXJuYWxzLg0KPiArICovDQo+ICt2b2lkDQo+ICtlYWxfcG11X2Zpbmkodm9p ZCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfUE1VX1BSSVZBVEVfSF8gKi8NCj4gZGlmZiAtLWdpdCBh L2xpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYyBiL2xpYi9lYWwvY29tbW9uL3J0ZV9wbXUuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi43ZDNiZDU3ZDFkDQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvbGliL2VhbC9jb21tb24vcnRlX3BtdS5jDQo+IEBAIC0wLDAg KzEsNDU1IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ ICsgKiBDb3B5cmlnaHQoQykgMjAyMiBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiArICov DQo+ICsNCj4gKyNpbmNsdWRlIDxjdHlwZS5oPg0KPiArI2luY2x1ZGUgPGRpcmVudC5oPg0KPiAr I2luY2x1ZGUgPGVycm5vLmg+DQo+ICsjaW5jbHVkZSA8cmVnZXguaD4NCj4gKyNpbmNsdWRlIDxz eXMvaW9jdGwuaD4NCj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KPiArI2luY2x1ZGUgPHN5cy9x dWV1ZS5oPg0KPiArI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+DQo+ICsjaW5jbHVkZSA8dW5pc3Rk Lmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfZWFsX3BhZ2luZy5oPg0KPiArI2luY2x1ZGUgPHJ0 ZV9tYWxsb2MuaD4NCj4gKyNpbmNsdWRlIDxydGVfcG11Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX3Rh aWxxLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJwbXVfcHJpdmF0ZS5oIg0KPiArDQo+ICsjZGVmaW5l IEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2Vz Ig0KPiArDQo+ICsjaWZuZGVmIEdFTk1BU0tfVUxMDQo+ICsjZGVmaW5lIEdFTk1BU0tfVUxMKGgs IGwpICgofjBVTEwgLSAoMVVMTCA8PCAobCkpICsgMSkgJiAofjBVTEwgPj4gKCg2NCAtIDEgLSAo aCkpKSkpDQo+ICsjZW5kaWYNCj4gKw0KPiArI2lmbmRlZiBGSUVMRF9QUkVQDQo+ICsjZGVmaW5l IEZJRUxEX1BSRVAobSwgdikgKCgodWludDY0X3QpKHYpIDw8IChfX2J1aWx0aW5fZmZzbGwobSkg LSAxKSkgJiAobSkpDQo+ICsjZW5kaWYNCj4gKw0KPiArc3RydWN0IHJ0ZV9wbXUgKnBtdTsNCj4g Kw0KPiArLyoNCj4gKyAqIEZvbGxvd2luZyBfX3J0ZV93ZWFrIGZ1bmN0aW9ucyBwcm92aWRlIGRl ZmF1bHQgbm8tb3AuIEFyY2hpdGVjdHVyZXMgc2hvdWxkIG92ZXJyaWRlIHRoZW0gaWYNCj4gKyAq IG5lY2Vzc2FyeS4NCj4gKyAqLw0KPiArDQo+ICtpbnQNCj4gK19fcnRlX3dlYWsgcG11X2FyY2hf aW5pdCh2b2lkKQ0KPiArew0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICt2b2lkDQo+ICtf X3J0ZV93ZWFrIHBtdV9hcmNoX2Zpbmkodm9pZCkNCj4gK3sNCj4gK30NCj4gKw0KPiArdm9pZA0K PiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNdKQ0K PiArew0KPiArCVJURV9TRVRfVVNFRChjb25maWcpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 DQo+ICtnZXRfdGVybV9mb3JtYXQoY29uc3QgY2hhciAqbmFtZSwgaW50ICpudW0sIHVpbnQ2NF90 ICptYXNrKQ0KPiArew0KPiArCWNoYXIgKmNvbmZpZyA9IE5VTEw7DQo+ICsJY2hhciBwYXRoW1BB VEhfTUFYXTsNCj4gKwlpbnQgaGlnaCwgbG93LCByZXQ7DQo+ICsJRklMRSAqZnA7DQo+ICsNCj4g KwkvKiBxdWllc2NlIC1XbWF5YmUtdW5pbml0aWFsaXplZCB3YXJuaW5nICovDQo+ICsJKm51bSA9 IDA7DQo+ICsJKm1hc2sgPSAwOw0KPiArDQo+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgp LCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZm9ybWF0LyVzIiwgcG11LT5uYW1lLCBu YW1lKTsNCj4gKwlmcCA9IGZvcGVuKHBhdGgsICJyIik7DQo+ICsJaWYgKCFmcCkNCj4gKwkJcmV0 dXJuIC1lcnJubzsNCj4gKw0KPiArCWVycm5vID0gMDsNCj4gKwlyZXQgPSBmc2NhbmYoZnAsICIl bVteOl06JWQtJWQiLCAmY29uZmlnLCAmbG93LCAmaGlnaCk7DQo+ICsJaWYgKHJldCA8IDIpIHsN Cj4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKwlpZiAoZXJy bm8pIHsNCj4gKwkJcmV0ID0gLWVycm5vOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4g KwlpZiAocmV0ID09IDIpDQo+ICsJCWhpZ2ggPSBsb3c7DQo+ICsNCj4gKwkqbWFzayA9IEdFTk1B U0tfVUxMKGhpZ2gsIGxvdyk7DQo+ICsJLyogTGFzdCBkaWdpdCBzaG91bGQgYmUgWzAxMl0uIElm IGxhc3QgZGlnaXQgaXMgbWlzc2luZyAwIGlzIGltcGxpZWQuICovDQo+ICsJKm51bSA9IGNvbmZp Z1tzdHJsZW4oY29uZmlnKSAtIDFdOw0KPiArCSpudW0gPSBpc2RpZ2l0KCpudW0pID8gKm51bSAt ICcwJyA6IDA7DQo+ICsNCj4gKwlyZXQgPSAwOw0KPiArb3V0Og0KPiArCWZyZWUoY29uZmlnKTsN Cj4gKwlmY2xvc2UoZnApOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludA0KPiArcGFyc2VfZXZlbnQoY2hhciAqYnVmLCB1aW50NjRfdCBjb25maWdbM10pDQo+ ICt7DQo+ICsJY2hhciAqdG9rZW4sICp0ZXJtOw0KPiArCWludCBudW0sIHJldCwgdmFsOw0KPiAr CXVpbnQ2NF90IG1hc2s7DQo+ICsNCj4gKwljb25maWdbMF0gPSBjb25maWdbMV0gPSBjb25maWdb Ml0gPSAwOw0KPiArDQo+ICsJdG9rZW4gPSBzdHJ0b2soYnVmLCAiLCIpOw0KPiArCXdoaWxlICh0 b2tlbikgew0KPiArCQllcnJubyA9IDA7DQo+ICsJCS8qIDx0ZXJtPj08dmFsdWU+ICovDQo+ICsJ CXJldCA9IHNzY2FuZih0b2tlbiwgIiVtW149XT0laSIsICZ0ZXJtLCAmdmFsKTsNCj4gKwkJaWYg KHJldCA8IDEpDQo+ICsJCQlyZXR1cm4gLUVOT0RBVEE7DQo+ICsJCWlmIChlcnJubykNCj4gKwkJ CXJldHVybiAtZXJybm87DQo+ICsJCWlmIChyZXQgPT0gMSkNCj4gKwkJCXZhbCA9IDE7DQo+ICsN Cj4gKwkJcmV0ID0gZ2V0X3Rlcm1fZm9ybWF0KHRlcm0sICZudW0sICZtYXNrKTsNCj4gKwkJZnJl ZSh0ZXJtKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsNCj4gKwkJY29u ZmlnW251bV0gfD0gRklFTERfUFJFUChtYXNrLCB2YWwpOw0KPiArCQl0b2tlbiA9IHN0cnRvayhO VUxMLCAiLCIpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtnZXRfZXZlbnRfY29uZmlnKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ2NF90IGNv bmZpZ1szXSkNCj4gK3sNCj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbQlVGU0laXTsNCj4g KwlGSUxFICpmcDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJc25wcmludGYocGF0aCwgc2l6ZW9m KHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZlbnRzLyVzIiwgcG11LT5u YW1lLCBuYW1lKTsNCj4gKwlmcCA9IGZvcGVuKHBhdGgsICJyIik7DQo+ICsJaWYgKCFmcCkNCj4g KwkJcmV0dXJuIC1lcnJubzsNCj4gKw0KPiArCXJldCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1 ZiksIGZwKTsNCj4gKwlpZiAocmV0ID09IDApIHsNCj4gKwkJZmNsb3NlKGZwKTsNCj4gKw0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJZmNsb3NlKGZwKTsNCj4gKwlidWZbcmV0XSA9 ICdcMCc7DQo+ICsNCj4gKwlyZXR1cm4gcGFyc2VfZXZlbnQoYnVmLCBjb25maWcpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50DQo+ICtkb19wZXJmX2V2ZW50X29wZW4odWludDY0X3QgY29uZmln WzNdLCBpbnQgbGNvcmVfaWQsIGludCBncm91cF9mZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcGVyZl9l dmVudF9hdHRyIGF0dHIgPSB7DQo+ICsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50 X2F0dHIpLA0KPiArCQkudHlwZSA9IFBFUkZfVFlQRV9SQVcsDQo+ICsJCS5leGNsdWRlX2tlcm5l bCA9IDEsDQo+ICsJCS5leGNsdWRlX2h2ID0gMSwNCj4gKwkJLmRpc2FibGVkID0gMSwNCj4gKwl9 Ow0KPiArDQo+ICsJcG11X2FyY2hfZml4dXBfY29uZmlnKGNvbmZpZyk7DQo+ICsNCj4gKwlhdHRy LmNvbmZpZyA9IGNvbmZpZ1swXTsNCj4gKwlhdHRyLmNvbmZpZzEgPSBjb25maWdbMV07DQo+ICsJ YXR0ci5jb25maWcyID0gY29uZmlnWzJdOw0KPiArDQo+ICsJcmV0dXJuIHN5c2NhbGwoU1lTX3Bl cmZfZXZlbnRfb3BlbiwgJmF0dHIsIHJ0ZV9nZXR0aWQoKSwgcnRlX2xjb3JlX3RvX2NwdV9pZChs Y29yZV9pZCksDQo+ICsJCSAgICAgICBncm91cF9mZCwgMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQNCj4gK29wZW5fZXZlbnRzKGludCBsY29yZV9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRl X3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmcG11LT5ncm91cFtsY29yZV9pZF07DQo+ICsJc3Ry dWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50Ow0KPiArCXVpbnQ2NF90IGNvbmZpZ1szXTsNCj4gKwlp bnQgbnVtID0gMCwgcmV0Ow0KPiArDQo+ICsJLyogZ3JvdXAgbGVhZGVyIGdldHMgY3JlYXRlZCBm aXJzdCwgd2l0aCBmZCA9IC0xICovDQo+ICsJZ3JvdXAtPmZkc1swXSA9IC0xOw0KPiArDQo+ICsJ VEFJTFFfRk9SRUFDSChldmVudCwgJnBtdS0+ZXZlbnRfbGlzdCwgbmV4dCkgew0KPiArCQlyZXQg PSBnZXRfZXZlbnRfY29uZmlnKGV2ZW50LT5uYW1lLCBjb25maWcpOw0KPiArCQlpZiAocmV0KSB7 DQo+ICsJCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFpbGVkIHRvIGdldCAlcyBldmVudCBjb25maWdc biIsIGV2ZW50LT5uYW1lKTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJcmV0 ID0gZG9fcGVyZl9ldmVudF9vcGVuKGNvbmZpZywgbGNvcmVfaWQsIGdyb3VwLT5mZHNbMF0pOw0K PiArCQlpZiAocmV0ID09IC0xKSB7DQo+ICsJCQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkNCj4g KwkJCQlSVEVfTE9HKEVSUiwgRUFMLCAiNjQgYml0IGNvdW50ZXJzIG5vdCBzdXBwb3J0ZWRcbiIp Ow0KPiArDQo+ICsJCQlyZXQgPSAtZXJybm87DQo+ICsJCQlnb3RvIG91dDsNCj4gKwkJfQ0KPiAr DQo+ICsJCWdyb3VwLT5mZHNbZXZlbnQtPmluZGV4XSA9IHJldDsNCj4gKwkJbnVtKys7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICtvdXQ6DQo+ICsJZm9yICgtLW51bTsgbnVtID49IDA7 IG51bS0tKSB7DQo+ICsJCWNsb3NlKGdyb3VwLT5mZHNbbnVtXSk7DQo+ICsJCWdyb3VwLT5mZHNb bnVtXSA9IC0xOw0KPiArCX0NCj4gKw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludA0KPiArbW1hcF9ldmVudHMoaW50IGxjb3JlX2lkKQ0KPiArew0KPiArCXN0 cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9ICZwbXUtPmdyb3VwW2xjb3JlX2lkXTsN Cj4gKwl2b2lkICphZGRyOw0KPiArCWludCByZXQsIGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBp IDwgcG11LT5udW1fZ3JvdXBfZXZlbnRzOyBpKyspIHsNCj4gKwkJYWRkciA9IG1tYXAoMCwgcnRl X21lbV9wYWdlX3NpemUoKSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBncm91cC0+ZmRzW2ldLCAw KTsNCj4gKwkJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgew0KPiArCQkJcmV0ID0gLWVycm5vOw0K PiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiArCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9 IGFkZHI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICtvdXQ6DQo+ICsJZm9yICg7IGk7 IGktLSkgew0KPiArCQltdW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdLCBydGVfbWVtX3Bh Z2Vfc2l6ZSgpKTsNCj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaSAtIDFdID0gTlVMTDsNCj4gKwl9 DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArY2xl YW51cF9ldmVudHMoaW50IGxjb3JlX2lkKQ0KPiArew0KPiArCXN0cnVjdCBydGVfcG11X2V2ZW50 X2dyb3VwICpncm91cCA9ICZwbXUtPmdyb3VwW2xjb3JlX2lkXTsNCj4gKwlpbnQgaTsNCj4gKw0K PiArCWlmICghZ3JvdXAtPmZkcykNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKGdyb3VwLT5m ZHNbMF0gIT0gLTEpDQo+ICsJCWlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0RJ U0FCTEUsIFBFUkZfSU9DX0ZMQUdfR1JPVVApOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IHBt dS0+bnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+ICsJCWlmIChncm91cC0+bW1hcF9wYWdlc1tp XSkgew0KPiArCQkJbXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2ldLCBydGVfbWVtX3BhZ2Vfc2l6 ZSgpKTsNCj4gKwkJCWdyb3VwLT5tbWFwX3BhZ2VzW2ldID0gTlVMTDsNCj4gKwkJfQ0KPiArDQo+ ICsJCWlmIChncm91cC0+ZmRzW2ldICE9IC0xKSB7DQo+ICsJCQljbG9zZShncm91cC0+ZmRzW2ld KTsNCj4gKwkJCWdyb3VwLT5mZHNbaV0gPSAtMTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJ0 ZV9mcmVlKGdyb3VwLT5tbWFwX3BhZ2VzKTsNCj4gKwlydGVfZnJlZShncm91cC0+ZmRzKTsNCj4g Kw0KPiArCWdyb3VwLT5tbWFwX3BhZ2VzID0gTlVMTDsNCj4gKwlncm91cC0+ZmRzID0gTlVMTDsN Cj4gKwlncm91cC0+ZW5hYmxlZCA9IGZhbHNlOw0KPiArfQ0KPiArDQo+ICtpbnQgX19ydGVfbm9p bmxpbmUNCj4gK3J0ZV9wbXVfZW5hYmxlX2dyb3VwKGludCBsY29yZV9pZCkNCj4gK3sNCj4gKwlz dHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmcG11LT5ncm91cFtsY29yZV9pZF07 DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmIChwbXUtPm51bV9ncm91cF9ldmVudHMgPT0gMCkg ew0KPiArCQlSVEVfTE9HKERFQlVHLCBFQUwsICJubyBtYXRjaGluZyBQTVUgZXZlbnRzXG4iKTsN Cj4gKw0KPiArCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwlncm91cC0+ZmRzID0gcnRlX3pt YWxsb2MoTlVMTCwgcG11LT5udW1fZ3JvdXBfZXZlbnRzLCBzaXplb2YoKmdyb3VwLT5mZHMpKTsN Cj4gKwlpZiAoIWdyb3VwLT5mZHMpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEVBTCwgImZhaWxlZCB0 byBhbGxvYyBkZXNjcmlwdG9yIG1lbW9yeVxuIik7DQo+ICsNCj4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ICsJfQ0KPiArDQo+ICsJZ3JvdXAtPm1tYXBfcGFnZXMgPSBydGVfem1hbGxvYyhOVUxMLCBw bXUtPm51bV9ncm91cF9ldmVudHMsIHNpemVvZigqZ3JvdXAtPm1tYXBfcGFnZXMpKTsNCj4gKwlp ZiAoIWdyb3VwLT5tbWFwX3BhZ2VzKSB7DQo+ICsJCVJURV9MT0coRVJSLCBFQUwsICJmYWlsZWQg dG8gYWxsb2MgdXNlcnBhZ2UgbWVtb3J5XG4iKTsNCj4gKw0KPiArCQlyZXQgPSAtRU5PTUVNOw0K PiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBvcGVuX2V2ZW50cyhsY29yZV9p ZCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFpbGVkIHRvIG9w ZW4gZXZlbnRzIG9uIGxjb3JlLXdvcmtlci0lZFxuIiwgbGNvcmVfaWQpOw0KPiArCQlnb3RvIG91 dDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBtbWFwX2V2ZW50cyhsY29yZV9pZCk7DQo+ICsJaWYg KHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFpbGVkIHRvIG1hcCBldmVudHMgb24g bGNvcmUtd29ya2VyLSVkXG4iLCBsY29yZV9pZCk7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4g Kw0KPiArCWlmIChpb2N0bChncm91cC0+ZmRzWzBdLCBQRVJGX0VWRU5UX0lPQ19FTkFCTEUsIFBF UkZfSU9DX0ZMQUdfR1JPVVApID09IC0xKSB7DQo+ICsJCVJURV9MT0coRVJSLCBFQUwsICJmYWls ZWQgdG8gZW5hYmxlIGV2ZW50cyBvbiBsY29yZS13b3JrZXItJWRcbiIsIGxjb3JlX2lkKTsNCj4g Kw0KPiArCQlyZXQgPSAtZXJybm87DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXJl dHVybiAwOw0KPiArDQo+ICtvdXQ6DQo+ICsJY2xlYW51cF9ldmVudHMobGNvcmVfaWQpOw0KPiAr DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArc2Nhbl9wbXVz KHZvaWQpDQo+ICt7DQo+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsNCj4gKwlzdHJ1Y3QgZGlyZW50 ICpkZW50Ow0KPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ICsJRElSICpkaXJwOw0KPiArDQo+ICsJ ZGlycCA9IG9wZW5kaXIoRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCk7DQo+ICsJaWYgKCFkaXJw KQ0KPiArCQlyZXR1cm4gLWVycm5vOw0KPiArDQo+ICsJd2hpbGUgKChkZW50ID0gcmVhZGRpcihk aXJwKSkpIHsNCj4gKwkJbmFtZSA9IGRlbnQtPmRfbmFtZTsNCj4gKwkJaWYgKG5hbWVbMF0gPT0g Jy4nKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJLyogc3lzZnMgZW50cnkgc2hvdWxkIGVp dGhlciBjb250YWluIGNwdXMgb3IgYmUgYSBjcHUgKi8NCj4gKwkJaWYgKCFzdHJjbXAobmFtZSwg ImNwdSIpKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBh dGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvY3B1cyIsIG5hbWUpOw0KPiArCQlp ZiAoYWNjZXNzKHBhdGgsIEZfT0spID09IDApDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsNCj4g KwljbG9zZWRpcihkaXJwKTsNCj4gKw0KPiArCWlmIChkZW50KSB7DQo+ICsJCXBtdS0+bmFtZSA9 IHN0cmR1cChuYW1lKTsNCj4gKwkJaWYgKCFwbXUtPm5hbWUpDQo+ICsJCQlyZXR1cm4gLUVOT01F TTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcG11LT5uYW1lID8gMCA6IC1FTk9ERVY7DQo+ICt9 DQo+ICsNCj4gK2ludA0KPiArcnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSkNCj4g K3sNCj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+ICsJY2hhciBwYXRoW1BBVEhf TUFYXTsNCj4gKw0KPiArCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNF X0RFVklDRVNfUEFUSCAiLyVzL2V2ZW50cy8lcyIsIHBtdS0+bmFtZSwgbmFtZSk7DQo+ICsJaWYg KGFjY2VzcyhwYXRoLCBSX09LKSkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwlUQUlM UV9GT1JFQUNIKGV2ZW50LCAmcG11LT5ldmVudF9saXN0LCBuZXh0KSB7DQo+ICsJCWlmICghc3Ry Y21wKGV2ZW50LT5uYW1lLCBuYW1lKSkNCj4gKwkJCXJldHVybiBldmVudC0+aW5kZXg7DQo+ICsJ CWNvbnRpbnVlOw0KPiArCX0NCj4gKw0KPiArCWV2ZW50ID0gcnRlX3ptYWxsb2MoTlVMTCwgMSwg c2l6ZW9mKCpldmVudCkpOw0KPiArCWlmICghZXZlbnQpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0K PiArDQo+ICsJZXZlbnQtPm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+ICsJaWYgKCFldmVudC0+bmFt ZSkgew0KPiArCQlydGVfZnJlZShldmVudCk7DQo+ICsNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ICsJfQ0KPiArDQo+ICsJZXZlbnQtPmluZGV4ID0gcG11LT5udW1fZ3JvdXBfZXZlbnRzKys7DQo+ ICsJVEFJTFFfSU5TRVJUX1RBSUwoJnBtdS0+ZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPiAr DQo+ICsJUlRFX0xPRyhERUJVRywgRUFMLCAiJXMgZXZlbiBhZGRlZCBhdCBpbmRleCAlZFxuIiwg bmFtZSwgZXZlbnQtPmluZGV4KTsNCj4gKw0KPiArCXJldHVybiBldmVudC0+aW5kZXg7DQo+ICt9 DQo+ICsNCj4gK3ZvaWQNCj4gK2VhbF9wbXVfaW5pdCh2b2lkKQ0KPiArew0KPiArCWludCByZXQ7 DQo+ICsNCj4gKwlwbXUgPSBydGVfY2FsbG9jKE5VTEwsIDEsIHNpemVvZigqcG11KSwgUlRFX0NB Q0hFX0xJTkVfU0laRSk7DQo+ICsJaWYgKCFwbXUpIHsNCj4gKwkJUlRFX0xPRyhFUlIsIEVBTCwg ImZhaWxlZCB0byBhbGxvYyBQTVVcbiIpOw0KPiArDQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsN Cj4gKwlUQUlMUV9JTklUKCZwbXUtPmV2ZW50X2xpc3QpOw0KPiArDQo+ICsJcmV0ID0gc2Nhbl9w bXVzKCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFMLCAiZmFpbGVkIHRv IGZpbmQgY29yZSBwbXVcbiIpOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBwbXVfYXJjaF9pbml0KCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlSVEVfTE9HKEVSUiwgRUFM LCAiZmFpbGVkIHRvIHNldHVwIGFyY2ggZm9yIFBNVVxuIik7DQo+ICsJCWdvdG8gb3V0Ow0KPiAr CX0NCj4gKw0KPiArCXJldHVybjsNCj4gK291dDoNCj4gKwlmcmVlKHBtdS0+bmFtZSk7DQo+ICsJ cnRlX2ZyZWUocG11KTsNCj4gK30NCj4gKw0KPiArdm9pZA0KPiArZWFsX3BtdV9maW5pKHZvaWQp DQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50LCAqdG1wOw0KPiArCWludCBs Y29yZV9pZDsNCj4gKw0KPiArCVJURV9UQUlMUV9GT1JFQUNIX1NBRkUoZXZlbnQsICZwbXUtPmV2 ZW50X2xpc3QsIG5leHQsIHRtcCkgew0KPiArCQlUQUlMUV9SRU1PVkUoJnBtdS0+ZXZlbnRfbGlz dCwgZXZlbnQsIG5leHQpOw0KPiArCQlmcmVlKGV2ZW50LT5uYW1lKTsNCj4gKwkJcnRlX2ZyZWUo ZXZlbnQpOw0KPiArCX0NCj4gKw0KPiArCVJURV9MQ09SRV9GT1JFQUNIX1dPUktFUihsY29yZV9p ZCkNCj4gKwkJY2xlYW51cF9ldmVudHMobGNvcmVfaWQpOw0KPiArDQo+ICsJcG11X2FyY2hfZmlu aSgpOw0KPiArCWZyZWUocG11LT5uYW1lKTsNCj4gKwlydGVfZnJlZShwbXUpOw0KPiArfQ0KPiBk aWZmIC0tZ2l0IGEvbGliL2VhbC9pbmNsdWRlL21lc29uLmJ1aWxkIGIvbGliL2VhbC9pbmNsdWRl L21lc29uLmJ1aWxkDQo+IGluZGV4IGNmY2Q0MGFhZWQuLjNiZjgzMGFkZWUgMTAwNjQ0DQo+IC0t LSBhL2xpYi9lYWwvaW5jbHVkZS9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvZWFsL2luY2x1ZGUv bWVzb24uYnVpbGQNCj4gQEAgLTM2LDYgKzM2LDcgQEAgaGVhZGVycyArPSBmaWxlcygNCj4gICAg ICAgICAgICdydGVfcGNpX2Rldl9mZWF0dXJlcy5oJywNCj4gICAgICAgICAgICdydGVfcGVyX2xj b3JlLmgnLA0KPiAgICAgICAgICAgJ3J0ZV9wZmxvY2suaCcsDQo+ICsgICAgICAgICdydGVfcG11 LmgnLA0KPiAgICAgICAgICAgJ3J0ZV9yYW5kb20uaCcsDQo+ICAgICAgICAgICAncnRlX3JlY2lw cm9jYWwuaCcsDQo+ICAgICAgICAgICAncnRlX3NlcWNvdW50LmgnLA0KPiBkaWZmIC0tZ2l0IGEv bGliL2VhbC9pbmNsdWRlL3J0ZV9wbXUuaCBiL2xpYi9lYWwvaW5jbHVkZS9ydGVfcG11LmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uNTk1NWMyMjc3OQ0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9lYWwvaW5jbHVkZS9ydGVfcG11LmgNCj4gQEAgLTAs MCArMSwyMDQgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UN Cj4gKyAqIENvcHlyaWdodChjKSAyMDIyIE1hcnZlbGwNCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVm IF9SVEVfUE1VX0hfDQo+ICsjZGVmaW5lIF9SVEVfUE1VX0hfDQo+ICsNCj4gKyNpZmRlZiBfX2Nw bHVzcGx1cw0KPiArZXh0ZXJuICJDIiB7DQo+ICsjZW5kaWYNCj4gKw0KPiArI2luY2x1ZGUgPHJ0 ZV9jb21tb24uaD4NCj4gKyNpbmNsdWRlIDxydGVfY29tcGF0Lmg+DQo+ICsNCj4gKyNpZmRlZiBS VEVfRVhFQ19FTlZfTElOVVgNCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4N Cj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gKyNpbmNsdWRlIDxydGVfYnJhbmNo X3ByZWRpY3Rpb24uaD4NCj4gKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gKyNpbmNsdWRlIDxy dGVfbG9nLmg+DQo+ICsNCj4gKy8qKg0KPiArICogQGZpbGUNCj4gKyAqDQo+ICsgKiBQTVUgZXZl bnQgdHJhY2luZyBvcGVyYXRpb25zDQo+ICsgKg0KPiArICogVGhpcyBmaWxlIGRlZmluZXMgZ2Vu ZXJpYyBBUEkgYW5kIHR5cGVzIG5lY2Vzc2FyeSB0byBzZXR1cCBQTVUgYW5kDQo+ICsgKiByZWFk IHNlbGVjdGVkIGNvdW50ZXJzIGluIHJ1bnRpbWUuDQo+ICsgKi8NCj4gKw0KPiArLyoqDQo+ICsg KiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ3JvdXAgb2YgZXZlbnRzLg0KPiArICovDQo+ICtz dHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCB7DQo+ICsJaW50ICpmZHM7IC8qKjwgYXJyYXkgb2Yg ZXZlbnQgZGVzY3JpcHRvcnMgKi8NCj4gKwl2b2lkICoqbW1hcF9wYWdlczsgLyoqPCBhcnJheSBv ZiBwb2ludGVycyB0byBtbWFwcGVkIHBlcmZfZXZlbnRfYXR0ciBzdHJ1Y3R1cmVzICovDQo+ICsJ Ym9vbCBlbmFibGVkOyAvKio8IHRydWUgaWYgZ3JvdXAgd2FzIGVuYWJsZWQgb24gcGFydGljdWxh ciBsY29yZSAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBBIHN0cnVjdHVyZSBkZXNjcmli aW5nIGFuIGV2ZW50Lg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3BtdV9ldmVudCB7DQo+ICsJY2hh ciAqbmFtZTsgLyoqIG5hbWUgb2YgYW4gZXZlbnQgKi8NCj4gKwlpbnQgaW5kZXg7IC8qKiBldmVu dCBpbmRleCBpbnRvIGZkcy9tbWFwX3BhZ2VzICovDQo+ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9l dmVudCkgbmV4dDsgLyoqIGxpc3QgZW50cnkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICog QSBQTVUgc3RhdGUgY29udGFpbmVyLg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX3BtdSB7DQo+ICsJ Y2hhciAqbmFtZTsgLyoqIG5hbWUgb2YgY29yZSBQTVUgbGlzdGVkIHVuZGVyIC9zeXMvYnVzL2V2 ZW50X3NvdXJjZS9kZXZpY2VzICovDQo+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgZ3Jv dXBbUlRFX01BWF9MQ09SRV07IC8qKjwgcGVyIGxjb3JlIGV2ZW50IGdyb3VwIGRhdGEgKi8NCj4g KwlpbnQgbnVtX2dyb3VwX2V2ZW50czsgLyoqPCBudW1iZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAg Ki8NCj4gKwlUQUlMUV9IRUFEKCwgcnRlX3BtdV9ldmVudCkgZXZlbnRfbGlzdDsgLyoqPCBsaXN0 IG9mIG1hdGNoaW5nIGV2ZW50cyAqLw0KPiArfTsNCj4gKw0KPiArLyoqIFBvaW50ZXIgdG8gdGhl IFBNVSBzdGF0ZSBjb250YWluZXIgKi8NCj4gK2V4dGVybiBzdHJ1Y3QgcnRlX3BtdSAqcG11Ow0K PiArDQo+ICsvKiogRWFjaCBhcmNoaXRlY3R1cmUgc3VwcG9ydGluZyBQTVUgbmVlZHMgdG8gcHJv dmlkZSBpdHMgb3duIHZlcnNpb24gKi8NCj4gKyNpZm5kZWYgcnRlX3BtdV9wbWNfcmVhZA0KPiAr I2RlZmluZSBydGVfcG11X3BtY19yZWFkKGluZGV4KSAoeyAwOyB9KQ0KPiArI2VuZGlmDQo+ICsN Cj4gKy8qKg0KPiArICogQGludGVybmFsDQo+ICsgKg0KPiArICogUmVhZCBQTVUgY291bnRlci4N Cj4gKyAqDQo+ICsgKiBAcGFyYW0gcGMNCj4gKyAqICAgUG9pbnRlciB0byB0aGUgbW1hcHBlZCB1 c2VyIHBhZ2UuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIENvdW50ZXIgdmFsdWUgcmVhZCBmcm9t IGhhcmR3YXJlLg0KPiArICovDQo+ICtfX3J0ZV9pbnRlcm5hbA0KPiArc3RhdGljIF9fcnRlX2Fs d2F5c19pbmxpbmUgdWludDY0X3QNCj4gK3J0ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVy Zl9ldmVudF9tbWFwX3BhZ2UgKnBjKQ0KPiArew0KPiArCXVpbnQ2NF90IG9mZnNldCwgd2lkdGgs IHBtYyA9IDA7DQo+ICsJdWludDMyX3Qgc2VxLCBpbmRleDsNCj4gKwlpbnQgdHJpZXMgPSAxMDA7 DQo+ICsNCj4gKwlmb3IgKDs7KSB7DQo+ICsJCXNlcSA9IHBjLT5sb2NrOw0KPiArCQlydGVfY29t cGlsZXJfYmFycmllcigpOw0KDQpJJ20gZ3Vlc3NpbmcgdGhpcyBzaG91bGQgYmUgYSBsb2FkLWFj cXVpcmUgaW5zdGVhZC4gTGVzcyBoZWF2eS1oYW5kZWQgDQp0aGFuIGEgY29tcGlsZXIgYmFycmll ciBvbiBUU08gQ1BVcywgYW5kIHdvcmtzIG9uIHdlYWtseSBvcmRlcmVkIHN5c3RlbXMgDQphcyB3 ZWxsICh1bmxpa2UgdGhlIGNvbXBpbGVyIGJhcnJpZXIpLg0KDQpUaGlzIGxvb2tzIGxpa2UgYW4g b3Blbi1jb2RlZCBzZXF1ZW5jZSBsb2NrLCBzbyB0YWtlIGEgbG9vayBpbiANCnJ0ZV9zZXFjb3Vu dC5oIGZvciBpbnNwaXJhdGlvbi4NCg0KPiArCQlpbmRleCA9IHBjLT5pbmRleDsNCj4gKwkJb2Zm c2V0ID0gcGMtPm9mZnNldDsNCj4gKwkJd2lkdGggPSBwYy0+cG1jX3dpZHRoOw0KPiArDQo+ICsJ CWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYmIGluZGV4KSkgew0KPiArCQkJcG1jID0g cnRlX3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOw0KPiArCQkJcG1jIDw8PSA2NCAtIHdpZHRoOw0K PiArCQkJcG1jID4+PSA2NCAtIHdpZHRoOw0KPiArCQl9DQo+ICsNCj4gKwkJcnRlX2NvbXBpbGVy X2JhcnJpZXIoKTsNCj4gKw0KPiArCQlpZiAobGlrZWx5KHBjLT5sb2NrID09IHNlcSkpDQo+ICsJ CQlyZXR1cm4gcG1jICsgb2Zmc2V0Ow0KPiArDQo+ICsJCWlmICgtLXRyaWVzID09IDApIHsNCj4g KwkJCVJURV9MT0coREVCVUcsIEVBTCwgImZhaWxlZCB0byBnZXQgcGVyZl9ldmVudF9tbWFwX3Bh Z2UgbG9ja1xuIik7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIEBpbnRlcm5hbA0KPiArICoNCj4gKyAqIEVu YWJsZSBncm91cCBvZiBldmVudHMgZm9yIGEgZ2l2ZW4gbGNvcmUuDQo+ICsgKg0KPiArICogQHBh cmFtIGxjb3JlX2lkDQo+ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBsY29yZS4NCj4gKyAq IEByZXR1cm4NCj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90 aGVyd2lzZS4NCj4gKyAqLw0KPiArX19ydGVfaW50ZXJuYWwNCj4gK2ludA0KPiArcnRlX3BtdV9l bmFibGVfZ3JvdXAoaW50IGxjb3JlX2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0K PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig bm90aWNlDQo+ICsgKg0KPiArICogQWRkIGV2ZW50IHRvIHRoZSBncm91cCBvZiBlbmFibGVkIGV2 ZW50cy4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gbmFtZQ0KPiArICogICBOYW1lIG9mIGFuIGV2ZW50 IGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9wbXUvZXZlbnRzLg0K PiArICogQHJldHVybg0KPiArICogICBFdmVudCBpbmRleCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5l Z2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ ICtpbnQNCj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUpOw0KPiArDQo+ICsv KioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4gKyAqDQo+ICsgKiBSZWFkIGhhcmR3YXJlIGNv dW50ZXIgY29uZmlndXJlZCB0byBjb3VudCBvY2N1cnJlbmNlcyBvZiBhbiBldmVudC4NCj4gKyAq DQo+ICsgKiBAcGFyYW0gaW5kZXgNCj4gKyAqICAgSW5kZXggb2YgYW4gZXZlbnQgdG8gYmUgcmVh ZC4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgRXZlbnQgdmFsdWUgcmVhZCBmcm9tIHJlZ2lzdGVy LiBJbiBjYXNlIG9mIGVycm9ycyBvciBsYWNrIG9mIHN1cHBvcnQNCj4gKyAqICAgMCBpcyByZXR1 cm5lZC4gSW4gb3RoZXIgd29yZHMsIHN0cmVhbSBvZiB6ZXJvcyBpbiBhIHRyYWNlIGZpbGUNCj4g KyAqICAgaW5kaWNhdGVzIHByb2JsZW0gd2l0aCByZWFkaW5nIHBhcnRpY3VsYXIgUE1VIGV2ZW50 IHJlZ2lzdGVyLg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIHVpbnQ2NF90DQo+ICtydGVfcG11X3JlYWQoaW50IGluZGV4KQ0KPiAr ew0KPiArCWludCBsY29yZV9pZCA9IHJ0ZV9sY29yZV9pZCgpOw0KPiArCXN0cnVjdCBydGVfcG11 X2V2ZW50X2dyb3VwICpncm91cDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKCFwbXUpDQo+ ICsJCXJldHVybiAwOw0KPiArDQo+ICsJZ3JvdXAgPSAmcG11LT5ncm91cFtsY29yZV9pZF07DQo+ ICsJaWYgKCFncm91cC0+ZW5hYmxlZCkgew0KPiArCQlyZXQgPSBydGVfcG11X2VuYWJsZV9ncm91 cChsY29yZV9pZCk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKw0KPiArCQln cm91cC0+ZW5hYmxlZCA9IHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGluZGV4IDwgMCB8fCBp bmRleCA+PSBwbXUtPm51bV9ncm91cF9ldmVudHMpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJ cmV0dXJuIHJ0ZV9wbXVfcmVhZF91c2VycGFnZShncm91cC0+bW1hcF9wYWdlc1tpbmRleF0pOw0K PiArfQ0KPiArDQo+ICsjZWxzZSAvKiAhUlRFX0VYRUNfRU5WX0xJTlVYICovDQo+ICsNCj4gK19f cnRlX2V4cGVyaW1lbnRhbA0KPiArc3RhdGljIGludCBfX3J0ZV91bnVzZWQNCj4gK3J0ZV9wbXVf YWRkX2V2ZW50KF9fcnRlX3VudXNlZCBjb25zdCBjaGFyICpuYW1lKQ0KPiArew0KPiArCXJldHVy biAtMTsNCj4gK30NCj4gKw0KPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB1aW50NjRfdA0KPiArcnRlX3BtdV9yZWFkKF9fcnRlX3VudXNlZCBpbnQg aW5kZXgpDQo+ICt7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKyNlbmRpZiAvKiBSVEVf RVhFQ19FTlZfTElOVVggKi8NCj4gKw0KPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ICt9DQo+ICsj ZW5kaWYNCj4gKw0KPiArI2VuZGlmIC8qIF9SVEVfUE1VX0hfICovDQo+IGRpZmYgLS1naXQgYS9s aWIvZWFsL2xpbnV4L2VhbC5jIGIvbGliL2VhbC9saW51eC9lYWwuYw0KPiBpbmRleCA4YzExOGQw ZDlmLi43NTFhMTNiNTk3IDEwMDY0NA0KPiAtLS0gYS9saWIvZWFsL2xpbnV4L2VhbC5jDQo+ICsr KyBiL2xpYi9lYWwvbGludXgvZWFsLmMNCj4gQEAgLTUzLDYgKzUzLDcgQEANCj4gICAjaW5jbHVk ZSAiZWFsX29wdGlvbnMuaCINCj4gICAjaW5jbHVkZSAiZWFsX3ZmaW8uaCINCj4gICAjaW5jbHVk ZSAiaG90cGx1Z19tcC5oIg0KPiArI2luY2x1ZGUgInBtdV9wcml2YXRlLmgiDQo+ICAgDQo+ICAg I2RlZmluZSBNRU1TSVpFX0lGX05PX0hVR0VfUEFHRSAoNjRVTEwgKiAxMDI0VUxMICogMTAyNFVM TCkNCj4gICANCj4gQEAgLTEyMDYsNiArMTIwNyw4IEBAIHJ0ZV9lYWxfaW5pdChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQo+ICAgCQlyZXR1cm4gLTE7DQo+ICAgCX0NCj4gICANCj4gKwllYWxfcG11 X2luaXQoKTsNCj4gKw0KPiAgIAlpZiAocnRlX2VhbF90YWlscXNfaW5pdCgpIDwgMCkgew0KPiAg IAkJcnRlX2VhbF9pbml0X2FsZXJ0KCJDYW5ub3QgaW5pdCB0YWlsIHF1ZXVlcyBmb3Igb2JqZWN0 cyIpOw0KPiAgIAkJcnRlX2Vycm5vID0gRUZBVUxUOw0KPiBAQCAtMTM3Miw2ICsxMzc1LDcgQEAg cnRlX2VhbF9jbGVhbnVwKHZvaWQpDQo+ICAgCWVhbF9idXNfY2xlYW51cCgpOw0KPiAgIAlydGVf dHJhY2Vfc2F2ZSgpOw0KPiAgIAllYWxfdHJhY2VfZmluaSgpOw0KPiArCWVhbF9wbXVfZmluaSgp Ow0KPiAgIAkvKiBhZnRlciB0aGlzIHBvaW50LCBhbnkgRFBESyBwb2ludGVycyB3aWxsIGJlY29t ZSBkYW5nbGluZyAqLw0KPiAgIAlydGVfZWFsX21lbW9yeV9kZXRhY2goKTsNCj4gICAJZWFsX21w X2Rldl9ob3RwbHVnX2NsZWFudXAoKTsNCj4gZGlmZiAtLWdpdCBhL2xpYi9lYWwvdmVyc2lvbi5t YXAgYi9saWIvZWFsL3ZlcnNpb24ubWFwDQo+IGluZGV4IDdhZDEyYTdkYzkuLmU4NzBjODc0OTMg MTAwNjQ0DQo+IC0tLSBhL2xpYi9lYWwvdmVyc2lvbi5tYXANCj4gKysrIGIvbGliL2VhbC92ZXJz aW9uLm1hcA0KPiBAQCAtNDMyLDYgKzQzMiw4IEBAIEVYUEVSSU1FTlRBTCB7DQo+ICAgCXJ0ZV90 aHJlYWRfc2V0X3ByaW9yaXR5Ow0KPiAgIA0KPiAgIAkjIGFkZGVkIGluIDIyLjExDQo+ICsJcnRl X3BtdV9hZGRfZXZlbnQ7ICMgV0lORE9XU19OT19FWFBPUlQNCj4gKwlydGVfcG11X3JlYWQ7ICMg V0lORE9XU19OT19FWFBPUlQNCj4gICAJcnRlX3RocmVhZF9hdHRyX2dldF9hZmZpbml0eTsNCj4g ICAJcnRlX3RocmVhZF9hdHRyX2luaXQ7DQo+ICAgCXJ0ZV90aHJlYWRfYXR0cl9zZXRfYWZmaW5p dHk7DQo+IEBAIC00ODMsNCArNDg1LDUgQEAgSU5URVJOQUwgew0KPiAgIAlydGVfbWVtX21hcDsN Cj4gICAJcnRlX21lbV9wYWdlX3NpemU7DQo+ICAgCXJ0ZV9tZW1fdW5tYXA7DQo+ICsJcnRlX3Bt dV9lbmFibGVfZ3JvdXA7DQo+ICAgfTsNCg0K