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 E1379C636D4 for ; Wed, 1 Feb 2023 18:35:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230369AbjBASfO (ORCPT ); Wed, 1 Feb 2023 13:35:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38666 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231382AbjBASfL (ORCPT ); Wed, 1 Feb 2023 13:35:11 -0500 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2087.outbound.protection.outlook.com [40.107.6.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A377F6E423; Wed, 1 Feb 2023 10:35:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L3yZn/IQjzYJynd4IsE8Q5yWkX6tzz0le7vCNYnmpzB95ubaAR4SPwKcH/xfqwAua+mIZJIJB4ep1P39J/NJy9XHHE6VdG7COrVHwH63dgg6AirYOgSGRpkaEmKmzNcxhixF40vePOTPIB/82togcwJJ59jMdejnbvb5DcXPvjNGaS8ZuN9Ir2kk7erfODY10NdLeEaJ5RT0QgUrNopnWplVuH91q3TVzKqiYKAMIgergCAZDP4p06OsOGLwTxibOvyTa248ew7D7TZ4MUOO8t8D8Vt7NRmGMeAcoPHVOHXSopbWVC2dGR53piUHLen5CSnOSBaNbBpwEFcl7o0DSg== 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=I36X/5l+gfhz8q/9WX/O+QzfQK+c5wUkIbDgqTA7WE0=; b=UHU4wYV/5qStn3q68zlye8J7+yu9xNdTnx3olijH4Ewc0erUaxx48DmmOjsihZtecLbgrq36vd4RAYAqaQBZBkcsh6+WlIukAXmhPJc2QVfPBt60gGFL+H35ppOrCHOMBbLAii5OBebx6/uSRlTlfoxeqMW12OFoNE2cxrWX6zEq0WA/SSEDMV3UHHK8Sv6m4dEswfIdE2kj4ZTWYDvDQQXqaMELmsmFthoQLX8oJMDypgKUYqzzSA8TJUWVT2N7eV1JpeyGnP2dnRSBsq5mCqNBsBXhQzsSTgIdb0uwkyf0B/t9hE5jrS3Y8/SvpOYiD77QQB0/zO8154RN9xQU3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csgroup.eu; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=I36X/5l+gfhz8q/9WX/O+QzfQK+c5wUkIbDgqTA7WE0=; b=V/ayWQ1oF74fmKqivDdOIP05Oq2l6ij9ia9MoVA3hrKzrKPn8VOhCnj+LMrTyCPoOd/UzUi/XYql7L2CqFlf3yHNwapqouB7ariZquLWQF6VMO9qunJLripnXZ5ah2g67qCf+bH9T7dvh72lUO+DlMdA5feMu89ewN7/NimHlmY96qNiM+Ir4+0NBmpuJIbkuK2P9UFQjqyVhMJVvv3QoQfkZbByIU134+2vD4XxygHSUNYw5ljXwdnfOibesMc/fAdYwetvS7GmAqCXvYzN/6t2we/it3DFSiA9hKlG3sP+K2CcPIJV5K8AOi/fWzfJQeJqGoMIgJJ66JCfLyML6Q== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB2371.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:34::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 18:35:00 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2cfb:d4c:1932:b097%5]) with mapi id 15.20.6064.024; Wed, 1 Feb 2023 18:35:00 +0000 From: Christophe Leroy To: Song Liu , "linux-modules@vger.kernel.org" , "linux-kernel@vger.kernel.org" CC: "hch@lst.de" , "kernel-team@meta.com" , Luis Chamberlain , Thomas Gleixner , Peter Zijlstra , Guenter Roeck Subject: Re: [PATCH v6] module: replace module_layout with module_memory Thread-Topic: [PATCH v6] module: replace module_layout with module_memory Thread-Index: AQHZNmPU1QI8s4D0fEmUrMjANMt+Ba66av4A Date: Wed, 1 Feb 2023 18:34:59 +0000 Message-ID: References: <20230201173654.2475531-1-song@kernel.org> In-Reply-To: <20230201173654.2475531-1-song@kernel.org> Accept-Language: fr-FR, en-US Content-Language: fr-FR X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; 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=csgroup.eu; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MRZP264MB2988:EE_|MR1P264MB2371:EE_ x-ms-office365-filtering-correlation-id: 205b7131-4a83-484c-e14f-08db04830683 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TkMX/NMGEM+I0YY5Y3mku1bwH+EDsPN+WpobOnpS+5g2aaDMF5Z46dcI3MTkekxv4sEHkfgvKW7zg5zRxAUa7fve9wP53nOWMfIvjKFceNRUA3qrOJSXudSTGV/RjjXMbHAEehXIMdM1uZFbm7tUxXY1j13gbeeWvj0YbR2VFVw2ixisglY80BFDaaCtrdFBkPIQEve3tyJAuB9Sr2HGcuBF9nSPMqjm/u2/Idz5l3lJLMzVUAqY4kvGvpVEC6qr9zHhcnZJtEiFs77pwSiwR/knPrkO/0SLeaWA6GCvVo5D26HGez/CZuX4S0TnC/BlR4KWEubI7x40ICKv9RjLly+t7HQD7TNZymhORRm1XPgeMI+8NZ7J66fiieIJOWUG20D/LS07LPx3K7pj/QSguiibvzWqoUTEpJf/LZoxsP5NYhzJ0ei/UJBIoOXFWaw1EigrJqZufsj/WPsPCZXf1063CUF0b6oMY87RBIRiqqgkfEydtLf5e1SN3dn85pPGllnsI75AUuiwpcxal5oqrmAq8Yc2TxXliVw1JGC0/F5WPXgu0u/TPwsdfP1WvXzC9cBmkfKxve4lu8F2Azb1j8HgqG3o2+TUfob6IyE8vhgcWAtPaXlbpmYaYIU7Qfftl5WGvgRcljbXF15U/Gb7yRPsZo+zb6/swOMfdHjV+fofkl+TPJwm2XnqoecCznYfUQblYSCU8ECiqr6hxRA2/hsVFY2twHSGO7UTVSXa1uV3OG1+DaG64ybRheDZNu2CWiGLznV5Jr43O0KQ3Ja5nW0y6fqym1s+irMBHnKeIio= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230025)(4636009)(376002)(39840400004)(396003)(366004)(136003)(346002)(451199018)(41300700001)(71200400001)(6506007)(8676002)(66946007)(86362001)(83380400001)(38070700005)(38100700002)(2616005)(66574015)(122000001)(316002)(31696002)(54906003)(36756003)(66446008)(64756008)(66556008)(186003)(91956017)(76116006)(4326008)(110136005)(966005)(26005)(66476007)(6512007)(478600001)(6486002)(44832011)(30864003)(2906002)(66899018)(31686004)(5660300002)(8936002)(45980500001)(43740500002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eDM5UWNLUWw1REVTdDZ1STQzUlAvRjFDeU5mU2N6QmVCYUZZNnN0ZGlGdEZq?= =?utf-8?B?djZTWWl4enR4WUhQZWZhRGRjZFphVkFsWkorcWxNbVUvYVJmMFc0VEhnMWRw?= =?utf-8?B?Z1dtbWtxQVdVUWh3ZW1aQ0REQjN0c3pzU3hZOTFXQmxQVzVLc0puL00wOVYv?= =?utf-8?B?a1hEMlpCRThvcjVxcUtIaVlqRk5aTHBpV29iRVVVUTY1cGFRK3NNNkxXaHdS?= =?utf-8?B?T1dNWVJweG5IYkhzUTFyTUY3TWJKMjZKSEFCVUVjVmxUZXRCbGcvWFNZRkl1?= =?utf-8?B?cmtCT0UwNzRDU3U0Y2FvbzVXbDNha2xNMlVVSEQvM1FEYm5KMzN4Q0tlUklm?= =?utf-8?B?dFZPMy9xK2RMSEhGcjJtVFlvQlcweThBT3EvUjBKeUpMUXRPN1FCNitoOC81?= =?utf-8?B?S1hEeHpoUlVodlB2TWlFcmtubUhGcUFxTzBZaFdmZWFxa1FzQ0Y2d3V3RTdl?= =?utf-8?B?bk5hMEZ0ZG1XNDNiM0dWdmJMazhSSFRxYmU3MnhwZkpFUFVhRlQrWURYR0cw?= =?utf-8?B?RmN2d2lqRDArZGpzM0tXMU5zSEpGUjlwdDR4S043UkR0RlBCRUV1c2w4YUh2?= =?utf-8?B?bno1aXFWUkxOdERzK1RRTWxLcjBTODkxWDJGL1EvL3hSak1aSFZBNUFMcFhw?= =?utf-8?B?K25oU0FFU2lCbU9Wb1pQUHFlTklwazFhc2hmRTI4amtiMlpjdE83SHBTbm51?= =?utf-8?B?d2RpVWVWTjJLUWViV2pQeEVsNEJHVE1TRmlhZUs5OFl0MndSQWFiK1V5VXpL?= =?utf-8?B?MDA0L21IdTI1djdzL3lNWW5IYjFCRllXdG1STlBBSWp2YkNVTExGMnVpUTlI?= =?utf-8?B?dHdTYlQxejgrQ3FOcVBlaWtqZGRRZ1llK3NXVHduTXRxUmRPempIbTh2YVpR?= =?utf-8?B?L3VvRUNjalpENkRDNzROajR6bk9udHNzT3FEdFM4RFBtcUhCN1RGaFNmT1ZI?= =?utf-8?B?Vm00azBXWlhTZ3VkYmE3N3NKQnQ2aWVqaDVJWDNCT3Y5Ym50MzFZMll0OEFm?= =?utf-8?B?ZmJuSFk1eEduQklsbzBqVGJLd0hMblZPTWtmNTBhc3V1Yi8xQmNWNUNvWHZK?= =?utf-8?B?KzI4TURpVkxtZFNoWC9yVEYySUR1Rm5lVFNHci9VMXRCb1grUE5IcysvTCtm?= =?utf-8?B?NjNOOWE1dkJ2TTFvV2FvWUhjNjlpVktNWmE5clZnZ056M3lVdjFrRmZHRE9v?= =?utf-8?B?Rk1FSFY4MGpMd0NRZjYvVmk1Tk9KRmxnVElaWDlIL1FRck5wQVhNYzVsUENl?= =?utf-8?B?djF0WDRHSGhTUXZuV3FtWFpVQnY0LzIyd2tFZDlyZGtJcm43ZFJCMG1zMVRT?= =?utf-8?B?TXdMVHVSOHlDaWdhYUxuQ1hHZ0N1YmVHMXg4M3pLMXNhKzBFeFlheVZKR0xj?= =?utf-8?B?dHpPek5hRHJXSUQwRU1ibzFtMkk0RGZETHlQSlpsMWV4K3dTKys4SURnai9E?= =?utf-8?B?NXRuSEl3b1FkZmJodEY5RUJuck1oc1g2OTVuVzJLWTNZVzlVQTdCNlR1MjA2?= =?utf-8?B?ZTFXYWx1ZnZlRHNGR2pjaXZra2pUVEN5V2RGYVBvL0d5UytzbitEYXZkSU5C?= =?utf-8?B?V2ozcWRZZW1oZWlaQ3NSQUdsbWt6MEpsQzlFKzBuZXBCdytzS1FRYU1DS0Y4?= =?utf-8?B?UENBMlZWZjZhaUNWUE5SMVBCYXhHT1gvcFVJVExUWnNyOHdrVGVKZytYVTEr?= =?utf-8?B?enZPNFc0MEtwTmpnR2ZsWXJoN1hsMDJTdFh4M0E4Qm9zcDdMbnhFWHdZdnIx?= =?utf-8?B?VGIxelcrcTcxMWRTeHl5aEttYmpPM2ZmN1BTcVZsNk1IUFNIYWhMUk5aRmxJ?= =?utf-8?B?V3E4VHZrUnpycC80ZVNNTjhRM2s5RTNYdVpFYTg2WlRuRDJmL3k4Wk0zaS9n?= =?utf-8?B?REtIUXRobkl3VGVFaEF5ZmthemdIeHZsWHNyN0VZcjlscG5EYStyQllGOUFZ?= =?utf-8?B?Y3JXb3NCbFV3dVdlcERFNWUyUUtBUnhUamtDbWEzMkhtMjAzVjZZa0FidjY2?= =?utf-8?B?UWkxYTlZd3FhVEJlT2tzUy9nbmUxNlZTVVpKWmRaMlB3R2grSzZRSjZvRXlI?= =?utf-8?B?WlprZzc3dFdTWG5CVUE4RFJRL0JGWWJ4MllGNnE2cjZoMGFFLzRTdEFXa0l4?= =?utf-8?B?dW4raUEyM0VQYnJoS0lLZkhmd1ZlZ1luT1FObEdqTUtGYlVkM0wvVXdFTlNZ?= =?utf-8?B?UVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 205b7131-4a83-484c-e14f-08db04830683 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Feb 2023 18:34:59.8965 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: UgnUZsI7hmnlH/mATncLPX+GlnLcIt4rSluDxyHomUSwYLg0gzpVrQqem4UB7ZnE3cdoPo+A5dRGdpniuGAW5cVhbIYEYWpSp6DWQnbtQKU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB2371 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksDQoNCk9uIHdoYXQgdHJlZSAvIGJyYW5jaCBkb2VzIHRoaXMgcGF0Y2ggYXBwbGllcyA/DQoN CkkgaGF2ZSB0cmllZCB3aXRoIG1vZHVsZXMvbW9kdWxlcy1uZXh0LCBsaW51cy9tYXN0ZXIsIHdp dGggdjYuMS4gSXQgDQpjb25mbGljdHMgb24gYWxsIG9mIHRoZW0uDQoNCidnaXQgYW0gLTMnIGV2 ZW4gc2F5cyB0aGF0ICdJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMg DQppbmRleC4nDQoNCkNocmlzdG9waGUNCg0KTGUgMDEvMDIvMjAyMyDDoCAxODozNiwgU29uZyBM aXUgYSDDqWNyaXTCoDoNCj4gbW9kdWxlX2xheW91dCBtYW5hZ2VzIGRpZmZlcmVudCB0eXBlcyBv ZiBtZW1vcnkgKHRleHQsIGRhdGEsIHJvZGF0YSwgZXRjLikNCj4gaW4gb25lIGFsbG9jYXRpb24s IHdoaWNoIGlzIHByb2JsZW1hdGljIGZvciBzb21lIHJlYXNvbnM6DQo+IA0KPiAxLiBJdCBpcyBo YXJkIHRvIGVuYWJsZSBDT05GSUdfU1RSSUNUX01PRFVMRV9SV1guDQo+IDIuIEl0IGlzIGhhcmQg dG8gdXNlIGh1Z2UgcGFnZXMgaW4gbW9kdWxlcyAoYW5kIG5vdCBicmVhayBzdHJpY3Qgcnd4KS4N Cj4gMy4gTWFueSBhcmNocyB1c2VzIG1vZHVsZV9sYXlvdXQgZm9yIGFyY2gtc3BlY2lmaWMgZGF0 YSwgYnV0IGl0IGlzIG5vdA0KPiAgICAgb2J2aW91cyBob3cgdGhlc2UgZGF0YSBhcmUgdXNlZCAo YXJlIHRoZXkgUk8sIFJYLCBvciBSVz8pDQo+IA0KPiBJbXByb3ZlIHRoZSBzY2VuYXJpbyBieSBy ZXBsYWNpbmcgMiAob3IgMykgbW9kdWxlX2xheW91dCBwZXIgbW9kdWxlIHdpdGgNCj4gdXAgdG8g NyBtb2R1bGVfbWVtb3J5IHBlciBtb2R1bGU6DQo+IA0KPiAgICAgICAgICBNT0RfVEVYVCwNCj4g ICAgICAgICAgTU9EX0RBVEEsDQo+ICAgICAgICAgIE1PRF9ST0RBVEEsDQo+ICAgICAgICAgIE1P RF9ST19BRlRFUl9JTklULA0KPiAgICAgICAgICBNT0RfSU5JVF9URVhULA0KPiAgICAgICAgICBN T0RfSU5JVF9EQVRBLA0KPiAgICAgICAgICBNT0RfSU5JVF9ST0RBVEEsDQo+IA0KPiBhbmQgYWxs b2NhdGluZyB0aGVtIHNlcGFyYXRlbHkuIFRoaXMgYWRkcyBzbGlnaHRseSBtb3JlIGVudHJpZXMg dG8NCj4gbW9kX3RyZWUgKGZyb20gdXAgdG8gMyBlbnRyaWVzIHBlciBtb2R1bGUsIHRvIHVwIHRv IDcgZW50cmllcyBwZXINCj4gbW9kdWxlKS4gSG93ZXZlciwgdGhpcyBhdCBtb3N0IGFkZHMgYSBz bWFsbCBjb25zdGFudCBvdmVyaGVhZCB0bw0KPiBfX21vZHVsZV9hZGRyZXNzKCksIHdoaWNoIGlz IGV4cGVjdGVkIHRvIGJlIGZhc3QuDQo+IA0KPiBWYXJpb3VzIGFyY2hzIHVzZSBtb2R1bGVfbGF5 b3V0IGZvciBkaWZmZXJlbnQgZGF0YS4gVGhlc2UgZGF0YSBhcmUgcHV0DQo+IGludG8gZGlmZmVy ZW50IG1vZHVsZV9tZW1vcnkgYmFzZWQgb24gdGhlaXIgbG9jYXRpb24gaW4gbW9kdWxlX2xheW91 dC4NCj4gSU9XLCBkYXRhIHRoYXQgdXNlZCB0byBnbyB3aXRoIHRleHQgaXMgYWxsb2NhdGVkIHdp dGggTU9EX01FTV9UWVBFX1RFWFQ7DQo+IGRhdGEgdGhhdCB1c2VkIHRvIGdvIHdpdGggZGF0YSBp cyBhbGxvY2F0ZWQgd2l0aCBNT0RfTUVNX1RZUEVfREFUQSwgZXRjLg0KPiANCj4gbW9kdWxlX21l bW9yeSBzaW1wbGlmaWVzIHF1aXRlIHNvbWUgb2YgdGhlIG1vZHVsZSBjb2RlLiBGb3IgZXhhbXBs ZSwNCj4gQVJDSF9XQU5UU19NT0RVTEVTX0RBVEFfSU5fVk1BTExPQyBpcyBhIGxvdCBjbGVhbmVy LCBhcyBpdCBqdXN0IHVzZXMgYQ0KPiBkaWZmZXJlbnQgYWxsb2NhdG9yIGZvciB0aGUgZGF0YS4g a2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMgaXMgYWxzbw0KPiBtdWNoIGNsZWFuZXIgd2l0aCBt b2R1bGVfbWVtb3J5Lg0KPiANCj4gU2lnbmVkLW9mZi1ieTogU29uZyBMaXUgPHNvbmdAa2VybmVs Lm9yZz4NCj4gQ2M6IEx1aXMgQ2hhbWJlcmxhaW4gPG1jZ3JvZkBrZXJuZWwub3JnPg0KPiBDYzog VGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+DQo+IENjOiBQZXRlciBaaWpsc3Ry YSA8cGV0ZXJ6QGluZnJhZGVhZC5vcmc+DQo+IENjOiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vj ay11cy5uZXQ+DQo+IENjOiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95QGNzZ3Jv dXAuZXU+DQo+IA0KPiAtLS0NCj4gDQo+IFRoaXMgaXMgdGhlIHByZXBhcmF0aW9uIHdvcmsgZm9y IHRoZSB0eXBlIGF3YXJlIG1vZHVsZV9hbGxvYygpIGRpc2N1c3NlZA0KPiBpbiBbMV0uIFdoaWxl IHRoaXMgd29yayBpcyBub3QgY292ZXJlZCBtdWNoIGluIHRoZSBkaXNjdXNzaW9uLCBpdCBpcyBh DQo+IGNyaXRpY2FsIHN0ZXAgb2YgdGhlIGVmZm9ydC4NCj4gDQo+IEFzIHRoaXMgcGFydCBncm93 cyBwcmV0dHkgYmlnICh+MTAwMCBsaW5lcywgKyBhbmQgLSksIEkgd291bGQgbGlrZSBnZXQNCj4g c29tZSBmZWVkYmFjayBvbiBpdCwgc28gdGhhdCBJIGtub3cgaXQgaXMgb24gdGhlIHJpZ2h0IHRy YWNrLg0KPiANCj4gUGxlYXNlIHNoYXJlIHlvdXIgY29tbWVudHMuIFRoYW5rcyENCj4gDQo+IFRl c3QgY292ZXJhZ2U6IFRlc3RlZCBvbiB4ODZfNjQuDQo+IEJ1aWxkIHRlc3RlZCBieSBrZXJuZWwg dGVzdCBib3QgaW4gWzJdLiBUaGUgb25seSByZWdyZXNzaW9uIGluIFsyXSB3YXMgYQ0KPiB0eXBv IGluIHBhcmlzYywgd2hpY2ggaXMgYWxzbyBmaXhlZC4NCj4gDQo+IFsxXSBodHRwczovL2xvcmUu a2VybmVsLm9yZy9saW51eC1tbS8yMDIyMTEwNzIyMzkyMS4zNDUxOTEzLTEtc29uZ0BrZXJuZWwu b3JnL1QvI3UNCj4gWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJhaWQvNjNiODgy N2UuY2xKUVgyd2crSSt0aVg3bSUyNWxrcEBpbnRlbC5jb20vVC8jdQ0KPiANCj4gQ2hhbmdlcyB2 MSA9PiB2MjoNCj4gMS4gQWRkIGRhdGFfYWRkcl9bbWlufG1heF0gZm9yIENPTkZJR19BUkNIX1dB TlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+ICAgICBjYXNlLg0KPiANCj4gQ2hhbmdlcyB2 MiA9PiB2MzoNCj4gMS4gRml4IGFuZCByZW1vdmUgdGhlIGxhc3QgdXNlIG9mIElOSVRfT0ZGU0VU X01BU0suDQo+IDIuIEFkZCBtb3JlIGluZm9ybWF0aW9uIGluIHRoZSBjb21taXQgbG9nLiAoTHVp cyBDaGFtYmVybGFpbikNCj4gMy4gUmViYXNlIGFuZCBmaXggaXNzdWVzIGluIHg4Ni9jYWxsdHJ1 bmtzLg0KPiA0LiBNaW5vciBjbGVhbnVwLg0KPiANCj4gQ2hhbmdlcyB2MyA9PiB2NDoNCj4gMS4g U2hvcnRlbiBlbnVtL3ZhcmlhYmxlIG5hbWVzLCBzbyB0aGF0IHRoZSBjb2RlIGFyZSBlYXNpZXIg dG8gcmVhZC4NCj4gICAgIChDaHJpc3RvcGhlIExlcm95KQ0KPiAyLiBSZW1vdmUgYW4gdXNlZCB2 YXJpYWJsZS4gKEd1ZW50ZXIgUm9lY2ssIENocmlzdG9waGUgTGVyb3kpDQo+IA0KPiBDaGFuZ2Vz IHY0ID0+IHY1Og0KPiAxLiBTaW1wbGlmeSBzb21lIGNvZGUgc29tZSBjb2RlLiAoUGV0ZXIgWmlq bHN0cmEsIENocmlzdG9waGUgTGVyb3kpDQo+IDIuIFJlbW92ZSBtb2R1bGVfY2hlY2tfbWlzYWxp Z25tZW50KCksIHdoaWNoIGlzIG5vdCB1c2VmdWwgYW55IG1vcmUuDQo+IA0KPiBDaGFuZ2VzIHY1 ID0+IHY2Og0KPiAxLiBJbXByb3ZlIG1vZF9tZW1fdHlwZV9pc18qIGFuZCBmb3JfKm1vZF9tZW1f dHlwZSBtYXJjb3MuDQo+ICAgICAoUGV0ZXIgWmlqbHN0cmEpLg0KPiAtLS0NCj4gICBhcmNoL2Fs cGhhL2tlcm5lbC9tb2R1bGUuYyAgICAgIHwgICAyICstDQo+ICAgYXJjaC9hcmMva2VybmVsL3Vu d2luZC5jICAgICAgICB8ICAgOSArLQ0KPiAgIGFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5j ICAgfCAgIDIgKy0NCj4gICBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jIHwgICAyICst DQo+ICAgYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyAgICAgICB8ICAyNCArKy0NCj4gICBhcmNo L21pcHMva2VybmVsL3ZwZS5jICAgICAgICAgIHwgIDExICstDQo+ICAgYXJjaC9wYXJpc2Mva2Vy bmVsL21vZHVsZS5jICAgICB8ICA1MSArKy0tLQ0KPiAgIGFyY2gvcG93ZXJwYy9rZXJuZWwvbW9k dWxlXzMyLmMgfCAgIDcgKy0NCj4gICBhcmNoL3MzOTAva2VybmVsL21vZHVsZS5jICAgICAgIHwg IDI2ICstLQ0KPiAgIGFyY2gveDg2L2tlcm5lbC9jYWxsdGh1bmtzLmMgICAgfCAgIDQgKy0NCj4g ICBhcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMgICAgICAgIHwgICA0ICstDQo+ICAgaW5jbHVkZS9s aW51eC9tb2R1bGUuaCAgICAgICAgICB8ICA4NiArKysrKy0tLQ0KPiAgIGtlcm5lbC9tb2R1bGUv aW50ZXJuYWwuaCAgICAgICAgfCAgNDAgKystLQ0KPiAgIGtlcm5lbC9tb2R1bGUva2FsbHN5bXMu YyAgICAgICAgfCAgNTYgKystLS0NCj4gICBrZXJuZWwvbW9kdWxlL2tkYi5jICAgICAgICAgICAg IHwgIDE3ICstDQo+ICAga2VybmVsL21vZHVsZS9tYWluLmMgICAgICAgICAgICB8IDM1NSArKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQ0KPiAgIGtlcm5lbC9tb2R1bGUvcHJvY2ZzLmMg ICAgICAgICAgfCAgMTYgKy0NCj4gICBrZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYyAgICAgIHwg MTAwICsrLS0tLS0tLQ0KPiAgIGtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYyAgICAgfCAgMzkg KystLQ0KPiAgIDE5IGZpbGVzIGNoYW5nZWQsIDQzMiBpbnNlcnRpb25zKCspLCA0MTkgZGVsZXRp b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMgYi9h cmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYw0KPiBpbmRleCA1YjYwYzI0OGRlOWUuLjkxMDkyMTNh YmMwOSAxMDA2NDQNCj4gLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMNCj4gKysrIGIv YXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMNCj4gQEAgLTE0OCw3ICsxNDgsNyBAQCBhcHBseV9y ZWxvY2F0ZV9hZGQoRWxmNjRfU2hkciAqc2VjaGRycywgY29uc3QgY2hhciAqc3RydGFiLA0KPiAg IA0KPiAgIAkvKiBUaGUgc21hbGwgc2VjdGlvbnMgd2VyZSBzb3J0ZWQgdG8gdGhlIGVuZCBvZiB0 aGUgc2VnbWVudC4NCj4gICAJICAgVGhlIGZvbGxvd2luZyBzaG91bGQgZGVmaW5pdGVseSBjb3Zl ciB0aGVtLiAgKi8NCj4gLQlncCA9ICh1NjQpbWUtPmNvcmVfbGF5b3V0LmJhc2UgKyBtZS0+Y29y ZV9sYXlvdXQuc2l6ZSAtIDB4ODAwMDsNCj4gKwlncCA9ICh1NjQpbWUtPm1lbVtNT0RfREFUQV0u YmFzZSArIG1lLT5tZW1bTU9EX0RBVEFdLnNpemUgLSAweDgwMDA7DQo+ICAgCWdvdCA9IHNlY2hk cnNbbWUtPmFyY2guZ290c2VjaW5kZXhdLnNoX2FkZHI7DQo+ICAgDQo+ICAgCWZvciAoaSA9IDA7 IGkgPCBuOyBpKyspIHsNCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2tlcm5lbC91bndpbmQuYyBi L2FyY2gvYXJjL2tlcm5lbC91bndpbmQuYw0KPiBpbmRleCAyMDAyNzBhOTQ1NTguLjkzMzQ1MWY0 NDk0ZiAxMDA2NDQNCj4gLS0tIGEvYXJjaC9hcmMva2VybmVsL3Vud2luZC5jDQo+ICsrKyBiL2Fy Y2gvYXJjL2tlcm5lbC91bndpbmQuYw0KPiBAQCAtMzY5LDYgKzM2OSw4IEBAIHZvaWQgKnVud2lu ZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFy dCwNCj4gICAJCSAgICAgICB1bnNpZ25lZCBsb25nIHRhYmxlX3NpemUpDQo+ICAgew0KPiAgIAlz dHJ1Y3QgdW53aW5kX3RhYmxlICp0YWJsZTsNCj4gKwlzdHJ1Y3QgbW9kdWxlX21lbW9yeSAqbW9k X21lbV9jb3JlX3RleHQ7DQo+ICsJc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW1faW5pdF90 ZXh0Ow0KPiAgIA0KPiAgIAlpZiAodGFibGVfc2l6ZSA8PSAwKQ0KPiAgIAkJcmV0dXJuIE5VTEw7 DQo+IEBAIC0zNzcsOSArMzc5LDEyIEBAIHZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1v ZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwNCj4gICAJaWYgKCF0YWJsZSkN Cj4gICAJCXJldHVybiBOVUxMOw0KPiAgIA0KPiArCW1vZF9tZW1fY29yZV90ZXh0ID0gJm1vZHVs ZS0+bWVtW01PRF9URVhUXTsNCj4gKwltb2RfbWVtX2luaXRfdGV4dCA9ICZtb2R1bGUtPm1lbVtN T0RfSU5JVF9URVhUXTsNCj4gKw0KPiAgIAlpbml0X3Vud2luZF90YWJsZSh0YWJsZSwgbW9kdWxl LT5uYW1lLA0KPiAtCQkJICBtb2R1bGUtPmNvcmVfbGF5b3V0LmJhc2UsIG1vZHVsZS0+Y29yZV9s YXlvdXQuc2l6ZSwNCj4gLQkJCSAgbW9kdWxlLT5pbml0X2xheW91dC5iYXNlLCBtb2R1bGUtPmlu aXRfbGF5b3V0LnNpemUsDQo+ICsJCQkgIG1vZF9tZW1fY29yZV90ZXh0LT5iYXNlLCBtb2RfbWVt X2NvcmVfdGV4dC0+c2l6ZSwNCj4gKwkJCSAgbW9kX21lbV9pbml0X3RleHQtPmJhc2UsIG1vZF9t ZW1faW5pdF90ZXh0LT5zaXplLA0KPiAgIAkJCSAgdGFibGVfc3RhcnQsIHRhYmxlX3NpemUsDQo+ ICAgCQkJICBOVUxMLCAwKTsNCj4gICANCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9t b2R1bGUtcGx0cy5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS1wbHRzLmMNCj4gaW5kZXggYWY3 YzMyMmViZWQ2Li45ZDRlY2I2YjE0MTIgMTAwNjQ0DQo+IC0tLSBhL2FyY2gvYXJtL2tlcm5lbC9t b2R1bGUtcGx0cy5jDQo+ICsrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jDQo+IEBA IC0zMCw3ICszMCw3IEBAIHN0YXRpYyBjb25zdCB1MzIgZml4ZWRfcGx0c1tdID0gew0KPiAgIA0K PiAgIHN0YXRpYyBib29sIGluX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25l ZCBsb25nIGxvYykNCj4gICB7DQo+IC0JcmV0dXJuIGxvYyAtICh1MzIpbW9kLT5pbml0X2xheW91 dC5iYXNlIDwgbW9kLT5pbml0X2xheW91dC5zaXplOw0KPiArCXJldHVybiB3aXRoaW5fbW9kdWxl X2luaXQobG9jLCBtb2QpOw0KPiAgIH0NCj4gICANCj4gICBzdGF0aWMgdm9pZCBwcmVhbGxvY19m aXhlZChzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYywgc3RydWN0IHBsdF9lbnRyaWVzICpwbHQp DQo+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jIGIvYXJjaC9h cm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYw0KPiBpbmRleCA1YTBhOGY1NTJhNjEuLmZlZGZmYTgz YTI4MyAxMDA2NDQNCj4gLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYw0KPiAr KysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jDQo+IEBAIC02Nyw3ICs2Nyw3IEBA IHN0YXRpYyBib29sIHBsdF9lbnRyaWVzX2VxdWFsKGNvbnN0IHN0cnVjdCBwbHRfZW50cnkgKmEs DQo+ICAgDQo+ICAgc3RhdGljIGJvb2wgaW5faW5pdChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2Qs IHZvaWQgKmxvYykNCj4gICB7DQo+IC0JcmV0dXJuICh1NjQpbG9jIC0gKHU2NCltb2QtPmluaXRf bGF5b3V0LmJhc2UgPCBtb2QtPmluaXRfbGF5b3V0LnNpemU7DQo+ICsJcmV0dXJuIHdpdGhpbl9t b2R1bGVfaW5pdChsb2MsIG1vZCk7DQo+ICAgfQ0KPiAgIA0KPiAgIHU2NCBtb2R1bGVfZW1pdF9w bHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLA0KPiBkaWZm IC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9k dWxlLmMNCj4gaW5kZXggOGY2MmNmOTdmNjkxLi4zNjYxMTM1ZGE5ZDkgMTAwNjQ0DQo+IC0tLSBh L2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMNCj4gKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tb2R1 bGUuYw0KPiBAQCAtNDg1LDE5ICs0ODUsMTkgQEAgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyAo RWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLCBjaGFyICpzZWNzdHJpbmdzLA0KPiAg IAlyZXR1cm4gMDsNCj4gICB9DQo+ICAgDQo+IC1zdGF0aWMgaW5saW5lIGludA0KPiArc3RhdGlj IGlubGluZSBib29sDQo+ICAgaW5faW5pdCAoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCB1aW50 NjRfdCBhZGRyKQ0KPiAgIHsNCj4gLQlyZXR1cm4gYWRkciAtICh1aW50NjRfdCkgbW9kLT5pbml0 X2xheW91dC5iYXNlIDwgbW9kLT5pbml0X2xheW91dC5zaXplOw0KPiArCXJldHVybiB3aXRoaW5f bW9kdWxlX2luaXQoYWRkciwgbW9kKTsNCj4gICB9DQo+ICAgDQo+IC1zdGF0aWMgaW5saW5lIGlu dA0KPiArc3RhdGljIGlubGluZSBib29sDQo+ICAgaW5fY29yZSAoY29uc3Qgc3RydWN0IG1vZHVs ZSAqbW9kLCB1aW50NjRfdCBhZGRyKQ0KPiAgIHsNCj4gLQlyZXR1cm4gYWRkciAtICh1aW50NjRf dCkgbW9kLT5jb3JlX2xheW91dC5iYXNlIDwgbW9kLT5jb3JlX2xheW91dC5zaXplOw0KPiArCXJl dHVybiB3aXRoaW5fbW9kdWxlX2NvcmUoYWRkciwgbW9kKTsNCj4gICB9DQo+ICAgDQo+IC1zdGF0 aWMgaW5saW5lIGludA0KPiArc3RhdGljIGlubGluZSBib29sDQo+ICAgaXNfaW50ZXJuYWwgKGNv bnN0IHN0cnVjdCBtb2R1bGUgKm1vZCwgdWludDY0X3QgdmFsdWUpDQo+ICAgew0KPiAgIAlyZXR1 cm4gaW5faW5pdChtb2QsIHZhbHVlKSB8fCBpbl9jb3JlKG1vZCwgdmFsdWUpOw0KPiBAQCAtNjc3 LDcgKzY3Nyw4IEBAIGRvX3JlbG9jIChzdHJ1Y3QgbW9kdWxlICptb2QsIHVpbnQ4X3Qgcl90eXBl LCBFbGY2NF9TeW0gKnN5bSwgdWludDY0X3QgYWRkZW5kLA0KPiAgIAkJYnJlYWs7DQo+ICAgDQo+ ICAgCSAgICAgIGNhc2UgUlZfQkRSRUw6DQo+IC0JCXZhbCAtPSAodWludDY0X3QpIChpbl9pbml0 KG1vZCwgdmFsKSA/IG1vZC0+aW5pdF9sYXlvdXQuYmFzZSA6IG1vZC0+Y29yZV9sYXlvdXQuYmFz ZSk7DQo+ICsJCXZhbCAtPSAodWludDY0X3QpIChpbl9pbml0KG1vZCwgdmFsKSA/IG1vZC0+bWVt W01PRF9JTklUX1RFWFRdLmJhc2UgOg0KPiArCQkJCSAgIG1vZC0+bWVtW01PRF9URVhUXS5iYXNl KTsNCj4gICAJCWJyZWFrOw0KPiAgIA0KPiAgIAkgICAgICBjYXNlIFJWX0xUVjoNCj4gQEAgLTgx MiwxNSArODEzLDE4IEBAIGFwcGx5X3JlbG9jYXRlX2FkZCAoRWxmNjRfU2hkciAqc2VjaGRycywg Y29uc3QgY2hhciAqc3RydGFiLCB1bnNpZ25lZCBpbnQgc3ltaW5kDQo+ICAgCQkgKiAgICAgYWRk cmVzc2VzIGhhdmUgYmVlbiBzZWxlY3RlZC4uLg0KPiAgIAkJICovDQo+ICAgCQl1aW50NjRfdCBn cDsNCj4gLQkJaWYgKG1vZC0+Y29yZV9sYXlvdXQuc2l6ZSA+IE1BWF9MVE9GRikNCj4gKwkJc3Ry dWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW07DQo+ICsNCj4gKwkJbW9kX21lbSA9ICZtb2QtPm1l bVtNT0RfREFUQV07DQo+ICsJCWlmIChtb2RfbWVtLT5zaXplID4gTUFYX0xUT0ZGKQ0KPiAgIAkJ CS8qDQo+ICAgCQkJICogVGhpcyB0YWtlcyBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IFNIRl9BUkNI X1NNQUxMIGdldHMgYWxsb2NhdGVkDQo+ICAgCQkJICogYXQgdGhlIGVuZCBvZiB0aGUgbW9kdWxl Lg0KPiAgIAkJCSAqLw0KPiAtCQkJZ3AgPSBtb2QtPmNvcmVfbGF5b3V0LnNpemUgLSBNQVhfTFRP RkYgLyAyOw0KPiArCQkJZ3AgPSBtb2RfbWVtLT5zaXplIC0gTUFYX0xUT0ZGIC8gMjsNCj4gICAJ CWVsc2UNCj4gLQkJCWdwID0gbW9kLT5jb3JlX2xheW91dC5zaXplIC8gMjsNCj4gLQkJZ3AgPSAo dWludDY0X3QpIG1vZC0+Y29yZV9sYXlvdXQuYmFzZSArICgoZ3AgKyA3KSAmIC04KTsNCj4gKwkJ CWdwID0gbW9kX21lbS0+c2l6ZSAvIDI7DQo+ICsJCWdwID0gKHVpbnQ2NF90KSBtb2RfbWVtLT5i YXNlICsgKChncCArIDcpICYgLTgpOw0KPiAgIAkJbW9kLT5hcmNoLmdwID0gZ3A7DQo+ICAgCQlE RUJVR1AoIiVzOiBwbGFjaW5nIGdwIGF0IDB4JWx4XG4iLCBfX2Z1bmNfXywgZ3ApOw0KPiAgIAl9 DQo+IGRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5l bC92cGUuYw0KPiBpbmRleCAxMzI5NDk3MjcwN2IuLmFiMTE0YzY4NmY5ZCAxMDA2NDQNCj4gLS0t IGEvYXJjaC9taXBzL2tlcm5lbC92cGUuYw0KPiArKysgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5j DQo+IEBAIC0xOTksMTggKzE5OSwxNyBAQCBzdGF0aWMgdm9pZCBsYXlvdXRfc2VjdGlvbnMoc3Ry dWN0IG1vZHVsZSAqbW9kLCBjb25zdCBFbGZfRWhkciAqaGRyLA0KPiAgIAlmb3IgKG0gPSAwOyBt IDwgQVJSQVlfU0laRShtYXNrcyk7ICsrbSkgew0KPiAgIAkJZm9yIChpID0gMDsgaSA8IGhkci0+ ZV9zaG51bTsgKytpKSB7DQo+ICAgCQkJRWxmX1NoZHIgKnMgPSAmc2VjaGRyc1tpXTsNCj4gKwkJ CXN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtOw0KPiArDQo+ICsJCQltb2RfbWVtID0gJm1v ZC0+bWVtW01PRF9URVhUXTsNCj4gICANCj4gICAJCQlpZiAoKHMtPnNoX2ZsYWdzICYgbWFza3Nb bV1bMF0pICE9IG1hc2tzW21dWzBdDQo+ICAgCQkJICAgIHx8IChzLT5zaF9mbGFncyAmIG1hc2tz W21dWzFdKQ0KPiAgIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwpDQo+ICAgCQkJCWNv bnRpbnVlOw0KPiAgIAkJCXMtPnNoX2VudHNpemUgPQ0KPiAtCQkJCWdldF9vZmZzZXQoKHVuc2ln bmVkIGxvbmcgKikmbW9kLT5jb3JlX2xheW91dC5zaXplLCBzKTsNCj4gKwkJCQlnZXRfb2Zmc2V0 KCh1bnNpZ25lZCBsb25nICopJm1vZF9tZW0tPnNpemUsIHMpOw0KPiAgIAkJfQ0KPiAtDQo+IC0J CWlmIChtID09IDApDQo+IC0JCQltb2QtPmNvcmVfbGF5b3V0LnRleHRfc2l6ZSA9IG1vZC0+Y29y ZV9sYXlvdXQuc2l6ZTsNCj4gLQ0KPiAgIAl9DQo+ICAgfQ0KPiAgIA0KPiBAQCAtNjQxLDcgKzY0 MCw3IEBAIHN0YXRpYyBpbnQgdnBlX2VsZmxvYWQoc3RydWN0IHZwZSAqdikNCj4gICAJCWxheW91 dF9zZWN0aW9ucygmbW9kLCBoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MpOw0KPiAgIAl9DQo+ICAg DQo+IC0Jdi0+bG9hZF9hZGRyID0gYWxsb2NfcHJvZ21lbShtb2QuY29yZV9sYXlvdXQuc2l6ZSk7 DQo+ICsJdi0+bG9hZF9hZGRyID0gYWxsb2NfcHJvZ21lbShtb2QubW9kX21lbVtNT0RfVEVYVF0u c2l6ZSk7DQo+ICAgCWlmICghdi0+bG9hZF9hZGRyKQ0KPiAgIAkJcmV0dXJuIC1FTk9NRU07DQo+ ICAgDQo+IGRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3Bh cmlzYy9rZXJuZWwvbW9kdWxlLmMNCj4gaW5kZXggN2RmMTQwNTQ1YjIyLi5mNmUzOGM0ZDM5MDQg MTAwNjQ0DQo+IC0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYw0KPiArKysgYi9hcmNo L3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMNCj4gQEAgLTI3LDkgKzI3LDkgQEANCj4gICAgKiAgICAg IFdlIGFyZSBub3QgZG9pbmcgU0VHUkVMMzIgaGFuZGxpbmcgY29ycmVjdGx5LiBBY2NvcmRpbmcg dG8gdGhlIEFCSSwgd2UNCj4gICAgKiAgICAgIHNob3VsZCBkbyBhIHZhbHVlIG9mZnNldCwgbGlr ZSB0aGlzOg0KPiAgICAqCQkJaWYgKGluX2luaXQobWUsICh2b2lkICopdmFsKSkNCj4gLSAqCQkJ CXZhbCAtPSAodWludDMyX3QpbWUtPmluaXRfbGF5b3V0LmJhc2U7DQo+ICsgKgkJCQl2YWwgLT0g KHVpbnQzMl90KW1lLT5tZW1bTU9EX0lOSVRfVEVYVF0uYmFzZTsNCj4gICAgKgkJCWVsc2UNCj4g LSAqCQkJCXZhbCAtPSAodWludDMyX3QpbWUtPmNvcmVfbGF5b3V0LmJhc2U7DQo+ICsgKgkJCQl2 YWwgLT0gKHVpbnQzMl90KW1lLT5tZW1bTU9EX1RFWFRdLmJhc2U7DQo+ICAgICoJSG93ZXZlciwg U0VHUkVMMzIgaXMgdXNlZCBvbmx5IGZvciBQQVJJU0MgdW53aW5kIGVudHJpZXMsIGFuZCB3ZSB3 YW50DQo+ICAgICoJdGhvc2UgZW50cmllcyB0byBoYXZlIGFuIGFic29sdXRlIGFkZHJlc3MsIGFu ZCBub3QganVzdCBhbiBvZmZzZXQuDQo+ICAgICoNCj4gQEAgLTc2LDI1ICs3Niw2IEBADQo+ICAg ICogYWxsb3dzIHVzIHRvIGFsbG9jYXRlIHVwIHRvIDQwOTUgR09UIGVudHJpZXMuICovDQo+ICAg I2RlZmluZSBNQVhfR09UUwk0MDk1DQo+ICAgDQo+IC0vKiB0aHJlZSBmdW5jdGlvbnMgdG8gZGV0 ZXJtaW5lIHdoZXJlIGluIHRoZSBtb2R1bGUgY29yZQ0KPiAtICogb3IgaW5pdCBwaWVjZXMgdGhl IGxvY2F0aW9uIGlzICovDQo+IC1zdGF0aWMgaW5saW5lIGludCBpbl9pbml0KHN0cnVjdCBtb2R1 bGUgKm1lLCB2b2lkICpsb2MpDQo+IC17DQo+IC0JcmV0dXJuIChsb2MgPj0gbWUtPmluaXRfbGF5 b3V0LmJhc2UgJiYNCj4gLQkJbG9jIDw9IChtZS0+aW5pdF9sYXlvdXQuYmFzZSArIG1lLT5pbml0 X2xheW91dC5zaXplKSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgaW50IGluX2NvcmUo c3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykNCj4gLXsNCj4gLQlyZXR1cm4gKGxvYyA+PSBt ZS0+Y29yZV9sYXlvdXQuYmFzZSAmJg0KPiAtCQlsb2MgPD0gKG1lLT5jb3JlX2xheW91dC5iYXNl ICsgbWUtPmNvcmVfbGF5b3V0LnNpemUpKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSBp bnQgaW5fbG9jYWwoc3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykNCj4gLXsNCj4gLQlyZXR1 cm4gaW5faW5pdChtZSwgbG9jKSB8fCBpbl9jb3JlKG1lLCBsb2MpOw0KPiAtfQ0KPiAtDQo+ICAg I2lmbmRlZiBDT05GSUdfNjRCSVQNCj4gICBzdHJ1Y3QgZ290X2VudHJ5IHsNCj4gICAJRWxmMzJf QWRkciBhZGRyOw0KPiBAQCAtMzAyLDYgKzI4Myw3IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3Nl Y3Rpb25zKENPTlNUIEVsZl9FaGRyICpoZHIsDQo+ICAgew0KPiAgIAl1bnNpZ25lZCBsb25nIGdv dHMgPSAwLCBmZGVzY3MgPSAwLCBsZW47DQo+ICAgCXVuc2lnbmVkIGludCBpOw0KPiArCXN0cnVj dCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtOw0KPiAgIA0KPiAgIAlsZW4gPSBoZHItPmVfc2hudW0g KiBzaXplb2YobWUtPmFyY2guc2VjdGlvblswXSk7DQo+ICAgCW1lLT5hcmNoLnNlY3Rpb24gPSBr emFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7DQo+IEBAIC0zNDYsMTQgKzMyOCwxNSBAQCBpbnQgbW9k dWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhDT05TVCBFbGZfRWhkciAqaGRyLA0KPiAgIAkJbWUtPmFy Y2guc2VjdGlvbltzXS5zdHViX2VudHJpZXMgKz0gY291bnQ7DQo+ICAgCX0NCj4gICANCj4gKwlt b2RfbWVtID0gJm1lLT5tZW1bTU9EX1RFWFRdOw0KPiAgIAkvKiBhbGlnbiB0aGluZ3MgYSBiaXQg Ki8NCj4gLQltZS0+Y29yZV9sYXlvdXQuc2l6ZSA9IEFMSUdOKG1lLT5jb3JlX2xheW91dC5zaXpl LCAxNik7DQo+IC0JbWUtPmFyY2guZ290X29mZnNldCA9IG1lLT5jb3JlX2xheW91dC5zaXplOw0K PiAtCW1lLT5jb3JlX2xheW91dC5zaXplICs9IGdvdHMgKiBzaXplb2Yoc3RydWN0IGdvdF9lbnRy eSk7DQo+ICsJbW9kX21lbS0+c2l6ZSA9IEFMSUdOKG1vZF9tZW0tPnNpemUsIDE2KTsNCj4gKwlt ZS0+YXJjaC5nb3Rfb2Zmc2V0ID0gbW9kX21lbS0+c2l6ZTsNCj4gKwltb2RfbWVtLT5zaXplICs9 IGdvdHMgKiBzaXplb2Yoc3RydWN0IGdvdF9lbnRyeSk7DQo+ICAgDQo+IC0JbWUtPmNvcmVfbGF5 b3V0LnNpemUgPSBBTElHTihtZS0+Y29yZV9sYXlvdXQuc2l6ZSwgMTYpOw0KPiAtCW1lLT5hcmNo LmZkZXNjX29mZnNldCA9IG1lLT5jb3JlX2xheW91dC5zaXplOw0KPiAtCW1lLT5jb3JlX2xheW91 dC5zaXplICs9IGZkZXNjcyAqIHNpemVvZihFbGZfRmRlc2MpOw0KPiArCW1vZF9tZW0tPnNpemUg PSBBTElHTihtb2RfbWVtLT5zaXplLCAxNik7DQo+ICsJbWUtPmFyY2guZmRlc2Nfb2Zmc2V0ID0g bW9kX21lbS0+c2l6ZTsNCj4gKwltb2RfbWVtLT5zaXplICs9IGZkZXNjcyAqIHNpemVvZihFbGZf RmRlc2MpOw0KPiAgIA0KPiAgIAltZS0+YXJjaC5nb3RfbWF4ID0gZ290czsNCj4gICAJbWUtPmFy Y2guZmRlc2NfbWF4ID0gZmRlc2NzOw0KPiBAQCAtMzcxLDcgKzM1NCw3IEBAIHN0YXRpYyBFbGY2 NF9Xb3JkIGdldF9nb3Qoc3RydWN0IG1vZHVsZSAqbWUsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGxv bmcgYWRkZW5kKQ0KPiAgIA0KPiAgIAlCVUdfT04odmFsdWUgPT0gMCk7DQo+ICAgDQo+IC0JZ290 ID0gbWUtPmNvcmVfbGF5b3V0LmJhc2UgKyBtZS0+YXJjaC5nb3Rfb2Zmc2V0Ow0KPiArCWdvdCA9 IG1lLT5tZW1bTU9EX1RFWFRdLmJhc2UgKyBtZS0+YXJjaC5nb3Rfb2Zmc2V0Ow0KPiAgIAlmb3Ig KGkgPSAwOyBnb3RbaV0uYWRkcjsgaSsrKQ0KPiAgIAkJaWYgKGdvdFtpXS5hZGRyID09IHZhbHVl KQ0KPiAgIAkJCWdvdG8gb3V0Ow0KPiBAQCAtMzg5LDcgKzM3Miw3IEBAIHN0YXRpYyBFbGY2NF9X b3JkIGdldF9nb3Qoc3RydWN0IG1vZHVsZSAqbWUsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGxvbmcg YWRkZW5kKQ0KPiAgICNpZmRlZiBDT05GSUdfNjRCSVQNCj4gICBzdGF0aWMgRWxmX0FkZHIgZ2V0 X2ZkZXNjKHN0cnVjdCBtb2R1bGUgKm1lLCB1bnNpZ25lZCBsb25nIHZhbHVlKQ0KPiAgIHsNCj4g LQlFbGZfRmRlc2MgKmZkZXNjID0gbWUtPmNvcmVfbGF5b3V0LmJhc2UgKyBtZS0+YXJjaC5mZGVz Y19vZmZzZXQ7DQo+ICsJRWxmX0ZkZXNjICpmZGVzYyA9IG1lLT5tZW1bTU9EX1RFWFRdLmJhc2Ug KyBtZS0+YXJjaC5mZGVzY19vZmZzZXQ7DQo+ICAgDQo+ICAgCWlmICghdmFsdWUpIHsNCj4gICAJ CXByaW50ayhLRVJOX0VSUiAiJXM6IHplcm8gT1BEIHJlcXVlc3RlZCFcbiIsIG1lLT5uYW1lKTsN Cj4gQEAgLTQwNyw3ICszOTAsNyBAQCBzdGF0aWMgRWxmX0FkZHIgZ2V0X2ZkZXNjKHN0cnVjdCBt b2R1bGUgKm1lLCB1bnNpZ25lZCBsb25nIHZhbHVlKQ0KPiAgIA0KPiAgIAkvKiBDcmVhdGUgbmV3 IG9uZSAqLw0KPiAgIAlmZGVzYy0+YWRkciA9IHZhbHVlOw0KPiAtCWZkZXNjLT5ncCA9IChFbGZf QWRkciltZS0+Y29yZV9sYXlvdXQuYmFzZSArIG1lLT5hcmNoLmdvdF9vZmZzZXQ7DQo+ICsJZmRl c2MtPmdwID0gKEVsZl9BZGRyKW1lLT5tZW1bTU9EX1RFWFRdLmJhc2UgKyBtZS0+YXJjaC5nb3Rf b2Zmc2V0Ow0KPiAgIAlyZXR1cm4gKEVsZl9BZGRyKWZkZXNjOw0KPiAgIH0NCj4gICAjZW5kaWYg LyogQ09ORklHXzY0QklUICovDQo+IEBAIC03NDIsNyArNzI1LDcgQEAgaW50IGFwcGx5X3JlbG9j YXRlX2FkZChFbGZfU2hkciAqc2VjaGRycywNCj4gICAJCQkgICAgICAgbG9jLCB2YWwpOw0KPiAg IAkJCXZhbCArPSBhZGRlbmQ7DQo+ICAgCQkJLyogY2FuIHdlIHJlYWNoIGl0IGxvY2FsbHk/ICov DQo+IC0JCQlpZiAoaW5fbG9jYWwobWUsICh2b2lkICopdmFsKSkgew0KPiArCQkJaWYgKHdpdGhp bl9tb2R1bGUodmFsLCBtZSkpIHsNCj4gICAJCQkJLyogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0 aGUgc3ltYm9sIGlzIGxvY2FsDQo+ICAgCQkJCSAqIHRvIHRoZSBtb2R1bGUsIGJ1dCBpbiBhIGRp ZmZlcmVudCBzZWN0aW9uLA0KPiAgIAkJCQkgKiBzbyBzdHViIHRoZSBqdW1wIGluIGNhc2UgaXQn cyBtb3JlIHRoYW4gMjINCj4gQEAgLTgwMSw3ICs3ODQsNyBAQCBpbnQgYXBwbHlfcmVsb2NhdGVf YWRkKEVsZl9TaGRyICpzZWNoZHJzLA0KPiAgIAkJCWJyZWFrOw0KPiAgIAkJY2FzZSBSX1BBUklT Q19GUFRSNjQ6DQo+ICAgCQkJLyogNjQtYml0IGZ1bmN0aW9uIGFkZHJlc3MgKi8NCj4gLQkJCWlm KGluX2xvY2FsKG1lLCAodm9pZCAqKSh2YWwgKyBhZGRlbmQpKSkgew0KPiArCQkJaWYgKHdpdGhp bl9tb2R1bGUodmFsICsgYWRkZW5kLCBtZSkpIHsNCj4gICAJCQkJKmxvYzY0ID0gZ2V0X2ZkZXNj KG1lLCB2YWwrYWRkZW5kKTsNCj4gICAJCQkJcHJfZGVidWcoIkZERVNDIGZvciAlcyBhdCAlbGx4 IHBvaW50cyB0byAlbGx4XG4iLA0KPiAgIAkJCQkgICAgICAgc3RydGFiICsgc3ltLT5zdF9uYW1l LCAqbG9jNjQsDQo+IEBAIC04MzksNyArODIyLDcgQEAgcmVnaXN0ZXJfdW53aW5kX3RhYmxlKHN0 cnVjdCBtb2R1bGUgKm1lLA0KPiAgIA0KPiAgIAl0YWJsZSA9ICh1bnNpZ25lZCBjaGFyICopc2Vj aGRyc1ttZS0+YXJjaC51bndpbmRfc2VjdGlvbl0uc2hfYWRkcjsNCj4gICAJZW5kID0gdGFibGUg KyBzZWNoZHJzW21lLT5hcmNoLnVud2luZF9zZWN0aW9uXS5zaF9zaXplOw0KPiAtCWdwID0gKEVs Zl9BZGRyKW1lLT5jb3JlX2xheW91dC5iYXNlICsgbWUtPmFyY2guZ290X29mZnNldDsNCj4gKwln cCA9IChFbGZfQWRkciltZS0+bWVtW01PRF9URVhUXS5iYXNlICsgbWUtPmFyY2guZ290X29mZnNl dDsNCj4gICANCj4gICAJcHJfZGVidWcoInJlZ2lzdGVyX3Vud2luZF90YWJsZSgpLCBzZWN0ID0g JWQgYXQgMHglcCAtIDB4JXAgKGdwPTB4JWx4KVxuIiwNCj4gICAJICAgICAgIG1lLT5hcmNoLnVu d2luZF9zZWN0aW9uLCB0YWJsZSwgZW5kLCBncCk7DQo+IEBAIC05NzcsNyArOTYwLDcgQEAgdm9p ZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gICAjaWZkZWYgQ09O RklHXzY0QklUDQo+ICAgdm9pZCAqZGVyZWZlcmVuY2VfbW9kdWxlX2Z1bmN0aW9uX2Rlc2NyaXB0 b3Ioc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICpwdHIpDQo+ICAgew0KPiAtCXVuc2lnbmVkIGxv bmcgc3RhcnRfb3BkID0gKEVsZjY0X0FkZHIpbW9kLT5jb3JlX2xheW91dC5iYXNlICsNCj4gKwl1 bnNpZ25lZCBsb25nIHN0YXJ0X29wZCA9IChFbGY2NF9BZGRyKW1vZC0+bWVtW01PRF9URVhUXS5i YXNlICsNCj4gICAJCQkJICAgbW9kLT5hcmNoLmZkZXNjX29mZnNldDsNCj4gICAJdW5zaWduZWQg bG9uZyBlbmRfb3BkID0gc3RhcnRfb3BkICsNCj4gICAJCQkJbW9kLT5hcmNoLmZkZXNjX2NvdW50 ICogc2l6ZW9mKEVsZjY0X0ZkZXNjKTsNCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJu ZWwvbW9kdWxlXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV8zMi5jDQo+IGluZGV4 IGVhNjUzNjE3MTc3OC4uMjcyOTE3OWU5ZGMwIDEwMDY0NA0KPiAtLS0gYS9hcmNoL3Bvd2VycGMv a2VybmVsL21vZHVsZV8zMi5jDQo+ICsrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMy LmMNCj4gQEAgLTE2Myw4ICsxNjMsNyBAQCBzdGF0aWMgdWludDMyX3QgZG9fcGx0X2NhbGwodm9p ZCAqbG9jYXRpb24sDQo+ICAgDQo+ICAgCXByX2RlYnVnKCJEb2luZyBwbHQgZm9yIGNhbGwgdG8g MHgleCBhdCAweCV4XG4iLCB2YWwsICh1bnNpZ25lZCBpbnQpbG9jYXRpb24pOw0KPiAgIAkvKiBJ bml0LCBvciBjb3JlIFBMVD8gKi8NCj4gLQlpZiAobG9jYXRpb24gPj0gbW9kLT5jb3JlX2xheW91 dC5iYXNlDQo+IC0JICAgICYmIGxvY2F0aW9uIDwgbW9kLT5jb3JlX2xheW91dC5iYXNlICsgbW9k LT5jb3JlX2xheW91dC5zaXplKQ0KPiArCWlmICh3aXRoaW5fbW9kdWxlX2luaXQobG9jYXRpb24s IG1vZCkpDQo+ICAgCQllbnRyeSA9ICh2b2lkICopc2VjaGRyc1ttb2QtPmFyY2guY29yZV9wbHRf c2VjdGlvbl0uc2hfYWRkcjsNCj4gICAJZWxzZQ0KPiAgIAkJZW50cnkgPSAodm9pZCAqKXNlY2hk cnNbbW9kLT5hcmNoLmluaXRfcGx0X3NlY3Rpb25dLnNoX2FkZHI7DQo+IEBAIC0zMjIsMTQgKzMy MSwxNCBAQCBub3RyYWNlIGludCBtb2R1bGVfdHJhbXBvbGluZV90YXJnZXQoc3RydWN0IG1vZHVs ZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIsDQo+ICAgDQo+ICAgaW50IG1vZHVsZV9maW5hbGl6 ZV9mdHJhY2Uoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycykN Cj4gICB7DQo+IC0JbW9kdWxlLT5hcmNoLnRyYW1wID0gZG9fcGx0X2NhbGwobW9kdWxlLT5jb3Jl X2xheW91dC5iYXNlLA0KPiArCW1vZHVsZS0+YXJjaC50cmFtcCA9IGRvX3BsdF9jYWxsKG1vZHVs ZS0+bWVtW01PRF9URVhUXS5iYXNlLA0KPiAgIAkJCQkJICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9j YWxsZXIsDQo+ICAgCQkJCQkgc2VjaGRycywgbW9kdWxlKTsNCj4gICAJaWYgKCFtb2R1bGUtPmFy Y2gudHJhbXApDQo+ICAgCQlyZXR1cm4gLUVOT0VOVDsNCj4gICANCj4gICAjaWZkZWYgQ09ORklH X0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUw0KPiAtCW1vZHVsZS0+YXJjaC50cmFtcF9yZWdzID0g ZG9fcGx0X2NhbGwobW9kdWxlLT5jb3JlX2xheW91dC5iYXNlLA0KPiArCW1vZHVsZS0+YXJjaC50 cmFtcF9yZWdzID0gZG9fcGx0X2NhbGwobW9kdWxlLT5tZW1bTU9EX1RFWFRdLmJhc2UsDQo+ICAg CQkJCQkgICAgICAodW5zaWduZWQgbG9uZylmdHJhY2VfcmVnc19jYWxsZXIsDQo+ICAgCQkJCQkg ICAgICBzZWNoZHJzLCBtb2R1bGUpOw0KPiAgIAlpZiAoIW1vZHVsZS0+YXJjaC50cmFtcF9yZWdz KQ0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9r ZXJuZWwvbW9kdWxlLmMNCj4gaW5kZXggMmQxNTliMzI4ODViLi4zZWQ0NTViNzg1YWQgMTAwNjQ0 DQo+IC0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMNCj4gKysrIGIvYXJjaC9zMzkwL2tl cm5lbC9tb2R1bGUuYw0KPiBAQCAtMTI2LDYgKzEyNiw3IEBAIGludCBtb2R1bGVfZnJvYl9hcmNo X3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLA0KPiAgIAlFbGZfUmVs YSAqcmVsYTsNCj4gICAJY2hhciAqc3RyaW5nczsNCj4gICAJaW50IG5yZWxhLCBpLCBqOw0KPiAr CXN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtOw0KPiAgIA0KPiAgIAkvKiBGaW5kIHN5bWJv bCB0YWJsZSBhbmQgc3RyaW5nIHRhYmxlLiAqLw0KPiAgIAlzeW10YWIgPSBOVUxMOw0KPiBAQCAt MTczLDE0ICsxNzQsMTUgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIg KmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsDQo+ICAgDQo+ICAgCS8qIEluY3JlYXNlIGNvcmUgc2l6 ZSBieSBzaXplIG9mIGdvdCAmIHBsdCBhbmQgc2V0IHN0YXJ0DQo+ICAgCSAgIG9mZnNldHMgZm9y IGdvdCBhbmQgcGx0LiAqLw0KPiAtCW1lLT5jb3JlX2xheW91dC5zaXplID0gQUxJR04obWUtPmNv cmVfbGF5b3V0LnNpemUsIDQpOw0KPiAtCW1lLT5hcmNoLmdvdF9vZmZzZXQgPSBtZS0+Y29yZV9s YXlvdXQuc2l6ZTsNCj4gLQltZS0+Y29yZV9sYXlvdXQuc2l6ZSArPSBtZS0+YXJjaC5nb3Rfc2l6 ZTsNCj4gLQltZS0+YXJjaC5wbHRfb2Zmc2V0ID0gbWUtPmNvcmVfbGF5b3V0LnNpemU7DQo+ICsJ bW9kX21lbSA9ICZtZS0+bWVtW01PRF9URVhUXTsNCj4gKwltb2RfbWVtLT5zaXplID0gQUxJR04o bW9kX21lbS0+c2l6ZSwgNCk7DQo+ICsJbWUtPmFyY2guZ290X29mZnNldCA9IG1vZF9tZW0tPnNp emU7DQo+ICsJbW9kX21lbS0+c2l6ZSArPSBtZS0+YXJjaC5nb3Rfc2l6ZTsNCj4gKwltZS0+YXJj aC5wbHRfb2Zmc2V0ID0gbW9kX21lbS0+c2l6ZTsNCj4gICAJaWYgKG1lLT5hcmNoLnBsdF9zaXpl KSB7DQo+ICAgCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfRVhQT0xJTkUpICYmICFub3NwZWNfZGlz YWJsZSkNCj4gICAJCQltZS0+YXJjaC5wbHRfc2l6ZSArPSBQTFRfRU5UUllfU0laRTsNCj4gLQkJ bWUtPmNvcmVfbGF5b3V0LnNpemUgKz0gbWUtPmFyY2gucGx0X3NpemU7DQo+ICsJCW1vZF9tZW0t PnNpemUgKz0gbWUtPmFyY2gucGx0X3NpemU7DQo+ICAgCX0NCj4gICAJcmV0dXJuIDA7DQo+ICAg fQ0KPiBAQCAtMzA0LDcgKzMwNiw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsYShFbGZfUmVsYSAq cmVsYSwgRWxmX0FkZHIgYmFzZSwgRWxmX1N5bSAqc3ltdGFiLA0KPiAgIAljYXNlIFJfMzkwX0dP VFBMVDY0OgkvKiA2NCBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8NCj4gICAJY2FzZSBSXzM5 MF9HT1RQTFRFTlQ6CS8qIDMyIGJpdCByZWwuIG9mZnNldCB0byBqdW1wIHNsb3QgPj4gMS4gKi8N Cj4gICAJCWlmIChpbmZvLT5nb3RfaW5pdGlhbGl6ZWQgPT0gMCkgew0KPiAtCQkJRWxmX0FkZHIg KmdvdGVudCA9IG1lLT5jb3JlX2xheW91dC5iYXNlICsNCj4gKwkJCUVsZl9BZGRyICpnb3RlbnQg PSBtZS0+bWVtW01PRF9URVhUXS5iYXNlICsNCj4gICAJCQkJCSAgIG1lLT5hcmNoLmdvdF9vZmZz ZXQgKw0KPiAgIAkJCQkJICAgaW5mby0+Z290X29mZnNldDsNCj4gICANCj4gQEAgLTMyOSw3ICsz MzEsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbGEoRWxmX1JlbGEgKnJlbGEsIEVsZl9BZGRyIGJh c2UsIEVsZl9TeW0gKnN5bXRhYiwNCj4gICAJCQlyYyA9IGFwcGx5X3JlbGFfYml0cyhsb2MsIHZh bCwgMCwgNjQsIDAsIHdyaXRlKTsNCj4gICAJCWVsc2UgaWYgKHJfdHlwZSA9PSBSXzM5MF9HT1RF TlQgfHwNCj4gICAJCQkgcl90eXBlID09IFJfMzkwX0dPVFBMVEVOVCkgew0KPiAtCQkJdmFsICs9 IChFbGZfQWRkcikgbWUtPmNvcmVfbGF5b3V0LmJhc2UgLSBsb2M7DQo+ICsJCQl2YWwgKz0gKEVs Zl9BZGRyKSBtZS0+bWVtW01PRF9URVhUXS5iYXNlIC0gbG9jOw0KPiAgIAkJCXJjID0gYXBwbHlf cmVsYV9iaXRzKGxvYywgdmFsLCAxLCAzMiwgMSwgd3JpdGUpOw0KPiAgIAkJfQ0KPiAgIAkJYnJl YWs7DQo+IEBAIC0zNDUsNyArMzQ3LDcgQEAgc3RhdGljIGludCBhcHBseV9yZWxhKEVsZl9SZWxh ICpyZWxhLCBFbGZfQWRkciBiYXNlLCBFbGZfU3ltICpzeW10YWIsDQo+ICAgCQkJY2hhciAqcGx0 X2Jhc2U7DQo+ICAgCQkJY2hhciAqaXA7DQo+ICAgDQo+IC0JCQlwbHRfYmFzZSA9IG1lLT5jb3Jl X2xheW91dC5iYXNlICsgbWUtPmFyY2gucGx0X29mZnNldDsNCj4gKwkJCXBsdF9iYXNlID0gbWUt Pm1lbVtNT0RfVEVYVF0uYmFzZSArIG1lLT5hcmNoLnBsdF9vZmZzZXQ7DQo+ICAgCQkJaXAgPSBw bHRfYmFzZSArIGluZm8tPnBsdF9vZmZzZXQ7DQo+ICAgCQkJKihpbnQgKilpbnNuID0gMHgwZDEw ZTMxMDsJLyogYmFzciAxLDAgICovDQo+ICAgCQkJKihpbnQgKikmaW5zbls0XSA9IDB4MTAwYzAw MDQ7CS8qIGxnCTEsMTIoMSkgKi8NCj4gQEAgLTM3NSw3ICszNzcsNyBAQCBzdGF0aWMgaW50IGFw cGx5X3JlbGEoRWxmX1JlbGEgKnJlbGEsIEVsZl9BZGRyIGJhc2UsIEVsZl9TeW0gKnN5bXRhYiwN Cj4gICAJCQkgICAgICAgdmFsIC0gbG9jICsgMHhmZmZmVUwgPCAweDFmZmZmZVVMKSB8fA0KPiAg IAkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYNCj4gICAJCQkgICAgICAgdmFs IC0gbG9jICsgMHhmZmZmZmZmZlVMTCA8IDB4MWZmZmZmZmZlVUxMKSkpDQo+IC0JCQkJdmFsID0g KEVsZl9BZGRyKSBtZS0+Y29yZV9sYXlvdXQuYmFzZSArDQo+ICsJCQkJdmFsID0gKEVsZl9BZGRy KSBtZS0+bWVtW01PRF9URVhUXS5iYXNlICsNCj4gICAJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQg Kw0KPiAgIAkJCQkJaW5mby0+cGx0X29mZnNldDsNCj4gICAJCQl2YWwgKz0gcmVsYS0+cl9hZGRl bmQgLSBsb2M7DQo+IEBAIC0zOTcsNyArMzk5LDcgQEAgc3RhdGljIGludCBhcHBseV9yZWxhKEVs Zl9SZWxhICpyZWxhLCBFbGZfQWRkciBiYXNlLCBFbGZfU3ltICpzeW10YWIsDQo+ICAgCWNhc2Ug Ul8zOTBfR09UT0ZGMzI6CS8qIDMyIGJpdCBvZmZzZXQgdG8gR09ULiAgKi8NCj4gICAJY2FzZSBS XzM5MF9HT1RPRkY2NDoJLyogNjQgYml0IG9mZnNldCB0byBHT1QuICovDQo+ICAgCQl2YWwgPSB2 YWwgKyByZWxhLT5yX2FkZGVuZCAtDQo+IC0JCQkoKEVsZl9BZGRyKSBtZS0+Y29yZV9sYXlvdXQu YmFzZSArIG1lLT5hcmNoLmdvdF9vZmZzZXQpOw0KPiArCQkJKChFbGZfQWRkcikgbWUtPm1lbVtN T0RfVEVYVF0uYmFzZSArIG1lLT5hcmNoLmdvdF9vZmZzZXQpOw0KPiAgIAkJaWYgKHJfdHlwZSA9 PSBSXzM5MF9HT1RPRkYxNikNCj4gICAJCQlyYyA9IGFwcGx5X3JlbGFfYml0cyhsb2MsIHZhbCwg MCwgMTYsIDAsIHdyaXRlKTsNCj4gICAJCWVsc2UgaWYgKHJfdHlwZSA9PSBSXzM5MF9HT1RPRkYz MikNCj4gQEAgLTQwNyw3ICs0MDksNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbGEoRWxmX1JlbGEg KnJlbGEsIEVsZl9BZGRyIGJhc2UsIEVsZl9TeW0gKnN5bXRhYiwNCj4gICAJCWJyZWFrOw0KPiAg IAljYXNlIFJfMzkwX0dPVFBDOgkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVC4g Ki8NCj4gICAJY2FzZSBSXzM5MF9HT1RQQ0RCTDoJLyogMzIgYml0IFBDIHJlbC4gb2ZmLiB0byBH T1Qgc2hpZnRlZCBieSAxLiAqLw0KPiAtCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5jb3JlX2xheW91 dC5iYXNlICsgbWUtPmFyY2guZ290X29mZnNldCArDQo+ICsJCXZhbCA9IChFbGZfQWRkcikgbWUt Pm1lbVtNT0RfVEVYVF0uYmFzZSArIG1lLT5hcmNoLmdvdF9vZmZzZXQgKw0KPiAgIAkJCXJlbGEt PnJfYWRkZW5kIC0gbG9jOw0KPiAgIAkJaWYgKHJfdHlwZSA9PSBSXzM5MF9HT1RQQykNCj4gICAJ CQlyYyA9IGFwcGx5X3JlbGFfYml0cyhsb2MsIHZhbCwgMSwgMzIsIDAsIHdyaXRlKTsNCj4gQEAg LTUxNSw3ICs1MTcsNyBAQCBpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIs DQo+ICAgCSAgICAhbm9zcGVjX2Rpc2FibGUgJiYgbWUtPmFyY2gucGx0X3NpemUpIHsNCj4gICAJ CXVuc2lnbmVkIGludCAqaWo7DQo+ICAgDQo+IC0JCWlqID0gbWUtPmNvcmVfbGF5b3V0LmJhc2Ug KyBtZS0+YXJjaC5wbHRfb2Zmc2V0ICsNCj4gKwkJaWogPSBtZS0+bWVtW01PRF9URVhUXS5iYXNl ICsgbWUtPmFyY2gucGx0X29mZnNldCArDQo+ICAgCQkJbWUtPmFyY2gucGx0X3NpemUgLSBQTFRf RU5UUllfU0laRTsNCj4gICAJCWlqWzBdID0gMHhjNjAwMDAwMDsJLyogZXhybAklcjAsLisxMAkq Lw0KPiAgIAkJaWpbMV0gPSAweDAwMDVhN2Y0OwkvKiBqCS4JCSovDQo+IGRpZmYgLS1naXQgYS9h cmNoL3g4Ni9rZXJuZWwvY2FsbHRodW5rcy5jIGIvYXJjaC94ODYva2VybmVsL2NhbGx0aHVua3Mu Yw0KPiBpbmRleCBmZmVhOThmOTA2NGIuLjIyYWIxMzk2NjQyNyAxMDA2NDQNCj4gLS0tIGEvYXJj aC94ODYva2VybmVsL2NhbGx0aHVua3MuYw0KPiArKysgYi9hcmNoL3g4Ni9rZXJuZWwvY2FsbHRo dW5rcy5jDQo+IEBAIC0zMzAsOCArMzMwLDggQEAgdm9pZCBub2lubGluZSBjYWxsdGh1bmtzX3Bh dGNoX21vZHVsZV9jYWxscyhzdHJ1Y3QgY2FsbHRodW5rX3NpdGVzICpjcywNCj4gICAJCQkJCSAg ICBzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICAgew0KPiAgIAlzdHJ1Y3QgY29yZV90ZXh0IGN0ID0g ew0KPiAtCQkuYmFzZSA9ICh1bnNpZ25lZCBsb25nKW1vZC0+Y29yZV9sYXlvdXQuYmFzZSwNCj4g LQkJLmVuZCAgPSAodW5zaWduZWQgbG9uZyltb2QtPmNvcmVfbGF5b3V0LmJhc2UgKyBtb2QtPmNv cmVfbGF5b3V0LnNpemUsDQo+ICsJCS5iYXNlID0gKHVuc2lnbmVkIGxvbmcpbW9kLT5tZW1bTU9E X1RFWFRdLmJhc2UsDQo+ICsJCS5lbmQgID0gKHVuc2lnbmVkIGxvbmcpbW9kLT5tZW1bTU9EX1RF WFRdLmJhc2UgKyBtb2QtPm1lbVtNT0RfVEVYVF0uc2l6ZSwNCj4gICAJCS5uYW1lID0gbW9kLT5u YW1lLA0KPiAgIAl9Ow0KPiAgIA0KPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21vZHVs ZS5jIGIvYXJjaC94ODYva2VybmVsL21vZHVsZS5jDQo+IGluZGV4IDcwNWZiMmE0MWQ3ZC4uZGJj OGUyMjZjNDY0IDEwMDY0NA0KPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMNCj4gKysr IGIvYXJjaC94ODYva2VybmVsL21vZHVsZS5jDQo+IEBAIC0zMzksOCArMzM5LDggQEAgaW50IG1v ZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLA0KPiAgIAl9DQo+ICAgCWlmIChsb2Nr cykgew0KPiAgIAkJdm9pZCAqbHNlZyA9ICh2b2lkICopbG9ja3MtPnNoX2FkZHI7DQo+IC0JCXZv aWQgKnRleHQgPSBtZS0+Y29yZV9sYXlvdXQuYmFzZTsNCj4gLQkJdm9pZCAqdGV4dF9lbmQgPSB0 ZXh0ICsgbWUtPmNvcmVfbGF5b3V0LnRleHRfc2l6ZTsNCj4gKwkJdm9pZCAqdGV4dCA9IG1lLT5t ZW1bTU9EX1RFWFRdLmJhc2U7DQo+ICsJCXZvaWQgKnRleHRfZW5kID0gdGV4dCArIG1lLT5tZW1b TU9EX1RFWFRdLnNpemU7DQo+ICAgCQlhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQobWUsIG1l LT5uYW1lLA0KPiAgIAkJCQkJICAgIGxzZWcsIGxzZWcgKyBsb2Nrcy0+c2hfc2l6ZSwNCj4gICAJ CQkJCSAgICB0ZXh0LCB0ZXh0X2VuZCk7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21v ZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaA0KPiBpbmRleCA4YzU5MDljMDA3NmMuLmNj YzlkZThhOTNkYiAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaA0KPiArKysg Yi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oDQo+IEBAIC0zMjAsMTcgKzMyMCw0NyBAQCBzdHJ1Y3Qg bW9kX3RyZWVfbm9kZSB7DQo+ICAgCXN0cnVjdCBsYXRjaF90cmVlX25vZGUgbm9kZTsNCj4gICB9 Ow0KPiAgIA0KPiAtc3RydWN0IG1vZHVsZV9sYXlvdXQgew0KPiAtCS8qIFRoZSBhY3R1YWwgY29k ZSArIGRhdGEuICovDQo+ICtlbnVtIG1vZF9tZW1fdHlwZSB7DQo+ICsJTU9EX1RFWFQgPSAwLA0K PiArCU1PRF9EQVRBLA0KPiArCU1PRF9ST0RBVEEsDQo+ICsJTU9EX1JPX0FGVEVSX0lOSVQsDQo+ ICsJTU9EX0lOSVRfVEVYVCwNCj4gKwlNT0RfSU5JVF9EQVRBLA0KPiArCU1PRF9JTklUX1JPREFU QSwNCj4gKw0KPiArCU1PRF9NRU1fTlVNX1RZUEVTLA0KPiArCU1PRF9JTlZBTElEID0gLTEsDQo+ ICt9Ow0KPiArDQo+ICsjZGVmaW5lIG1vZF9tZW1fdHlwZV9pc19pbml0KHR5cGUpCVwNCj4gKwko KHR5cGUpID09IE1PRF9JTklUX1RFWFQgfHwJXA0KPiArCSAodHlwZSkgPT0gTU9EX0lOSVRfREFU QSB8fAlcDQo+ICsJICh0eXBlKSA9PSBNT0RfSU5JVF9ST0RBVEEpDQo+ICsNCj4gKyNkZWZpbmUg bW9kX21lbV90eXBlX2lzX2NvcmUodHlwZSkgKCFtb2RfbWVtX3R5cGVfaXNfaW5pdCh0eXBlKSkN Cj4gKw0KPiArI2RlZmluZSBtb2RfbWVtX3R5cGVfaXNfdGV4dCh0eXBlKQlcDQo+ICsJICgodHlw ZSkgPT0gTU9EX1RFWFQgfHwJCVwNCj4gKwkgICh0eXBlKSA9PSBNT0RfSU5JVF9URVhUKQ0KPiAr DQo+ICsjZGVmaW5lIG1vZF9tZW1fdHlwZV9pc19kYXRhKHR5cGUpICghbW9kX21lbV90eXBlX2lz X3RleHQodHlwZSkpDQo+ICsNCj4gKyNkZWZpbmUgbW9kX21lbV90eXBlX2lzX2NvcmVfZGF0YSh0 eXBlKQlcDQo+ICsJKG1vZF9tZW1fdHlwZV9pc19jb3JlKHR5cGUpICYmCVwNCj4gKwkgbW9kX21l bV90eXBlX2lzX2RhdGEodHlwZSkpDQo+ICsNCj4gKyNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90 eXBlKHR5cGUpCQkJXA0KPiArCWZvciAoZW51bSBtb2RfbWVtX3R5cGUgKHR5cGUpID0gMDsJCVwN Cj4gKwkgICAgICh0eXBlKSA8IE1PRF9NRU1fTlVNX1RZUEVTOyAodHlwZSkrKykNCj4gKw0KPiAr I2RlZmluZSBmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNsYXNzKQkJXA0KPiArCWZvcl9l YWNoX21vZF9tZW1fdHlwZSh0eXBlKQkJCVwNCj4gKwkJaWYgKG1vZF9tZW1fdHlwZV9pc18jI2Ns YXNzKHR5cGUpKQ0KPiArDQo+ICtzdHJ1Y3QgbW9kdWxlX21lbW9yeSB7DQo+ICAgCXZvaWQgKmJh c2U7DQo+IC0JLyogVG90YWwgc2l6ZS4gKi8NCj4gICAJdW5zaWduZWQgaW50IHNpemU7DQo+IC0J LyogVGhlIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgY29kZS4gICovDQo+IC0JdW5zaWduZWQgaW50 IHRleHRfc2l6ZTsNCj4gLQkvKiBTaXplIG9mIFJPIHNlY3Rpb24gb2YgdGhlIG1vZHVsZSAodGV4 dCtyb2RhdGEpICovDQo+IC0JdW5zaWduZWQgaW50IHJvX3NpemU7DQo+IC0JLyogU2l6ZSBvZiBS TyBhZnRlciBpbml0IHNlY3Rpb24gKi8NCj4gLQl1bnNpZ25lZCBpbnQgcm9fYWZ0ZXJfaW5pdF9z aXplOw0KPiAgIA0KPiAgICNpZmRlZiBDT05GSUdfTU9EVUxFU19UUkVFX0xPT0tVUA0KPiAgIAlz dHJ1Y3QgbW9kX3RyZWVfbm9kZSBtdG47DQo+IEBAIC0zMzksOSArMzY5LDkgQEAgc3RydWN0IG1v ZHVsZV9sYXlvdXQgew0KPiAgIA0KPiAgICNpZmRlZiBDT05GSUdfTU9EVUxFU19UUkVFX0xPT0tV UA0KPiAgIC8qIE9ubHkgdG91Y2ggb25lIGNhY2hlbGluZSBmb3IgY29tbW9uIHJidHJlZS1mb3It Y29yZS1sYXlvdXQgY2FzZS4gKi8NCj4gLSNkZWZpbmUgX19tb2R1bGVfbGF5b3V0X2FsaWduIF9f X19jYWNoZWxpbmVfYWxpZ25lZA0KPiArI2RlZmluZSBfX21vZHVsZV9tZW1vcnlfYWxpZ24gX19f X2NhY2hlbGluZV9hbGlnbmVkDQo+ICAgI2Vsc2UNCj4gLSNkZWZpbmUgX19tb2R1bGVfbGF5b3V0 X2FsaWduDQo+ICsjZGVmaW5lIF9fbW9kdWxlX21lbW9yeV9hbGlnbg0KPiAgICNlbmRpZg0KPiAg IA0KPiAgIHN0cnVjdCBtb2Rfa2FsbHN5bXMgew0KPiBAQCAtNDE4LDEyICs0NDgsOCBAQCBzdHJ1 Y3QgbW9kdWxlIHsNCj4gICAJLyogU3RhcnR1cCBmdW5jdGlvbi4gKi8NCj4gICAJaW50ICgqaW5p dCkodm9pZCk7DQo+ICAgDQo+IC0JLyogQ29yZSBsYXlvdXQ6IHJidHJlZSBpcyBhY2Nlc3NlZCBm cmVxdWVudGx5LCBzbyBrZWVwIHRvZ2V0aGVyLiAqLw0KPiAtCXN0cnVjdCBtb2R1bGVfbGF5b3V0 IGNvcmVfbGF5b3V0IF9fbW9kdWxlX2xheW91dF9hbGlnbjsNCj4gLQlzdHJ1Y3QgbW9kdWxlX2xh eW91dCBpbml0X2xheW91dDsNCj4gLSNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RVTEVTX0RB VEFfSU5fVk1BTExPQw0KPiAtCXN0cnVjdCBtb2R1bGVfbGF5b3V0IGRhdGFfbGF5b3V0Ow0KPiAt I2VuZGlmDQo+ICsJLyogcmJ0cmVlIGlzIGFjY2Vzc2VkIGZyZXF1ZW50bHksIHNvIGtlZXAgdG9n ZXRoZXIuICovDQo+ICsJc3RydWN0IG1vZHVsZV9tZW1vcnkgbWVtW01PRF9NRU1fTlVNX1RZUEVT XSBfX21vZHVsZV9tZW1vcnlfYWxpZ247DQo+ICAgDQo+ICAgCS8qIEFyY2gtc3BlY2lmaWMgbW9k dWxlIHZhbHVlcyAqLw0KPiAgIAlzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgYXJjaDsNCj4gQEAg LTU3MywyMyArNTk5LDMzIEBAIGJvb2wgX19pc19tb2R1bGVfcGVyY3B1X2FkZHJlc3ModW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpjYW5fYWRkcik7DQo+ICAgYm9vbCBpc19tb2R1 bGVfcGVyY3B1X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsNCj4gICBib29sIGlzX21vZHVs ZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsNCj4gICANCj4gK3N0YXRpYyBpbmxp bmUgYm9vbCB3aXRoaW5fbW9kdWxlX21lbV90eXBlKHVuc2lnbmVkIGxvbmcgYWRkciwNCj4gKwkJ CQkJICBjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsDQo+ICsJCQkJCSAgZW51bSBtb2RfbWVtX3R5 cGUgdHlwZSkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemU7DQo+ICsNCj4gKwli YXNlID0gKHVuc2lnbmVkIGxvbmcpbW9kLT5tZW1bdHlwZV0uYmFzZTsNCj4gKwlzaXplID0gbW9k LT5tZW1bdHlwZV0uc2l6ZTsNCj4gKwlyZXR1cm4gYWRkciAtIGJhc2UgPCBzaXplOw0KPiArfQ0K PiArDQo+ICAgc3RhdGljIGlubGluZSBib29sIHdpdGhpbl9tb2R1bGVfY29yZSh1bnNpZ25lZCBs b25nIGFkZHIsDQo+ICAgCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gICB7 DQo+IC0jaWZkZWYgQ09ORklHX0FSQ0hfV0FOVFNfTU9EVUxFU19EQVRBX0lOX1ZNQUxMT0MNCj4g LQlpZiAoKHVuc2lnbmVkIGxvbmcpbW9kLT5kYXRhX2xheW91dC5iYXNlIDw9IGFkZHIgJiYNCj4g LQkgICAgYWRkciA8ICh1bnNpZ25lZCBsb25nKW1vZC0+ZGF0YV9sYXlvdXQuYmFzZSArIG1vZC0+ ZGF0YV9sYXlvdXQuc2l6ZSkNCj4gKwlmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNvcmUp DQo+ICsJCWlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgdHlwZSkpDQo+ICAg CQkJcmV0dXJuIHRydWU7DQo+IC0jZW5kaWYNCj4gLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbW9k LT5jb3JlX2xheW91dC5iYXNlIDw9IGFkZHIgJiYNCj4gLQkgICAgICAgYWRkciA8ICh1bnNpZ25l ZCBsb25nKW1vZC0+Y29yZV9sYXlvdXQuYmFzZSArIG1vZC0+Y29yZV9sYXlvdXQuc2l6ZTsNCj4g KwlyZXR1cm4gZmFsc2U7DQo+ICAgfQ0KPiAgIA0KPiAgIHN0YXRpYyBpbmxpbmUgYm9vbCB3aXRo aW5fbW9kdWxlX2luaXQodW5zaWduZWQgbG9uZyBhZGRyLA0KPiAgIAkJCQkgICAgICBjb25zdCBz dHJ1Y3QgbW9kdWxlICptb2QpDQo+ICAgew0KPiAtCXJldHVybiAodW5zaWduZWQgbG9uZyltb2Qt PmluaXRfbGF5b3V0LmJhc2UgPD0gYWRkciAmJg0KPiAtCSAgICAgICBhZGRyIDwgKHVuc2lnbmVk IGxvbmcpbW9kLT5pbml0X2xheW91dC5iYXNlICsgbW9kLT5pbml0X2xheW91dC5zaXplOw0KPiAr CWZvcl9jbGFzc19tb2RfbWVtX3R5cGUodHlwZSwgaW5pdCkNCj4gKwkJaWYgKHdpdGhpbl9tb2R1 bGVfbWVtX3R5cGUoYWRkciwgbW9kLCB0eXBlKSkNCj4gKwkJCXJldHVybiB0cnVlOw0KPiArCXJl dHVybiBmYWxzZTsNCj4gICB9DQo+ICAgDQo+ICAgc3RhdGljIGlubGluZSBib29sIHdpdGhpbl9t b2R1bGUodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IGRp ZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVy bmFsLmgNCj4gaW5kZXggMmUyYmYyMzZmNTU4Li5jNmM0NGNlY2EwN2EgMTAwNjQ0DQo+IC0tLSBh L2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaA0KPiArKysgYi9rZXJuZWwvbW9kdWxlL2ludGVybmFs LmgNCj4gQEAgLTE3LDI3ICsxNywxOSBAQA0KPiAgICNkZWZpbmUgQVJDSF9TSEZfU01BTEwgMA0K PiAgICNlbmRpZg0KPiAgIA0KPiAtLyogSWYgdGhpcyBpcyBzZXQsIHRoZSBzZWN0aW9uIGJlbG9u Z3MgaW4gdGhlIGluaXQgcGFydCBvZiB0aGUgbW9kdWxlICovDQo+IC0jZGVmaW5lIElOSVRfT0ZG U0VUX01BU0sgKDFVTCA8PCAoQklUU19QRVJfTE9ORyAtIDEpKQ0KPiAtLyogTWF4aW11bSBudW1i ZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovDQo+IC0jZGVmaW5l IE1PRFVMRV9GTEFHU19CVUZfU0laRSAoVEFJTlRfRkxBR1NfQ09VTlQgKyA0KQ0KPiAtDQo+IC0j aWZuZGVmIENPTkZJR19BUkNIX1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+IC0jZGVm aW5lCWRhdGFfbGF5b3V0IGNvcmVfbGF5b3V0DQo+IC0jZW5kaWYNCj4gLQ0KPiAgIC8qDQo+IC0g KiBNb2R1bGVzJyBzZWN0aW9ucyB3aWxsIGJlIGFsaWduZWQgb24gcGFnZSBib3VuZGFyaWVzDQo+ IC0gKiB0byBlbnN1cmUgY29tcGxldGUgc2VwYXJhdGlvbiBvZiBjb2RlIGFuZCBkYXRhLCBidXQN Cj4gLSAqIG9ubHkgd2hlbiBDT05GSUdfU1RSSUNUX01PRFVMRV9SV1g9eQ0KPiArICogVXNlIGhp Z2hlc3QgNCBiaXRzIG9mIHNoX2VudHNpemUgdG8gc3RvcmUgdGhlIG1vZF9tZW1fdHlwZSBvZiB0 aGlzDQo+ICsgKiBzZWN0aW9uLiBUaGlzIGxlYXZlcyAyOCBiaXRzIGZvciBvZmZzZXQgb24gMzIt Yml0IHN5c3RlbXMsIHdoaWNoIGlzDQo+ICsgKiBhYm91dCAyNTYgTWlCIChXQVJOX09OX09OQ0Ug aWYgd2UgZXhjZWVkIHRoYXQpLg0KPiAgICAqLw0KPiAtc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQgc3RyaWN0X2FsaWduKHVuc2lnbmVkIGludCBzaXplKQ0KPiAtew0KPiAtCWlmIChJU19FTkFC TEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpDQo+IC0JCXJldHVybiBQQUdFX0FMSUdOKHNp emUpOw0KPiAtCWVsc2UNCj4gLQkJcmV0dXJuIHNpemU7DQo+IC19DQo+ICsNCj4gKyNkZWZpbmUg U0hfRU5UU0laRV9UWVBFX0JJVFMJNA0KPiArI2RlZmluZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQJ KEJJVFNfUEVSX0xPTkcgLSBTSF9FTlRTSVpFX1RZUEVfQklUUykNCj4gKyNkZWZpbmUgU0hfRU5U U0laRV9UWVBFX01BU0sJKCgxVUwgPDwgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSkNCj4gKyNk ZWZpbmUgU0hfRU5UU0laRV9PRkZTRVRfTUFTSwkoKDFVTCA8PCAoQklUU19QRVJfTE9ORyAtIFNI X0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKQ0KPiArDQo+ICsvKiBNYXhpbXVtIG51bWJlciBvZiBj aGFyYWN0ZXJzIHdyaXR0ZW4gYnkgbW9kdWxlX2ZsYWdzKCkgKi8NCj4gKyNkZWZpbmUgTU9EVUxF X0ZMQUdTX0JVRl9TSVpFIChUQUlOVF9GTEFHU19DT1VOVCArIDQpDQo+ICAgDQo+ICAgZXh0ZXJu IHN0cnVjdCBtdXRleCBtb2R1bGVfbXV0ZXg7DQo+ICAgZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQg bW9kdWxlczsNCj4gQEAgLTEwMSw4ICs5Myw4IEBAIGludCB0cnlfdG9fZm9yY2VfbG9hZChzdHJ1 Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKnJlYXNvbik7DQo+ICAgYm9vbCBmaW5kX3N5bWJv bChzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EpOw0KPiAgIHN0cnVjdCBtb2R1bGUgKmZpbmRf bW9kdWxlX2FsbChjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuLCBib29sIGV2ZW5fdW5mb3Jt ZWQpOw0KPiAgIGludCBjbXBfbmFtZShjb25zdCB2b2lkICpuYW1lLCBjb25zdCB2b2lkICpzeW0p Ow0KPiAtbG9uZyBtb2R1bGVfZ2V0X29mZnNldChzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVk IGludCAqc2l6ZSwgRWxmX1NoZHIgKnNlY2hkciwNCj4gLQkJICAgICAgIHVuc2lnbmVkIGludCBz ZWN0aW9uKTsNCj4gK2xvbmcgbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUoc3RydWN0IG1vZHVs ZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlLA0KPiArCQkJCUVsZl9TaGRyICpzZWNoZHIs IHVuc2lnbmVkIGludCBzZWN0aW9uKTsNCj4gICBjaGFyICptb2R1bGVfZmxhZ3Moc3RydWN0IG1v ZHVsZSAqbW9kLCBjaGFyICpidWYsIGJvb2wgc2hvd19zdGF0ZSk7DQo+ICAgc2l6ZV90IG1vZHVs ZV9mbGFnc190YWludCh1bnNpZ25lZCBsb25nIHRhaW50cywgY2hhciAqYnVmKTsNCj4gICANCj4g QEAgLTE5MCwxMCArMTgyLDEzIEBAIHN0cnVjdCBtb2RfdHJlZV9yb290IHsNCj4gICAjZW5kaWYN Cj4gICAJdW5zaWduZWQgbG9uZyBhZGRyX21pbjsNCj4gICAJdW5zaWduZWQgbG9uZyBhZGRyX21h eDsNCj4gKyNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RVTEVTX0RBVEFfSU5fVk1BTExPQw0K PiArCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyX21pbjsNCj4gKwl1bnNpZ25lZCBsb25nIGRhdGFf YWRkcl9tYXg7DQo+ICsjZW5kaWYNCj4gICB9Ow0KPiAgIA0KPiAgIGV4dGVybiBzdHJ1Y3QgbW9k X3RyZWVfcm9vdCBtb2RfdHJlZTsNCj4gLWV4dGVybiBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCBtb2Rf ZGF0YV90cmVlOw0KPiAgIA0KPiAgICNpZmRlZiBDT05GSUdfTU9EVUxFU19UUkVFX0xPT0tVUA0K PiAgIHZvaWQgbW9kX3RyZWVfaW5zZXJ0KHN0cnVjdCBtb2R1bGUgKm1vZCk7DQo+IEBAIC0yMjQs NyArMjE5LDYgQEAgdm9pZCBtb2R1bGVfZW5hYmxlX254KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1v ZCk7DQo+ICAgdm9pZCBtb2R1bGVfZW5hYmxlX3goY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTsN Cj4gICBpbnQgbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9T aGRyICpzZWNoZHJzLA0KPiAgIAkJCQljaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICpt b2QpOw0KPiAtYm9vbCBtb2R1bGVfY2hlY2tfbWlzYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBtb2R1 bGUgKm1vZCk7DQo+ICAgDQo+ICAgI2lmZGVmIENPTkZJR19NT0RVTEVfU0lHDQo+ICAgaW50IG1v ZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKTsNCj4gZGlm ZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUva2FsbHN5bXMuYyBiL2tlcm5lbC9tb2R1bGUva2FsbHN5 bXMuYw0KPiBpbmRleCA0NTIzZjk5YjAzNTguLmFjZGNhNzY5Mjk2MSAxMDA2NDQNCj4gLS0tIGEv a2VybmVsL21vZHVsZS9rYWxsc3ltcy5jDQo+ICsrKyBiL2tlcm5lbC9tb2R1bGUva2FsbHN5bXMu Yw0KPiBAQCAtNzgsNiArNzgsNyBAQCBzdGF0aWMgYm9vbCBpc19jb3JlX3N5bWJvbChjb25zdCBF bGZfU3ltICpzcmMsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLA0KPiAgIAkJCSAgIHVuc2lnbmVk IGludCBzaG51bSwgdW5zaWduZWQgaW50IHBjcHVuZHgpDQo+ICAgew0KPiAgIAljb25zdCBFbGZf U2hkciAqc2VjOw0KPiArCWVudW0gbW9kX21lbV90eXBlIHR5cGU7DQo+ICAgDQo+ICAgCWlmIChz cmMtPnN0X3NobmR4ID09IFNITl9VTkRFRiB8fA0KPiAgIAkgICAgc3JjLT5zdF9zaG5keCA+PSBz aG51bSB8fA0KPiBAQCAtOTAsMTEgKzkxLDEyIEBAIHN0YXRpYyBib29sIGlzX2NvcmVfc3ltYm9s KGNvbnN0IEVsZl9TeW0gKnNyYywgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsDQo+ICAgI2VuZGlm DQo+ICAgDQo+ICAgCXNlYyA9IHNlY2hkcnMgKyBzcmMtPnN0X3NobmR4Ow0KPiArCXR5cGUgPSBz ZWMtPnNoX2VudHNpemUgPj4gU0hfRU5UU0laRV9UWVBFX1NISUZUOw0KPiAgIAlpZiAoIShzZWMt PnNoX2ZsYWdzICYgU0hGX0FMTE9DKQ0KPiAgICNpZm5kZWYgQ09ORklHX0tBTExTWU1TX0FMTA0K PiAgIAkgICAgfHwgIShzZWMtPnNoX2ZsYWdzICYgU0hGX0VYRUNJTlNUUikNCj4gICAjZW5kaWYN Cj4gLQkgICAgfHwgKHNlYy0+c2hfZW50c2l6ZSAmIElOSVRfT0ZGU0VUX01BU0spKQ0KPiArCSAg ICB8fCBtb2RfbWVtX3R5cGVfaXNfaW5pdCh0eXBlKSkNCj4gICAJCXJldHVybiBmYWxzZTsNCj4g ICANCj4gICAJcmV0dXJuIHRydWU7DQo+IEBAIC0xMTMsMTEgKzExNSwxMyBAQCB2b2lkIGxheW91 dF9zeW10YWIoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAg IAlFbGZfU2hkciAqc3Ryc2VjdCA9IGluZm8tPnNlY2hkcnMgKyBpbmZvLT5pbmRleC5zdHI7DQo+ ICAgCWNvbnN0IEVsZl9TeW0gKnNyYzsNCj4gICAJdW5zaWduZWQgaW50IGksIG5zcmMsIG5kc3Qs IHN0cnRhYl9zaXplID0gMDsNCj4gKwlzdHJ1Y3QgbW9kdWxlX21lbW9yeSAqbW9kX21lbV9kYXRh ID0gJm1vZC0+bWVtW01PRF9EQVRBXTsNCj4gKwlzdHJ1Y3QgbW9kdWxlX21lbW9yeSAqbW9kX21l bV9pbml0X2RhdGEgPSAmbW9kLT5tZW1bTU9EX0lOSVRfREFUQV07DQo+ICAgDQo+ICAgCS8qIFB1 dCBzeW1ib2wgc2VjdGlvbiBhdCBlbmQgb2YgaW5pdCBwYXJ0IG9mIG1vZHVsZS4gKi8NCj4gICAJ c3ltc2VjdC0+c2hfZmxhZ3MgfD0gU0hGX0FMTE9DOw0KPiAtCXN5bXNlY3QtPnNoX2VudHNpemUg PSBtb2R1bGVfZ2V0X29mZnNldChtb2QsICZtb2QtPmluaXRfbGF5b3V0LnNpemUsIHN5bXNlY3Qs DQo+IC0JCQkJCQlpbmZvLT5pbmRleC5zeW0pIHwgSU5JVF9PRkZTRVRfTUFTSzsNCj4gKwlzeW1z ZWN0LT5zaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCBNT0RfSU5J VF9EQVRBLA0KPiArCQkJCQkJCSBzeW1zZWN0LCBpbmZvLT5pbmRleC5zeW0pOw0KPiAgIAlwcl9k ZWJ1ZygiXHQlc1xuIiwgaW5mby0+c2Vjc3RyaW5ncyArIHN5bXNlY3QtPnNoX25hbWUpOw0KPiAg IA0KPiAgIAlzcmMgPSAodm9pZCAqKWluZm8tPmhkciArIHN5bXNlY3QtPnNoX29mZnNldDsNCj4g QEAgLTEzNCwyOCArMTM4LDI3IEBAIHZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICpt b2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pDQo+ICAgCX0NCj4gICANCj4gICAJLyogQXBwZW5k IHJvb20gZm9yIGNvcmUgc3ltYm9scyBhdCBlbmQgb2YgY29yZSBwYXJ0LiAqLw0KPiAtCWluZm8t PnN5bW9mZnMgPSBBTElHTihtb2QtPmRhdGFfbGF5b3V0LnNpemUsIHN5bXNlY3QtPnNoX2FkZHJh bGlnbiA/OiAxKTsNCj4gLQlpbmZvLT5zdHJvZmZzID0gbW9kLT5kYXRhX2xheW91dC5zaXplID0g aW5mby0+c3ltb2ZmcyArIG5kc3QgKiBzaXplb2YoRWxmX1N5bSk7DQo+IC0JbW9kLT5kYXRhX2xh eW91dC5zaXplICs9IHN0cnRhYl9zaXplOw0KPiArCWluZm8tPnN5bW9mZnMgPSBBTElHTihtb2Rf bWVtX2RhdGEtPnNpemUsIHN5bXNlY3QtPnNoX2FkZHJhbGlnbiA/OiAxKTsNCj4gKwlpbmZvLT5z dHJvZmZzID0gbW9kX21lbV9kYXRhLT5zaXplID0gaW5mby0+c3ltb2ZmcyArIG5kc3QgKiBzaXpl b2YoRWxmX1N5bSk7DQo+ICsJbW9kX21lbV9kYXRhLT5zaXplICs9IHN0cnRhYl9zaXplOw0KPiAg IAkvKiBOb3RlIGFkZF9rYWxsc3ltcygpIGNvbXB1dGVzIHN0cnRhYl9zaXplIGFzIGNvcmVfdHlw ZW9mZnMgLSBzdHJvZmZzICovDQo+IC0JaW5mby0+Y29yZV90eXBlb2ZmcyA9IG1vZC0+ZGF0YV9s YXlvdXQuc2l6ZTsNCj4gLQltb2QtPmRhdGFfbGF5b3V0LnNpemUgKz0gbmRzdCAqIHNpemVvZihj aGFyKTsNCj4gLQltb2QtPmRhdGFfbGF5b3V0LnNpemUgPSBzdHJpY3RfYWxpZ24obW9kLT5kYXRh X2xheW91dC5zaXplKTsNCj4gKwlpbmZvLT5jb3JlX3R5cGVvZmZzID0gbW9kX21lbV9kYXRhLT5z aXplOw0KPiArCW1vZF9tZW1fZGF0YS0+c2l6ZSArPSBuZHN0ICogc2l6ZW9mKGNoYXIpOw0KPiAg IA0KPiAgIAkvKiBQdXQgc3RyaW5nIHRhYmxlIHNlY3Rpb24gYXQgZW5kIG9mIGluaXQgcGFydCBv ZiBtb2R1bGUuICovDQo+ICAgCXN0cnNlY3QtPnNoX2ZsYWdzIHw9IFNIRl9BTExPQzsNCj4gLQlz dHJzZWN0LT5zaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXQobW9kLCAmbW9kLT5pbml0X2xh eW91dC5zaXplLCBzdHJzZWN0LA0KPiAtCQkJCQkJaW5mby0+aW5kZXguc3RyKSB8IElOSVRfT0ZG U0VUX01BU0s7DQo+ICsJc3Ryc2VjdC0+c2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRfb2Zmc2V0X2Fu ZF90eXBlKG1vZCwgTU9EX0lOSVRfREFUQSwNCj4gKwkJCQkJCQkgc3Ryc2VjdCwgaW5mby0+aW5k ZXguc3RyKTsNCj4gICAJcHJfZGVidWcoIlx0JXNcbiIsIGluZm8tPnNlY3N0cmluZ3MgKyBzdHJz ZWN0LT5zaF9uYW1lKTsNCj4gICANCj4gICAJLyogV2UnbGwgdGFjayB0ZW1wb3JhcnkgbW9kX2th bGxzeW1zIG9uIHRoZSBlbmQuICovDQo+IC0JbW9kLT5pbml0X2xheW91dC5zaXplID0gQUxJR04o bW9kLT5pbml0X2xheW91dC5zaXplLA0KPiArCW1vZF9tZW1faW5pdF9kYXRhLT5zaXplID0gQUxJ R04obW9kX21lbV9pbml0X2RhdGEtPnNpemUsDQo+ICAgCQkJCQlfX2FsaWdub2ZfXyhzdHJ1Y3Qg bW9kX2thbGxzeW1zKSk7DQo+IC0JaW5mby0+bW9kX2thbGxzeW1zX2luaXRfb2ZmID0gbW9kLT5p bml0X2xheW91dC5zaXplOw0KPiAtCW1vZC0+aW5pdF9sYXlvdXQuc2l6ZSArPSBzaXplb2Yoc3Ry dWN0IG1vZF9rYWxsc3ltcyk7DQo+IC0JaW5mby0+aW5pdF90eXBlb2ZmcyA9IG1vZC0+aW5pdF9s YXlvdXQuc2l6ZTsNCj4gLQltb2QtPmluaXRfbGF5b3V0LnNpemUgKz0gbnNyYyAqIHNpemVvZihj aGFyKTsNCj4gLQltb2QtPmluaXRfbGF5b3V0LnNpemUgPSBzdHJpY3RfYWxpZ24obW9kLT5pbml0 X2xheW91dC5zaXplKTsNCj4gKwlpbmZvLT5tb2Rfa2FsbHN5bXNfaW5pdF9vZmYgPSBtb2RfbWVt X2luaXRfZGF0YS0+c2l6ZTsNCj4gKw0KPiArCW1vZF9tZW1faW5pdF9kYXRhLT5zaXplICs9IHNp emVvZihzdHJ1Y3QgbW9kX2thbGxzeW1zKTsNCj4gKwlpbmZvLT5pbml0X3R5cGVvZmZzID0gbW9k X21lbV9pbml0X2RhdGEtPnNpemU7DQo+ICsJbW9kX21lbV9pbml0X2RhdGEtPnNpemUgKz0gbnNy YyAqIHNpemVvZihjaGFyKTsNCj4gICB9DQo+ICAgDQo+ICAgLyoNCj4gQEAgLTE3MSw5ICsxNzQs MTEgQEAgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3Qg bG9hZF9pbmZvICppbmZvKQ0KPiAgIAljaGFyICpzOw0KPiAgIAlFbGZfU2hkciAqc3ltc2VjID0g JmluZm8tPnNlY2hkcnNbaW5mby0+aW5kZXguc3ltXTsNCj4gICAJdW5zaWduZWQgbG9uZyBzdHJ0 YWJfc2l6ZTsNCj4gKwl2b2lkICpkYXRhX2Jhc2UgPSBtb2QtPm1lbVtNT0RfREFUQV0uYmFzZTsN Cj4gKwl2b2lkICppbml0X2RhdGFfYmFzZSA9IG1vZC0+bWVtW01PRF9JTklUX0RBVEFdLmJhc2U7 DQo+ICAgDQo+ICAgCS8qIFNldCB1cCB0byBwb2ludCBpbnRvIGluaXQgc2VjdGlvbi4gKi8NCj4g LQltb2QtPmthbGxzeW1zID0gKHZvaWQgX19yY3UgKiltb2QtPmluaXRfbGF5b3V0LmJhc2UgKw0K PiArCW1vZC0+a2FsbHN5bXMgPSAodm9pZCBfX3JjdSAqKWluaXRfZGF0YV9iYXNlICsNCj4gICAJ CWluZm8tPm1vZF9rYWxsc3ltc19pbml0X29mZjsNCj4gICANCj4gICAJcmN1X3JlYWRfbG9jaygp Ow0KPiBAQCAtMTgzLDE1ICsxODgsMTUgQEAgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVs ZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAgIAkvKiBNYWtlIHN1cmUg d2UgZ2V0IHBlcm1hbmVudCBzdHJ0YWI6IGRvbid0IHVzZSBpbmZvLT5zdHJ0YWIuICovDQo+ICAg CXJjdV9kZXJlZmVyZW5jZShtb2QtPmthbGxzeW1zKS0+c3RydGFiID0NCj4gICAJCSh2b2lkICop aW5mby0+c2VjaGRyc1tpbmZvLT5pbmRleC5zdHJdLnNoX2FkZHI7DQo+IC0JcmN1X2RlcmVmZXJl bmNlKG1vZC0+a2FsbHN5bXMpLT50eXBldGFiID0gbW9kLT5pbml0X2xheW91dC5iYXNlICsgaW5m by0+aW5pdF90eXBlb2ZmczsNCj4gKwlyY3VfZGVyZWZlcmVuY2UobW9kLT5rYWxsc3ltcyktPnR5 cGV0YWIgPSBpbml0X2RhdGFfYmFzZSArIGluZm8tPmluaXRfdHlwZW9mZnM7DQo+ICAgDQo+ICAg CS8qDQo+ICAgCSAqIE5vdyBwb3B1bGF0ZSB0aGUgY3V0IGRvd24gY29yZSBrYWxsc3ltcyBmb3Ig YWZ0ZXIgaW5pdA0KPiAgIAkgKiBhbmQgc2V0IHR5cGVzIHVwIHdoaWxlIHdlIHN0aWxsIGhhdmUg YWNjZXNzIHRvIHNlY3Rpb25zLg0KPiAgIAkgKi8NCj4gLQltb2QtPmNvcmVfa2FsbHN5bXMuc3lt dGFiID0gZHN0ID0gbW9kLT5kYXRhX2xheW91dC5iYXNlICsgaW5mby0+c3ltb2ZmczsNCj4gLQlt b2QtPmNvcmVfa2FsbHN5bXMuc3RydGFiID0gcyA9IG1vZC0+ZGF0YV9sYXlvdXQuYmFzZSArIGlu Zm8tPnN0cm9mZnM7DQo+IC0JbW9kLT5jb3JlX2thbGxzeW1zLnR5cGV0YWIgPSBtb2QtPmRhdGFf bGF5b3V0LmJhc2UgKyBpbmZvLT5jb3JlX3R5cGVvZmZzOw0KPiArCW1vZC0+Y29yZV9rYWxsc3lt cy5zeW10YWIgPSBkc3QgPSBkYXRhX2Jhc2UgKyBpbmZvLT5zeW1vZmZzOw0KPiArCW1vZC0+Y29y ZV9rYWxsc3ltcy5zdHJ0YWIgPSBzID0gZGF0YV9iYXNlICsgaW5mby0+c3Ryb2ZmczsNCj4gKwlt b2QtPmNvcmVfa2FsbHN5bXMudHlwZXRhYiA9IGRhdGFfYmFzZSArIGluZm8tPmNvcmVfdHlwZW9m ZnM7DQo+ICAgCXN0cnRhYl9zaXplID0gaW5mby0+Y29yZV90eXBlb2ZmcyAtIGluZm8tPnN0cm9m ZnM7DQo+ICAgCXNyYyA9IHJjdV9kZXJlZmVyZW5jZShtb2QtPmthbGxzeW1zKS0+c3ltdGFiOw0K PiAgIAlmb3IgKG5kc3QgPSBpID0gMDsgaSA8IHJjdV9kZXJlZmVyZW5jZShtb2QtPmthbGxzeW1z KS0+bnVtX3N5bXRhYjsgaSsrKSB7DQo+IEBAIC0yNjcsMTIgKzI3MiwxNSBAQCBzdGF0aWMgY29u c3QgY2hhciAqZmluZF9rYWxsc3ltc19zeW1ib2woc3RydWN0IG1vZHVsZSAqbW9kLA0KPiAgIAl1 bnNpZ25lZCBpbnQgaSwgYmVzdCA9IDA7DQo+ICAgCXVuc2lnbmVkIGxvbmcgbmV4dHZhbCwgYmVz dHZhbDsNCj4gICAJc3RydWN0IG1vZF9rYWxsc3ltcyAqa2FsbHN5bXMgPSByY3VfZGVyZWZlcmVu Y2Vfc2NoZWQobW9kLT5rYWxsc3ltcyk7DQo+ICsJc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9t ZW07DQo+ICAgDQo+ICAgCS8qIEF0IHdvcnNlLCBuZXh0IHZhbHVlIGlzIGF0IGVuZCBvZiBtb2R1 bGUgKi8NCj4gICAJaWYgKHdpdGhpbl9tb2R1bGVfaW5pdChhZGRyLCBtb2QpKQ0KPiAtCQluZXh0 dmFsID0gKHVuc2lnbmVkIGxvbmcpbW9kLT5pbml0X2xheW91dC5iYXNlICsgbW9kLT5pbml0X2xh eW91dC50ZXh0X3NpemU7DQo+ICsJCW1vZF9tZW0gPSAmbW9kLT5tZW1bTU9EX0lOSVRfVEVYVF07 DQo+ICAgCWVsc2UNCj4gLQkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+Y29yZV9sYXlv dXQuYmFzZSArIG1vZC0+Y29yZV9sYXlvdXQudGV4dF9zaXplOw0KPiArCQltb2RfbWVtID0gJm1v ZC0+bWVtW01PRF9URVhUXTsNCj4gKw0KPiArCW5leHR2YWwgPSAodW5zaWduZWQgbG9uZyltb2Rf bWVtLT5iYXNlICsgbW9kX21lbS0+c2l6ZTsNCj4gICANCj4gICAJYmVzdHZhbCA9IGthbGxzeW1z X3N5bWJvbF92YWx1ZSgma2FsbHN5bXMtPnN5bXRhYltiZXN0XSk7DQo+ICAgDQo+IGRpZmYgLS1n aXQgYS9rZXJuZWwvbW9kdWxlL2tkYi5jIGIva2VybmVsL21vZHVsZS9rZGIuYw0KPiBpbmRleCBm NDMxN2Y5MmUxODkuLjk5NWMzMmQzNjk4ZiAxMDA2NDQNCj4gLS0tIGEva2VybmVsL21vZHVsZS9r ZGIuYw0KPiArKysgYi9rZXJuZWwvbW9kdWxlL2tkYi5jDQo+IEBAIC0yNiwxMCArMjYsMTEgQEAg aW50IGtkYl9sc21vZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpDQo+ICAgCQlpZiAobW9k LT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfVU5GT1JNRUQpDQo+ICAgCQkJY29udGludWU7DQo+ICAg DQo+IC0JCWtkYl9wcmludGYoIiUtMjBzJTh1IiwgbW9kLT5uYW1lLCBtb2QtPmNvcmVfbGF5b3V0 LnNpemUpOw0KPiAtI2lmZGVmIENPTkZJR19BUkNIX1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFM TE9DDQo+IC0JCWtkYl9wcmludGYoIi8lOHUiLCBtb2QtPmRhdGFfbGF5b3V0LnNpemUpOw0KPiAt I2VuZGlmDQo+ICsJCWtkYl9wcmludGYoIiUtMjBzJTh1IiwgbW9kLT5uYW1lLCBtb2QtPm1lbVtN T0RfVEVYVF0uc2l6ZSk7DQo+ICsJCWtkYl9wcmludGYoIi8lOHUiLCBtb2QtPm1lbVtNT0RfUk9E QVRBXS5zaXplKTsNCj4gKwkJa2RiX3ByaW50ZigiLyU4dSIsIG1vZC0+bWVtW01PRF9ST19BRlRF Ul9JTklUXS5zaXplKTsNCj4gKwkJa2RiX3ByaW50ZigiLyU4dSIsIG1vZC0+bWVtW01PRF9EQVRB XS5zaXplKTsNCj4gKw0KPiAgIAkJa2RiX3ByaW50ZigiICAweCVweCAiLCAodm9pZCAqKW1vZCk7 DQo+ICAgI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FEDQo+ICAgCQlrZGJfcHJpbnRmKCIlNGQg IiwgbW9kdWxlX3JlZmNvdW50KG1vZCkpOw0KPiBAQCAtNDAsMTAgKzQxLDEwIEBAIGludCBrZGJf bHNtb2QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQ0KPiAgIAkJCWtkYl9wcmludGYoIiAo TG9hZGluZykiKTsNCj4gICAJCWVsc2UNCj4gICAJCQlrZGJfcHJpbnRmKCIgKExpdmUpIik7DQo+ IC0JCWtkYl9wcmludGYoIiAweCVweCIsIG1vZC0+Y29yZV9sYXlvdXQuYmFzZSk7DQo+IC0jaWZk ZWYgQ09ORklHX0FSQ0hfV0FOVFNfTU9EVUxFU19EQVRBX0lOX1ZNQUxMT0MNCj4gLQkJa2RiX3By aW50ZigiLzB4JXB4IiwgbW9kLT5kYXRhX2xheW91dC5iYXNlKTsNCj4gLSNlbmRpZg0KPiArCQlr ZGJfcHJpbnRmKCIgMHglcHgiLCBtb2QtPm1lbVtNT0RfVEVYVF0uYmFzZSk7DQo+ICsJCWtkYl9w cmludGYoIi8weCVweCIsIG1vZC0+bWVtW01PRF9ST0RBVEFdLmJhc2UpOw0KPiArCQlrZGJfcHJp bnRmKCIvMHglcHgiLCBtb2QtPm1lbVtNT0RfUk9fQUZURVJfSU5JVF0uYmFzZSk7DQo+ICsJCWtk Yl9wcmludGYoIi8weCVweCIsIG1vZC0+bWVtW01PRF9EQVRBXS5iYXNlKTsNCj4gICANCj4gICAj aWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQNCj4gICAJCXsNCj4gZGlmZiAtLWdpdCBhL2tlcm5l bC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmMNCj4gaW5kZXggZDNiZTg5ZGU3 MDZkLi45Zjg5MGQxNDA3MmMgMTAwNjQ0DQo+IC0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jDQo+ ICsrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jDQo+IEBAIC04MCwxMiArODAsNiBAQCBzdHJ1Y3Qg bW9kX3RyZWVfcm9vdCBtb2RfdHJlZSBfX2NhY2hlbGluZV9hbGlnbmVkID0gew0KPiAgIAkuYWRk cl9taW4gPSAtMVVMLA0KPiAgIH07DQo+ICAgDQo+IC0jaWZkZWYgQ09ORklHX0FSQ0hfV0FOVFNf TU9EVUxFU19EQVRBX0lOX1ZNQUxMT0MNCj4gLXN0cnVjdCBtb2RfdHJlZV9yb290IG1vZF9kYXRh X3RyZWUgX19jYWNoZWxpbmVfYWxpZ25lZCA9IHsNCj4gLQkuYWRkcl9taW4gPSAtMVVMLA0KPiAt fTsNCj4gLSNlbmRpZg0KPiAtDQo+ICAgc3RydWN0IHN5bXNlYXJjaCB7DQo+ICAgCWNvbnN0IHN0 cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7DQo+ICAgCWNvbnN0IHMzMiAqY3JjczsN Cj4gQEAgLTkzLDE0ICs4NywyNCBAQCBzdHJ1Y3Qgc3ltc2VhcmNoIHsNCj4gICB9Ow0KPiAgIA0K PiAgIC8qDQo+IC0gKiBCb3VuZHMgb2YgbW9kdWxlIHRleHQsIGZvciBzcGVlZGluZyB1cCBfX21v ZHVsZV9hZGRyZXNzLg0KPiArICogQm91bmRzIG9mIG1vZHVsZSBtZW1vcnksIGZvciBzcGVlZGlu ZyB1cCBfX21vZHVsZV9hZGRyZXNzLg0KPiAgICAqIFByb3RlY3RlZCBieSBtb2R1bGVfbXV0ZXgu DQo+ICAgICovDQo+IC1zdGF0aWMgdm9pZCBfX21vZF91cGRhdGVfYm91bmRzKHZvaWQgKmJhc2Us IHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCAqdHJlZSkNCj4gK3N0YXRp YyB2b2lkIF9fbW9kX3VwZGF0ZV9ib3VuZHMoZW51bSBtb2RfbWVtX3R5cGUgdHlwZSBfX21heWJl X3VudXNlZCwgdm9pZCAqYmFzZSwNCj4gKwkJCQl1bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IG1v ZF90cmVlX3Jvb3QgKnRyZWUpDQo+ICAgew0KPiAgIAl1bnNpZ25lZCBsb25nIG1pbiA9ICh1bnNp Z25lZCBsb25nKWJhc2U7DQo+ICAgCXVuc2lnbmVkIGxvbmcgbWF4ID0gbWluICsgc2l6ZTsNCj4g ICANCj4gKyNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RVTEVTX0RBVEFfSU5fVk1BTExPQw0K PiArCWlmIChtb2RfbWVtX3R5cGVfaXNfY29yZV9kYXRhKHR5cGUpKSB7DQo+ICsJCWlmIChtaW4g PCB0cmVlLT5kYXRhX2FkZHJfbWluKQ0KPiArCQkJdHJlZS0+ZGF0YV9hZGRyX21pbiA9IG1pbjsN Cj4gKwkJaWYgKG1heCA+IHRyZWUtPmRhdGFfYWRkcl9tYXgpDQo+ICsJCQl0cmVlLT5kYXRhX2Fk ZHJfbWF4ID0gbWF4Ow0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArI2VuZGlmDQo+ICAgCWlmICht aW4gPCB0cmVlLT5hZGRyX21pbikNCj4gICAJCXRyZWUtPmFkZHJfbWluID0gbWluOw0KPiAgIAlp ZiAobWF4ID4gdHJlZS0+YWRkcl9tYXgpDQo+IEBAIC0xMDksMTIgKzExMywxMiBAQCBzdGF0aWMg dm9pZCBfX21vZF91cGRhdGVfYm91bmRzKHZvaWQgKmJhc2UsIHVuc2lnbmVkIGludCBzaXplLCBz dHJ1Y3QgbW9kX3RyZWVfcg0KPiAgIA0KPiAgIHN0YXRpYyB2b2lkIG1vZF91cGRhdGVfYm91bmRz KHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gICB7DQo+IC0JX19tb2RfdXBkYXRlX2JvdW5kcyhtb2Qt PmNvcmVfbGF5b3V0LmJhc2UsIG1vZC0+Y29yZV9sYXlvdXQuc2l6ZSwgJm1vZF90cmVlKTsNCj4g LQlpZiAobW9kLT5pbml0X2xheW91dC5zaXplKQ0KPiAtCQlfX21vZF91cGRhdGVfYm91bmRzKG1v ZC0+aW5pdF9sYXlvdXQuYmFzZSwgbW9kLT5pbml0X2xheW91dC5zaXplLCAmbW9kX3RyZWUpOw0K PiAtI2lmZGVmIENPTkZJR19BUkNIX1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+IC0J X19tb2RfdXBkYXRlX2JvdW5kcyhtb2QtPmRhdGFfbGF5b3V0LmJhc2UsIG1vZC0+ZGF0YV9sYXlv dXQuc2l6ZSwgJm1vZF9kYXRhX3RyZWUpOw0KPiAtI2VuZGlmDQo+ICsJZm9yX2VhY2hfbW9kX21l bV90eXBlKHR5cGUpIHsNCj4gKwkJc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSAmbW9k LT5tZW1bdHlwZV07DQo+ICsNCj4gKwkJaWYgKG1vZF9tZW0tPnNpemUpDQo+ICsJCQlfX21vZF91 cGRhdGVfYm91bmRzKHR5cGUsIG1vZF9tZW0tPmJhc2UsIG1vZF9tZW0tPnNpemUsICZtb2RfdHJl ZSk7DQo+ICsJfQ0KPiAgIH0NCj4gICANCj4gICAvKiBCbG9jayBtb2R1bGUgbG9hZGluZy91bmxv YWRpbmc/ICovDQo+IEBAIC05MjMsMTIgKzkyNywyNyBAQCBzdGF0aWMgc3NpemVfdCBzdG9yZV91 ZXZlbnQoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLA0KPiAgIHN0cnVjdCBtb2R1bGVf YXR0cmlidXRlIG1vZHVsZV91ZXZlbnQgPQ0KPiAgIAlfX0FUVFIodWV2ZW50LCAwMjAwLCBOVUxM LCBzdG9yZV91ZXZlbnQpOw0KPiAgIA0KPiArI2lmZGVmIENPTkZJR19BUkNIX1dBTlRTX01PRFVM RVNfREFUQV9JTl9WTUFMTE9DDQo+ICsNCj4gICBzdGF0aWMgc3NpemVfdCBzaG93X2NvcmVzaXpl KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwNCj4gICAJCQkgICAgIHN0cnVjdCBtb2R1 bGVfa29iamVjdCAqbWssIGNoYXIgKmJ1ZmZlcikNCj4gICB7DQo+IC0JcmV0dXJuIHNwcmludGYo YnVmZmVyLCAiJXVcbiIsIG1rLT5tb2QtPmNvcmVfbGF5b3V0LnNpemUpOw0KPiArCXJldHVybiBz cHJpbnRmKGJ1ZmZlciwgIiV1XG4iLCBtay0+bW9kLT5tZW1bTU9EX1RFWFRdLnNpemUpOw0KPiAg IH0NCj4gICANCj4gKyNlbHNlDQo+ICsNCj4gK3N0YXRpYyBzc2l6ZV90IHNob3dfY29yZXNpemUo c3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLA0KPiArCQkJICAgICBzdHJ1Y3QgbW9kdWxl X2tvYmplY3QgKm1rLCBjaGFyICpidWZmZXIpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IHNpemUg PSAwOw0KPiArDQo+ICsJZm9yX2NsYXNzX21vZF9tZW1fdHlwZSh0eXBlLCBjb3JlKQ0KPiArCQlz aXplICs9IG1rLT5tb2QtPm1lbVt0eXBlXS5zaXplOw0KPiArCXJldHVybiBzcHJpbnRmKGJ1ZmZl ciwgIiV1XG4iLCBzaXplKTsNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICAgc3RhdGljIHN0cnVj dCBtb2R1bGVfYXR0cmlidXRlIG1vZGluZm9fY29yZXNpemUgPQ0KPiAgIAlfX0FUVFIoY29yZXNp emUsIDA0NDQsIHNob3dfY29yZXNpemUsIE5VTEwpOw0KPiAgIA0KPiBAQCAtOTM2LDcgKzk1NSwx NCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbW9kaW5mb19jb3Jlc2l6ZSA9DQo+ ICAgc3RhdGljIHNzaXplX3Qgc2hvd19kYXRhc2l6ZShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAq bWF0dHIsDQo+ICAgCQkJICAgICBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rLCBjaGFyICpidWZm ZXIpDQo+ICAgew0KPiAtCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiV1XG4iLCBtay0+bW9kLT5k YXRhX2xheW91dC5zaXplKTsNCj4gKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7DQo+ICsNCj4gKwlm b3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNvcmUpIHsNCj4gKwkJaWYgKHR5cGUgPT0gTU9E X1RFWFQpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJc2l6ZSArPSBtay0+bW9kLT5tZW1bdHlwZV0u c2l6ZTsNCj4gKwl9DQo+ICsJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJXVcbiIsIHNpemUpOw0K PiAgIH0NCj4gICANCj4gICBzdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbW9kaW5mb19k YXRhc2l6ZSA9DQo+IEBAIC05NDYsNyArOTcyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlX2F0 dHJpYnV0ZSBtb2RpbmZvX2RhdGFzaXplID0NCj4gICBzdGF0aWMgc3NpemVfdCBzaG93X2luaXRz aXplKHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICptYXR0ciwNCj4gICAJCQkgICAgIHN0cnVjdCBt b2R1bGVfa29iamVjdCAqbWssIGNoYXIgKmJ1ZmZlcikNCj4gICB7DQo+IC0JcmV0dXJuIHNwcmlu dGYoYnVmZmVyLCAiJXVcbiIsIG1rLT5tb2QtPmluaXRfbGF5b3V0LnNpemUpOw0KPiArCXVuc2ln bmVkIGludCBzaXplID0gMDsNCj4gKw0KPiArCWZvcl9jbGFzc19tb2RfbWVtX3R5cGUodHlwZSwg aW5pdCkNCj4gKwkJc2l6ZSArPSBtay0+bW9kLT5tZW1bdHlwZV0uc2l6ZTsNCj4gKwlyZXR1cm4g c3ByaW50ZihidWZmZXIsICIldVxuIiwgc2l6ZSk7DQo+ICAgfQ0KPiAgIA0KPiAgIHN0YXRpYyBz dHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtb2RpbmZvX2luaXRzaXplID0NCj4gQEAgLTExNDMsNiAr MTE3Myw2MyBAQCB2b2lkIF9fd2VhayBtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQoc3RydWN0IG1v ZHVsZSAqbW9kKQ0KPiAgIHsNCj4gICB9DQo+ICAgDQo+ICsjaWZkZWYgQ09ORklHX0FSQ0hfV0FO VFNfTU9EVUxFU19EQVRBX0lOX1ZNQUxMT0MNCj4gK3N0YXRpYyBib29sIG1vZF9tZW1fdXNlX3Zt YWxsb2MoZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkNCj4gK3sNCj4gKwlyZXR1cm4gbW9kX21lbV9p c19jb3JlX2RhdGEodHlwZSk7DQo+ICt9DQo+ICsjZWxzZQ0KPiArc3RhdGljIGJvb2wgbW9kX21l bV91c2Vfdm1hbGxvYyhlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKQ0KPiArew0KPiArCXJldHVybiBm YWxzZTsNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0aWMgdm9pZCAqbW9kdWxlX21lbW9y eV9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkNCj4gK3sN Cj4gKwlpZiAobW9kX21lbV91c2Vfdm1hbGxvYyh0eXBlKSkNCj4gKwkJcmV0dXJuIHZ6YWxsb2Mo c2l6ZSk7DQo+ICsJcmV0dXJuIG1vZHVsZV9hbGxvYyhzaXplKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgbW9kdWxlX21lbW9yeV9mcmVlKHZvaWQgKnB0ciwgZW51bSBtb2RfbWVtX3R5cGUg dHlwZSkNCj4gK3sNCj4gKwlpZiAobW9kX21lbV91c2Vfdm1hbGxvYyh0eXBlKSkNCj4gKwkJdmZy ZWUocHRyKTsNCj4gKwllbHNlDQo+ICsJCW1vZHVsZV9tZW1mcmVlKHB0cik7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGZyZWVfbW9kX21lbShzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICt7DQo+ ICsJLyogZnJlZSB0aGUgbWVtb3J5IGluIHRoZSByaWdodCBvcmRlciB0byBhdm9pZCB1c2UtYWZ0 ZXItZnJlZSAqLw0KPiArCXN0YXRpYyBlbnVtIG1vZF9tZW1fdHlwZSBtb2RfbWVtX2ZyZWVfb3Jk ZXJbTU9EX01FTV9OVU1fVFlQRVNdID0gew0KPiArCQkvKiBmaXJzdCBmcmVlIGluaXQgc2VjdGlv bnMgKi8NCj4gKwkJTU9EX0lOSVRfVEVYVCwNCj4gKwkJTU9EX0lOSVRfREFUQSwNCj4gKwkJTU9E X0lOSVRfUk9EQVRBLA0KPiArDQo+ICsJCS8qIHRoZW4gY29yZSBzZWN0aW9ucywgZXhjZXB0IHJ3 IGRhdGEgKi8NCj4gKwkJTU9EX1RFWFQsDQo+ICsJCU1PRF9ST0RBVEEsDQo+ICsJCU1PRF9ST19B RlRFUl9JTklULA0KPiArDQo+ICsJCS8qIGxhc3QsIHJ3IGRhdGEgKi8NCj4gKwkJTU9EX0RBVEEs DQo+ICsJfTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBNT0RfTUVNX05V TV9UWVBFUzsgaSsrKSB7DQo+ICsJCWVudW0gbW9kX21lbV90eXBlIHR5cGUgPSBtb2RfbWVtX2Zy ZWVfb3JkZXJbaV07DQo+ICsJCXN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gJm1vZC0+ bWVtW3R5cGVdOw0KPiArDQo+ICsJCS8qIEZyZWUgbG9jay1jbGFzc2VzOyByZWxpZXMgb24gdGhl IHByZWNlZGluZyBzeW5jX3JjdSgpLiAqLw0KPiArCQlsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKG1v ZF9tZW0tPmJhc2UsIG1vZF9tZW0tPnNpemUpOw0KPiArCQlpZiAobW9kX21lbS0+c2l6ZSkNCj4g KwkJCW1vZHVsZV9tZW1vcnlfZnJlZShtb2RfbWVtLT5iYXNlLCB0eXBlKTsNCj4gKwl9DQo+ICt9 DQo+ICsNCj4gICAvKiBGcmVlIGEgbW9kdWxlLCByZW1vdmUgZnJvbSBsaXN0cywgZXRjLiAqLw0K PiAgIHN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gICB7DQo+ IEBAIC0xMTg5LDE4ICsxMjc2LDEwIEBAIHN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBt b2R1bGUgKm1vZCkNCj4gICANCj4gICAJLyogVGhpcyBtYXkgYmUgZW1wdHksIGJ1dCB0aGF0J3Mg T0sgKi8NCj4gICAJbW9kdWxlX2FyY2hfZnJlZWluZ19pbml0KG1vZCk7DQo+IC0JbW9kdWxlX21l bWZyZWUobW9kLT5pbml0X2xheW91dC5iYXNlKTsNCj4gICAJa2ZyZWUobW9kLT5hcmdzKTsNCj4g ICAJcGVyY3B1X21vZGZyZWUobW9kKTsNCj4gICANCj4gLQkvKiBGcmVlIGxvY2stY2xhc3Nlczsg cmVsaWVzIG9uIHRoZSBwcmVjZWRpbmcgc3luY19yY3UoKS4gKi8NCj4gLQlsb2NrZGVwX2ZyZWVf a2V5X3JhbmdlKG1vZC0+ZGF0YV9sYXlvdXQuYmFzZSwgbW9kLT5kYXRhX2xheW91dC5zaXplKTsN Cj4gLQ0KPiAtCS8qIEZpbmFsbHksIGZyZWUgdGhlIGNvcmUgKGNvbnRhaW5pbmcgdGhlIG1vZHVs ZSBzdHJ1Y3R1cmUpICovDQo+IC0JbW9kdWxlX21lbWZyZWUobW9kLT5jb3JlX2xheW91dC5iYXNl KTsNCj4gLSNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RVTEVTX0RBVEFfSU5fVk1BTExPQw0K PiAtCXZmcmVlKG1vZC0+ZGF0YV9sYXlvdXQuYmFzZSk7DQo+IC0jZW5kaWYNCj4gKwlmcmVlX21v ZF9tZW0obW9kKTsNCj4gICB9DQo+ICAgDQo+ICAgdm9pZCAqX19zeW1ib2xfZ2V0KGNvbnN0IGNo YXIgKnN5bWJvbCkNCj4gQEAgLTEzODcsMTYgKzE0NjYsMTggQEAgdW5zaWduZWQgaW50IF9fd2Vh ayBhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQoc3RydWN0IG1vZHVsZSAqbW9kLA0KPiAgIAlyZXR1 cm4gMDsNCj4gICB9DQo+ICAgDQo+IC0vKiBVcGRhdGUgc2l6ZSB3aXRoIHRoaXMgc2VjdGlvbjog cmV0dXJuIG9mZnNldC4gKi8NCj4gLWxvbmcgbW9kdWxlX2dldF9vZmZzZXQoc3RydWN0IG1vZHVs ZSAqbW9kLCB1bnNpZ25lZCBpbnQgKnNpemUsDQo+ICtsb25nIG1vZHVsZV9nZXRfb2Zmc2V0X2Fu ZF90eXBlKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSwNCj4gICAJ CQkJRWxmX1NoZHIgKnNlY2hkciwgdW5zaWduZWQgaW50IHNlY3Rpb24pDQo+ICAgew0KPiAtCWxv bmcgcmV0Ow0KPiArCWxvbmcgb2Zmc2V0Ow0KPiArCWxvbmcgbWFzayA9ICgodW5zaWduZWQgbG9u ZykodHlwZSkgJiBTSF9FTlRTSVpFX1RZUEVfTUFTSykgPDwgU0hfRU5UU0laRV9UWVBFX1NISUZU Ow0KPiAgIA0KPiAtCSpzaXplICs9IGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChtb2QsIHNlY3Rp b24pOw0KPiAtCXJldCA9IEFMSUdOKCpzaXplLCBzZWNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKTsN Cj4gLQkqc2l6ZSA9IHJldCArIHNlY2hkci0+c2hfc2l6ZTsNCj4gLQlyZXR1cm4gcmV0Ow0KPiAr CW1vZC0+bWVtW3R5cGVdLnNpemUgKz0gYXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgc2Vj dGlvbik7DQo+ICsJb2Zmc2V0ID0gQUxJR04obW9kLT5tZW1bdHlwZV0uc2l6ZSwgc2VjaGRyLT5z aF9hZGRyYWxpZ24gPzogMSk7DQo+ICsJbW9kLT5tZW1bdHlwZV0uc2l6ZSA9IG9mZnNldCArIHNl Y2hkci0+c2hfc2l6ZTsNCj4gKw0KPiArCVdBUk5fT05fT05DRShvZmZzZXQgJiBtYXNrKTsNCj4g KwlyZXR1cm4gb2Zmc2V0IHwgbWFzazsNCj4gICB9DQo+ICAgDQo+ICAgc3RhdGljIGJvb2wgbW9k dWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oY29uc3QgY2hhciAqc25hbWUpDQo+IEBAIC0xNDI4LDYg KzE1MDksMjAgQEAgc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1v ZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykNCj4gICAJCXsgU0hGX1dSSVRFIHwgU0hGX0FMTE9D LCBBUkNIX1NIRl9TTUFMTCB9LA0KPiAgIAkJeyBBUkNIX1NIRl9TTUFMTCB8IFNIRl9BTExPQywg MCB9DQo+ICAgCX07DQo+ICsJc3RhdGljIGludCBjb3JlX21fdG9fbWVtX3R5cGVbXSA9IHsNCj4g KwkJTU9EX1RFWFQsDQo+ICsJCU1PRF9ST0RBVEEsDQo+ICsJCU1PRF9ST19BRlRFUl9JTklULA0K PiArCQlNT0RfREFUQSwNCj4gKwkJTU9EX0lOVkFMSUQsDQo+ICsJfTsNCj4gKwlzdGF0aWMgaW50 IGluaXRfbV90b19tZW1fdHlwZVtdID0gew0KPiArCQlNT0RfSU5JVF9URVhULA0KPiArCQlNT0Rf SU5JVF9ST0RBVEEsDQo+ICsJCU1PRF9JTlZBTElELA0KPiArCQlNT0RfSU5JVF9EQVRBLA0KPiAr CQlNT0RfSU5WQUxJRCwNCj4gKwl9Ow0KPiAgIAl1bnNpZ25lZCBpbnQgbSwgaTsNCj4gICANCj4g ICAJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgaSsrKQ0KPiBAQCAtMTQzNSw0 MSArMTUzMCwzMCBAQCBzdGF0aWMgdm9pZCBsYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAq bW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAgIA0KPiAgIAlwcl9kZWJ1ZygiQ29yZSBz ZWN0aW9uIGFsbG9jYXRpb24gb3JkZXI6XG4iKTsNCj4gICAJZm9yIChtID0gMDsgbSA8IEFSUkFZ X1NJWkUobWFza3MpOyArK20pIHsNCj4gKwkJZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IGNvcmVf bV90b19tZW1fdHlwZVttXTsNCj4gKw0KPiAgIAkJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ ZV9zaG51bTsgKytpKSB7DQo+ICAgCQkJRWxmX1NoZHIgKnMgPSAmaW5mby0+c2VjaGRyc1tpXTsN Cj4gICAJCQljb25zdCBjaGFyICpzbmFtZSA9IGluZm8tPnNlY3N0cmluZ3MgKyBzLT5zaF9uYW1l Ow0KPiAtCQkJdW5zaWduZWQgaW50ICpzaXplcDsNCj4gICANCj4gICAJCQlpZiAoKHMtPnNoX2Zs YWdzICYgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdDQo+ICAgCQkJICAgIHx8IChzLT5zaF9m bGFncyAmIG1hc2tzW21dWzFdKQ0KPiAgIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwN Cj4gICAJCQkgICAgfHwgbW9kdWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oc25hbWUpKQ0KPiAgIAkJ CQljb250aW51ZTsNCj4gLQkJCXNpemVwID0gbSA/ICZtb2QtPmRhdGFfbGF5b3V0LnNpemUgOiAm bW9kLT5jb3JlX2xheW91dC5zaXplOw0KPiAtCQkJcy0+c2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRf b2Zmc2V0KG1vZCwgc2l6ZXAsIHMsIGkpOw0KPiArDQo+ICsJCQlpZiAoV0FSTl9PTl9PTkNFKHR5 cGUgPT0gTU9EX0lOVkFMSUQpKQ0KPiArCQkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCQlzLT5zaF9l bnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTsNCj4g ICAJCQlwcl9kZWJ1ZygiXHQlc1xuIiwgc25hbWUpOw0KPiAgIAkJfQ0KPiAtCQlzd2l0Y2ggKG0p IHsNCj4gLQkJY2FzZSAwOiAvKiBleGVjdXRhYmxlICovDQo+IC0JCQltb2QtPmNvcmVfbGF5b3V0 LnNpemUgPSBzdHJpY3RfYWxpZ24obW9kLT5jb3JlX2xheW91dC5zaXplKTsNCj4gLQkJCW1vZC0+ Y29yZV9sYXlvdXQudGV4dF9zaXplID0gbW9kLT5jb3JlX2xheW91dC5zaXplOw0KPiAtCQkJYnJl YWs7DQo+IC0JCWNhc2UgMTogLyogUk86IHRleHQgYW5kIHJvLWRhdGEgKi8NCj4gLQkJCW1vZC0+ ZGF0YV9sYXlvdXQuc2l6ZSA9IHN0cmljdF9hbGlnbihtb2QtPmRhdGFfbGF5b3V0LnNpemUpOw0K PiAtCQkJbW9kLT5kYXRhX2xheW91dC5yb19zaXplID0gbW9kLT5kYXRhX2xheW91dC5zaXplOw0K PiAtCQkJYnJlYWs7DQo+IC0JCWNhc2UgMjogLyogUk8gYWZ0ZXIgaW5pdCAqLw0KPiAtCQkJbW9k LT5kYXRhX2xheW91dC5zaXplID0gc3RyaWN0X2FsaWduKG1vZC0+ZGF0YV9sYXlvdXQuc2l6ZSk7 DQo+IC0JCQltb2QtPmRhdGFfbGF5b3V0LnJvX2FmdGVyX2luaXRfc2l6ZSA9IG1vZC0+ZGF0YV9s YXlvdXQuc2l6ZTsNCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIDQ6IC8qIHdob2xlIGNvcmUgKi8N Cj4gLQkJCW1vZC0+ZGF0YV9sYXlvdXQuc2l6ZSA9IHN0cmljdF9hbGlnbihtb2QtPmRhdGFfbGF5 b3V0LnNpemUpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gICAJfQ0KPiAgIA0KPiAgIAlwcl9k ZWJ1ZygiSW5pdCBzZWN0aW9uIGFsbG9jYXRpb24gb3JkZXI6XG4iKTsNCj4gICAJZm9yIChtID0g MDsgbSA8IEFSUkFZX1NJWkUobWFza3MpOyArK20pIHsNCj4gKwkJZW51bSBtb2RfbWVtX3R5cGUg dHlwZSA9IGluaXRfbV90b19tZW1fdHlwZVttXTsNCj4gKw0KPiAgIAkJZm9yIChpID0gMDsgaSA8 IGluZm8tPmhkci0+ZV9zaG51bTsgKytpKSB7DQo+ICAgCQkJRWxmX1NoZHIgKnMgPSAmaW5mby0+ c2VjaGRyc1tpXTsNCj4gICAJCQljb25zdCBjaGFyICpzbmFtZSA9IGluZm8tPnNlY3N0cmluZ3Mg KyBzLT5zaF9uYW1lOw0KPiBAQCAtMTQ3OSwzMCArMTU2MywxMyBAQCBzdGF0aWMgdm9pZCBsYXlv dXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0K PiAgIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwNCj4gICAJCQkgICAgfHwgIW1vZHVs ZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSkNCj4gICAJCQkJY29udGludWU7DQo+IC0JCQlz LT5zaF9lbnRzaXplID0gKG1vZHVsZV9nZXRfb2Zmc2V0KG1vZCwgJm1vZC0+aW5pdF9sYXlvdXQu c2l6ZSwgcywgaSkNCj4gLQkJCQkJIHwgSU5JVF9PRkZTRVRfTUFTSyk7DQo+ICsNCj4gKwkJCWlm IChXQVJOX09OX09OQ0UodHlwZSA9PSBNT0RfSU5WQUxJRCkpDQo+ICsJCQkJY29udGludWU7DQo+ ICsNCj4gKwkJCXMtPnNoX2VudHNpemUgPSBtb2R1bGVfZ2V0X29mZnNldF9hbmRfdHlwZShtb2Qs IHR5cGUsIHMsIGkpOw0KPiAgIAkJCXByX2RlYnVnKCJcdCVzXG4iLCBzbmFtZSk7DQo+ICAgCQl9 DQo+IC0JCXN3aXRjaCAobSkgew0KPiAtCQljYXNlIDA6IC8qIGV4ZWN1dGFibGUgKi8NCj4gLQkJ CW1vZC0+aW5pdF9sYXlvdXQuc2l6ZSA9IHN0cmljdF9hbGlnbihtb2QtPmluaXRfbGF5b3V0LnNp emUpOw0KPiAtCQkJbW9kLT5pbml0X2xheW91dC50ZXh0X3NpemUgPSBtb2QtPmluaXRfbGF5b3V0 LnNpemU7DQo+IC0JCQlicmVhazsNCj4gLQkJY2FzZSAxOiAvKiBSTzogdGV4dCBhbmQgcm8tZGF0 YSAqLw0KPiAtCQkJbW9kLT5pbml0X2xheW91dC5zaXplID0gc3RyaWN0X2FsaWduKG1vZC0+aW5p dF9sYXlvdXQuc2l6ZSk7DQo+IC0JCQltb2QtPmluaXRfbGF5b3V0LnJvX3NpemUgPSBtb2QtPmlu aXRfbGF5b3V0LnNpemU7DQo+IC0JCQlicmVhazsNCj4gLQkJY2FzZSAyOg0KPiAtCQkJLyoNCj4g LQkJCSAqIFJPIGFmdGVyIGluaXQgZG9lc24ndCBhcHBseSB0byBpbml0X2xheW91dCAob25seQ0K PiAtCQkJICogY29yZV9sYXlvdXQpLCBzbyBpdCBqdXN0IHRha2VzIHRoZSB2YWx1ZSBvZiByb19z aXplLg0KPiAtCQkJICovDQo+IC0JCQltb2QtPmluaXRfbGF5b3V0LnJvX2FmdGVyX2luaXRfc2l6 ZSA9IG1vZC0+aW5pdF9sYXlvdXQucm9fc2l6ZTsNCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIDQ6 IC8qIHdob2xlIGluaXQgKi8NCj4gLQkJCW1vZC0+aW5pdF9sYXlvdXQuc2l6ZSA9IHN0cmljdF9h bGlnbihtb2QtPmluaXRfbGF5b3V0LnNpemUpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gICAJ fQ0KPiAgIH0NCj4gICANCj4gQEAgLTIxMjIsNzIgKzIxODksNDIgQEAgc3RhdGljIGludCBtb3Zl X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pDQo+ICAg ew0KPiAgIAlpbnQgaTsNCj4gICAJdm9pZCAqcHRyOw0KPiArCWVudW0gbW9kX21lbV90eXBlIHQ7 DQo+ICAgDQo+IC0JLyogRG8gdGhlIGFsbG9jcy4gKi8NCj4gLQlwdHIgPSBtb2R1bGVfYWxsb2Mo bW9kLT5jb3JlX2xheW91dC5zaXplKTsNCj4gLQkvKg0KPiAtCSAqIFRoZSBwb2ludGVyIHRvIHRo aXMgYmxvY2sgaXMgc3RvcmVkIGluIHRoZSBtb2R1bGUgc3RydWN0dXJlDQo+IC0JICogd2hpY2gg aXMgaW5zaWRlIHRoZSBibG9jay4gSnVzdCBtYXJrIGl0IGFzIG5vdCBiZWluZyBhDQo+IC0JICog bGVhay4NCj4gLQkgKi8NCj4gLQlrbWVtbGVha19ub3RfbGVhayhwdHIpOw0KPiAtCWlmICghcHRy KQ0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQ0KPiAtCW1lbXNldChwdHIsIDAsIG1vZC0+Y29y ZV9sYXlvdXQuc2l6ZSk7DQo+IC0JbW9kLT5jb3JlX2xheW91dC5iYXNlID0gcHRyOw0KPiAtDQo+ IC0JaWYgKG1vZC0+aW5pdF9sYXlvdXQuc2l6ZSkgew0KPiAtCQlwdHIgPSBtb2R1bGVfYWxsb2Mo bW9kLT5pbml0X2xheW91dC5zaXplKTsNCj4gLQkJLyoNCj4gLQkJICogVGhlIHBvaW50ZXIgdG8g dGhpcyBibG9jayBpcyBzdG9yZWQgaW4gdGhlIG1vZHVsZSBzdHJ1Y3R1cmUNCj4gLQkJICogd2hp Y2ggaXMgaW5zaWRlIHRoZSBibG9jay4gVGhpcyBibG9jayBkb2Vzbid0IG5lZWQgdG8gYmUNCj4g LQkJICogc2Nhbm5lZCBhcyBpdCBjb250YWlucyBkYXRhIGFuZCBjb2RlIHRoYXQgd2lsbCBiZSBm cmVlZA0KPiAtCQkgKiBhZnRlciB0aGUgbW9kdWxlIGlzIGluaXRpYWxpemVkLg0KPiAtCQkgKi8N Cj4gLQkJa21lbWxlYWtfaWdub3JlKHB0cik7DQo+IC0JCWlmICghcHRyKSB7DQo+IC0JCQltb2R1 bGVfbWVtZnJlZShtb2QtPmNvcmVfbGF5b3V0LmJhc2UpOw0KPiAtCQkJcmV0dXJuIC1FTk9NRU07 DQo+ICsJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHsNCj4gKwkJaWYgKCFtb2QtPm1lbVt0 eXBlXS5zaXplKSB7DQo+ICsJCQltb2QtPm1lbVt0eXBlXS5iYXNlID0gTlVMTDsNCj4gKwkJCWNv bnRpbnVlOw0KPiAgIAkJfQ0KPiAtCQltZW1zZXQocHRyLCAwLCBtb2QtPmluaXRfbGF5b3V0LnNp emUpOw0KPiAtCQltb2QtPmluaXRfbGF5b3V0LmJhc2UgPSBwdHI7DQo+IC0JfSBlbHNlDQo+IC0J CW1vZC0+aW5pdF9sYXlvdXQuYmFzZSA9IE5VTEw7DQo+ICsJCW1vZC0+bWVtW3R5cGVdLnNpemUg PSBQQUdFX0FMSUdOKG1vZC0+bWVtW3R5cGVdLnNpemUpOw0KPiArCQlwdHIgPSBtb2R1bGVfbWVt b3J5X2FsbG9jKG1vZC0+bWVtW3R5cGVdLnNpemUsIHR5cGUpOw0KPiAgIA0KPiAtI2lmZGVmIENP TkZJR19BUkNIX1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+IC0JLyogRG8gdGhlIGFs bG9jcy4gKi8NCj4gLQlwdHIgPSB2emFsbG9jKG1vZC0+ZGF0YV9sYXlvdXQuc2l6ZSk7DQo+ICAg CQkvKg0KPiAgIAkJICogVGhlIHBvaW50ZXIgdG8gdGhpcyBibG9jayBpcyBzdG9yZWQgaW4gdGhl IG1vZHVsZSBzdHJ1Y3R1cmUNCj4gICAJCSAqIHdoaWNoIGlzIGluc2lkZSB0aGUgYmxvY2suIEp1 c3QgbWFyayBpdCBhcyBub3QgYmVpbmcgYQ0KPiAgIAkJICogbGVhay4NCj4gICAJCSAqLw0KPiAt CWttZW1sZWFrX25vdF9sZWFrKHB0cik7DQo+ICsJCWttZW1sZWFrX2lnbm9yZShwdHIpOw0KPiAg IAkJaWYgKCFwdHIpIHsNCj4gLQkJbW9kdWxlX21lbWZyZWUobW9kLT5jb3JlX2xheW91dC5iYXNl KTsNCj4gLQkJbW9kdWxlX21lbWZyZWUobW9kLT5pbml0X2xheW91dC5iYXNlKTsNCj4gLQkJcmV0 dXJuIC1FTk9NRU07DQo+ICsJCQl0ID0gdHlwZTsNCj4gKwkJCWdvdG8gb3V0X2Vub21lbTsNCj4g KwkJfQ0KPiArCQltZW1zZXQocHRyLCAwLCBtb2QtPm1lbVt0eXBlXS5zaXplKTsNCj4gKwkJbW9k LT5tZW1bdHlwZV0uYmFzZSA9IHB0cjsNCj4gICAJfQ0KPiAgIA0KPiAtCW1vZC0+ZGF0YV9sYXlv dXQuYmFzZSA9IHB0cjsNCj4gLSNlbmRpZg0KPiAgIAkvKiBUcmFuc2ZlciBlYWNoIHNlY3Rpb24g d2hpY2ggc3BlY2lmaWVzIFNIRl9BTExPQyAqLw0KPiAgIAlwcl9kZWJ1ZygiZmluYWwgc2VjdGlv biBhZGRyZXNzZXM6XG4iKTsNCj4gICAJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51 bTsgaSsrKSB7DQo+ICAgCQl2b2lkICpkZXN0Ow0KPiAgIAkJRWxmX1NoZHIgKnNoZHIgPSAmaW5m by0+c2VjaGRyc1tpXTsNCj4gKwkJZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItPnNoX2Vu dHNpemUgPj4gU0hfRU5UU0laRV9UWVBFX1NISUZUOw0KPiAgIA0KPiAgIAkJaWYgKCEoc2hkci0+ c2hfZmxhZ3MgJiBTSEZfQUxMT0MpKQ0KPiAgIAkJCWNvbnRpbnVlOw0KPiAgIA0KPiAtCQlpZiAo c2hkci0+c2hfZW50c2l6ZSAmIElOSVRfT0ZGU0VUX01BU0spDQo+IC0JCQlkZXN0ID0gbW9kLT5p bml0X2xheW91dC5iYXNlDQo+IC0JCQkJKyAoc2hkci0+c2hfZW50c2l6ZSAmIH5JTklUX09GRlNF VF9NQVNLKTsNCj4gLQkJZWxzZSBpZiAoIShzaGRyLT5zaF9mbGFncyAmIFNIRl9FWEVDSU5TVFIp KQ0KPiAtCQkJZGVzdCA9IG1vZC0+ZGF0YV9sYXlvdXQuYmFzZSArIHNoZHItPnNoX2VudHNpemU7 DQo+IC0JCWVsc2UNCj4gLQkJCWRlc3QgPSBtb2QtPmNvcmVfbGF5b3V0LmJhc2UgKyBzaGRyLT5z aF9lbnRzaXplOw0KPiArCQlkZXN0ID0gbW9kLT5tZW1bdHlwZV0uYmFzZSArDQo+ICsJCQkoc2hk ci0+c2hfZW50c2l6ZSAmIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0spOw0KPiAgIA0KPiAgIAkJaWYg KHNoZHItPnNoX3R5cGUgIT0gU0hUX05PQklUUykNCj4gICAJCQltZW1jcHkoZGVzdCwgKHZvaWQg KilzaGRyLT5zaF9hZGRyLCBzaGRyLT5zaF9zaXplKTsNCj4gQEAgLTIxOTgsNiArMjIzNSwxMCBA QCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRf aW5mbyAqaW5mbykNCj4gICAJfQ0KPiAgIA0KPiAgIAlyZXR1cm4gMDsNCj4gK291dF9lbm9tZW06 DQo+ICsJZm9yICh0LS07IHQgPj0gMDsgdC0tKQ0KPiArCQltb2R1bGVfbWVtb3J5X2ZyZWUobW9k LT5tZW1bdF0uYmFzZSwgdCk7DQo+ICsJcmV0dXJuIC1FTk9NRU07DQo+ICAgfQ0KPiAgIA0KPiAg IHN0YXRpYyBpbnQgY2hlY2tfbW9kdWxlX2xpY2Vuc2VfYW5kX3ZlcnNpb25zKHN0cnVjdCBtb2R1 bGUgKm1vZCkNCj4gQEAgLTIyNDIsMTIgKzIyODMsMTMgQEAgc3RhdGljIHZvaWQgZmx1c2hfbW9k dWxlX2ljYWNoZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICAgCSAqIERvIGl0IGJlZm9y ZSBwcm9jZXNzaW5nIG9mIG1vZHVsZSBwYXJhbWV0ZXJzLCBzbyB0aGUgbW9kdWxlDQo+ICAgCSAq IGNhbiBwcm92aWRlIHBhcmFtZXRlciBhY2Nlc3NvciBmdW5jdGlvbnMgb2YgaXRzIG93bi4NCj4g ICAJICovDQo+IC0JaWYgKG1vZC0+aW5pdF9sYXlvdXQuYmFzZSkNCj4gLQkJZmx1c2hfaWNhY2hl X3JhbmdlKCh1bnNpZ25lZCBsb25nKW1vZC0+aW5pdF9sYXlvdXQuYmFzZSwNCj4gLQkJCQkgICAo dW5zaWduZWQgbG9uZyltb2QtPmluaXRfbGF5b3V0LmJhc2UNCj4gLQkJCQkgICArIG1vZC0+aW5p dF9sYXlvdXQuc2l6ZSk7DQo+IC0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKW1v ZC0+Y29yZV9sYXlvdXQuYmFzZSwNCj4gLQkJCSAgICh1bnNpZ25lZCBsb25nKW1vZC0+Y29yZV9s YXlvdXQuYmFzZSArIG1vZC0+Y29yZV9sYXlvdXQuc2l6ZSk7DQo+ICsJZm9yX2VhY2hfbW9kX21l bV90eXBlKHR5cGUpIHsNCj4gKwkJY29uc3Qgc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0g PSAmbW9kLT5tZW1bdHlwZV07DQo+ICsNCj4gKwkJaWYgKG1vZF9tZW0tPnNpemUpDQo+ICsJCQlm bHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpbW9kX21lbS0+YmFzZSwNCj4gKwkJCQkJ ICAgKHVuc2lnbmVkIGxvbmcpbW9kX21lbS0+YmFzZSArIG1vZF9tZW0tPnNpemUpOw0KPiArCX0N Cj4gICB9DQo+ICAgDQo+ICAgYm9vbCBfX3dlYWsgbW9kdWxlX2VsZl9jaGVja19hcmNoKEVsZl9F aGRyICpoZHIpDQo+IEBAIC0yMzUwLDExICsyMzkyLDggQEAgc3RhdGljIHZvaWQgbW9kdWxlX2Rl YWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAg IHsNCj4gICAJcGVyY3B1X21vZGZyZWUobW9kKTsNCj4gICAJbW9kdWxlX2FyY2hfZnJlZWluZ19p bml0KG1vZCk7DQo+IC0JbW9kdWxlX21lbWZyZWUobW9kLT5pbml0X2xheW91dC5iYXNlKTsNCj4g LQltb2R1bGVfbWVtZnJlZShtb2QtPmNvcmVfbGF5b3V0LmJhc2UpOw0KPiAtI2lmZGVmIENPTkZJ R19BUkNIX1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+IC0JdmZyZWUobW9kLT5kYXRh X2xheW91dC5iYXNlKTsNCj4gLSNlbmRpZg0KPiArDQo+ICsJZnJlZV9tb2RfbWVtKG1vZCk7DQo+ ICAgfQ0KPiAgIA0KPiAgIGludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRy ICpoZHIsDQo+IEBAIC0yNDE1LDcgKzI0NTQsOSBAQCBzdGF0aWMgdm9pZCBkb19tb2RfY3RvcnMo c3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAgIC8qIEZvciBmcmVlaW5nIG1vZHVsZV9pbml0IG9uIHN1 Y2Nlc3MsIGluIGNhc2Uga2FsbHN5bXMgdHJhdmVyc2luZyAqLw0KPiAgIHN0cnVjdCBtb2RfaW5p dGZyZWUgew0KPiAgIAlzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlOw0KPiAtCXZvaWQgKm1vZHVsZV9p bml0Ow0KPiArCXZvaWQgKmluaXRfdGV4dDsNCj4gKwl2b2lkICppbml0X2RhdGE7DQo+ICsJdm9p ZCAqaW5pdF9yb2RhdGE7DQo+ICAgfTsNCj4gICANCj4gICBzdGF0aWMgdm9pZCBkb19mcmVlX2lu aXQoc3RydWN0IHdvcmtfc3RydWN0ICp3KQ0KPiBAQCAtMjQyOSw3ICsyNDcwLDkgQEAgc3RhdGlj IHZvaWQgZG9fZnJlZV9pbml0KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykNCj4gICANCj4gICAJbGxp c3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sIGxpc3QpIHsNCj4gICAJCWluaXRmcmVlID0gY29udGFp bmVyX29mKHBvcywgc3RydWN0IG1vZF9pbml0ZnJlZSwgbm9kZSk7DQo+IC0JCW1vZHVsZV9tZW1m cmVlKGluaXRmcmVlLT5tb2R1bGVfaW5pdCk7DQo+ICsJCW1vZHVsZV9tZW1mcmVlKGluaXRmcmVl LT5pbml0X3RleHQpOw0KPiArCQltb2R1bGVfbWVtZnJlZShpbml0ZnJlZS0+aW5pdF9kYXRhKTsN Cj4gKwkJbW9kdWxlX21lbWZyZWUoaW5pdGZyZWUtPmluaXRfcm9kYXRhKTsNCj4gICAJCWtmcmVl KGluaXRmcmVlKTsNCj4gICAJfQ0KPiAgIH0NCj4gQEAgLTI0NTYsNyArMjQ5OSw5IEBAIHN0YXRp YyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAgIAkJ cmV0ID0gLUVOT01FTTsNCj4gICAJCWdvdG8gZmFpbDsNCj4gICAJfQ0KPiAtCWZyZWVpbml0LT5t b2R1bGVfaW5pdCA9IG1vZC0+aW5pdF9sYXlvdXQuYmFzZTsNCj4gKwlmcmVlaW5pdC0+aW5pdF90 ZXh0ID0gbW9kLT5tZW1bTU9EX0lOSVRfVEVYVF0uYmFzZTsNCj4gKwlmcmVlaW5pdC0+aW5pdF9k YXRhID0gbW9kLT5tZW1bTU9EX0lOSVRfREFUQV0uYmFzZTsNCj4gKwlmcmVlaW5pdC0+aW5pdF9y b2RhdGEgPSBtb2QtPm1lbVtNT0RfSU5JVF9ST0RBVEFdLmJhc2U7DQo+ICAgDQo+ICAgCWRvX21v ZF9jdG9ycyhtb2QpOw0KPiAgIAkvKiBTdGFydCB0aGUgbW9kdWxlICovDQo+IEBAIC0yNDkyLDgg KzI1MzcsOCBAQCBzdGF0aWMgbm9pbmxpbmUgaW50IGRvX2luaXRfbW9kdWxlKHN0cnVjdCBtb2R1 bGUgKm1vZCkNCj4gICAJaWYgKCFtb2QtPmFzeW5jX3Byb2JlX3JlcXVlc3RlZCkNCj4gICAJCWFz eW5jX3N5bmNocm9uaXplX2Z1bGwoKTsNCj4gICANCj4gLQlmdHJhY2VfZnJlZV9tZW0obW9kLCBt b2QtPmluaXRfbGF5b3V0LmJhc2UsIG1vZC0+aW5pdF9sYXlvdXQuYmFzZSArDQo+IC0JCQltb2Qt PmluaXRfbGF5b3V0LnNpemUpOw0KPiArCWZ0cmFjZV9mcmVlX21lbShtb2QsIG1vZC0+bWVtW01P RF9JTklUX1RFWFRdLmJhc2UsDQo+ICsJCQltb2QtPm1lbVtNT0RfSU5JVF9URVhUXS5iYXNlICsg bW9kLT5tZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7DQo+ICAgCW11dGV4X2xvY2soJm1vZHVsZV9t dXRleCk7DQo+ICAgCS8qIERyb3AgaW5pdGlhbCByZWZlcmVuY2UuICovDQo+ICAgCW1vZHVsZV9w dXQobW9kKTsNCj4gQEAgLTI1MDUsMTEgKzI1NTAsMTAgQEAgc3RhdGljIG5vaW5saW5lIGludCBk b19pbml0X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICAgCW1vZHVsZV9lbmFibGVfcm8o bW9kLCB0cnVlKTsNCj4gICAJbW9kX3RyZWVfcmVtb3ZlX2luaXQobW9kKTsNCj4gICAJbW9kdWxl X2FyY2hfZnJlZWluZ19pbml0KG1vZCk7DQo+IC0JbW9kLT5pbml0X2xheW91dC5iYXNlID0gTlVM TDsNCj4gLQltb2QtPmluaXRfbGF5b3V0LnNpemUgPSAwOw0KPiAtCW1vZC0+aW5pdF9sYXlvdXQu cm9fc2l6ZSA9IDA7DQo+IC0JbW9kLT5pbml0X2xheW91dC5yb19hZnRlcl9pbml0X3NpemUgPSAw Ow0KPiAtCW1vZC0+aW5pdF9sYXlvdXQudGV4dF9zaXplID0gMDsNCj4gKwlmb3JfY2xhc3NfbW9k X21lbV90eXBlKHR5cGUsIGluaXQpIHsNCj4gKwkJbW9kLT5tZW1bdHlwZV0uYmFzZSA9IE5VTEw7 DQo+ICsJCW1vZC0+bWVtW3R5cGVdLnNpemUgPSAwOw0KPiArCX0NCj4gICAjaWZkZWYgQ09ORklH X0RFQlVHX0lORk9fQlRGX01PRFVMRVMNCj4gICAJLyogLkJURiBpcyBub3QgU0hGX0FMTE9DIGFu ZCB3aWxsIGdldCByZW1vdmVkLCBzbyBzYW5pdGl6ZSBwb2ludGVyICovDQo+ICAgCW1vZC0+YnRm X2RhdGEgPSBOVUxMOw0KPiBAQCAtMjYyOCw5ICsyNjcyLDYgQEAgc3RhdGljIGludCBjb21wbGV0 ZV9mb3JtYXRpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0K PiAgIAltb2R1bGVfYnVnX2ZpbmFsaXplKGluZm8tPmhkciwgaW5mby0+c2VjaGRycywgbW9kKTsN Cj4gICAJbW9kdWxlX2NmaV9maW5hbGl6ZShpbmZvLT5oZHIsIGluZm8tPnNlY2hkcnMsIG1vZCk7 DQo+ICAgDQo+IC0JaWYgKG1vZHVsZV9jaGVja19taXNhbGlnbm1lbnQobW9kKSkNCj4gLQkJZ290 byBvdXRfbWlzYWxpZ25lZDsNCj4gLQ0KPiAgIAltb2R1bGVfZW5hYmxlX3JvKG1vZCwgZmFsc2Up Ow0KPiAgIAltb2R1bGVfZW5hYmxlX254KG1vZCk7DQo+ICAgCW1vZHVsZV9lbmFibGVfeChtb2Qp Ow0KPiBAQCAtMjY0NCw4ICsyNjg1LDYgQEAgc3RhdGljIGludCBjb21wbGV0ZV9mb3JtYXRpb24o c3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAgIA0KPiAgIAly ZXR1cm4gMDsNCj4gICANCj4gLW91dF9taXNhbGlnbmVkOg0KPiAtCWVyciA9IC1FSU5WQUw7DQo+ ICAgb3V0Og0KPiAgIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7DQo+ICAgCXJldHVybiBl cnI7DQo+IEBAIC0yOTA5LDcgKzI5NDgsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1 Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsDQo+ICAgCW11dGV4 X3VubG9jaygmbW9kdWxlX211dGV4KTsNCj4gICAgZnJlZV9tb2R1bGU6DQo+ICAgCS8qIEZyZWUg bG9jay1jbGFzc2VzOyByZWxpZXMgb24gdGhlIHByZWNlZGluZyBzeW5jX3JjdSgpICovDQo+IC0J bG9ja2RlcF9mcmVlX2tleV9yYW5nZShtb2QtPmRhdGFfbGF5b3V0LmJhc2UsIG1vZC0+ZGF0YV9s YXlvdXQuc2l6ZSk7DQo+ICsJZm9yX2NsYXNzX21vZF9tZW1fdHlwZSh0eXBlLCBjb3JlKSB7DQo+ ICsJCWxvY2tkZXBfZnJlZV9rZXlfcmFuZ2UobW9kLT5tZW1bdHlwZV0uYmFzZSwNCj4gKwkJCQkg ICAgICAgbW9kLT5tZW1bdHlwZV0uc2l6ZSk7DQo+ICsJfQ0KPiAgIA0KPiAgIAltb2R1bGVfZGVh bGxvY2F0ZShtb2QsIGluZm8pOw0KPiAgICBmcmVlX2NvcHk6DQo+IEBAIC0zMDYwLDIwICszMTAy LDIxIEBAIGJvb2wgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQ0KPiAgIHN0 cnVjdCBtb2R1bGUgKl9fbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQ0KPiAgIHsN Cj4gICAJc3RydWN0IG1vZHVsZSAqbW9kOw0KPiAtCXN0cnVjdCBtb2RfdHJlZV9yb290ICp0cmVl Ow0KPiAgIA0KPiAgIAlpZiAoYWRkciA+PSBtb2RfdHJlZS5hZGRyX21pbiAmJiBhZGRyIDw9IG1v ZF90cmVlLmFkZHJfbWF4KQ0KPiAtCQl0cmVlID0gJm1vZF90cmVlOw0KPiArCQlnb3RvIGxvb2t1 cDsNCj4gKw0KPiAgICNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RVTEVTX0RBVEFfSU5fVk1B TExPQw0KPiAtCWVsc2UgaWYgKGFkZHIgPj0gbW9kX2RhdGFfdHJlZS5hZGRyX21pbiAmJiBhZGRy IDw9IG1vZF9kYXRhX3RyZWUuYWRkcl9tYXgpDQo+IC0JCXRyZWUgPSAmbW9kX2RhdGFfdHJlZTsN Cj4gKwlpZiAoYWRkciA+PSBtb2RfdHJlZS5kYXRhX2FkZHJfbWluICYmIGFkZHIgPD0gbW9kX3Ry ZWUuZGF0YV9hZGRyX21heCkNCj4gKwkJZ290byBsb29rdXA7DQo+ICAgI2VuZGlmDQo+IC0JZWxz ZQ0KPiArDQo+ICAgCXJldHVybiBOVUxMOw0KPiAgIA0KPiArbG9va3VwOg0KPiAgIAltb2R1bGVf YXNzZXJ0X211dGV4X29yX3ByZWVtcHQoKTsNCj4gICANCj4gLQltb2QgPSBtb2RfZmluZChhZGRy LCB0cmVlKTsNCj4gKwltb2QgPSBtb2RfZmluZChhZGRyLCAmbW9kX3RyZWUpOw0KPiAgIAlpZiAo bW9kKSB7DQo+ICAgCQlCVUdfT04oIXdpdGhpbl9tb2R1bGUoYWRkciwgbW9kKSk7DQo+ICAgCQlp ZiAobW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfVU5GT1JNRUQpDQo+IEBAIC0zMTEzLDggKzMx NTYsOCBAQCBzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9u ZyBhZGRyKQ0KPiAgIAlzdHJ1Y3QgbW9kdWxlICptb2QgPSBfX21vZHVsZV9hZGRyZXNzKGFkZHIp Ow0KPiAgIAlpZiAobW9kKSB7DQo+ICAgCQkvKiBNYWtlIHN1cmUgaXQncyB3aXRoaW4gdGhlIHRl eHQgc2VjdGlvbi4gKi8NCj4gLQkJaWYgKCF3aXRoaW4oYWRkciwgbW9kLT5pbml0X2xheW91dC5i YXNlLCBtb2QtPmluaXRfbGF5b3V0LnRleHRfc2l6ZSkNCj4gLQkJICAgICYmICF3aXRoaW4oYWRk ciwgbW9kLT5jb3JlX2xheW91dC5iYXNlLCBtb2QtPmNvcmVfbGF5b3V0LnRleHRfc2l6ZSkpDQo+ ICsJCWlmICghd2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSAmJg0K PiArCQkgICAgIXdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfSU5JVF9URVhU KSkNCj4gICAJCQltb2QgPSBOVUxMOw0KPiAgIAl9DQo+ICAgCXJldHVybiBtb2Q7DQo+IGRpZmYg LS1naXQgYS9rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jIGIva2VybmVsL21vZHVsZS9wcm9jZnMuYw0K PiBpbmRleCBjZjViOWYxZTZlYzQuLjBhNDg0MWU4OGFkYiAxMDA2NDQNCj4gLS0tIGEva2VybmVs L21vZHVsZS9wcm9jZnMuYw0KPiArKysgYi9rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jDQo+IEBAIC02 Miw2ICs2MiwxNSBAQCBzdGF0aWMgdm9pZCBtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lk ICpwKQ0KPiAgIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7DQo+ICAgfQ0KPiAgIA0KPiAr c3RhdGljIHVuc2lnbmVkIGludCBtb2R1bGVfdG90YWxfc2l6ZShzdHJ1Y3QgbW9kdWxlICptb2Qp DQo+ICt7DQo+ICsJaW50IHNpemUgPSAwOw0KPiArDQo+ICsJZm9yX2VhY2hfbW9kX21lbV90eXBl KHR5cGUpDQo+ICsJCXNpemUgKz0gbW9kLT5tZW1bdHlwZV0uc2l6ZTsNCj4gKwlyZXR1cm4gc2l6 ZTsNCj4gK30NCj4gKw0KPiAgIHN0YXRpYyBpbnQgbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwg dm9pZCAqcCkNCj4gICB7DQo+ICAgCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGxpc3RfZW50cnkocCwg c3RydWN0IG1vZHVsZSwgbGlzdCk7DQo+IEBAIC03MywxMCArODIsNyBAQCBzdGF0aWMgaW50IG1f c2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApDQo+ICAgCWlmIChtb2QtPnN0YXRlID09 IE1PRFVMRV9TVEFURV9VTkZPUk1FRCkNCj4gICAJCXJldHVybiAwOw0KPiAgIA0KPiAtCXNpemUg PSBtb2QtPmluaXRfbGF5b3V0LnNpemUgKyBtb2QtPmNvcmVfbGF5b3V0LnNpemU7DQo+IC0jaWZk ZWYgQ09ORklHX0FSQ0hfV0FOVFNfTU9EVUxFU19EQVRBX0lOX1ZNQUxMT0MNCj4gLQlzaXplICs9 IG1vZC0+ZGF0YV9sYXlvdXQuc2l6ZTsNCj4gLSNlbmRpZg0KPiArCXNpemUgPSBtb2R1bGVfdG90 YWxfc2l6ZShtb2QpOw0KPiAgIAlzZXFfcHJpbnRmKG0sICIlcyAldSIsIG1vZC0+bmFtZSwgc2l6 ZSk7DQo+ICAgCXByaW50X3VubG9hZF9pbmZvKG0sIG1vZCk7DQo+ICAgDQo+IEBAIC04Niw3ICs5 Miw3IEBAIHN0YXRpYyBpbnQgbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkNCj4g ICAJCSAgIG1vZC0+c3RhdGUgPT0gTU9EVUxFX1NUQVRFX0NPTUlORyA/ICJMb2FkaW5nIiA6DQo+ ICAgCQkgICAiTGl2ZSIpOw0KPiAgIAkvKiBVc2VkIGJ5IG9wcm9maWxlIGFuZCBvdGhlciBzaW1p bGFyIHRvb2xzLiAqLw0KPiAtCXZhbHVlID0gbS0+cHJpdmF0ZSA/IE5VTEwgOiBtb2QtPmNvcmVf bGF5b3V0LmJhc2U7DQo+ICsJdmFsdWUgPSBtLT5wcml2YXRlID8gTlVMTCA6IG1vZC0+bWVtW01P RF9URVhUXS5iYXNlOw0KPiAgIAlzZXFfcHJpbnRmKG0sICIgMHglcHgiLCB2YWx1ZSk7DQo+ICAg DQo+ICAgCS8qIFRhaW50cyBpbmZvICovDQo+IGRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL3N0 cmljdF9yd3guYyBiL2tlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jDQo+IGluZGV4IDE0ZmJlYTY2 ZjEyZi4uMmU3OWE3N2Y0MGViIDEwMDY0NA0KPiAtLS0gYS9rZXJuZWwvbW9kdWxlL3N0cmljdF9y d3guYw0KPiArKysgYi9rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYw0KPiBAQCAtMTEsODIgKzEx LDI2IEBADQo+ICAgI2luY2x1ZGUgPGxpbnV4L3NldF9tZW1vcnkuaD4NCj4gICAjaW5jbHVkZSAi aW50ZXJuYWwuaCINCj4gICANCj4gLS8qDQo+IC0gKiBMS00gUk8vTlggcHJvdGVjdGlvbjogcHJv dGVjdCBtb2R1bGUncyB0ZXh0L3JvLWRhdGENCj4gLSAqIGZyb20gbW9kaWZpY2F0aW9uIGFuZCBh bnkgZGF0YSBmcm9tIGV4ZWN1dGlvbi4NCj4gLSAqDQo+IC0gKiBHZW5lcmFsIGxheW91dCBvZiBt b2R1bGUgaXM6DQo+IC0gKiAgICAgICAgICBbdGV4dF0gW3JlYWQtb25seS1kYXRhXSBbcm8tYWZ0 ZXItaW5pdF0gW3dyaXRhYmxlIGRhdGFdDQo+IC0gKiB0ZXh0X3NpemUgLS0tLS1eICAgICAgICAg ICAgICAgIF4gICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXg0KPiAtICogcm9fc2l6ZSAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwN Cj4gLSAqIHJvX2FmdGVyX2luaXRfc2l6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwg ICAgICAgICAgICAgICB8DQo+IC0gKiBzaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KPiAtICoNCj4gLSAqIFRoZXNlIHZhbHVl cyBhcmUgYWx3YXlzIHBhZ2UtYWxpZ25lZCAoYXMgaXMgYmFzZSkgd2hlbg0KPiAtICogQ09ORklH X1NUUklDVF9NT0RVTEVfUldYIGlzIHNldC4NCj4gLSAqLw0KPiArc3RhdGljIHZvaWQgbW9kdWxl X3NldF9tZW1vcnkoDQo+ICsJY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1f dHlwZSB0eXBlLA0KPiArCWludCAoKnNldF9tZW1vcnkpKHVuc2lnbmVkIGxvbmcgc3RhcnQsIGlu dCBudW1fcGFnZXMpKQ0KPiArew0KPiArCWNvbnN0IHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2Rf bWVtID0gJm1vZC0+bWVtW3R5cGVdOw0KPiArDQo+ICsJc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1z KG1vZF9tZW0tPmJhc2UpOw0KPiArCXNldF9tZW1vcnkoKHVuc2lnbmVkIGxvbmcpbW9kX21lbS0+ YmFzZSwgbW9kX21lbS0+c2l6ZSA+PiBQQUdFX1NISUZUKTsNCj4gK30NCj4gICANCj4gICAvKg0K PiAgICAqIFNpbmNlIHNvbWUgYXJjaGVzIGFyZSBtb3ZpbmcgdG93YXJkcyBQQUdFX0tFUk5FTCBt b2R1bGUgYWxsb2NhdGlvbnMgaW5zdGVhZA0KPiAtICogb2YgUEFHRV9LRVJORUxfRVhFQywga2Vl cCBmcm9iX3RleHQoKSBhbmQgbW9kdWxlX2VuYWJsZV94KCkgaW5kZXBlbmRlbnQgb2YNCj4gKyAq IG9mIFBBR0VfS0VSTkVMX0VYRUMsIGtlZXAgbW9kdWxlX2VuYWJsZV94KCkgaW5kZXBlbmRlbnQg b2YNCj4gICAgKiBDT05GSUdfU1RSSUNUX01PRFVMRV9SV1ggYmVjYXVzZSB0aGV5IGFyZSBuZWVk ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlDQo+ICAgICogYXJlIHN0cmljdC4NCj4gICAgKi8N Cj4gLXN0YXRpYyB2b2lkIGZyb2JfdGV4dChjb25zdCBzdHJ1Y3QgbW9kdWxlX2xheW91dCAqbGF5 b3V0LA0KPiAtCQkgICAgICBpbnQgKCpzZXRfbWVtb3J5KSh1bnNpZ25lZCBsb25nIHN0YXJ0LCBp bnQgbnVtX3BhZ2VzKSkNCj4gLXsNCj4gLQlzZXRfbWVtb3J5KCh1bnNpZ25lZCBsb25nKWxheW91 dC0+YmFzZSwNCj4gLQkJICAgUEFHRV9BTElHTihsYXlvdXQtPnRleHRfc2l6ZSkgPj4gUEFHRV9T SElGVCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIGZyb2Jfcm9kYXRhKGNvbnN0IHN0cnVj dCBtb2R1bGVfbGF5b3V0ICpsYXlvdXQsDQo+IC0JCSBpbnQgKCpzZXRfbWVtb3J5KSh1bnNpZ25l ZCBsb25nIHN0YXJ0LCBpbnQgbnVtX3BhZ2VzKSkNCj4gLXsNCj4gLQlzZXRfbWVtb3J5KCh1bnNp Z25lZCBsb25nKWxheW91dC0+YmFzZSArIGxheW91dC0+dGV4dF9zaXplLA0KPiAtCQkgICAobGF5 b3V0LT5yb19zaXplIC0gbGF5b3V0LT50ZXh0X3NpemUpID4+IFBBR0VfU0hJRlQpOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgdm9pZCBmcm9iX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVs ZV9sYXlvdXQgKmxheW91dCwNCj4gLQkJCWludCAoKnNldF9tZW1vcnkpKHVuc2lnbmVkIGxvbmcg c3RhcnQsIGludCBudW1fcGFnZXMpKQ0KPiAtew0KPiAtCXNldF9tZW1vcnkoKHVuc2lnbmVkIGxv bmcpbGF5b3V0LT5iYXNlICsgbGF5b3V0LT5yb19zaXplLA0KPiAtCQkgICAobGF5b3V0LT5yb19h ZnRlcl9pbml0X3NpemUgLSBsYXlvdXQtPnJvX3NpemUpID4+IFBBR0VfU0hJRlQpOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgdm9pZCBmcm9iX3dyaXRhYmxlX2RhdGEoY29uc3Qgc3RydWN0IG1vZHVs ZV9sYXlvdXQgKmxheW91dCwNCj4gLQkJCWludCAoKnNldF9tZW1vcnkpKHVuc2lnbmVkIGxvbmcg c3RhcnQsIGludCBudW1fcGFnZXMpKQ0KPiAtew0KPiAtCXNldF9tZW1vcnkoKHVuc2lnbmVkIGxv bmcpbGF5b3V0LT5iYXNlICsgbGF5b3V0LT5yb19hZnRlcl9pbml0X3NpemUsDQo+IC0JCSAgIChs YXlvdXQtPnNpemUgLSBsYXlvdXQtPnJvX2FmdGVyX2luaXRfc2l6ZSkgPj4gUEFHRV9TSElGVCk7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBib29sIGxheW91dF9jaGVja19taXNhbGlnbm1lbnQoY29u c3Qgc3RydWN0IG1vZHVsZV9sYXlvdXQgKmxheW91dCkNCj4gLXsNCj4gLQlyZXR1cm4gV0FSTl9P TighUEFHRV9BTElHTkVEKGxheW91dC0+YmFzZSkpIHx8DQo+IC0JICAgICAgIFdBUk5fT04oIVBB R0VfQUxJR05FRChsYXlvdXQtPnRleHRfc2l6ZSkpIHx8DQo+IC0JICAgICAgIFdBUk5fT04oIVBB R0VfQUxJR05FRChsYXlvdXQtPnJvX3NpemUpKSB8fA0KPiAtCSAgICAgICBXQVJOX09OKCFQQUdF X0FMSUdORUQobGF5b3V0LT5yb19hZnRlcl9pbml0X3NpemUpKSB8fA0KPiAtCSAgICAgICBXQVJO X09OKCFQQUdFX0FMSUdORUQobGF5b3V0LT5zaXplKSk7DQo+IC19DQo+IC0NCj4gLWJvb2wgbW9k dWxlX2NoZWNrX21pc2FsaWdubWVudChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IC17DQo+ IC0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkpDQo+IC0JCXJldHVy biBmYWxzZTsNCj4gLQ0KPiAtCXJldHVybiBsYXlvdXRfY2hlY2tfbWlzYWxpZ25tZW50KCZtb2Qt PmNvcmVfbGF5b3V0KSB8fA0KPiAtCSAgICAgICBsYXlvdXRfY2hlY2tfbWlzYWxpZ25tZW50KCZt b2QtPmRhdGFfbGF5b3V0KSB8fA0KPiAtCSAgICAgICBsYXlvdXRfY2hlY2tfbWlzYWxpZ25tZW50 KCZtb2QtPmluaXRfbGF5b3V0KTsNCj4gLX0NCj4gLQ0KPiAgIHZvaWQgbW9kdWxlX2VuYWJsZV94 KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gICB7DQo+IC0JaWYgKCFQQUdFX0FMSUdORUQo bW9kLT5jb3JlX2xheW91dC5iYXNlKSB8fA0KPiAtCSAgICAhUEFHRV9BTElHTkVEKG1vZC0+aW5p dF9sYXlvdXQuYmFzZSkpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCWZyb2JfdGV4dCgmbW9kLT5j b3JlX2xheW91dCwgc2V0X21lbW9yeV94KTsNCj4gLQlmcm9iX3RleHQoJm1vZC0+aW5pdF9sYXlv dXQsIHNldF9tZW1vcnlfeCk7DQo+ICsJZm9yX2NsYXNzX21vZF9tZW1fdHlwZSh0eXBlLCB0ZXh0 KQ0KPiArCQltb2R1bGVfc2V0X21lbW9yeShtb2QsIHR5cGUsIHNldF9tZW1vcnlfeCk7DQo+ICAg fQ0KPiAgIA0KPiAgIHZvaWQgbW9kdWxlX2VuYWJsZV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICpt b2QsIGJvb2wgYWZ0ZXJfaW5pdCkNCj4gQEAgLTk4LDE2ICs0MiwxMyBAQCB2b2lkIG1vZHVsZV9l bmFibGVfcm8oY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIGFmdGVyX2luaXQpDQo+ICAg CQlyZXR1cm47DQo+ICAgI2VuZGlmDQo+ICAgDQo+IC0Jc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1z KG1vZC0+Y29yZV9sYXlvdXQuYmFzZSk7DQo+IC0Jc2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKG1v ZC0+aW5pdF9sYXlvdXQuYmFzZSk7DQo+IC0JZnJvYl90ZXh0KCZtb2QtPmNvcmVfbGF5b3V0LCBz ZXRfbWVtb3J5X3JvKTsNCj4gLQ0KPiAtCWZyb2Jfcm9kYXRhKCZtb2QtPmRhdGFfbGF5b3V0LCBz ZXRfbWVtb3J5X3JvKTsNCj4gLQlmcm9iX3RleHQoJm1vZC0+aW5pdF9sYXlvdXQsIHNldF9tZW1v cnlfcm8pOw0KPiAtCWZyb2Jfcm9kYXRhKCZtb2QtPmluaXRfbGF5b3V0LCBzZXRfbWVtb3J5X3Jv KTsNCj4gKwltb2R1bGVfc2V0X21lbW9yeShtb2QsIE1PRF9URVhULCBzZXRfbWVtb3J5X3JvKTsN Cj4gKwltb2R1bGVfc2V0X21lbW9yeShtb2QsIE1PRF9JTklUX1RFWFQsIHNldF9tZW1vcnlfcm8p Ow0KPiArCW1vZHVsZV9zZXRfbWVtb3J5KG1vZCwgTU9EX1JPREFUQSwgc2V0X21lbW9yeV9ybyk7 DQo+ICsJbW9kdWxlX3NldF9tZW1vcnkobW9kLCBNT0RfSU5JVF9ST0RBVEEsIHNldF9tZW1vcnlf cm8pOw0KPiAgIA0KPiAgIAlpZiAoYWZ0ZXJfaW5pdCkNCj4gLQkJZnJvYl9yb19hZnRlcl9pbml0 KCZtb2QtPmRhdGFfbGF5b3V0LCBzZXRfbWVtb3J5X3JvKTsNCj4gKwkJbW9kdWxlX3NldF9tZW1v cnkobW9kLCBNT0RfUk9fQUZURVJfSU5JVCwgc2V0X21lbW9yeV9ybyk7DQo+ICAgfQ0KPiAgIA0K PiAgIHZvaWQgbW9kdWxlX2VuYWJsZV9ueChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IEBA IC0xMTUsMTEgKzU2LDggQEAgdm9pZCBtb2R1bGVfZW5hYmxlX254KGNvbnN0IHN0cnVjdCBtb2R1 bGUgKm1vZCkNCj4gICAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19TVFJJQ1RfTU9EVUxFX1JXWCkp DQo+ICAgCQlyZXR1cm47DQo+ICAgDQo+IC0JZnJvYl9yb2RhdGEoJm1vZC0+ZGF0YV9sYXlvdXQs IHNldF9tZW1vcnlfbngpOw0KPiAtCWZyb2Jfcm9fYWZ0ZXJfaW5pdCgmbW9kLT5kYXRhX2xheW91 dCwgc2V0X21lbW9yeV9ueCk7DQo+IC0JZnJvYl93cml0YWJsZV9kYXRhKCZtb2QtPmRhdGFfbGF5 b3V0LCBzZXRfbWVtb3J5X254KTsNCj4gLQlmcm9iX3JvZGF0YSgmbW9kLT5pbml0X2xheW91dCwg c2V0X21lbW9yeV9ueCk7DQo+IC0JZnJvYl93cml0YWJsZV9kYXRhKCZtb2QtPmluaXRfbGF5b3V0 LCBzZXRfbWVtb3J5X254KTsNCj4gKwlmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGRhdGEp DQo+ICsJCW1vZHVsZV9zZXRfbWVtb3J5KG1vZCwgdHlwZSwgc2V0X21lbW9yeV9ueCk7DQo+ICAg fQ0KPiAgIA0KPiAgIGludCBtb2R1bGVfZW5mb3JjZV9yd3hfc2VjdGlvbnMoRWxmX0VoZHIgKmhk ciwgRWxmX1NoZHIgKnNlY2hkcnMsDQo+IGRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL3RyZWVf bG9va3VwLmMgYi9rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmMNCj4gaW5kZXggOGVjNWNmZDYw NDk2Li4yNzcxOTc5NzdkNDMgMTAwNjQ0DQo+IC0tLSBhL2tlcm5lbC9tb2R1bGUvdHJlZV9sb29r dXAuYw0KPiArKysgYi9rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmMNCj4gQEAgLTIxLDE2ICsy MSwxNiBAQA0KPiAgIA0KPiAgIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBf X21vZF90cmVlX3ZhbChzdHJ1Y3QgbGF0Y2hfdHJlZV9ub2RlICpuKQ0KPiAgIHsNCj4gLQlzdHJ1 Y3QgbW9kdWxlX2xheW91dCAqbGF5b3V0ID0gY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVf bGF5b3V0LCBtdG4ubm9kZSk7DQo+ICsJc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBj b250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9tZW1vcnksIG10bi5ub2RlKTsNCj4gICANCj4g LQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpbGF5b3V0LT5iYXNlOw0KPiArCXJldHVybiAodW5zaWdu ZWQgbG9uZyltb2RfbWVtLT5iYXNlOw0KPiAgIH0NCj4gICANCj4gICBzdGF0aWMgX19hbHdheXNf aW5saW5lIHVuc2lnbmVkIGxvbmcgX19tb2RfdHJlZV9zaXplKHN0cnVjdCBsYXRjaF90cmVlX25v ZGUgKm4pDQo+ICAgew0KPiAtCXN0cnVjdCBtb2R1bGVfbGF5b3V0ICpsYXlvdXQgPSBjb250YWlu ZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9sYXlvdXQsIG10bi5ub2RlKTsNCj4gKwlzdHJ1Y3QgbW9k dWxlX21lbW9yeSAqbW9kX21lbSA9IGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgbW9kdWxlX21lbW9y eSwgbXRuLm5vZGUpOw0KPiAgIA0KPiAtCXJldHVybiAodW5zaWduZWQgbG9uZylsYXlvdXQtPnNp emU7DQo+ICsJcmV0dXJuICh1bnNpZ25lZCBsb25nKW1vZF9tZW0tPnNpemU7DQo+ICAgfQ0KPiAg IA0KPiAgIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbA0KPiBAQCAtNzcsMzIgKzc3LDI3IEBA IHN0YXRpYyB2b2lkIF9fbW9kX3RyZWVfcmVtb3ZlKHN0cnVjdCBtb2RfdHJlZV9ub2RlICpub2Rl LCBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCAqDQo+ICAgICovDQo+ICAgdm9pZCBtb2RfdHJlZV9pbnNl cnQoc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAgIHsNCj4gLQltb2QtPmNvcmVfbGF5b3V0Lm10bi5t b2QgPSBtb2Q7DQo+IC0JbW9kLT5pbml0X2xheW91dC5tdG4ubW9kID0gbW9kOw0KPiAtDQo+IC0J X19tb2RfdHJlZV9pbnNlcnQoJm1vZC0+Y29yZV9sYXlvdXQubXRuLCAmbW9kX3RyZWUpOw0KPiAt CWlmIChtb2QtPmluaXRfbGF5b3V0LnNpemUpDQo+IC0JCV9fbW9kX3RyZWVfaW5zZXJ0KCZtb2Qt PmluaXRfbGF5b3V0Lm10biwgJm1vZF90cmVlKTsNCj4gLQ0KPiAtI2lmZGVmIENPTkZJR19BUkNI X1dBTlRTX01PRFVMRVNfREFUQV9JTl9WTUFMTE9DDQo+IC0JbW9kLT5kYXRhX2xheW91dC5tdG4u bW9kID0gbW9kOw0KPiAtCV9fbW9kX3RyZWVfaW5zZXJ0KCZtb2QtPmRhdGFfbGF5b3V0Lm10biwg Jm1vZF9kYXRhX3RyZWUpOw0KPiAtI2VuZGlmDQo+ICsJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5 cGUpIHsNCj4gKwkJbW9kLT5tZW1bdHlwZV0ubXRuLm1vZCA9IG1vZDsNCj4gKwkJaWYgKG1vZC0+ bWVtW3R5cGVdLnNpemUpDQo+ICsJCQlfX21vZF90cmVlX2luc2VydCgmbW9kLT5tZW1bdHlwZV0u bXRuLCAmbW9kX3RyZWUpOw0KPiArCX0NCj4gICB9DQo+ICAgDQo+ICAgdm9pZCBtb2RfdHJlZV9y ZW1vdmVfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICAgew0KPiAtCWlmIChtb2QtPmluaXRf bGF5b3V0LnNpemUpDQo+IC0JCV9fbW9kX3RyZWVfcmVtb3ZlKCZtb2QtPmluaXRfbGF5b3V0Lm10 biwgJm1vZF90cmVlKTsNCj4gKwlmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGluaXQpIHsN Cj4gKwkJaWYgKG1vZC0+bWVtW3R5cGVdLnNpemUpDQo+ICsJCQlfX21vZF90cmVlX3JlbW92ZSgm bW9kLT5tZW1bdHlwZV0ubXRuLCAmbW9kX3RyZWUpOw0KPiArCX0NCj4gICB9DQo+ICAgDQo+ICAg dm9pZCBtb2RfdHJlZV9yZW1vdmUoc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAgIHsNCj4gLQlfX21v ZF90cmVlX3JlbW92ZSgmbW9kLT5jb3JlX2xheW91dC5tdG4sICZtb2RfdHJlZSk7DQo+IC0JbW9k X3RyZWVfcmVtb3ZlX2luaXQobW9kKTsNCj4gLSNpZmRlZiBDT05GSUdfQVJDSF9XQU5UU19NT0RV TEVTX0RBVEFfSU5fVk1BTExPQw0KPiAtCV9fbW9kX3RyZWVfcmVtb3ZlKCZtb2QtPmRhdGFfbGF5 b3V0Lm10biwgJm1vZF9kYXRhX3RyZWUpOw0KPiAtI2VuZGlmDQo+ICsJZm9yX2VhY2hfbW9kX21l bV90eXBlKHR5cGUpIHsNCj4gKwkJaWYgKG1vZC0+bWVtW3R5cGVdLnNpemUpDQo+ICsJCQlfX21v ZF90cmVlX3JlbW92ZSgmbW9kLT5tZW1bdHlwZV0ubXRuLCAmbW9kX3RyZWUpOw0KPiArCX0NCj4g ICB9DQo+ICAgDQo+ICAgc3RydWN0IG1vZHVsZSAqbW9kX2ZpbmQodW5zaWduZWQgbG9uZyBhZGRy LCBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCAqdHJlZSkNCg==