From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2067.outbound.protection.outlook.com [40.107.249.67]) by sourceware.org (Postfix) with ESMTPS id B71F83852234 for ; Mon, 21 Nov 2022 11:14:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B71F83852234 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zcbq6eAtZGL/UVsZKZYcd9V1ILVHWwnAuKe6fRPTKsM=; b=KFC+8sBkMR082THsf073fHpldisjUuKZIMdjztu0gKjsTp4H/+UicWuu11Oz2GicNMtrS1vxfY0WVkyB1QRdZsr2PdjR4vGcdnmYN1pgHl+lRYV5Qz3fEQX2aPBbbepQo2rNC5diTUJ+d0tR0ggC/nJz/Q282RlDGBEhBw9ei5w= Received: from AM6P192CA0018.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:83::31) by GV2PR08MB8050.eurprd08.prod.outlook.com (2603:10a6:150:77::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.13; Mon, 21 Nov 2022 11:14:18 +0000 Received: from VI1EUR03FT038.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:83:cafe::19) by AM6P192CA0018.outlook.office365.com (2603:10a6:209:83::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15 via Frontend Transport; Mon, 21 Nov 2022 11:14:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VI1EUR03FT038.mail.protection.outlook.com (100.127.145.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Mon, 21 Nov 2022 11:14:18 +0000 Received: ("Tessian outbound 0800d254cb3b:v130"); Mon, 21 Nov 2022 11:14:17 +0000 X-CR-MTA-TID: 64aa7808 Received: from 30187f93edd5.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 0EEC10A5-2AEF-4343-867B-9E697A15041E.1; Mon, 21 Nov 2022 11:14:11 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 30187f93edd5.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 21 Nov 2022 11:14:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S6vBgLHWPOLDakQKlSFLXr93qPllLiyqTFBP5ThAhBuFrLP4WW9TDv66z96z3PgHhRmV4OebiEgYI+gqfEl35h1HPw3KztnjKuyZoMUssL4enpIOERZ8iWVAWMk0EgEEpmZC6RFFhBQzq50cOJX2W3IFaVelUhDG1TtzWirHa6fd4oX2+fMPLVh+QHnYnoaMZoEPwVwB/DHvbHRXBRLvkrnP3kK1vY2wIz9BJMVXEC7KyJZKie1k4OV1Y0/XK5C1EeAesMLqxPukg8J1vUnt7t4ejlJsxT/GVJOzXbpQ9fho1eES8CZsesSYPve1b9CrgLTHkhmy9YKXKshveoKXMQ== 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=Zcbq6eAtZGL/UVsZKZYcd9V1ILVHWwnAuKe6fRPTKsM=; b=ewUBVqQnSua9+4eESz8LUF8QDN8EzJohNdPrckLPBZIOCTBg890K6byRPkFykYKqYF7kuCSrv5kTG9iceqbloB1d5UJ3NKyqjLmq9VYrkzrjXwGTrtgoudKYS3ojrq0wWh0euyV8l2VDha2g9wjLI3hebgn5lXm20vm+3plS59jn3cn6ew8CJ4jABDhWZaWBmMFnoV+MBMKsjP6mTuYJBtm7yy+XxkK5KOzXWNP3SO2NoTXBp0FJHIKa/pnySz47CTuKEqUF9PGMLxl5Yst4DgKON2ao5ahTVPEDQMnnH6dY1fwTaRuLPWOL6IKNhg5w+3nwSJVL8QGmtEi0FlkbrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zcbq6eAtZGL/UVsZKZYcd9V1ILVHWwnAuKe6fRPTKsM=; b=KFC+8sBkMR082THsf073fHpldisjUuKZIMdjztu0gKjsTp4H/+UicWuu11Oz2GicNMtrS1vxfY0WVkyB1QRdZsr2PdjR4vGcdnmYN1pgHl+lRYV5Qz3fEQX2aPBbbepQo2rNC5diTUJ+d0tR0ggC/nJz/Q282RlDGBEhBw9ei5w= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by GV2PR08MB8052.eurprd08.prod.outlook.com (2603:10a6:150:75::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.13; Mon, 21 Nov 2022 11:14:05 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5857.017; Mon, 21 Nov 2022 11:14:04 +0000 From: Tamar Christina To: Thomas Neumann , "gcc-patches@gcc.gnu.org" , Jason Merrill CC: Florian Weimer , Jakub Jelinek , Jonathan Wakely Subject: RE: [PATCH v4] eliminate mutex in fast path of __register_frame Thread-Topic: [PATCH v4] eliminate mutex in fast path of __register_frame Thread-Index: AQHYybXuoy/s60VItkKNGPtivI13rq5Jn/vQ Date: Mon, 21 Nov 2022 11:14:04 +0000 Message-ID: References: <2a4776b9-9271-bb3c-a626-d5ec22dae6f3@in.tum.de> In-Reply-To: <2a4776b9-9271-bb3c-a626-d5ec22dae6f3@in.tum.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 6844E6A994964142B0FE7298FEB3F2DC.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|GV2PR08MB8052:EE_|VI1EUR03FT038:EE_|GV2PR08MB8050:EE_ X-MS-Office365-Filtering-Correlation-Id: 32ebab0a-aab0-4d52-5c1e-08dacbb1884d x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: haHt2Q4IjBpPOSOWo5zNwYgQCJ0fltOkkLdThxfqHblI/usZXBodOjAUZtgcbpnogj0EULPrDMAE4oNUcECedp2RN2aikh9RQ2+ZkjM+HCkArlDFjzEtEvWqrHLxcTziY1XVHPiG+ZbmA+pKiu4aw5XKSymTXvbEDh/N8pyqNxTXTc9Eg7Wo7+GEqgJsoQ6Wc2Smzn1LAMeFNWzfae3Pvd6PZDG/QwMzVH8g5T+TBmcybSxEktY+lD2fWgw2ZFZ4430+rQmrL5XQKIKuYCMJ8SF/lx3H/CwGlInAL+Y5AFMV0au/20bEb5XhGthcHsKEUDm0FeARDEE+G4ObkiEU+btk7mtKe85CkJNwTm8TM13iXi+LdrCDECJC2hkwdUULLYZKRCqZ6O9vDYWotRdUvHVo7mianWjCMznw7hwZK0BabelIFETlor0dI0gAuJ0dkS6FOoGUzvYMGeyzWL1euty0Ignk5wBmH9izp9xfH879jquHThspl5kw+LTHbFFp9ZLOY4ZDBGEW8YtwhYTL513YE45eGE3YAQHJtxVXZDG2oPXovg+er3LtH49Qg2HuuIF18hcTEEOjfF/164r0iOuLlyZFiBKBhKS5R53k7xrDi9VGrFYo4pDMuxoaudeuYgaCiTS5VFfmef8uxsFp8dWx/l4kFlZX5S21LnIlr3S3JLtl1w2UcYj9ljG4nNTHA0m5A9QlW3wyZSVTThby/9mylU/kXhICGOuRiyXdQWCoWnuUltg/luw2XpLtITPFXN4OOjXGm6eWoZ5fUNmJTIA9XHMjlssR4EJOr/KQZPA= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(346002)(396003)(39860400002)(366004)(451199015)(76116006)(66476007)(66556008)(64756008)(66446008)(66946007)(38070700005)(8676002)(8936002)(4326008)(52536014)(83380400001)(5660300002)(41300700001)(7696005)(6506007)(966005)(9686003)(186003)(55016003)(53546011)(26005)(478600001)(54906003)(110136005)(316002)(122000001)(71200400001)(38100700002)(86362001)(2906002)(33656002)(30864003)(2004002)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8052 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a09522fa-fb6f-41d2-8894-08dacbb18003 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vGmmBXjzHaEaHVEPT9BvlcsQlQHSvF7oof9rO5A9RQFVIWak968GyICmshwprMuYYhRyyGwAPjALEEAOxu2GXFBI8pTwddb7xKXo/MLQYCtddFSpkb3OW+9erAdc24f50qLpxa6F862iYcJd37un/dSuHpoyUcvnwyB0K8H3CcuRqmQD3tnoahAFKk8vz9eBOBAF6WngejcGDi2ixDYttxL0xT3CwzEF3o0Zu8HBCEyPS0hgXsp/+FPwy4u21dOVybLhZo8/koBMZnuj6x8G3SeQ+lWvzrvIrzZsLTeCOFGXL7Gv9gC0bqsizNXtX3lknnMFGlQ5E81pILS5KVNOIAnXM36vxN+gSFlIPYrBHybwMzoce7y/JoHxk9FyV6L/wQ0m56MYdTco4SiDh7RZmgYPbMAb1DxGQv3JQlwnXK80dHDds4EsZ6HzGlwprTvBaYlqBo6agUphfj5X5MNAhCCm5WxX+WnF3pO19uYMoHcuPqenqRLHxN5I/nZoqRLQaD2ZSUPSK1tvs8zRgWB2QnnaYiQR7pIQvLtYSHQFxW7Gm/YtbkyOcObEeJi0E5Yjqfp/wF5YqQpCAzDavpKLeB6P6vSRoicw7n/peLwuL6GcCRAI70zArlU6GaeX+EuQFab70PcKYMfLWkQsFejS/DL5ZV30TWE1STkHiAJNo4EWH0H2kyS6NDhaHJKTCr2atEKmmZAuJLoml+BCpCQw/GV4n2DmziK39P/g4UerhXGAep1OerGrlerOxFRBp2rGVfaYBmUvl9MeKTTLNeNvC+yQiqEGk2JpDpdS41+2mYA= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(346002)(136003)(376002)(39860400002)(396003)(451199015)(40470700004)(36840700001)(46966006)(81166007)(40460700003)(86362001)(36860700001)(47076005)(82310400005)(40480700001)(82740400003)(55016003)(356005)(83380400001)(2906002)(478600001)(4326008)(8676002)(316002)(54906003)(70206006)(110136005)(966005)(70586007)(8936002)(5660300002)(41300700001)(52536014)(30864003)(336012)(186003)(53546011)(107886003)(33656002)(9686003)(26005)(6506007)(7696005)(2004002)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Nov 2022 11:14:18.0424 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 32ebab0a-aab0-4d52-5c1e-08dacbb1884d X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VI1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8050 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: SGksDQoNCkkgY291bGRuJ3QgZmluZCBhIEJ1Z3ppbGxhIGFjY291bnQgZm9yIHlvdSBUaG9tYXMs DQoNCkkndmUgYmlzZWN0ZWQgYSBzbG93ZG93biBpbiBzdGFydHVwIHNwZWVkIGZvciBDKysgdG8g dGhpcyBjaGFuZ2UsDQpTZWUgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5j Z2k/aWQ9MTA3Njc1IA0KDQpXaGVuIGR5bmFtaWNhbGx5IGxpbmtpbmcgYSBmYXN0IGVub3VnaCBt YWNoaW5lIGhpZGVzIHRoZSBsYXRlbmN5LCBidXQgd2hlbg0KU3RhdGljYWxseSBsaW5raW5nIG9y IG9uIHNsb3dlciBkZXZpY2VzIHRoaXMgY2hhbmdlIGNhdXNlZCBhIDV4IGluY3JlYXNlIGluDQpJ bnN0cnVjdGlvbiBjb3VudCBhbmQgMnggaW5jcmVhc2UgaW4gY3ljbGUgY291bnQgYmVmb3JlIGdl dHRpbmcgdG8gbWFpbi4NCg0KVGhpcyBoYXMgYmVlbiBxdWl0ZSBub3RpY2VhYmxlIG9uIHNtYWxs ZXIgZGV2aWNlcy4gIElzIHRoZXJlIGEgcmVhc29uIHRoZSBidHJlZQ0KY2FuJ3QgYmUgaW5pdGlh bGl6ZWQgbGF6aWx5PyBJdCBzZWVtcyBhIGJpdCBoYXJzaCB0byBwYXkgdGhlIGNvc3Qgb2YgdW53 aW5kaW5nIGF0DQpzdGFydHVwIGV2ZW4gd2hlbiB5b3UgZG9uJ3QgdGhyb3cgZXhjZXB0aW9ucy4u DQoNCkNoZWVycywNClRhbWFyDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogR2NjLXBhdGNoZXMgPGdjYy1wYXRjaGVzLQ0KPiBib3VuY2VzK3RhbWFyLmNocmlzdGluYT1h cm0uY29tQGdjYy5nbnUub3JnPiBPbiBCZWhhbGYgT2YgVGhvbWFzDQo+IE5ldW1hbm4gdmlhIEdj Yy1wYXRjaGVzDQo+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDE2LCAyMDIyIDExOjIwIEFNDQo+ IFRvOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsgSmFzb24gTWVycmlsbCA8amFzb25AcmVkaGF0 LmNvbT4NCj4gQ2M6IEZsb3JpYW4gV2VpbWVyIDxmd2VpbWVyQHJlZGhhdC5jb20+OyBKYWt1YiBK ZWxpbmVrDQo+IDxqYWt1YkByZWRoYXQuY29tPjsgSm9uYXRoYW4gV2FrZWx5IDxqd2FrZWx5Lmdj Y0BnbWFpbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2NF0gZWxpbWluYXRlIG11dGV4IGluIGZh c3QgcGF0aCBvZiBfX3JlZ2lzdGVyX2ZyYW1lDQo+IA0KPiBUaGUgX19yZWdpc3Rlcl9mcmFtZS9f X2RlcmVnaXN0ZXJfZnJhbWUgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHJlZ2lzdGVyDQo+IHVud2lu ZGluZyBmcmFtZXMgZnJvbSBKSVRlZCBjb2RlIGluIGEgc29ydGVkIGxpc3QuIFRoYXQgbGlzdCBp dHNlbGYgaXMgcHJvdGVjdGVkDQo+IGJ5IG9iamVjdF9tdXRleCwgd2hpY2ggbGVhZHMgdG8gdGVy cmlibGUgcGVyZm9ybWFuY2UgaW4gbXVsdGktdGhyZWFkZWQNCj4gY29kZSBhbmQgaXMgc29tZXdo YXQgZXhwZW5zaXZlIGV2ZW4gaWYgc2luZ2xlLXRocmVhZGVkLg0KPiBUaGVyZSB3YXMgYWxyZWFk eSBhIGZhc3QtcGF0aCB0aGF0IGF2b2lkZWQgdGFraW5nIHRoZSBtdXRleCBpZiBubyBmcmFtZSB3 YXMNCj4gcmVnaXN0ZXJlZCBhdCBhbGwuDQo+IA0KPiBUaGlzIGNvbW1pdCBlbGltaW5hdGVzIGJv dGggdGhlIG11dGV4IGFuZCB0aGUgc29ydGVkIGxpc3QgZnJvbSB0aGUgYXRvbWljDQo+IGZhc3Qg cGF0aCwgYW5kIHJlcGxhY2VzIGl0IHdpdGggYSBidHJlZSB0aGF0IHVzZXMgb3B0aW1pc3RpYyBs b2NrIGNvdXBsaW5nIGR1cmluZw0KPiBsb29rdXAuIFRoaXMgYWxsb3dzIGZvciBmdWxseSBwYXJh bGxlbCB1bndpbmRpbmcgYW5kIGlzIGVzc2VudGlhbCB0byBzY2FsZQ0KPiBleGNlcHRpb24gaGFu ZGxpbmcgdG8gbGFyZ2UgY29yZSBjb3VudHMuDQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHYzOg0KPiAt IEF2b2lkIGNvZGUgZHVwbGljYXRpb24gYnkgYWRkaW5nIHF1ZXJ5IG1vZGUgdG8gY2xhc3NpZnlf b2JqZWN0X292ZXJfZmRlcw0KPiAtIEFkanVzdCBhbGwgY29tbWVudHMgYXMgcmVxdWVzdGVkDQo+ IA0KPiBsaWJnY2MvQ2hhbmdlTG9nOg0KPiANCj4gICAgICAgICAgKiB1bndpbmQtZHcyLWZkZS5j IChyZWxlYXNlX3JlZ2lzdGVyZWRfZnJhbWVzKTogQ2xlYW51cCBhdA0KPiBzaHV0ZG93bi4NCj4g ICAgICAgICAgKF9fcmVnaXN0ZXJfZnJhbWVfaW5mb190YWJsZV9iYXNlcyk6IFVzZSBidHJlZSBp biBhdG9taWMgZmFzdCBwYXRoLg0KPiAgICAgICAgICAoX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9f YmFzZXMpOiBMaWtld2lzZS4NCj4gICAgICAgICAgKF9VbndpbmRfRmluZF9GREUpOiBMaWtld2lz ZS4NCj4gICAgICAgICAgKGJhc2VfZnJvbV9vYmplY3QpOiBNYWtlIHBhcmFtZXRlciBjb25zdC4N Cj4gICAgICAgICAgKGNsYXNzaWZ5X29iamVjdF9vdmVyX2ZkZXMpOiBBZGQgcXVlcnktb25seSBt b2RlLg0KPiAgICAgICAgICAoZ2V0X3BjX3JhbmdlKTogQ29tcHV0ZSBQQyByYW5nZSBmb3IgbG9v a3VwLg0KPiAgICAgICAgICAqIHVud2luZC1kdzItZmRlLmggKGxhc3RfZmRlKTogTWFrZSBwYXJh bWV0ZXIgY29uc3QuDQo+ICAgICAgICAgICogdW53aW5kLWR3Mi1idHJlZS5oOiBOZXcgZmlsZS4N Cj4gLS0tDQo+ICAgbGliZ2NjL3Vud2luZC1kdzItYnRyZWUuaCB8IDk1Mw0KPiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIGxpYmdjYy91bndpbmQtZHcyLWZkZS5j ICAgfCAxOTUgKysrKysrLS0NCj4gICBsaWJnY2MvdW53aW5kLWR3Mi1mZGUuaCAgIHwgICAyICst DQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxMDk4IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygt KQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnY2MvdW53aW5kLWR3Mi1idHJlZS5oDQo+IA0K PiBkaWZmIC0tZ2l0IGEvbGliZ2NjL3Vud2luZC1kdzItYnRyZWUuaCBiL2xpYmdjYy91bndpbmQt ZHcyLWJ0cmVlLmggbmV3IGZpbGUNCj4gbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMDAuLjg4 NTNmMGVhYjQ4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliZ2NjL3Vud2luZC1kdzItYnRy ZWUuaA0KPiBAQCAtMCwwICsxLDk1MyBAQA0KPiArLyogTG9jay1mcmVlIGJ0cmVlIGZvciBtYW51 YWxseSByZWdpc3RlcmVkIHVud2luZCBmcmFtZXMuICAqLw0KPiArLyogQ29weXJpZ2h0IChDKSAy MDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KPiArICAgQ29udHJpYnV0ZWQgYnkg VGhvbWFzIE5ldW1hbm4NCj4gKw0KPiArVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLg0KPiArDQo+ ICtHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdCB1bmRlcg0KPiArdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUNCj4gK1NvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyDQo+ICt2ZXJzaW9u Lg0KPiArDQo+ICtHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQo+ICtXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcg0KPiArRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQo+ ICtmb3IgbW9yZSBkZXRhaWxzLg0KPiArDQo+ICtVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNp b24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCj4gK3Blcm1pc3Npb25zIGRlc2NyaWJl ZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24NCj4gKzMuMSwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ICsNCj4gK1lv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFuZCBhDQo+ICtjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv biBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlDQo+ICt0aGUgZmlsZXMgQ09QWUlORzMgYW5k IENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KPiArPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8NCj4gKw0KPiArI2lmbmRlZiBHQ0NfVU5XSU5EX0RX Ml9CVFJFRV9IDQo+ICsjZGVmaW5lIEdDQ19VTldJTkRfRFcyX0JUUkVFX0gNCj4gKw0KPiArI2lu Y2x1ZGUgPHN0ZGJvb2wuaD4NCj4gKw0KPiArLy8gQ29tbW9uIGxvZ2ljIGZvciB2ZXJzaW9uIGxv Y2tzLg0KPiArc3RydWN0IHZlcnNpb25fbG9jaw0KPiArew0KPiArICAvLyBUaGUgbG9jayBpdHNl bGYuIFRoZSBsb3dlc3QgYml0IGluZGljYXRlcyBhbiBleGNsdXNpdmUgbG9jaywNCj4gKyAgLy8g dGhlIHNlY29uZCBiaXQgaW5kaWNhdGVzIHdhaXRpbmcgdGhyZWFkcy4gQWxsIG90aGVyIGJpdHMg YXJlDQo+ICsgIC8vIHVzZWQgYXMgY291bnRlciB0byByZWNvZ25pemUgY2hhbmdlcy4NCj4gKyAg Ly8gT3ZlcmZsb3dzIGFyZSBva2F5IGhlcmUsIHdlIG11c3Qgb25seSBwcmV2ZW50IG92ZXJmbG93 IHRvIHRoZQ0KPiArICAvLyBzYW1lIHZhbHVlIHdpdGhpbiBvbmUgbG9ja19vcHRpbWlzdGljL3Zh bGlkYXRlDQo+ICsgIC8vIHJhbmdlLiBFdmVuIG9uIDMyIGJpdCBwbGF0Zm9ybXMgdGhhdCB3b3Vs ZCByZXF1aXJlIDEgYmlsbGlvbg0KPiArICAvLyBmcmFtZSByZWdpc3RyYXRpb25zIHdpdGhpbiB0 aGUgdGltZSBzcGFuIG9mIGEgZmV3IGFzc2VtYmxlcg0KPiArICAvLyBpbnN0cnVjdGlvbnMuDQo+ ICsgIHVpbnRwdHJfdCB2ZXJzaW9uX2xvY2s7DQo+ICt9Ow0KPiArDQo+ICsjaWZkZWYgX19HVEhS RUFEX0hBU19DT05EDQo+ICsvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGNvbnRlbnRpb24gd2l0aGlu IHRoZSB0cmVlIGFzIGl0IHJhcmVseSBjaGFuZ2VzLg0KPiArLy8gQnV0IGlmIHdlIGV2ZXIgZG8g Z2V0IGNvbnRlbnRpb24gd2UgdXNlIHRoZXNlIGZvciB3YWl0aW5nLg0KPiArc3RhdGljIF9fZ3Ro cmVhZF9tdXRleF90IHZlcnNpb25fbG9ja19tdXRleCA9DQo+IF9fR1RIUkVBRF9NVVRFWF9JTklU Ow0KPiArc3RhdGljIF9fZ3RocmVhZF9jb25kX3QgdmVyc2lvbl9sb2NrX2NvbmQgPSBfX0dUSFJF QURfQ09ORF9JTklUOw0KPiAjZW5kaWYNCj4gKw0KPiArLy8gSW5pdGlhbGl6ZSBpbiBsb2NrZWQg c3RhdGUuDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3ZlcnNpb25fbG9ja19pbml0aWFsaXpl X2xvY2tlZF9leGNsdXNpdmUgKHN0cnVjdCB2ZXJzaW9uX2xvY2sgKnZsKSB7DQo+ICsgIHZsLT52 ZXJzaW9uX2xvY2sgPSAxOw0KPiArfQ0KPiArDQo+ICsvLyBUcnkgdG8gbG9jayB0aGUgbm9kZSBl eGNsdXNpdmUuDQo+ICtzdGF0aWMgaW5saW5lIGJvb2wNCj4gK3ZlcnNpb25fbG9ja190cnlfbG9j a19leGNsdXNpdmUgKHN0cnVjdCB2ZXJzaW9uX2xvY2sgKnZsKSB7DQo+ICsgIHVpbnRwdHJfdCBz dGF0ZSA9IF9fYXRvbWljX2xvYWRfbiAoJih2bC0+dmVyc2lvbl9sb2NrKSwNCj4gK19fQVRPTUlD X1NFUV9DU1QpOw0KPiArICBpZiAoc3RhdGUgJiAxKQ0KPiArICAgIHJldHVybiBmYWxzZTsNCj4g KyAgcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbiAoJih2bC0+dmVyc2lvbl9sb2Nr KSwgJnN0YXRlLA0KPiBzdGF0ZSB8IDEsDQo+ICsJCQkJICAgICAgZmFsc2UsIF9fQVRPTUlDX1NF UV9DU1QsDQo+ICsJCQkJICAgICAgX19BVE9NSUNfU0VRX0NTVCk7DQo+ICt9DQo+ICsNCj4gKy8v IExvY2sgdGhlIG5vZGUgZXhjbHVzaXZlLCBibG9ja2luZyBhcyBuZWVkZWQuDQo+ICtzdGF0aWMg dm9pZA0KPiArdmVyc2lvbl9sb2NrX2xvY2tfZXhjbHVzaXZlIChzdHJ1Y3QgdmVyc2lvbl9sb2Nr ICp2bCkgeyAjaWZuZGVmDQo+ICtfX0dUSFJFQURfSEFTX0NPTkQNCj4gK3Jlc3RhcnQ6DQo+ICsj ZW5kaWYNCj4gKw0KPiArICAvLyBXZSBzaG91bGQgdmlydHVhbGx5IG5ldmVyIGdldCBjb250ZW50 aW9uIGhlcmUsIGFzIGZyYW1lDQo+ICsgIC8vIGNoYW5nZXMgYXJlIHJhcmUuDQo+ICsgIHVpbnRw dHJfdCBzdGF0ZSA9IF9fYXRvbWljX2xvYWRfbiAoJih2bC0+dmVyc2lvbl9sb2NrKSwNCj4gK19f QVRPTUlDX1NFUV9DU1QpOw0KPiArICBpZiAoIShzdGF0ZSAmIDEpKQ0KPiArICAgIHsNCj4gKyAg ICAgIGlmIChfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24gKCYodmwtPnZlcnNpb25fbG9jayks ICZzdGF0ZSwgc3RhdGUgfA0KPiAxLA0KPiArCQkJCSAgICAgICBmYWxzZSwgX19BVE9NSUNfU0VR X0NTVCwNCj4gKwkJCQkgICAgICAgX19BVE9NSUNfU0VRX0NTVCkpDQo+ICsJcmV0dXJuOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIC8vIFdlIGRpZCBnZXQgY29udGVudGlvbiwgd2FpdCBwcm9wZXJs eS4NCj4gKyNpZmRlZiBfX0dUSFJFQURfSEFTX0NPTkQNCj4gKyAgX19ndGhyZWFkX211dGV4X2xv Y2sgKCZ2ZXJzaW9uX2xvY2tfbXV0ZXgpOw0KPiArICBzdGF0ZSA9IF9fYXRvbWljX2xvYWRfbiAo Jih2bC0+dmVyc2lvbl9sb2NrKSwgX19BVE9NSUNfU0VRX0NTVCk7DQo+ICsgIHdoaWxlICh0cnVl KQ0KPiArICAgIHsNCj4gKyAgICAgIC8vIENoZWNrIGlmIHRoZSBsb2NrIGlzIHN0aWxsIGhlbGQu DQo+ICsgICAgICBpZiAoIShzdGF0ZSAmIDEpKQ0KPiArCXsNCj4gKwkgIGlmIChfX2F0b21pY19j b21wYXJlX2V4Y2hhbmdlX24gKCYodmwtPnZlcnNpb25fbG9jayksICZzdGF0ZSwNCj4gKwkJCQkJ ICAgc3RhdGUgfCAxLCBmYWxzZSwNCj4gX19BVE9NSUNfU0VRX0NTVCwNCj4gKwkJCQkJICAgX19B VE9NSUNfU0VRX0NTVCkpDQo+ICsJICAgIHsNCj4gKwkgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrICgmdmVyc2lvbl9sb2NrX211dGV4KTsNCj4gKwkgICAgICByZXR1cm47DQo+ICsJICAgIH0N Cj4gKwkgIGVsc2UNCj4gKwkgICAgew0KPiArCSAgICAgIGNvbnRpbnVlOw0KPiArCSAgICB9DQo+ ICsJfQ0KPiArDQo+ICsgICAgICAvLyBSZWdpc3RlciB3YWl0aW5nIHRocmVhZC4NCj4gKyAgICAg IGlmICghKHN0YXRlICYgMikpDQo+ICsJew0KPiArCSAgaWYgKCFfX2F0b21pY19jb21wYXJlX2V4 Y2hhbmdlX24gKCYodmwtPnZlcnNpb25fbG9jayksICZzdGF0ZSwNCj4gKwkJCQkJICAgIHN0YXRl IHwgMiwgZmFsc2UsDQo+IF9fQVRPTUlDX1NFUV9DU1QsDQo+ICsJCQkJCSAgICBfX0FUT01JQ19T RVFfQ1NUKSkNCj4gKwkgICAgY29udGludWU7DQo+ICsJfQ0KPiArDQo+ICsgICAgICAvLyBBbmQg c2xlZXAuDQo+ICsgICAgICBfX2d0aHJlYWRfY29uZF93YWl0ICgmdmVyc2lvbl9sb2NrX2NvbmQs ICZ2ZXJzaW9uX2xvY2tfbXV0ZXgpOw0KPiArICAgICAgc3RhdGUgPSBfX2F0b21pY19sb2FkX24g KCYodmwtPnZlcnNpb25fbG9jayksIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiArICAgIH0NCj4gKyNl bHNlDQo+ICsgIC8vIFNwaW4gaWYgd2UgZG8gbm90IGhhdmUgY29uZGl0aW9uIHZhcmlhYmxlcyBh dmFpbGFibGUuDQo+ICsgIC8vIFdlIGV4cGVjdCBubyBjb250ZW50aW9uIGhlcmUsIHNwaW5uaW5n IHNob3VsZCBiZSBva2F5Lg0KPiArICBnb3RvIHJlc3RhcnQ7DQo+ICsjZW5kaWYNCj4gK30NCj4g Kw0KPiArLy8gUmVsZWFzZSBhIGxvY2tlZCBub2RlIGFuZCBpbmNyZWFzZSB0aGUgdmVyc2lvbiBs b2NrLg0KPiArc3RhdGljIHZvaWQNCj4gK3ZlcnNpb25fbG9ja191bmxvY2tfZXhjbHVzaXZlIChz dHJ1Y3QgdmVyc2lvbl9sb2NrICp2bCkgew0KPiArICAvLyBpbmNyZWFzZSB2ZXJzaW9uLCByZXNl dCBleGNsdXNpdmUgbG9jayBiaXRzDQo+ICsgIHVpbnRwdHJfdCBzdGF0ZSA9IF9fYXRvbWljX2xv YWRfbiAoJih2bC0+dmVyc2lvbl9sb2NrKSwNCj4gK19fQVRPTUlDX1NFUV9DU1QpOw0KPiArICB1 aW50cHRyX3QgbnMgPSAoc3RhdGUgKyA0KSAmICh+KCh1aW50cHRyX3QpIDMpKTsNCj4gKyAgc3Rh dGUgPSBfX2F0b21pY19leGNoYW5nZV9uICgmKHZsLT52ZXJzaW9uX2xvY2spLCBucywNCj4gK19f QVRPTUlDX1NFUV9DU1QpOw0KPiArDQo+ICsjaWZkZWYgX19HVEhSRUFEX0hBU19DT05EDQo+ICsg IGlmIChzdGF0ZSAmIDIpDQo+ICsgICAgew0KPiArICAgICAgLy8gV2FrZSB1cCB3YWl0aW5nIHRo cmVhZHMuIFRoaXMgc2hvdWxkIGJlIGV4dHJlbWVseSByYXJlLg0KPiArICAgICAgX19ndGhyZWFk X211dGV4X2xvY2sgKCZ2ZXJzaW9uX2xvY2tfbXV0ZXgpOw0KPiArICAgICAgX19ndGhyZWFkX2Nv bmRfYnJvYWRjYXN0ICgmdmVyc2lvbl9sb2NrX2NvbmQpOw0KPiArICAgICAgX19ndGhyZWFkX211 dGV4X3VubG9jayAoJnZlcnNpb25fbG9ja19tdXRleCk7DQo+ICsgICAgfQ0KPiArI2VuZGlmDQo+ ICt9DQo+ICsNCj4gKy8vIEFjcXVpcmUgYW4gb3B0aW1pc3RpYyAibG9jayIuIE5vdGUgdGhhdCB0 aGlzIGRvZXMgbm90IGxvY2sgYXQgYWxsLA0KPiAraXQgLy8gb25seSBhbGxvd3MgZm9yIHZhbGlk YXRpb24gbGF0ZXIuDQo+ICtzdGF0aWMgaW5saW5lIGJvb2wNCj4gK3ZlcnNpb25fbG9ja19sb2Nr X29wdGltaXN0aWMgKGNvbnN0IHN0cnVjdCB2ZXJzaW9uX2xvY2sgKnZsLCB1aW50cHRyX3QNCj4g Kypsb2NrKSB7DQo+ICsgIHVpbnRwdHJfdCBzdGF0ZSA9IF9fYXRvbWljX2xvYWRfbiAoJih2bC0+ dmVyc2lvbl9sb2NrKSwNCj4gK19fQVRPTUlDX1NFUV9DU1QpOw0KPiArICAqbG9jayA9IHN0YXRl Ow0KPiArDQo+ICsgIC8vIEFjcXVpcmluZyB0aGUgbG9jayBmYWlscyB3aGVuIHRoZXJlIGlzIGN1 cnJlbnRseSBhbiBleGNsdXNpdmUgbG9jay4NCj4gKyAgcmV0dXJuICEoc3RhdGUgJiAxKTsNCj4g K30NCj4gKw0KPiArLy8gVmFsaWRhdGUgYSBwcmV2aW91c2x5IGFjcXVpcmVkICJsb2NrIi4NCj4g K3N0YXRpYyBpbmxpbmUgYm9vbA0KPiArdmVyc2lvbl9sb2NrX3ZhbGlkYXRlIChjb25zdCBzdHJ1 Y3QgdmVyc2lvbl9sb2NrICp2bCwgdWludHB0cl90IGxvY2spIHsNCj4gKyAgLy8gUHJldmVudCB0 aGUgcmVvcmRlcmluZyBvZiBub24tYXRvbWljIGxvYWRzIGJlaGluZCB0aGUgYXRvbWljIGxvYWQu DQo+ICsgIC8vIEhhbnMgQm9laG0sIENhbiBTZXFsb2NrcyBHZXQgQWxvbmcgd2l0aCBQcm9ncmFt bWluZyBMYW5ndWFnZQ0KPiArTWVtb3J5DQo+ICsgIC8vIE1vZGVscz8sIFNlY3Rpb24gNC4NCj4g KyAgX19hdG9taWNfdGhyZWFkX2ZlbmNlIChfX0FUT01JQ19BQ1FVSVJFKTsNCj4gKw0KPiArICAv LyBDaGVjayB0aGF0IHRoZSBub2RlIGlzIHN0aWxsIGluIHRoZSBzYW1lIHN0YXRlLg0KPiArICB1 aW50cHRyX3Qgc3RhdGUgPSBfX2F0b21pY19sb2FkX24gKCYodmwtPnZlcnNpb25fbG9jayksDQo+ ICtfX0FUT01JQ19TRVFfQ1NUKTsNCj4gKyAgcmV0dXJuIChzdGF0ZSA9PSBsb2NrKTsNCj4gK30N Cj4gKw0KPiArLy8gVGhlIGxhcmdlc3QgcG9zc2libGUgc2VwYXJhdG9yIHZhbHVlLg0KPiArc3Rh dGljIGNvbnN0IHVpbnRwdHJfdCBtYXhfc2VwYXJhdG9yID0gfigodWludHB0cl90KSAoMCkpOw0K PiArDQo+ICtzdHJ1Y3QgYnRyZWVfbm9kZTsNCj4gKw0KPiArLy8gSW5uZXIgZW50cnkuIFRoZSBj aGlsZCB0cmVlIGNvbnRhaW5zIGFsbCBlbnRyaWVzIDw9IHNlcGFyYXRvci4NCj4gK3N0cnVjdCBp bm5lcl9lbnRyeQ0KPiArew0KPiArICB1aW50cHRyX3Qgc2VwYXJhdG9yOw0KPiArICBzdHJ1Y3Qg YnRyZWVfbm9kZSAqY2hpbGQ7DQo+ICt9Ow0KPiArDQo+ICsvLyBMZWFmIGVudHJ5LiBTdG9yZXMg YW4gb2JqZWN0IGVudHJ5Lg0KPiArc3RydWN0IGxlYWZfZW50cnkNCj4gK3sNCj4gKyAgdWludHB0 cl90IGJhc2UsIHNpemU7DQo+ICsgIHN0cnVjdCBvYmplY3QgKm9iOw0KPiArfTsNCj4gKw0KPiAr Ly8gTm9kZSB0eXBlcy4NCj4gK2VudW0gbm9kZV90eXBlDQo+ICt7DQo+ICsgIGJ0cmVlX25vZGVf aW5uZXIsDQo+ICsgIGJ0cmVlX25vZGVfbGVhZiwNCj4gKyAgYnRyZWVfbm9kZV9mcmVlDQo+ICt9 Ow0KPiArDQo+ICsvLyBOb2RlIHNpemVzLiBDaG9zZW4gc3VjaCB0aGF0IHRoZSByZXN1bHQgc2l6 ZSBpcyByb3VnaGx5IDI1NiBieXRlcy4NCj4gKyNkZWZpbmUgbWF4X2Zhbm91dF9pbm5lciAxNQ0K PiArI2RlZmluZSBtYXhfZmFub3V0X2xlYWYgMTANCj4gKw0KPiArLy8gQSBidHJlZSBub2RlLg0K PiArc3RydWN0IGJ0cmVlX25vZGUNCj4gK3sNCj4gKyAgLy8gVGhlIHZlcnNpb24gbG9jayB1c2Vk IGZvciBvcHRpbWlzdGljIGxvY2sgY291cGxpbmcuDQo+ICsgIHN0cnVjdCB2ZXJzaW9uX2xvY2sg dmVyc2lvbl9sb2NrOw0KPiArICAvLyBUaGUgbnVtYmVyIG9mIGVudHJpZXMuDQo+ICsgIHVuc2ln bmVkIGVudHJ5X2NvdW50Ow0KPiArICAvLyBUaGUgdHlwZS4NCj4gKyAgZW51bSBub2RlX3R5cGUg dHlwZTsNCj4gKyAgLy8gVGhlIHBheWxvYWQuDQo+ICsgIHVuaW9uDQo+ICsgIHsNCj4gKyAgICAv LyBUaGUgaW5uZXIgbm9kZXMgaGF2ZSBmZW5jZSBrZXlzLCBpLmUuLCB0aGUgcmlnaHQtbW9zdCBl bnRyeSBpbmNsdWRlcyBhDQo+ICsgICAgLy8gc2VwYXJhdG9yLg0KPiArICAgIHN0cnVjdCBpbm5l cl9lbnRyeSBjaGlsZHJlblttYXhfZmFub3V0X2lubmVyXTsNCj4gKyAgICBzdHJ1Y3QgbGVhZl9l bnRyeSBlbnRyaWVzW21heF9mYW5vdXRfbGVhZl07DQo+ICsgIH0gY29udGVudDsNCj4gK307DQo+ ICsNCj4gKy8vIElzIGFuIGlubmVyIG5vZGU/DQo+ICtzdGF0aWMgaW5saW5lIGJvb2wNCj4gK2J0 cmVlX25vZGVfaXNfaW5uZXIgKGNvbnN0IHN0cnVjdCBidHJlZV9ub2RlICpuKSB7DQo+ICsgIHJl dHVybiBuLT50eXBlID09IGJ0cmVlX25vZGVfaW5uZXI7DQo+ICt9DQo+ICsNCj4gKy8vIElzIGEg bGVhZiBub2RlPw0KPiArc3RhdGljIGlubGluZSBib29sDQo+ICtidHJlZV9ub2RlX2lzX2xlYWYg KGNvbnN0IHN0cnVjdCBidHJlZV9ub2RlICpuKSB7DQo+ICsgIHJldHVybiBuLT50eXBlID09IGJ0 cmVlX25vZGVfbGVhZjsNCj4gK30NCj4gKw0KPiArLy8gU2hvdWxkIHRoZSBub2RlIGJlIG1lcmdl ZD8NCj4gK3N0YXRpYyBpbmxpbmUgYm9vbA0KPiArYnRyZWVfbm9kZV9uZWVkc19tZXJnZSAoY29u c3Qgc3RydWN0IGJ0cmVlX25vZGUgKm4pIHsNCj4gKyAgcmV0dXJuIG4tPmVudHJ5X2NvdW50IDwg KGJ0cmVlX25vZGVfaXNfaW5uZXIgKG4pID8gKG1heF9mYW5vdXRfaW5uZXIgLw0KPiAyKQ0KPiAr CQkJCQkJICAgOiAobWF4X2Zhbm91dF9sZWFmIC8gMikpOw0KPiArfQ0KPiArDQo+ICsvLyBHZXQg dGhlIGZlbmNlIGtleSBmb3IgaW5uZXIgbm9kZXMuDQo+ICtzdGF0aWMgaW5saW5lIHVpbnRwdHJf dA0KPiArYnRyZWVfbm9kZV9nZXRfZmVuY2Vfa2V5IChjb25zdCBzdHJ1Y3QgYnRyZWVfbm9kZSAq bikgew0KPiArICAvLyBGb3IgaW5uZXIgbm9kZXMgd2UganVzdCByZXR1cm4gb3VyIHJpZ2h0LW1v c3QgZW50cnkuDQo+ICsgIHJldHVybiBuLT5jb250ZW50LmNoaWxkcmVuW24tPmVudHJ5X2NvdW50 IC0gMV0uc2VwYXJhdG9yOyB9DQo+ICsNCj4gKy8vIEZpbmQgdGhlIHBvc2l0aW9uIGZvciBhIHNs b3QgaW4gYW4gaW5uZXIgbm9kZS4NCj4gK3N0YXRpYyB1bnNpZ25lZA0KPiArYnRyZWVfbm9kZV9m aW5kX2lubmVyX3Nsb3QgKGNvbnN0IHN0cnVjdCBidHJlZV9ub2RlICpuLCB1aW50cHRyX3QNCj4g K3ZhbHVlKSB7DQo+ICsgIGZvciAodW5zaWduZWQgaW5kZXggPSAwLCBlYyA9IG4tPmVudHJ5X2Nv dW50OyBpbmRleCAhPSBlYzsgKytpbmRleCkNCj4gKyAgICBpZiAobi0+Y29udGVudC5jaGlsZHJl bltpbmRleF0uc2VwYXJhdG9yID49IHZhbHVlKQ0KPiArICAgICAgcmV0dXJuIGluZGV4Ow0KPiAr ICByZXR1cm4gbi0+ZW50cnlfY291bnQ7DQo+ICt9DQo+ICsNCj4gKy8vIEZpbmQgdGhlIHBvc2l0 aW9uIGZvciBhIHNsb3QgaW4gYSBsZWFmIG5vZGUuDQo+ICtzdGF0aWMgdW5zaWduZWQNCj4gK2J0 cmVlX25vZGVfZmluZF9sZWFmX3Nsb3QgKGNvbnN0IHN0cnVjdCBidHJlZV9ub2RlICpuLCB1aW50 cHRyX3QgdmFsdWUpDQo+ICt7DQo+ICsgIGZvciAodW5zaWduZWQgaW5kZXggPSAwLCBlYyA9IG4t PmVudHJ5X2NvdW50OyBpbmRleCAhPSBlYzsgKytpbmRleCkNCj4gKyAgICBpZiAobi0+Y29udGVu dC5lbnRyaWVzW2luZGV4XS5iYXNlICsgbi0+Y29udGVudC5lbnRyaWVzW2luZGV4XS5zaXplID4N Cj4gdmFsdWUpDQo+ICsgICAgICByZXR1cm4gaW5kZXg7DQo+ICsgIHJldHVybiBuLT5lbnRyeV9j b3VudDsNCj4gK30NCj4gKw0KPiArLy8gVHJ5IHRvIGxvY2sgdGhlIG5vZGUgZXhjbHVzaXZlLg0K PiArc3RhdGljIGlubGluZSBib29sDQo+ICtidHJlZV9ub2RlX3RyeV9sb2NrX2V4Y2x1c2l2ZSAo c3RydWN0IGJ0cmVlX25vZGUgKm4pIHsNCj4gKyAgcmV0dXJuIHZlcnNpb25fbG9ja190cnlfbG9j a19leGNsdXNpdmUgKCYobi0+dmVyc2lvbl9sb2NrKSk7IH0NCj4gKw0KPiArLy8gTG9jayB0aGUg bm9kZSBleGNsdXNpdmUsIGJsb2NraW5nIGFzIG5lZWRlZC4NCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZA0KPiArYnRyZWVfbm9kZV9sb2NrX2V4Y2x1c2l2ZSAoc3RydWN0IGJ0cmVlX25vZGUgKm4pIHsN Cj4gKyAgdmVyc2lvbl9sb2NrX2xvY2tfZXhjbHVzaXZlICgmKG4tPnZlcnNpb25fbG9jaykpOyB9 DQo+ICsNCj4gKy8vIFJlbGVhc2UgYSBsb2NrZWQgbm9kZSBhbmQgaW5jcmVhc2UgdGhlIHZlcnNp b24gbG9jay4NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArYnRyZWVfbm9kZV91bmxvY2tfZXhj bHVzaXZlIChzdHJ1Y3QgYnRyZWVfbm9kZSAqbikgew0KPiArICB2ZXJzaW9uX2xvY2tfdW5sb2Nr X2V4Y2x1c2l2ZSAoJihuLT52ZXJzaW9uX2xvY2spKTsgfQ0KPiArDQo+ICsvLyBBY3F1aXJlIGFu IG9wdGltaXN0aWMgImxvY2siLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBsb2NrIGF0IGFsbCwN Cj4gK2l0IC8vIG9ubHkgYWxsb3dzIGZvciB2YWxpZGF0aW9uIGxhdGVyLg0KPiArc3RhdGljIGlu bGluZSBib29sDQo+ICtidHJlZV9ub2RlX2xvY2tfb3B0aW1pc3RpYyAoY29uc3Qgc3RydWN0IGJ0 cmVlX25vZGUgKm4sIHVpbnRwdHJfdA0KPiArKmxvY2spIHsNCj4gKyAgcmV0dXJuIHZlcnNpb25f bG9ja19sb2NrX29wdGltaXN0aWMgKCYobi0+dmVyc2lvbl9sb2NrKSwgbG9jayk7IH0NCj4gKw0K PiArLy8gVmFsaWRhdGUgYSBwcmV2aW91c2x5IGFjcXVpcmUgbG9jay4NCj4gK3N0YXRpYyBpbmxp bmUgYm9vbA0KPiArYnRyZWVfbm9kZV92YWxpZGF0ZSAoY29uc3Qgc3RydWN0IGJ0cmVlX25vZGUg Km4sIHVpbnRwdHJfdCBsb2NrKSB7DQo+ICsgIHJldHVybiB2ZXJzaW9uX2xvY2tfdmFsaWRhdGUg KCYobi0+dmVyc2lvbl9sb2NrKSwgbG9jayk7IH0NCj4gKw0KPiArLy8gSW5zZXJ0IGEgbmV3IHNl cGFyYXRvciBhZnRlciBzcGxpdHRpbmcuDQo+ICtzdGF0aWMgdm9pZA0KPiArYnRyZWVfbm9kZV91 cGRhdGVfc2VwYXJhdG9yX2FmdGVyX3NwbGl0IChzdHJ1Y3QgYnRyZWVfbm9kZSAqbiwNCj4gKwkJ CQkJIHVpbnRwdHJfdCBvbGRfc2VwYXJhdG9yLA0KPiArCQkJCQkgdWludHB0cl90IG5ld19zZXBh cmF0b3IsDQo+ICsJCQkJCSBzdHJ1Y3QgYnRyZWVfbm9kZSAqbmV3X3JpZ2h0KQ0KPiArew0KPiAr ICB1bnNpZ25lZCBzbG90ID0gYnRyZWVfbm9kZV9maW5kX2lubmVyX3Nsb3QgKG4sIG9sZF9zZXBh cmF0b3IpOw0KPiArICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbi0+ZW50cnlfY291bnQ7IGluZGV4 ID4gc2xvdDsgLS1pbmRleCkNCj4gKyAgICBuLT5jb250ZW50LmNoaWxkcmVuW2luZGV4XSA9IG4t PmNvbnRlbnQuY2hpbGRyZW5baW5kZXggLSAxXTsNCj4gKyAgbi0+Y29udGVudC5jaGlsZHJlbltz bG90XS5zZXBhcmF0b3IgPSBuZXdfc2VwYXJhdG9yOw0KPiArICBuLT5jb250ZW50LmNoaWxkcmVu W3Nsb3QgKyAxXS5jaGlsZCA9IG5ld19yaWdodDsNCj4gKyAgbi0+ZW50cnlfY291bnQrKzsNCj4g K30NCj4gKw0KPiArLy8gQSBidHJlZS4gU3VpdGFibGUgZm9yIHN0YXRpYyBpbml0aWFsaXphdGlv biwgYWxsIG1lbWJlcnMgYXJlIHplcm8gYXQNCj4gK3RoZSAvLyBiZWdpbm5pbmcuDQo+ICtzdHJ1 Y3QgYnRyZWUNCj4gK3sNCj4gKyAgLy8gVGhlIHJvb3Qgb2YgdGhlIGJ0cmVlLg0KPiArICBzdHJ1 Y3QgYnRyZWVfbm9kZSAqcm9vdDsNCj4gKyAgLy8gVGhlIGZyZWUgbGlzdCBvZiByZWxlYXNlZCBu b2RlLg0KPiArICBzdHJ1Y3QgYnRyZWVfbm9kZSAqZnJlZV9saXN0Ow0KPiArICAvLyBUaGUgdmVy c2lvbiBsb2NrIHVzZWQgdG8gcHJvdGVjdCB0aGUgcm9vdC4NCj4gKyAgc3RydWN0IHZlcnNpb25f bG9jayByb290X2xvY2s7DQo+ICt9Ow0KPiArDQo+ICsvLyBJbml0aWFsaXplIGEgYnRyZWUuIE5v dCBhY3R1YWxseSB1c2VkLCBqdXN0IGZvciBleHBvc2l0aW9uLg0KPiArc3RhdGljIGlubGluZSB2 b2lkDQo+ICtidHJlZV9pbml0IChzdHJ1Y3QgYnRyZWUgKnQpDQo+ICt7DQo+ICsgIHQtPnJvb3Qg PSBOVUxMOw0KPiArICB0LT5mcmVlX2xpc3QgPSBOVUxMOw0KPiArICB0LT5yb290X2xvY2sudmVy c2lvbl9sb2NrID0gMDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtidHJlZV9yZWxl YXNlX3RyZWVfcmVjdXJzaXZlbHkgKHN0cnVjdCBidHJlZSAqdCwgc3RydWN0IGJ0cmVlX25vZGUg Km4pOw0KPiArDQo+ICsvLyBEZXN0cm95IGEgdHJlZSBhbmQgcmVsZWFzZSBhbGwgbm9kZXMuDQo+ ICtzdGF0aWMgdm9pZA0KPiArYnRyZWVfZGVzdHJveSAoc3RydWN0IGJ0cmVlICp0KQ0KPiArew0K PiArICAvLyBEaXNhYmxlIHRoZSBtZWNoYW5pc20gYmVmb3JlIGNsZWFuaW5nIHVwLg0KPiArICBz dHJ1Y3QgYnRyZWVfbm9kZSAqb2xkX3Jvb3QNCj4gKyAgICA9IF9fYXRvbWljX2V4Y2hhbmdlX24g KCYodC0+cm9vdCksIE5VTEwsIF9fQVRPTUlDX1NFUV9DU1QpOw0KPiArICBpZiAob2xkX3Jvb3Qp DQo+ICsgICAgYnRyZWVfcmVsZWFzZV90cmVlX3JlY3Vyc2l2ZWx5ICh0LCBvbGRfcm9vdCk7DQo+ ICsNCj4gKyAgLy8gUmVsZWFzZSBhbGwgZnJlZSBub2Rlcy4NCj4gKyAgd2hpbGUgKHQtPmZyZWVf bGlzdCkNCj4gKyAgICB7DQo+ICsgICAgICBzdHJ1Y3QgYnRyZWVfbm9kZSAqbmV4dCA9IHQtPmZy ZWVfbGlzdC0+Y29udGVudC5jaGlsZHJlblswXS5jaGlsZDsNCj4gKyAgICAgIGZyZWUgKHQtPmZy ZWVfbGlzdCk7DQo+ICsgICAgICB0LT5mcmVlX2xpc3QgPSBuZXh0Ow0KPiArICAgIH0NCj4gK30N Cj4gKw0KPiArLy8gQWxsb2NhdGUgYSBub2RlLiBUaGlzIG5vZGUgd2lsbCBiZSByZXR1cm5lZCBp biBsb2NrZWQgZXhjbHVzaXZlIHN0YXRlLg0KPiArc3RhdGljIHN0cnVjdCBidHJlZV9ub2RlICoN Cj4gK2J0cmVlX2FsbG9jYXRlX25vZGUgKHN0cnVjdCBidHJlZSAqdCwgYm9vbCBpbm5lcikgew0K PiArICB3aGlsZSAodHJ1ZSkNCj4gKyAgICB7DQo+ICsgICAgICAvLyBUcnkgdGhlIGZyZWUgbGlz dCBmaXJzdC4NCj4gKyAgICAgIHN0cnVjdCBidHJlZV9ub2RlICpuZXh0X2ZyZWUNCj4gKwk9IF9f YXRvbWljX2xvYWRfbiAoJih0LT5mcmVlX2xpc3QpLCBfX0FUT01JQ19TRVFfQ1NUKTsNCj4gKyAg ICAgIGlmIChuZXh0X2ZyZWUpDQo+ICsJew0KPiArCSAgaWYgKCFidHJlZV9ub2RlX3RyeV9sb2Nr X2V4Y2x1c2l2ZSAobmV4dF9mcmVlKSkNCj4gKwkgICAgY29udGludWU7DQo+ICsJICAvLyBUaGUg bm9kZSBtaWdodCBubyBsb25nZXIgYmUgZnJlZSwgY2hlY2sgdGhhdCBhZ2FpbiBhZnRlciBhY3F1 aXJpbmcNCj4gKwkgIC8vIHRoZSBleGNsdXNpdmUgbG9jay4NCj4gKwkgIGlmIChuZXh0X2ZyZWUt PnR5cGUgPT0gYnRyZWVfbm9kZV9mcmVlKQ0KPiArCSAgICB7DQo+ICsJICAgICAgc3RydWN0IGJ0 cmVlX25vZGUgKmV4ID0gbmV4dF9mcmVlOw0KPiArCSAgICAgIGlmIChfX2F0b21pY19jb21wYXJl X2V4Y2hhbmdlX24gKA0KPiArCQkgICAgJih0LT5mcmVlX2xpc3QpLCAmZXgsIG5leHRfZnJlZS0+ Y29udGVudC5jaGlsZHJlblswXS5jaGlsZCwNCj4gKwkJICAgIGZhbHNlLCBfX0FUT01JQ19TRVFf Q1NULCBfX0FUT01JQ19TRVFfQ1NUKSkNCj4gKwkJew0KPiArCQkgIG5leHRfZnJlZS0+ZW50cnlf Y291bnQgPSAwOw0KPiArCQkgIG5leHRfZnJlZS0+dHlwZSA9IGlubmVyID8gYnRyZWVfbm9kZV9p bm5lciA6DQo+IGJ0cmVlX25vZGVfbGVhZjsNCj4gKwkJICByZXR1cm4gbmV4dF9mcmVlOw0KPiAr CQl9DQo+ICsJICAgIH0NCj4gKwkgIGJ0cmVlX25vZGVfdW5sb2NrX2V4Y2x1c2l2ZSAobmV4dF9m cmVlKTsNCj4gKwkgIGNvbnRpbnVlOw0KPiArCX0NCj4gKw0KPiArICAgICAgLy8gTm8gZnJlZSBu b2RlIGF2YWlsYWJsZSwgYWxsb2NhdGUgYSBuZXcgb25lLg0KPiArICAgICAgc3RydWN0IGJ0cmVl X25vZGUgKm5ld19ub2RlDQo+ICsJPSAoc3RydWN0IGJ0cmVlX25vZGUgKikgKG1hbGxvYyAoc2l6 ZW9mIChzdHJ1Y3QgYnRyZWVfbm9kZSkpKTsNCj4gKyAgICAgIHZlcnNpb25fbG9ja19pbml0aWFs aXplX2xvY2tlZF9leGNsdXNpdmUgKA0KPiArCSYobmV3X25vZGUtPnZlcnNpb25fbG9jaykpOyAv LyBpbml0aWFsaXplIHRoZSBub2RlIGluIGxvY2tlZCBzdGF0ZS4NCj4gKyAgICAgIG5ld19ub2Rl LT5lbnRyeV9jb3VudCA9IDA7DQo+ICsgICAgICBuZXdfbm9kZS0+dHlwZSA9IGlubmVyID8gYnRy ZWVfbm9kZV9pbm5lciA6IGJ0cmVlX25vZGVfbGVhZjsNCj4gKyAgICAgIHJldHVybiBuZXdfbm9k ZTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8vIFJlbGVhc2UgYSBub2RlLiBUaGlzIG5vZGUg bXVzdCBiZSBjdXJyZW50bHkgbG9ja2VkIGV4Y2x1c2l2ZWx5IGFuZA0KPiArd2lsbCAvLyBiZSBw bGFjZWQgaW4gdGhlIGZyZWUgbGlzdC4NCj4gK3N0YXRpYyB2b2lkDQo+ICtidHJlZV9yZWxlYXNl X25vZGUgKHN0cnVjdCBidHJlZSAqdCwgc3RydWN0IGJ0cmVlX25vZGUgKm5vZGUpIHsNCj4gKyAg Ly8gV2UgY2Fubm90IHJlbGVhc2UgdGhlIG1lbW9yeSBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZXJl IG1pZ2h0IHN0aWxsDQo+ICtiZQ0KPiArICAvLyBjb25jdXJyZW50IHJlYWRlcnMgb24gdGhhdCBu b2RlLiBQdXQgaXQgaW4gdGhlIGZyZWUgbGlzdCBpbnN0ZWFkLg0KPiArICBub2RlLT50eXBlID0g YnRyZWVfbm9kZV9mcmVlOw0KPiArICBzdHJ1Y3QgYnRyZWVfbm9kZSAqbmV4dF9mcmVlDQo+ICsg ICAgPSBfX2F0b21pY19sb2FkX24gKCYodC0+ZnJlZV9saXN0KSwgX19BVE9NSUNfU0VRX0NTVCk7 DQo+ICsgIGRvDQo+ICsgICAgew0KPiArICAgICAgbm9kZS0+Y29udGVudC5jaGlsZHJlblswXS5j aGlsZCA9IG5leHRfZnJlZTsNCj4gKyAgfSB3aGlsZSAoIV9fYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2VfbiAoJih0LT5mcmVlX2xpc3QpLCAmbmV4dF9mcmVlLA0KPiBub2RlLA0KPiArCQkJCQkgZmFs c2UsIF9fQVRPTUlDX1NFUV9DU1QsDQo+ICsJCQkJCSBfX0FUT01JQ19TRVFfQ1NUKSk7DQo+ICsg IGJ0cmVlX25vZGVfdW5sb2NrX2V4Y2x1c2l2ZSAobm9kZSk7DQo+ICt9DQo+ICsNCj4gKy8vIFJl Y3Vyc2l2ZWx5IHJlbGVhc2UgYSB0cmVlLiBUaGUgYnRyZWUgaXMgYnkgZGVzaWduIHZlcnkgc2hh bGxvdywNCj4gK3RodXMgLy8gd2UgY2FuIHJpc2sgcmVjdXJzaW9uIGhlcmUuDQo+ICtzdGF0aWMg dm9pZA0KPiArYnRyZWVfcmVsZWFzZV90cmVlX3JlY3Vyc2l2ZWx5IChzdHJ1Y3QgYnRyZWUgKnQs IHN0cnVjdCBidHJlZV9ub2RlDQo+ICsqbm9kZSkgew0KPiArICBidHJlZV9ub2RlX2xvY2tfZXhj bHVzaXZlIChub2RlKTsNCj4gKyAgaWYgKGJ0cmVlX25vZGVfaXNfaW5uZXIgKG5vZGUpKQ0KPiAr ICAgIHsNCj4gKyAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUtPmVu dHJ5X2NvdW50OyArK2luZGV4KQ0KPiArCWJ0cmVlX3JlbGVhc2VfdHJlZV9yZWN1cnNpdmVseSAo dCwgbm9kZS0NCj4gPmNvbnRlbnQuY2hpbGRyZW5baW5kZXhdLmNoaWxkKTsNCj4gKyAgICB9DQo+ ICsgIGJ0cmVlX3JlbGVhc2Vfbm9kZSAodCwgbm9kZSk7DQo+ICt9DQo+ICsNCj4gKy8vIENoZWNr IGlmIHdlIGFyZSBzcGxpdHRpbmcgdGhlIHJvb3QuDQo+ICtzdGF0aWMgdm9pZA0KPiArYnRyZWVf aGFuZGxlX3Jvb3Rfc3BsaXQgKHN0cnVjdCBidHJlZSAqdCwgc3RydWN0IGJ0cmVlX25vZGUgKipu b2RlLA0KPiArCQkJIHN0cnVjdCBidHJlZV9ub2RlICoqcGFyZW50KQ0KPiArew0KPiArICAvLyBX ZSB3YW50IHRvIGtlZXAgdGhlIHJvb3QgcG9pbnRlciBzdGFibGUgdG8gYWxsb3cgZm9yIGNvbnRl bnRpb24NCj4gKyAgLy8gZnJlZSByZWFkcy4gVGh1cywgd2Ugc3BsaXQgdGhlIHJvb3QgYnkgZmly c3QgbW92aW5nIHRoZSBjb250ZW50DQo+ICsgIC8vIG9mIHRoZSByb290IG5vZGUgdG8gYSBuZXcg bm9kZSwgYW5kIHRoZW4gc3BsaXQgdGhhdCBuZXcgbm9kZS4NCj4gKyAgaWYgKCEqcGFyZW50KQ0K PiArICAgIHsNCj4gKyAgICAgIC8vIEFsbG9jYXRlIGEgbmV3IG5vZGUsIHRoaXMgZ3VhcmFudGVl cyB1cyB0aGF0IHdlIHdpbGwgaGF2ZSBhIHBhcmVudA0KPiArICAgICAgLy8gYWZ0ZXJ3YXJkcy4N Cj4gKyAgICAgIHN0cnVjdCBidHJlZV9ub2RlICpuZXdfbm9kZQ0KPiArCT0gYnRyZWVfYWxsb2Nh dGVfbm9kZSAodCwgYnRyZWVfbm9kZV9pc19pbm5lciAoKm5vZGUpKTsNCj4gKyAgICAgIHN0cnVj dCBidHJlZV9ub2RlICpvbGRfbm9kZSA9ICpub2RlOw0KPiArICAgICAgbmV3X25vZGUtPmVudHJ5 X2NvdW50ID0gb2xkX25vZGUtPmVudHJ5X2NvdW50Ow0KPiArICAgICAgbmV3X25vZGUtPmNvbnRl bnQgPSBvbGRfbm9kZS0+Y29udGVudDsNCj4gKyAgICAgIG9sZF9ub2RlLT5jb250ZW50LmNoaWxk cmVuWzBdLnNlcGFyYXRvciA9IG1heF9zZXBhcmF0b3I7DQo+ICsgICAgICBvbGRfbm9kZS0+Y29u dGVudC5jaGlsZHJlblswXS5jaGlsZCA9IG5ld19ub2RlOw0KPiArICAgICAgb2xkX25vZGUtPmVu dHJ5X2NvdW50ID0gMTsNCj4gKyAgICAgIG9sZF9ub2RlLT50eXBlID0gYnRyZWVfbm9kZV9pbm5l cjsNCj4gKw0KPiArICAgICAgKnBhcmVudCA9IG9sZF9ub2RlOw0KPiArICAgICAgKm5vZGUgPSBu ZXdfbm9kZTsNCj4gKyAgICB9DQo+ICt9DQo+ICsNCj4gKy8vIFNwbGl0IGFuIGlubmVyIG5vZGUu DQo+ICtzdGF0aWMgdm9pZA0KPiArYnRyZWVfc3BsaXRfaW5uZXIgKHN0cnVjdCBidHJlZSAqdCwg c3RydWN0IGJ0cmVlX25vZGUgKippbm5lciwNCj4gKwkJICAgc3RydWN0IGJ0cmVlX25vZGUgKipw YXJlbnQsIHVpbnRwdHJfdCB0YXJnZXQpIHsNCj4gKyAgLy8gQ2hlY2sgZm9yIHRoZSByb290Lg0K PiArICBidHJlZV9oYW5kbGVfcm9vdF9zcGxpdCAodCwgaW5uZXIsIHBhcmVudCk7DQo+ICsNCj4g KyAgLy8gQ3JlYXRlIHR3byBpbm5lciBub2RlLg0KPiArICB1aW50cHRyX3QgcmlnaHRfZmVuY2Ug PSBidHJlZV9ub2RlX2dldF9mZW5jZV9rZXkgKCppbm5lcik7DQo+ICsgIHN0cnVjdCBidHJlZV9u b2RlICpsZWZ0X2lubmVyID0gKmlubmVyOw0KPiArICBzdHJ1Y3QgYnRyZWVfbm9kZSAqcmlnaHRf aW5uZXIgPSBidHJlZV9hbGxvY2F0ZV9ub2RlICh0LCB0cnVlKTsNCj4gKyAgdW5zaWduZWQgc3Bs aXQgPSBsZWZ0X2lubmVyLT5lbnRyeV9jb3VudCAvIDI7DQo+ICsgIHJpZ2h0X2lubmVyLT5lbnRy eV9jb3VudCA9IGxlZnRfaW5uZXItPmVudHJ5X2NvdW50IC0gc3BsaXQ7DQo+ICsgIGZvciAodW5z aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHJpZ2h0X2lubmVyLT5lbnRyeV9jb3VudDsgKytpbmRl eCkNCj4gKyAgICByaWdodF9pbm5lci0+Y29udGVudC5jaGlsZHJlbltpbmRleF0NCj4gKyAgICAg ID0gbGVmdF9pbm5lci0+Y29udGVudC5jaGlsZHJlbltzcGxpdCArIGluZGV4XTsNCj4gKyAgbGVm dF9pbm5lci0+ZW50cnlfY291bnQgPSBzcGxpdDsNCj4gKyAgdWludHB0cl90IGxlZnRfZmVuY2Ug PSBidHJlZV9ub2RlX2dldF9mZW5jZV9rZXkgKGxlZnRfaW5uZXIpOw0KPiArICBidHJlZV9ub2Rl X3VwZGF0ZV9zZXBhcmF0b3JfYWZ0ZXJfc3BsaXQgKCpwYXJlbnQsIHJpZ2h0X2ZlbmNlLA0KPiBs ZWZ0X2ZlbmNlLA0KPiArCQkJCQkgICByaWdodF9pbm5lcik7DQo+ICsgIGlmICh0YXJnZXQgPD0g bGVmdF9mZW5jZSkNCj4gKyAgICB7DQo+ICsgICAgICAqaW5uZXIgPSBsZWZ0X2lubmVyOw0KPiAr ICAgICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChyaWdodF9pbm5lcik7DQo+ICsgICAg fQ0KPiArICBlbHNlDQo+ICsgICAgew0KPiArICAgICAgKmlubmVyID0gcmlnaHRfaW5uZXI7DQo+ ICsgICAgICBidHJlZV9ub2RlX3VubG9ja19leGNsdXNpdmUgKGxlZnRfaW5uZXIpOw0KPiArICAg IH0NCj4gK30NCj4gKw0KPiArLy8gU3BsaXQgYSBsZWFmIG5vZGUuDQo+ICtzdGF0aWMgdm9pZA0K PiArYnRyZWVfc3BsaXRfbGVhZiAoc3RydWN0IGJ0cmVlICp0LCBzdHJ1Y3QgYnRyZWVfbm9kZSAq KmxlYWYsDQo+ICsJCSAgc3RydWN0IGJ0cmVlX25vZGUgKipwYXJlbnQsIHVpbnRwdHJfdCBmZW5j ZSwgdWludHB0cl90DQo+IHRhcmdldCkgew0KPiArICAvLyBDaGVjayBmb3IgdGhlIHJvb3QuDQo+ ICsgIGJ0cmVlX2hhbmRsZV9yb290X3NwbGl0ICh0LCBsZWFmLCBwYXJlbnQpOw0KPiArDQo+ICsg IC8vIENyZWF0ZSB0d28gbGVhZiBub2Rlcy4NCj4gKyAgdWludHB0cl90IHJpZ2h0X2ZlbmNlID0g ZmVuY2U7DQo+ICsgIHN0cnVjdCBidHJlZV9ub2RlICpsZWZ0X2xlYWYgPSAqbGVhZjsNCj4gKyAg c3RydWN0IGJ0cmVlX25vZGUgKnJpZ2h0X2xlYWYgPSBidHJlZV9hbGxvY2F0ZV9ub2RlICh0LCBm YWxzZSk7DQo+ICsgIHVuc2lnbmVkIHNwbGl0ID0gbGVmdF9sZWFmLT5lbnRyeV9jb3VudCAvIDI7 DQo+ICsgIHJpZ2h0X2xlYWYtPmVudHJ5X2NvdW50ID0gbGVmdF9sZWFmLT5lbnRyeV9jb3VudCAt IHNwbGl0Ow0KPiArICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggIT0gcmlnaHRfbGVh Zi0+ZW50cnlfY291bnQ7ICsraW5kZXgpDQo+ICsgICAgcmlnaHRfbGVhZi0+Y29udGVudC5lbnRy aWVzW2luZGV4XQ0KPiArICAgICAgPSBsZWZ0X2xlYWYtPmNvbnRlbnQuZW50cmllc1tzcGxpdCAr IGluZGV4XTsNCj4gKyAgbGVmdF9sZWFmLT5lbnRyeV9jb3VudCA9IHNwbGl0Ow0KPiArICB1aW50 cHRyX3QgbGVmdF9mZW5jZSA9IHJpZ2h0X2xlYWYtPmNvbnRlbnQuZW50cmllc1swXS5iYXNlIC0g MTsNCj4gKyAgYnRyZWVfbm9kZV91cGRhdGVfc2VwYXJhdG9yX2FmdGVyX3NwbGl0ICgqcGFyZW50 LCByaWdodF9mZW5jZSwNCj4gbGVmdF9mZW5jZSwNCj4gKwkJCQkJICAgcmlnaHRfbGVhZik7DQo+ ICsgIGlmICh0YXJnZXQgPD0gbGVmdF9mZW5jZSkNCj4gKyAgICB7DQo+ICsgICAgICAqbGVhZiA9 IGxlZnRfbGVhZjsNCj4gKyAgICAgIGJ0cmVlX25vZGVfdW5sb2NrX2V4Y2x1c2l2ZSAocmlnaHRf bGVhZik7DQo+ICsgICAgfQ0KPiArICBlbHNlDQo+ICsgICAgew0KPiArICAgICAgKmxlYWYgPSBy aWdodF9sZWFmOw0KPiArICAgICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChsZWZ0X2xl YWYpOw0KPiArICAgIH0NCj4gK30NCj4gKw0KPiArLy8gTWVyZ2UgKG9yIGJhbGFuY2UpIGNoaWxk IG5vZGVzLg0KPiArc3RhdGljIHN0cnVjdCBidHJlZV9ub2RlICoNCj4gK2J0cmVlX21lcmdlX25v ZGUgKHN0cnVjdCBidHJlZSAqdCwgdW5zaWduZWQgY2hpbGRfc2xvdCwNCj4gKwkJICBzdHJ1Y3Qg YnRyZWVfbm9kZSAqcGFyZW50LCB1aW50cHRyX3QgdGFyZ2V0KSB7DQo+ICsgIC8vIENob29zZSB0 aGUgZW1wdGllc3QgbmVpZ2hib3IgYW5kIGxvY2sgYm90aC4gVGhlIHRhcmdldCBjaGlsZCBpcw0K PiArYWxyZWFkeQ0KPiArICAvLyBsb2NrZWQuDQo+ICsgIHVuc2lnbmVkIGxlZnRfc2xvdDsNCj4g KyAgc3RydWN0IGJ0cmVlX25vZGUgKmxlZnRfbm9kZSwgKnJpZ2h0X25vZGU7DQo+ICsgIGlmICgo Y2hpbGRfc2xvdCA9PSAwKQ0KPiArICAgICAgfHwgKCgoY2hpbGRfc2xvdCArIDEpIDwgcGFyZW50 LT5lbnRyeV9jb3VudCkNCj4gKwkgICYmIChwYXJlbnQtPmNvbnRlbnQuY2hpbGRyZW5bY2hpbGRf c2xvdCArIDFdLmNoaWxkLT5lbnRyeV9jb3VudA0KPiArCSAgICAgIDwgcGFyZW50LT5jb250ZW50 LmNoaWxkcmVuW2NoaWxkX3Nsb3QgLSAxXS5jaGlsZC0+ZW50cnlfY291bnQpKSkNCj4gKyAgICB7 DQo+ICsgICAgICBsZWZ0X3Nsb3QgPSBjaGlsZF9zbG90Ow0KPiArICAgICAgbGVmdF9ub2RlID0g cGFyZW50LT5jb250ZW50LmNoaWxkcmVuW2xlZnRfc2xvdF0uY2hpbGQ7DQo+ICsgICAgICByaWdo dF9ub2RlID0gcGFyZW50LT5jb250ZW50LmNoaWxkcmVuW2xlZnRfc2xvdCArIDFdLmNoaWxkOw0K PiArICAgICAgYnRyZWVfbm9kZV9sb2NrX2V4Y2x1c2l2ZSAocmlnaHRfbm9kZSk7DQo+ICsgICAg fQ0KPiArICBlbHNlDQo+ICsgICAgew0KPiArICAgICAgbGVmdF9zbG90ID0gY2hpbGRfc2xvdCAt IDE7DQo+ICsgICAgICBsZWZ0X25vZGUgPSBwYXJlbnQtPmNvbnRlbnQuY2hpbGRyZW5bbGVmdF9z bG90XS5jaGlsZDsNCj4gKyAgICAgIHJpZ2h0X25vZGUgPSBwYXJlbnQtPmNvbnRlbnQuY2hpbGRy ZW5bbGVmdF9zbG90ICsgMV0uY2hpbGQ7DQo+ICsgICAgICBidHJlZV9ub2RlX2xvY2tfZXhjbHVz aXZlIChsZWZ0X25vZGUpOw0KPiArICAgIH0NCj4gKw0KPiArICAvLyBDYW4gd2UgbWVyZ2UgYm90 aCBub2RlcyBpbnRvIG9uZSBub2RlPw0KPiArICB1bnNpZ25lZCB0b3RhbF9jb3VudCA9IGxlZnRf bm9kZS0+ZW50cnlfY291bnQgKw0KPiArcmlnaHRfbm9kZS0+ZW50cnlfY291bnQ7DQo+ICsgIHVu c2lnbmVkIG1heF9jb3VudA0KPiArICAgID0gYnRyZWVfbm9kZV9pc19pbm5lciAobGVmdF9ub2Rl KSA/IG1heF9mYW5vdXRfaW5uZXIgOg0KPiArbWF4X2Zhbm91dF9sZWFmOw0KPiArICBpZiAodG90 YWxfY291bnQgPD0gbWF4X2NvdW50KQ0KPiArICAgIHsNCj4gKyAgICAgIC8vIE1lcmdlIGludG8g dGhlIHBhcmVudD8NCj4gKyAgICAgIGlmIChwYXJlbnQtPmVudHJ5X2NvdW50ID09IDIpDQo+ICsJ ew0KPiArCSAgLy8gTWVyZ2UgY2hpbGRyZW4gaW50byBwYXJlbnQuIFRoaXMgY2FuIG9ubHkgaGFw cGVuIGF0IHRoZSByb290Lg0KPiArCSAgaWYgKGJ0cmVlX25vZGVfaXNfaW5uZXIgKGxlZnRfbm9k ZSkpDQo+ICsJICAgIHsNCj4gKwkgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg IT0gbGVmdF9ub2RlLT5lbnRyeV9jb3VudDsNCj4gKytpbmRleCkNCj4gKwkJcGFyZW50LT5jb250 ZW50LmNoaWxkcmVuW2luZGV4XQ0KPiArCQkgID0gbGVmdF9ub2RlLT5jb250ZW50LmNoaWxkcmVu W2luZGV4XTsNCj4gKwkgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggIT0gcmln aHRfbm9kZS0+ZW50cnlfY291bnQ7DQo+ICsJCSAgICsraW5kZXgpDQo+ICsJCXBhcmVudC0+Y29u dGVudC5jaGlsZHJlbltpbmRleCArIGxlZnRfbm9kZS0+ZW50cnlfY291bnRdDQo+ICsJCSAgPSBy aWdodF9ub2RlLT5jb250ZW50LmNoaWxkcmVuW2luZGV4XTsNCj4gKwkgICAgfQ0KPiArCSAgZWxz ZQ0KPiArCSAgICB7DQo+ICsJICAgICAgcGFyZW50LT50eXBlID0gYnRyZWVfbm9kZV9sZWFmOw0K PiArCSAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCAhPSBsZWZ0X25vZGUtPmVu dHJ5X2NvdW50Ow0KPiArK2luZGV4KQ0KPiArCQlwYXJlbnQtPmNvbnRlbnQuZW50cmllc1tpbmRl eF0NCj4gKwkJICA9IGxlZnRfbm9kZS0+Y29udGVudC5lbnRyaWVzW2luZGV4XTsNCj4gKwkgICAg ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggIT0gcmlnaHRfbm9kZS0+ZW50cnlfY291 bnQ7DQo+ICsJCSAgICsraW5kZXgpDQo+ICsJCXBhcmVudC0+Y29udGVudC5lbnRyaWVzW2luZGV4 ICsgbGVmdF9ub2RlLT5lbnRyeV9jb3VudF0NCj4gKwkJICA9IHJpZ2h0X25vZGUtPmNvbnRlbnQu ZW50cmllc1tpbmRleF07DQo+ICsJICAgIH0NCj4gKwkgIHBhcmVudC0+ZW50cnlfY291bnQgPSB0 b3RhbF9jb3VudDsNCj4gKwkgIGJ0cmVlX3JlbGVhc2Vfbm9kZSAodCwgbGVmdF9ub2RlKTsNCj4g KwkgIGJ0cmVlX3JlbGVhc2Vfbm9kZSAodCwgcmlnaHRfbm9kZSk7DQo+ICsJICByZXR1cm4gcGFy ZW50Ow0KPiArCX0NCj4gKyAgICAgIGVsc2UNCj4gKwl7DQo+ICsJICAvLyBSZWd1bGFyIG1lcmdl Lg0KPiArCSAgaWYgKGJ0cmVlX25vZGVfaXNfaW5uZXIgKGxlZnRfbm9kZSkpDQo+ICsJICAgIHsN Cj4gKwkgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggIT0gcmlnaHRfbm9kZS0+ ZW50cnlfY291bnQ7DQo+ICsJCSAgICsraW5kZXgpDQo+ICsJCWxlZnRfbm9kZS0+Y29udGVudC5j aGlsZHJlbltsZWZ0X25vZGUtPmVudHJ5X2NvdW50KytdDQo+ICsJCSAgPSByaWdodF9ub2RlLT5j b250ZW50LmNoaWxkcmVuW2luZGV4XTsNCj4gKwkgICAgfQ0KPiArCSAgZWxzZQ0KPiArCSAgICB7 DQo+ICsJICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4ICE9IHJpZ2h0X25vZGUt PmVudHJ5X2NvdW50Ow0KPiArCQkgICArK2luZGV4KQ0KPiArCQlsZWZ0X25vZGUtPmNvbnRlbnQu ZW50cmllc1tsZWZ0X25vZGUtPmVudHJ5X2NvdW50KytdDQo+ICsJCSAgPSByaWdodF9ub2RlLT5j b250ZW50LmVudHJpZXNbaW5kZXhdOw0KPiArCSAgICB9DQo+ICsJICBwYXJlbnQtPmNvbnRlbnQu Y2hpbGRyZW5bbGVmdF9zbG90XS5zZXBhcmF0b3INCj4gKwkgICAgPSBwYXJlbnQtPmNvbnRlbnQu Y2hpbGRyZW5bbGVmdF9zbG90ICsgMV0uc2VwYXJhdG9yOw0KPiArCSAgZm9yICh1bnNpZ25lZCBp bmRleCA9IGxlZnRfc2xvdCArIDE7IGluZGV4ICsgMSA8IHBhcmVudC0+ZW50cnlfY291bnQ7DQo+ ICsJICAgICAgICsraW5kZXgpDQo+ICsJICAgIHBhcmVudC0+Y29udGVudC5jaGlsZHJlbltpbmRl eF0NCj4gKwkgICAgICA9IHBhcmVudC0+Y29udGVudC5jaGlsZHJlbltpbmRleCArIDFdOw0KPiAr CSAgcGFyZW50LT5lbnRyeV9jb3VudC0tOw0KPiArCSAgYnRyZWVfcmVsZWFzZV9ub2RlICh0LCBy aWdodF9ub2RlKTsNCj4gKwkgIGJ0cmVlX25vZGVfdW5sb2NrX2V4Y2x1c2l2ZSAocGFyZW50KTsN Cj4gKwkgIHJldHVybiBsZWZ0X25vZGU7DQo+ICsJfQ0KPiArICAgIH0NCj4gKw0KPiArICAvLyBO byBtZXJnZSBwb3NzaWJsZSwgcmViYWxhbmNlIGluc3RlYWQuDQo+ICsgIGlmIChsZWZ0X25vZGUt PmVudHJ5X2NvdW50ID4gcmlnaHRfbm9kZS0+ZW50cnlfY291bnQpDQo+ICsgICAgew0KPiArICAg ICAgLy8gU2hpZnQgZnJvbSBsZWZ0IHRvIHJpZ2h0Lg0KPiArICAgICAgdW5zaWduZWQgdG9fc2hp ZnQNCj4gKwk9IChsZWZ0X25vZGUtPmVudHJ5X2NvdW50IC0gcmlnaHRfbm9kZS0+ZW50cnlfY291 bnQpIC8gMjsNCj4gKyAgICAgIGlmIChidHJlZV9ub2RlX2lzX2lubmVyIChsZWZ0X25vZGUpKQ0K PiArCXsNCj4gKwkgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCAhPSByaWdodF9ub2Rl LT5lbnRyeV9jb3VudDsNCj4gKytpbmRleCkNCj4gKwkgICAgew0KPiArCSAgICAgIHVuc2lnbmVk IHBvcyA9IHJpZ2h0X25vZGUtPmVudHJ5X2NvdW50IC0gMSAtIGluZGV4Ow0KPiArCSAgICAgIHJp Z2h0X25vZGUtPmNvbnRlbnQuY2hpbGRyZW5bcG9zICsgdG9fc2hpZnRdDQo+ICsJCT0gcmlnaHRf bm9kZS0+Y29udGVudC5jaGlsZHJlbltwb3NdOw0KPiArCSAgICB9DQo+ICsJICBmb3IgKHVuc2ln bmVkIGluZGV4ID0gMDsgaW5kZXggIT0gdG9fc2hpZnQ7ICsraW5kZXgpDQo+ICsJICAgIHJpZ2h0 X25vZGUtPmNvbnRlbnQuY2hpbGRyZW5baW5kZXhdDQo+ICsJICAgICAgPSBsZWZ0X25vZGUtPmNv bnRlbnQNCj4gKwkJICAuY2hpbGRyZW5bbGVmdF9ub2RlLT5lbnRyeV9jb3VudCAtIHRvX3NoaWZ0 ICsgaW5kZXhdOw0KPiArCX0NCj4gKyAgICAgIGVsc2UNCj4gKwl7DQo+ICsJICBmb3IgKHVuc2ln bmVkIGluZGV4ID0gMDsgaW5kZXggIT0gcmlnaHRfbm9kZS0+ZW50cnlfY291bnQ7DQo+ICsraW5k ZXgpDQo+ICsJICAgIHsNCj4gKwkgICAgICB1bnNpZ25lZCBwb3MgPSByaWdodF9ub2RlLT5lbnRy eV9jb3VudCAtIDEgLSBpbmRleDsNCj4gKwkgICAgICByaWdodF9ub2RlLT5jb250ZW50LmVudHJp ZXNbcG9zICsgdG9fc2hpZnRdDQo+ICsJCT0gcmlnaHRfbm9kZS0+Y29udGVudC5lbnRyaWVzW3Bv c107DQo+ICsJICAgIH0NCj4gKwkgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCAhPSB0 b19zaGlmdDsgKytpbmRleCkNCj4gKwkgICAgcmlnaHRfbm9kZS0+Y29udGVudC5lbnRyaWVzW2lu ZGV4XQ0KPiArCSAgICAgID0gbGVmdF9ub2RlLT5jb250ZW50DQo+ICsJCSAgLmVudHJpZXNbbGVm dF9ub2RlLT5lbnRyeV9jb3VudCAtIHRvX3NoaWZ0ICsgaW5kZXhdOw0KPiArCX0NCj4gKyAgICAg IGxlZnRfbm9kZS0+ZW50cnlfY291bnQgLT0gdG9fc2hpZnQ7DQo+ICsgICAgICByaWdodF9ub2Rl LT5lbnRyeV9jb3VudCArPSB0b19zaGlmdDsNCj4gKyAgICB9DQo+ICsgIGVsc2UNCj4gKyAgICB7 DQo+ICsgICAgICAvLyBTaGlmdCBmcm9tIHJpZ2h0IHRvIGxlZnQuDQo+ICsgICAgICB1bnNpZ25l ZCB0b19zaGlmdA0KPiArCT0gKHJpZ2h0X25vZGUtPmVudHJ5X2NvdW50IC0gbGVmdF9ub2RlLT5l bnRyeV9jb3VudCkgLyAyOw0KPiArICAgICAgaWYgKGJ0cmVlX25vZGVfaXNfaW5uZXIgKGxlZnRf bm9kZSkpDQo+ICsJew0KPiArCSAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4ICE9IHRv X3NoaWZ0OyArK2luZGV4KQ0KPiArCSAgICBsZWZ0X25vZGUtPmNvbnRlbnQuY2hpbGRyZW5bbGVm dF9ub2RlLT5lbnRyeV9jb3VudCArIGluZGV4XQ0KPiArCSAgICAgID0gcmlnaHRfbm9kZS0+Y29u dGVudC5jaGlsZHJlbltpbmRleF07DQo+ICsJICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k ZXggIT0gcmlnaHRfbm9kZS0+ZW50cnlfY291bnQgLQ0KPiB0b19zaGlmdDsNCj4gKwkgICAgICAg KytpbmRleCkNCj4gKwkgICAgcmlnaHRfbm9kZS0+Y29udGVudC5jaGlsZHJlbltpbmRleF0NCj4g KwkgICAgICA9IHJpZ2h0X25vZGUtPmNvbnRlbnQuY2hpbGRyZW5baW5kZXggKyB0b19zaGlmdF07 DQo+ICsJfQ0KPiArICAgICAgZWxzZQ0KPiArCXsNCj4gKwkgIGZvciAodW5zaWduZWQgaW5kZXgg PSAwOyBpbmRleCAhPSB0b19zaGlmdDsgKytpbmRleCkNCj4gKwkgICAgbGVmdF9ub2RlLT5jb250 ZW50LmVudHJpZXNbbGVmdF9ub2RlLT5lbnRyeV9jb3VudCArIGluZGV4XQ0KPiArCSAgICAgID0g cmlnaHRfbm9kZS0+Y29udGVudC5lbnRyaWVzW2luZGV4XTsNCj4gKwkgIGZvciAodW5zaWduZWQg aW5kZXggPSAwOyBpbmRleCAhPSByaWdodF9ub2RlLT5lbnRyeV9jb3VudCAtDQo+IHRvX3NoaWZ0 Ow0KPiArCSAgICAgICArK2luZGV4KQ0KPiArCSAgICByaWdodF9ub2RlLT5jb250ZW50LmVudHJp ZXNbaW5kZXhdDQo+ICsJICAgICAgPSByaWdodF9ub2RlLT5jb250ZW50LmVudHJpZXNbaW5kZXgg KyB0b19zaGlmdF07DQo+ICsJfQ0KPiArICAgICAgbGVmdF9ub2RlLT5lbnRyeV9jb3VudCArPSB0 b19zaGlmdDsNCj4gKyAgICAgIHJpZ2h0X25vZGUtPmVudHJ5X2NvdW50IC09IHRvX3NoaWZ0Ow0K PiArICAgIH0NCj4gKyAgdWludHB0cl90IGxlZnRfZmVuY2U7DQo+ICsgIGlmIChidHJlZV9ub2Rl X2lzX2xlYWYgKGxlZnRfbm9kZSkpDQo+ICsgICAgew0KPiArICAgICAgbGVmdF9mZW5jZSA9IHJp Z2h0X25vZGUtPmNvbnRlbnQuZW50cmllc1swXS5iYXNlIC0gMTsNCj4gKyAgICB9DQo+ICsgIGVs c2UNCj4gKyAgICB7DQo+ICsgICAgICBsZWZ0X2ZlbmNlID0gYnRyZWVfbm9kZV9nZXRfZmVuY2Vf a2V5IChsZWZ0X25vZGUpOw0KPiArICAgIH0NCj4gKyAgcGFyZW50LT5jb250ZW50LmNoaWxkcmVu W2xlZnRfc2xvdF0uc2VwYXJhdG9yID0gbGVmdF9mZW5jZTsNCj4gKyAgYnRyZWVfbm9kZV91bmxv Y2tfZXhjbHVzaXZlIChwYXJlbnQpOw0KPiArICBpZiAodGFyZ2V0IDw9IGxlZnRfZmVuY2UpDQo+ ICsgICAgew0KPiArICAgICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChyaWdodF9ub2Rl KTsNCj4gKyAgICAgIHJldHVybiBsZWZ0X25vZGU7DQo+ICsgICAgfQ0KPiArICBlbHNlDQo+ICsg ICAgew0KPiArICAgICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChsZWZ0X25vZGUpOw0K PiArICAgICAgcmV0dXJuIHJpZ2h0X25vZGU7DQo+ICsgICAgfQ0KPiArfQ0KPiArDQo+ICsvLyBJ bnNlcnQgYW4gZW50cnkuDQo+ICtzdGF0aWMgYm9vbA0KPiArYnRyZWVfaW5zZXJ0IChzdHJ1Y3Qg YnRyZWUgKnQsIHVpbnRwdHJfdCBiYXNlLCB1aW50cHRyX3Qgc2l6ZSwNCj4gKwkgICAgICBzdHJ1 Y3Qgb2JqZWN0ICpvYikNCj4gK3sNCj4gKyAgLy8gU2FuaXR5IGNoZWNrLg0KPiArICBpZiAoIXNp emUpDQo+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgIC8vIEFjY2VzcyB0aGUgcm9vdC4N Cj4gKyAgc3RydWN0IGJ0cmVlX25vZGUgKml0ZXIsICpwYXJlbnQgPSBOVUxMOw0KPiArICB7DQo+ ICsgICAgdmVyc2lvbl9sb2NrX2xvY2tfZXhjbHVzaXZlICgmKHQtPnJvb3RfbG9jaykpOw0KPiAr ICAgIGl0ZXIgPSB0LT5yb290Ow0KPiArICAgIGlmIChpdGVyKQ0KPiArICAgICAgew0KPiArCWJ0 cmVlX25vZGVfbG9ja19leGNsdXNpdmUgKGl0ZXIpOw0KPiArICAgICAgfQ0KPiArICAgIGVsc2UN Cj4gKyAgICAgIHsNCj4gKwl0LT5yb290ID0gaXRlciA9IGJ0cmVlX2FsbG9jYXRlX25vZGUgKHQs IGZhbHNlKTsNCj4gKyAgICAgIH0NCj4gKyAgICB2ZXJzaW9uX2xvY2tfdW5sb2NrX2V4Y2x1c2l2 ZSAoJih0LT5yb290X2xvY2spKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFdhbGsgZG93biB0aGUg YnRyZWUgd2l0aCBjbGFzc2ljIGxvY2sgY291cGxpbmcgYW5kIGVhZ2VyIHNwbGl0cy4NCj4gKyAg Ly8gU3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgcGVyZm9ybWFuY2Ugb3B0aW1hbCwgd2Ug Y291bGQgdXNlDQo+ICsgLy8gb3B0aW1pc3RpYyBsb2NrIGNvdXBsaW5nIHVudGlsIHdlIGhpdCBh IG5vZGUgdGhhdCBoYXMgdG8gYmUgbW9kaWZpZWQuDQo+ICsgIC8vIEJ1dCB0aGF0IGlzIG1vcmUg ZGlmZmljdWx0IHRvIGltcGxlbWVudCBhbmQgZnJhbWUgcmVnaXN0cmF0aW9uIGlzDQo+ICsgLy8g cmFyZSBhbnl3YXksIHdlIHVzZSBzaW1wbGUgbG9ja2luZyBmb3Igbm93Lg0KPiArDQo+ICsgIHVp bnRwdHJfdCBmZW5jZSA9IG1heF9zZXBhcmF0b3I7DQo+ICsgIHdoaWxlIChidHJlZV9ub2RlX2lz X2lubmVyIChpdGVyKSkNCj4gKyAgICB7DQo+ICsgICAgICAvLyBVc2UgZWFnZXIgc3BsaXRzIHRv IGF2b2lkIGxvY2sgY291cGxpbmcgdXAuDQo+ICsgICAgICBpZiAoaXRlci0+ZW50cnlfY291bnQg PT0gbWF4X2Zhbm91dF9pbm5lcikNCj4gKwlidHJlZV9zcGxpdF9pbm5lciAodCwgJml0ZXIsICZw YXJlbnQsIGJhc2UpOw0KPiArDQo+ICsgICAgICB1bnNpZ25lZCBzbG90ID0gYnRyZWVfbm9kZV9m aW5kX2lubmVyX3Nsb3QgKGl0ZXIsIGJhc2UpOw0KPiArICAgICAgaWYgKHBhcmVudCkNCj4gKwli dHJlZV9ub2RlX3VubG9ja19leGNsdXNpdmUgKHBhcmVudCk7DQo+ICsgICAgICBwYXJlbnQgPSBp dGVyOw0KPiArICAgICAgZmVuY2UgPSBpdGVyLT5jb250ZW50LmNoaWxkcmVuW3Nsb3RdLnNlcGFy YXRvcjsNCj4gKyAgICAgIGl0ZXIgPSBpdGVyLT5jb250ZW50LmNoaWxkcmVuW3Nsb3RdLmNoaWxk Ow0KPiArICAgICAgYnRyZWVfbm9kZV9sb2NrX2V4Y2x1c2l2ZSAoaXRlcik7DQo+ICsgICAgfQ0K PiArDQo+ICsgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHNwYWNlLg0KPiArICBpZiAoaXRlci0+ZW50 cnlfY291bnQgPT0gbWF4X2Zhbm91dF9sZWFmKQ0KPiArICAgIGJ0cmVlX3NwbGl0X2xlYWYgKHQs ICZpdGVyLCAmcGFyZW50LCBmZW5jZSwgYmFzZSk7ICBpZiAocGFyZW50KQ0KPiArICAgIGJ0cmVl X25vZGVfdW5sb2NrX2V4Y2x1c2l2ZSAocGFyZW50KTsNCj4gKw0KPiArICAvLyBJbnNlcnQgaW4g bm9kZS4NCj4gKyAgdW5zaWduZWQgc2xvdCA9IGJ0cmVlX25vZGVfZmluZF9sZWFmX3Nsb3QgKGl0 ZXIsIGJhc2UpOw0KPiArICBpZiAoKHNsb3QgPCBpdGVyLT5lbnRyeV9jb3VudCkgJiYgKGl0ZXIt PmNvbnRlbnQuZW50cmllc1tzbG90XS5iYXNlID09DQo+IGJhc2UpKQ0KPiArICAgIHsNCj4gKyAg ICAgIC8vIER1cGxpY2F0ZSBlbnRyeSwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLg0KPiArICAg ICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChpdGVyKTsNCj4gKyAgICAgIHJldHVybiBm YWxzZTsNCj4gKyAgICB9DQo+ICsgIGZvciAodW5zaWduZWQgaW5kZXggPSBpdGVyLT5lbnRyeV9j b3VudDsgaW5kZXggPiBzbG90OyAtLWluZGV4KQ0KPiArICAgIGl0ZXItPmNvbnRlbnQuZW50cmll c1tpbmRleF0gPSBpdGVyLT5jb250ZW50LmVudHJpZXNbaW5kZXggLSAxXTsNCj4gKyAgc3RydWN0 IGxlYWZfZW50cnkgKmUgPSAmKGl0ZXItPmNvbnRlbnQuZW50cmllc1tzbG90XSk7DQo+ICsgIGUt PmJhc2UgPSBiYXNlOw0KPiArICBlLT5zaXplID0gc2l6ZTsNCj4gKyAgZS0+b2IgPSBvYjsNCj4g KyAgaXRlci0+ZW50cnlfY291bnQrKzsNCj4gKyAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZl IChpdGVyKTsNCj4gKyAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8vIFJlbW92ZSBhbiBl bnRyeS4NCj4gK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0ICoNCj4gK2J0cmVlX3JlbW92ZSAoc3RydWN0 IGJ0cmVlICp0LCB1aW50cHRyX3QgYmFzZSkgew0KPiArICAvLyBBY2Nlc3MgdGhlIHJvb3QuDQo+ ICsgIHZlcnNpb25fbG9ja19sb2NrX2V4Y2x1c2l2ZSAoJih0LT5yb290X2xvY2spKTsNCj4gKyAg c3RydWN0IGJ0cmVlX25vZGUgKml0ZXIgPSB0LT5yb290Ow0KPiArICBpZiAoaXRlcikNCj4gKyAg ICBidHJlZV9ub2RlX2xvY2tfZXhjbHVzaXZlIChpdGVyKTsNCj4gKyAgdmVyc2lvbl9sb2NrX3Vu bG9ja19leGNsdXNpdmUgKCYodC0+cm9vdF9sb2NrKSk7DQo+ICsgIGlmICghaXRlcikNCj4gKyAg ICByZXR1cm4gTlVMTDsNCj4gKw0KPiArICAvLyBTYW1lIHN0cmF0ZWd5IGFzIHdpdGggaW5zZXJ0 LCB3YWxrIGRvd24gd2l0aCBsb2NrIGNvdXBsaW5nIGFuZA0KPiArICAvLyBtZXJnZSBlYWdlcmx5 Lg0KPiArICB3aGlsZSAoYnRyZWVfbm9kZV9pc19pbm5lciAoaXRlcikpDQo+ICsgICAgew0KPiAr ICAgICAgdW5zaWduZWQgc2xvdCA9IGJ0cmVlX25vZGVfZmluZF9pbm5lcl9zbG90IChpdGVyLCBi YXNlKTsNCj4gKyAgICAgIHN0cnVjdCBidHJlZV9ub2RlICpuZXh0ID0gaXRlci0+Y29udGVudC5j aGlsZHJlbltzbG90XS5jaGlsZDsNCj4gKyAgICAgIGJ0cmVlX25vZGVfbG9ja19leGNsdXNpdmUg KG5leHQpOw0KPiArICAgICAgaWYgKGJ0cmVlX25vZGVfbmVlZHNfbWVyZ2UgKG5leHQpKQ0KPiAr CXsNCj4gKwkgIC8vIFVzZSBlYWdlciBtZXJnZXMgdG8gYXZvaWQgbG9jayBjb3VwbGluZyB1cC4N Cj4gKwkgIGl0ZXIgPSBidHJlZV9tZXJnZV9ub2RlICh0LCBzbG90LCBpdGVyLCBiYXNlKTsNCj4g Kwl9DQo+ICsgICAgICBlbHNlDQo+ICsJew0KPiArCSAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVz aXZlIChpdGVyKTsNCj4gKwkgIGl0ZXIgPSBuZXh0Ow0KPiArCX0NCj4gKyAgICB9DQo+ICsNCj4g KyAgLy8gUmVtb3ZlIGV4aXN0aW5nIGVudHJ5Lg0KPiArICB1bnNpZ25lZCBzbG90ID0gYnRyZWVf bm9kZV9maW5kX2xlYWZfc2xvdCAoaXRlciwgYmFzZSk7DQo+ICsgIGlmICgoc2xvdCA+PSBpdGVy LT5lbnRyeV9jb3VudCkgfHwgKGl0ZXItPmNvbnRlbnQuZW50cmllc1tzbG90XS5iYXNlICE9DQo+ IGJhc2UpKQ0KPiArICAgIHsNCj4gKyAgICAgIC8vIE5vdCBmb3VuZCwgdGhpcyBzaG91bGQgbmV2 ZXIgaGFwcGVuLg0KPiArICAgICAgYnRyZWVfbm9kZV91bmxvY2tfZXhjbHVzaXZlIChpdGVyKTsN Cj4gKyAgICAgIHJldHVybiBOVUxMOw0KPiArICAgIH0NCj4gKyAgc3RydWN0IG9iamVjdCAqb2Ig PSBpdGVyLT5jb250ZW50LmVudHJpZXNbc2xvdF0ub2I7DQo+ICsgIGZvciAodW5zaWduZWQgaW5k ZXggPSBzbG90OyBpbmRleCArIDEgPCBpdGVyLT5lbnRyeV9jb3VudDsgKytpbmRleCkNCj4gKyAg ICBpdGVyLT5jb250ZW50LmVudHJpZXNbaW5kZXhdID0gaXRlci0+Y29udGVudC5lbnRyaWVzW2lu ZGV4ICsgMV07DQo+ICsgIGl0ZXItPmVudHJ5X2NvdW50LS07DQo+ICsgIGJ0cmVlX25vZGVfdW5s b2NrX2V4Y2x1c2l2ZSAoaXRlcik7DQo+ICsgIHJldHVybiBvYjsNCj4gK30NCj4gKw0KPiArLy8g RmluZCB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MuDQo+ICtz dGF0aWMgc3RydWN0IG9iamVjdCAqDQo+ICtidHJlZV9sb29rdXAgKGNvbnN0IHN0cnVjdCBidHJl ZSAqdCwgdWludHB0cl90IHRhcmdldF9hZGRyKSB7DQo+ICsgIC8vIFdpdGhpbiB0aGlzIGZ1bmN0 aW9uIG1hbnkgbG9hZHMgYXJlIHJlbGF4ZWQgYXRvbWljIGxvYWRzLg0KPiArICAvLyBVc2UgYSBt YWNybyB0byBrZWVwIHRoZSBjb2RlIHJlYXNvbmFibGUuDQo+ICsjZGVmaW5lIFJMT0FEKHgpIF9f YXRvbWljX2xvYWRfbiAoJih4KSwgX19BVE9NSUNfUkVMQVhFRCkNCj4gKw0KPiArICAvLyBGb3Ig dGFyZ2V0cyB3aGVyZSB1bndpbmQgaW5mbyBpcyB1c3VhbGx5IG5vdCByZWdpc3RlcmVkIHRocm91 Z2gNCj4gKyB0aGVzZSAgLy8gQVBJcyBhbnltb3JlLCBhdm9pZCBhbnkgc2VxdWVudGlhbCBjb25z aXN0ZW50IGF0b21pY3MuDQo+ICsgIC8vIFVzZSByZWxheGVkIE1PIGhlcmUsIGl0IGlzIHVwIHRv IHRoZSBhcHAgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ICsgbGlicmFyeSAgLy8gbG9hZGluZy9pbml0 aWFsaXphdGlvbiBoYXBwZW5zLWJlZm9yZSB1c2luZyB0aGF0IGxpYnJhcnkNCj4gKyBpbiBvdGhl ciAgLy8gdGhyZWFkcyAoaW4gcGFydGljdWxhciB1bndpbmRpbmcgd2l0aCB0aGF0IGxpYnJhcnkn cw0KPiArIGZ1bmN0aW9ucyAgLy8gYXBwZWFyaW5nIGluIHRoZSBiYWNrdHJhY2VzKS4gIENhbGxp bmcgdGhhdCBsaWJyYXJ5J3MNCj4gKyBmdW5jdGlvbnMgIC8vIHdpdGhvdXQgd2FpdGluZyBmb3Ig dGhlIGxpYnJhcnkgdG8gaW5pdGlhbGl6ZSB3b3VsZCBiZSByYWN5Lg0KPiArICBpZiAoX19idWls dGluX2V4cGVjdCAoIVJMT0FEICh0LT5yb290KSwgMSkpDQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ ICsNCj4gKyAgLy8gVGhlIHVud2luZGluZyB0YWJsZXMgYXJlIG1vc3RseSBzdGF0aWMsIHRoZXkg b25seSBjaGFuZ2Ugd2hlbiAgLy8NCj4gKyBmcmFtZXMgYXJlIGFkZGVkIG9yIHJlbW92ZWQuIFRo aXMgbWFrZXMgaXQgZXh0cmVtZWx5IHVubGlrZWx5IHRoYXQNCj4gKyB0aGV5ICAvLyBjaGFuZ2Ug ZHVyaW5nIGEgZ2l2ZW4gdW53aW5kaW5nIHNlcXVlbmNlLiBUaHVzLCB3ZSBvcHRpbWl6ZQ0KPiAr IGZvciB0aGUgIC8vIGNvbnRlbnRpb24gZnJlZSBjYXNlIGFuZCB1c2Ugb3B0aW1pc3RpYyBsb2Nr IGNvdXBsaW5nLg0KPiArIFRoaXMgZG9lcyBub3QgIC8vIHJlcXVpcmUgYW55IHdyaXRlcyB0byBz aGFyZWQgc3RhdGUsIGluc3RlYWQgd2UNCj4gKyB2YWxpZGF0ZSBldmVyeSByZWFkLiBJdCBpcyAg Ly8gaW1wb3J0YW50IHRoYXQgd2UgZG8gbm90IHRydXN0IGFueQ0KPiArIHZhbHVlIHRoYXQgd2Ug aGF2ZSByZWFkIHVudGlsIHdlIGNhbGwgIC8vIHZhbGlkYXRlIGFnYWluLiBEYXRhIGNhbg0KPiAr IGNoYW5nZSBhdCBhcmJpdHJhcnkgcG9pbnRzIGluIHRpbWUsIHRodXMgd2UgYWx3YXlzICAvLyBj b3B5IHNvbWV0aGluZw0KPiArIGludG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgdmFsaWRhdGUgYWdh aW4gYmVmb3JlIGFjdGluZyBvbiAgLy8gdGhlDQo+ICsgcmVhZC4gSW4gdGhlIHVubGlrZWx5IGV2 ZW50IHRoYXQgd2UgZW5jb3VudGVyIGEgY29uY3VycmVudCBjaGFuZ2Ugd2UgIC8vDQo+IHNpbXBs eSByZXN0YXJ0IGFuZCB0cnkgYWdhaW4uDQo+ICsNCj4gK3Jlc3RhcnQ6DQo+ICsgIHN0cnVjdCBi dHJlZV9ub2RlICppdGVyOw0KPiArICB1aW50cHRyX3QgbG9jazsNCj4gKyAgew0KPiArICAgIC8v IEFjY2Vzc2luZyB0aGUgcm9vdCBub2RlIHJlcXVpcmVzIGRlZmVuZGluZyBhZ2FpbnN0IGNvbmN1 cnJlbnQgcG9pbnRlcg0KPiArICAgIC8vIGNoYW5nZXMgVGh1cyB3ZSBjb3VwbGUgcm9vdExvY2sg LT4gbG9jayBvbiByb290IG5vZGUgLT4gdmFsaWRhdGUNCj4gcm9vdExvY2sNCj4gKyAgICBpZiAo IXZlcnNpb25fbG9ja19sb2NrX29wdGltaXN0aWMgKCYodC0+cm9vdF9sb2NrKSwgJmxvY2spKQ0K PiArICAgICAgZ290byByZXN0YXJ0Ow0KPiArICAgIGl0ZXIgPSBSTE9BRCAodC0+cm9vdCk7DQo+ ICsgICAgaWYgKCF2ZXJzaW9uX2xvY2tfdmFsaWRhdGUgKCYodC0+cm9vdF9sb2NrKSwgbG9jaykp DQo+ICsgICAgICBnb3RvIHJlc3RhcnQ7DQo+ICsgICAgaWYgKCFpdGVyKQ0KPiArICAgICAgcmV0 dXJuIE5VTEw7DQo+ICsgICAgdWludHB0cl90IGNoaWxkX2xvY2s7DQo+ICsgICAgaWYgKCghYnRy ZWVfbm9kZV9sb2NrX29wdGltaXN0aWMgKGl0ZXIsICZjaGlsZF9sb2NrKSkNCj4gKwl8fCAoIXZl cnNpb25fbG9ja192YWxpZGF0ZSAoJih0LT5yb290X2xvY2spLCBsb2NrKSkpDQo+ICsgICAgICBn b3RvIHJlc3RhcnQ7DQo+ICsgICAgbG9jayA9IGNoaWxkX2xvY2s7DQo+ICsgIH0NCj4gKw0KPiAr ICAvLyBOb3cgd2UgY2FuIHdhbGsgZG93biB0b3dhcmRzIHRoZSByaWdodCBsZWFmIG5vZGUuDQo+ ICsgIHdoaWxlICh0cnVlKQ0KPiArICAgIHsNCj4gKyAgICAgIGVudW0gbm9kZV90eXBlIHR5cGUg PSBSTE9BRCAoaXRlci0+dHlwZSk7DQo+ICsgICAgICB1bnNpZ25lZCBlbnRyeV9jb3VudCA9IFJM T0FEIChpdGVyLT5lbnRyeV9jb3VudCk7DQo+ICsgICAgICBpZiAoIWJ0cmVlX25vZGVfdmFsaWRh dGUgKGl0ZXIsIGxvY2spKQ0KPiArCWdvdG8gcmVzdGFydDsNCj4gKyAgICAgIGlmICghZW50cnlf Y291bnQpDQo+ICsJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKyAgICAgIGlmICh0eXBlID09IGJ0cmVl X25vZGVfaW5uZXIpDQo+ICsJew0KPiArCSAgLy8gV2UgY2Fubm90IGNhbGwgZmluZF9pbm5lcl9z bG90IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIChyZWxheGVkKQ0KPiArCSAgLy8gYXRvbWljIHJlYWRz IGhlcmUuDQo+ICsJICB1bnNpZ25lZCBzbG90ID0gMDsNCj4gKwkgIHdoaWxlICgNCj4gKwkgICAg KChzbG90ICsgMSkgPCBlbnRyeV9jb3VudCkNCj4gKwkgICAgJiYgKFJMT0FEIChpdGVyLT5jb250 ZW50LmNoaWxkcmVuW3Nsb3RdLnNlcGFyYXRvcikgPCB0YXJnZXRfYWRkcikpDQo+ICsJICAgICsr c2xvdDsNCj4gKwkgIHN0cnVjdCBidHJlZV9ub2RlICpjaGlsZCA9IFJMT0FEIChpdGVyLQ0KPiA+ Y29udGVudC5jaGlsZHJlbltzbG90XS5jaGlsZCk7DQo+ICsJICBpZiAoIWJ0cmVlX25vZGVfdmFs aWRhdGUgKGl0ZXIsIGxvY2spKQ0KPiArCSAgICBnb3RvIHJlc3RhcnQ7DQo+ICsNCj4gKwkgIC8v IFRoZSBub2RlIGNvbnRlbnQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGltZSwgdGh1cyB3 ZSBtdXN0DQo+ICsJICAvLyBpbnRlcmxlYXZlIHBhcmVudCBhbmQgY2hpbGQgY2hlY2tzLg0KPiAr CSAgdWludHB0cl90IGNoaWxkX2xvY2s7DQo+ICsJICBpZiAoIWJ0cmVlX25vZGVfbG9ja19vcHRp bWlzdGljIChjaGlsZCwgJmNoaWxkX2xvY2spKQ0KPiArCSAgICBnb3RvIHJlc3RhcnQ7DQo+ICsJ ICBpZiAoIWJ0cmVlX25vZGVfdmFsaWRhdGUgKGl0ZXIsIGxvY2spKQ0KPiArCSAgICBnb3RvIHJl c3RhcnQ7IC8vIG1ha2Ugc3VyZSB3ZSBzdGlsbCBwb2ludCB0byB0aGUgY29ycmVjdCBub2RlIGFm dGVyDQo+ICsJCQkgIC8vIGFjcXVpcmluZyB0aGUgb3B0aW1pc3RpYyBsb2NrLg0KPiArDQo+ICsJ ICAvLyBHbyBkb3duDQo+ICsJICBpdGVyID0gY2hpbGQ7DQo+ICsJICBsb2NrID0gY2hpbGRfbG9j azsNCj4gKwl9DQo+ICsgICAgICBlbHNlDQo+ICsJew0KPiArCSAgLy8gV2UgY2Fubm90IGNhbGwg ZmluZF9sZWFmX3Nsb3QgaGVyZSBiZWNhdXNlIHdlIG5lZWQgKHJlbGF4ZWQpDQo+ICsJICAvLyBh dG9taWMgcmVhZHMgaGVyZS4NCj4gKwkgIHVuc2lnbmVkIHNsb3QgPSAwOw0KPiArCSAgd2hpbGUg KCgoc2xvdCArIDEpIDwgZW50cnlfY291bnQpDQo+ICsJCSAmJiAoUkxPQUQgKGl0ZXItPmNvbnRl bnQuZW50cmllc1tzbG90XS5iYXNlKQ0KPiArCQkgICAgICAgKyBSTE9BRCAoaXRlci0+Y29udGVu dC5lbnRyaWVzW3Nsb3RdLnNpemUpDQo+ICsJCSAgICAgPD0gdGFyZ2V0X2FkZHIpKQ0KPiArCSAg ICArK3Nsb3Q7DQo+ICsJICBzdHJ1Y3QgbGVhZl9lbnRyeSBlbnRyeTsNCj4gKwkgIGVudHJ5LmJh c2UgPSBSTE9BRCAoaXRlci0+Y29udGVudC5lbnRyaWVzW3Nsb3RdLmJhc2UpOw0KPiArCSAgZW50 cnkuc2l6ZSA9IFJMT0FEIChpdGVyLT5jb250ZW50LmVudHJpZXNbc2xvdF0uc2l6ZSk7DQo+ICsJ ICBlbnRyeS5vYiA9IFJMT0FEIChpdGVyLT5jb250ZW50LmVudHJpZXNbc2xvdF0ub2IpOw0KPiAr CSAgaWYgKCFidHJlZV9ub2RlX3ZhbGlkYXRlIChpdGVyLCBsb2NrKSkNCj4gKwkgICAgZ290byBy ZXN0YXJ0Ow0KPiArDQo+ICsJICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgaGl0Lg0KPiArCSAgaWYg KChlbnRyeS5iYXNlIDw9IHRhcmdldF9hZGRyKQ0KPiArCSAgICAgICYmICh0YXJnZXRfYWRkciA8 IGVudHJ5LmJhc2UgKyBlbnRyeS5zaXplKSkNCj4gKwkgICAgew0KPiArCSAgICAgIHJldHVybiBl bnRyeS5vYjsNCj4gKwkgICAgfQ0KPiArCSAgcmV0dXJuIE5VTEw7DQo+ICsJfQ0KPiArICAgIH0N Cj4gKyN1bmRlZiBSTE9BRA0KPiArfQ0KPiArDQo+ICsjZW5kaWYgLyogdW53aW5kLWR3Mi1idHJl ZS5oICovDQo+IGRpZmYgLS1naXQgYS9saWJnY2MvdW53aW5kLWR3Mi1mZGUuYyBiL2xpYmdjYy91 bndpbmQtZHcyLWZkZS5jIGluZGV4DQo+IDhlZTU1YmU1Njc1Li4xMTY1YmUwYzZkZiAxMDA2NDQN Cj4gLS0tIGEvbGliZ2NjL3Vud2luZC1kdzItZmRlLmMNCj4gKysrIGIvbGliZ2NjL3Vud2luZC1k dzItZmRlLmMNCj4gQEAgLTQyLDE1ICs0MiwzNCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFu ZCBDT1BZSU5HLlJVTlRJTUUNCj4gcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCj4gICAjZW5k aWYNCj4gICAjZW5kaWYNCj4gDQo+ICsjaWZkZWYgQVRPTUlDX0ZERV9GQVNUX1BBVEgNCj4gKyNp bmNsdWRlICJ1bndpbmQtZHcyLWJ0cmVlLmgiDQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgYnRyZWUg cmVnaXN0ZXJlZF9mcmFtZXM7DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtyZWxlYXNlX3JlZ2lz dGVyZWRfZnJhbWVzICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoZGVzdHJ1Y3RvciAoMTEwKSkpOw0K PiArc3RhdGljIHZvaWQgcmVsZWFzZV9yZWdpc3RlcmVkX2ZyYW1lcyAodm9pZCkgew0KPiArICAv KiBSZWxlYXNlIHRoZSBiLXRyZWUgYW5kIGFsbCBmcmFtZXMuIEZyYW1lIHJlbGVhc2VzIHRoYXQg aGFwcGVuIGxhdGVyIGFyZQ0KPiArICAgKiBzaWxlbnRseSBpZ25vcmVkICovDQo+ICsgIGJ0cmVl X2Rlc3Ryb3kgKCZyZWdpc3RlcmVkX2ZyYW1lcyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk DQo+ICtnZXRfcGNfcmFuZ2UgKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iLCB1aW50cHRyX3QgKnJh bmdlKTsgc3RhdGljIHZvaWQNCj4gK2luaXRfb2JqZWN0IChzdHJ1Y3Qgb2JqZWN0ICpvYik7DQo+ ICsNCj4gKyNlbHNlDQo+ICsNCj4gICAvKiBUaGUgdW5zZWVuX29iamVjdHMgbGlzdCBjb250YWlu cyBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQNCj4gICAgICBidXQgbm90IHlldCBj YXRlZ29yaXplZCBpbiBhbnkgd2F5LiAgVGhlIHNlZW5fb2JqZWN0cyBsaXN0IGhhcyBoYWQNCj4g ICAgICBpdHMgcGNfYmVnaW4gYW5kIGNvdW50IGZpZWxkcyBpbml0aWFsaXplZCBhdCBtaW5pbXVt LCBhbmQgaXMgc29ydGVkDQo+ICAgICAgYnkgZGVjcmVhc2luZyB2YWx1ZSBvZiBwY19iZWdpbi4g ICovDQo+ICAgc3RhdGljIHN0cnVjdCBvYmplY3QgKnVuc2Vlbl9vYmplY3RzOw0KPiAgIHN0YXRp YyBzdHJ1Y3Qgb2JqZWN0ICpzZWVuX29iamVjdHM7DQo+IC0jaWZkZWYgQVRPTUlDX0ZERV9GQVNU X1BBVEgNCj4gLXN0YXRpYyBpbnQgYW55X29iamVjdHNfcmVnaXN0ZXJlZDsNCj4gLSNlbmRpZg0K PiANCj4gICAjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVQNCj4gICBzdGF0aWMgX19ndGhyZWFk X211dGV4X3Qgb2JqZWN0X211dGV4ID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7IEBADQo+IC03OCw2 ICs5Nyw3IEBAIGluaXRfb2JqZWN0X211dGV4X29uY2UgKHZvaWQpDQo+ICAgc3RhdGljIF9fZ3Ro cmVhZF9tdXRleF90IG9iamVjdF9tdXRleDsNCj4gICAjZW5kaWYNCj4gICAjZW5kaWYNCj4gKyNl bmRpZg0KPiANCj4gICAvKiBDYWxsZWQgZnJvbSBjcnRiZWdpbi5vIHRvIHJlZ2lzdGVyIHRoZSB1 bndpbmQgaW5mbyBmb3IgYW4gb2JqZWN0LiAgKi8NCj4gDQo+IEBAIC05OSwyMyArMTE5LDIzIEBA IF9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyAoY29uc3Qgdm9pZCAqYmVnaW4sDQo+IHN0cnVj dCBvYmplY3QgKm9iLA0KPiAgICAgb2ItPmZkZV9lbmQgPSBOVUxMOw0KPiAgICNlbmRpZg0KPiAN Cj4gKyNpZmRlZiBBVE9NSUNfRkRFX0ZBU1RfUEFUSA0KPiArICAvLyBJbml0aWFsaXplICBlYWdl cmx5IHRvIGF2b2lkIGxvY2tpbmcgbGF0ZXINCj4gKyAgaW5pdF9vYmplY3QgKG9iKTsNCj4gKw0K PiArICAvLyBBbmQgcmVnaXN0ZXIgdGhlIGZyYW1lDQo+ICsgIHVpbnRwdHJfdCByYW5nZVsyXTsN Cj4gKyAgZ2V0X3BjX3JhbmdlIChvYiwgcmFuZ2UpOw0KPiArICBidHJlZV9pbnNlcnQgKCZyZWdp c3RlcmVkX2ZyYW1lcywgcmFuZ2VbMF0sIHJhbmdlWzFdIC0gcmFuZ2VbMF0sIG9iKTsNCj4gKyNl bHNlDQo+ICAgICBpbml0X29iamVjdF9tdXRleF9vbmNlICgpOw0KPiAgICAgX19ndGhyZWFkX211 dGV4X2xvY2sgKCZvYmplY3RfbXV0ZXgpOw0KPiANCj4gICAgIG9iLT5uZXh0ID0gdW5zZWVuX29i amVjdHM7DQo+ICAgICB1bnNlZW5fb2JqZWN0cyA9IG9iOw0KPiAtI2lmZGVmIEFUT01JQ19GREVf RkFTVF9QQVRIDQo+IC0gIC8qIFNldCBmbGFnIHRoYXQgYXQgbGVhc3Qgb25lIGxpYnJhcnkgaGFz IHJlZ2lzdGVyZWQgRkRFcy4NCj4gLSAgICAgVXNlIHJlbGF4ZWQgTU8gaGVyZSwgaXQgaXMgdXAg dG8gdGhlIGFwcCB0byBlbnN1cmUgdGhhdCB0aGUgbGlicmFyeQ0KPiAtICAgICBsb2FkaW5nL2lu aXRpYWxpemF0aW9uIGhhcHBlbnMtYmVmb3JlIHVzaW5nIHRoYXQgbGlicmFyeSBpbiBvdGhlcg0K PiAtICAgICB0aHJlYWRzIChpbiBwYXJ0aWN1bGFyIHVud2luZGluZyB3aXRoIHRoYXQgbGlicmFy eSdzIGZ1bmN0aW9ucw0KPiAtICAgICBhcHBlYXJpbmcgaW4gdGhlIGJhY2t0cmFjZXMpLiAgQ2Fs bGluZyB0aGF0IGxpYnJhcnkncyBmdW5jdGlvbnMNCj4gLSAgICAgd2l0aG91dCB3YWl0aW5nIGZv ciB0aGUgbGlicmFyeSB0byBpbml0aWFsaXplIHdvdWxkIGJlIHJhY3kuICAqLw0KPiAtICBpZiAo IWFueV9vYmplY3RzX3JlZ2lzdGVyZWQpDQo+IC0gICAgX19hdG9taWNfc3RvcmVfbiAoJmFueV9v YmplY3RzX3JlZ2lzdGVyZWQsIDEsIF9fQVRPTUlDX1JFTEFYRUQpOw0KPiAtI2VuZGlmDQo+IA0K PiAgICAgX19ndGhyZWFkX211dGV4X3VubG9jayAoJm9iamVjdF9tdXRleCk7DQo+ICsjZW5kaWYN Cj4gICB9DQo+IA0KPiAgIHZvaWQNCj4gQEAgLTE1MywyMyArMTczLDIzIEBAIF9fcmVnaXN0ZXJf ZnJhbWVfaW5mb190YWJsZV9iYXNlcyAodm9pZCAqYmVnaW4sDQo+IHN0cnVjdCBvYmplY3QgKm9i LA0KPiAgICAgb2ItPnMuYi5mcm9tX2FycmF5ID0gMTsNCj4gICAgIG9iLT5zLmIuZW5jb2Rpbmcg PSBEV19FSF9QRV9vbWl0Ow0KPiANCj4gKyNpZmRlZiBBVE9NSUNfRkRFX0ZBU1RfUEFUSA0KPiAr ICAvLyBJbml0aWFsaXplICBlYWdlcmx5IHRvIGF2b2lkIGxvY2tpbmcgbGF0ZXINCj4gKyAgaW5p dF9vYmplY3QgKG9iKTsNCj4gKw0KPiArICAvLyBBbmQgcmVnaXN0ZXIgdGhlIGZyYW1lDQo+ICsg IHVpbnRwdHJfdCByYW5nZVsyXTsNCj4gKyAgZ2V0X3BjX3JhbmdlIChvYiwgcmFuZ2UpOw0KPiAr ICBidHJlZV9pbnNlcnQgKCZyZWdpc3RlcmVkX2ZyYW1lcywgcmFuZ2VbMF0sIHJhbmdlWzFdIC0g cmFuZ2VbMF0sIG9iKTsNCj4gKyNlbHNlDQo+ICAgICBpbml0X29iamVjdF9tdXRleF9vbmNlICgp Ow0KPiAgICAgX19ndGhyZWFkX211dGV4X2xvY2sgKCZvYmplY3RfbXV0ZXgpOw0KPiANCj4gICAg IG9iLT5uZXh0ID0gdW5zZWVuX29iamVjdHM7DQo+ICAgICB1bnNlZW5fb2JqZWN0cyA9IG9iOw0K PiAtI2lmZGVmIEFUT01JQ19GREVfRkFTVF9QQVRIDQo+IC0gIC8qIFNldCBmbGFnIHRoYXQgYXQg bGVhc3Qgb25lIGxpYnJhcnkgaGFzIHJlZ2lzdGVyZWQgRkRFcy4NCj4gLSAgICAgVXNlIHJlbGF4 ZWQgTU8gaGVyZSwgaXQgaXMgdXAgdG8gdGhlIGFwcCB0byBlbnN1cmUgdGhhdCB0aGUgbGlicmFy eQ0KPiAtICAgICBsb2FkaW5nL2luaXRpYWxpemF0aW9uIGhhcHBlbnMtYmVmb3JlIHVzaW5nIHRo YXQgbGlicmFyeSBpbiBvdGhlcg0KPiAtICAgICB0aHJlYWRzIChpbiBwYXJ0aWN1bGFyIHVud2lu ZGluZyB3aXRoIHRoYXQgbGlicmFyeSdzIGZ1bmN0aW9ucw0KPiAtICAgICBhcHBlYXJpbmcgaW4g dGhlIGJhY2t0cmFjZXMpLiAgQ2FsbGluZyB0aGF0IGxpYnJhcnkncyBmdW5jdGlvbnMNCj4gLSAg ICAgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGlicmFyeSB0byBpbml0aWFsaXplIHdvdWxkIGJl IHJhY3kuICAqLw0KPiAtICBpZiAoIWFueV9vYmplY3RzX3JlZ2lzdGVyZWQpDQo+IC0gICAgX19h dG9taWNfc3RvcmVfbiAoJmFueV9vYmplY3RzX3JlZ2lzdGVyZWQsIDEsIF9fQVRPTUlDX1JFTEFY RUQpOw0KPiAtI2VuZGlmDQo+IA0KPiAgICAgX19ndGhyZWFkX211dGV4X3VubG9jayAoJm9iamVj dF9tdXRleCk7DQo+ICsjZW5kaWYNCj4gICB9DQo+IA0KPiAgIHZvaWQNCj4gQEAgLTIwMCwxNiAr MjIwLDMzIEBAIF9fcmVnaXN0ZXJfZnJhbWVfdGFibGUgKHZvaWQgKmJlZ2luKQ0KPiAgIHZvaWQg Kg0KPiAgIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzIChjb25zdCB2b2lkICpiZWdpbikN Cj4gICB7DQo+IC0gIHN0cnVjdCBvYmplY3QgKipwOw0KPiAgICAgc3RydWN0IG9iamVjdCAqb2Ig PSAwOw0KPiANCj4gICAgIC8qIElmIC5laF9mcmFtZSBpcyBlbXB0eSwgd2UgaGF2ZW4ndCByZWdp c3RlcmVkLiAgKi8NCj4gICAgIGlmICgoY29uc3QgdXdvcmQgKikgYmVnaW4gPT0gMCB8fCAqKGNv bnN0IHV3b3JkICopIGJlZ2luID09IDApDQo+ICAgICAgIHJldHVybiBvYjsNCj4gDQo+ICsjaWZk ZWYgQVRPTUlDX0ZERV9GQVNUX1BBVEgNCj4gKyAgLy8gRmluZCB0aGUgY29ycmVzcG9uZGluZyBQ QyByYW5nZQ0KPiArICBzdHJ1Y3Qgb2JqZWN0IGxvb2t1cG9iOw0KPiArICBsb29rdXBvYi50YmFz ZSA9IDA7DQo+ICsgIGxvb2t1cG9iLmRiYXNlID0gMDsNCj4gKyAgbG9va3Vwb2IudS5zaW5nbGUg PSBiZWdpbjsNCj4gKyAgbG9va3Vwb2Iucy5pID0gMDsNCj4gKyAgbG9va3Vwb2Iucy5iLmVuY29k aW5nID0gRFdfRUhfUEVfb21pdDsgI2lmZGVmDQo+ICtEV0FSRjJfT0JKRUNUX0VORF9QVFJfRVhU RU5TSU9ODQo+ICsgIGxvb2t1cG9iLmZkZV9lbmQgPSBOVUxMOw0KPiArI2VuZGlmDQo+ICsgIHVp bnRwdHJfdCByYW5nZVsyXTsNCj4gKyAgZ2V0X3BjX3JhbmdlICgmbG9va3Vwb2IsIHJhbmdlKTsN Cj4gKw0KPiArICAvLyBBbmQgcmVtb3ZlDQo+ICsgIG9iID0gYnRyZWVfcmVtb3ZlICgmcmVnaXN0 ZXJlZF9mcmFtZXMsIHJhbmdlWzBdKTsgI2Vsc2UNCj4gICAgIGluaXRfb2JqZWN0X211dGV4X29u Y2UgKCk7DQo+ICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoJm9iamVjdF9tdXRleCk7DQo+IA0K PiArICBzdHJ1Y3Qgb2JqZWN0ICoqcDsNCj4gICAgIGZvciAocCA9ICZ1bnNlZW5fb2JqZWN0czsg KnAgOyBwID0gJigqcCktPm5leHQpDQo+ICAgICAgIGlmICgoKnApLT51LnNpbmdsZSA9PSBiZWdp bikNCj4gICAgICAgICB7DQo+IEBAIC0yNDEsNiArMjc4LDggQEAgX19kZXJlZ2lzdGVyX2ZyYW1l X2luZm9fYmFzZXMgKGNvbnN0IHZvaWQgKmJlZ2luKQ0KPiANCj4gICAgb3V0Og0KPiAgICAgX19n dGhyZWFkX211dGV4X3VubG9jayAoJm9iamVjdF9tdXRleCk7DQo+ICsjZW5kaWYNCj4gKw0KPiAg ICAgZ2NjX2Fzc2VydCAob2IpOw0KPiAgICAgcmV0dXJuICh2b2lkICopIG9iOw0KPiAgIH0NCj4g QEAgLTI2NCw3ICszMDMsNyBAQCBfX2RlcmVnaXN0ZXJfZnJhbWUgKHZvaWQgKmJlZ2luKQ0KPiAg ICAgIGluc3RlYWQgb2YgYW4gX1Vud2luZF9Db250ZXh0LiAgKi8NCj4gDQo+ICAgc3RhdGljIF9V bndpbmRfUHRyDQo+IC1iYXNlX2Zyb21fb2JqZWN0ICh1bnNpZ25lZCBjaGFyIGVuY29kaW5nLCBz dHJ1Y3Qgb2JqZWN0ICpvYikNCj4gK2Jhc2VfZnJvbV9vYmplY3QgKHVuc2lnbmVkIGNoYXIgZW5j b2RpbmcsIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iKQ0KPiAgIHsNCj4gICAgIGlmIChlbmNvZGlu ZyA9PSBEV19FSF9QRV9vbWl0KQ0KPiAgICAgICByZXR1cm4gMDsNCj4gQEAgLTYyOCwxMyArNjY3 LDE3IEBAIGVuZF9mZGVfc29ydCAoc3RydWN0IG9iamVjdCAqb2IsIHN0cnVjdA0KPiBmZGVfYWNj dW11bGF0b3IgKmFjY3UsIHNpemVfdCBjb3VudCkNCj4gICAgICAgfQ0KPiAgIH0NCj4gDQo+IC0N Cj4gDQo+IA0KPiAtLyogVXBkYXRlIGVuY29kaW5nLCBtaXhlZF9lbmNvZGluZywgYW5kIHBjX2Jl Z2luIGZvciBPQiBmb3IgdGhlDQo+IC0gICBmZGUgYXJyYXkgYmVnaW5uaW5nIGF0IFRISVNfRkRF LiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZmRlcw0KPiAtICAgZW5jb3VudGVyZWQgYWxvbmcgdGhl IHdheS4gICovDQo+ICsvKiBJbnNwZWN0IHRoZSBmZGUgYXJyYXkgYmVnaW5uaW5nIGF0IHRoaXNf ZmRlLiBUaGlzDQo+ICsgICBmdW5jdGlvbiBjYW4gYmUgdXNlZCBlaXRoZXIgaW4gcXVlcnkgbW9k ZSAoUkFOR0UgaXMNCj4gKyAgIG5vdCBudWxsLCBPQiBpcyBjb25zdCksIG9yIGluIHVwZGF0ZSBt b2RlIChSQU5HRSBpcw0KPiArICAgbnVsbCwgT0IgaXMgbW9kaWZpZWQpLiBJbiBxdWVyeSBtb2Rl IHRoZSBmdW5jdGlvbiBjb21wdXRlcw0KPiArICAgdGhlIHJhbmdlIG9mIFBDIHZhbHVlcyBhbmQg c3RvcmVzIGl0IGluIHJBTkdFLiBJbg0KPiArICAgdXBkYXRlIG1vZGUgaXQgdXBkYXRlcyBlbmNv ZGluZywgbWl4ZWRfZW5jb2RpbmcsIGFuZCBwY19iZWdpbg0KPiArICAgZm9yIE9CLiBSZXR1cm4g dGhlIG51bWJlciBvZiBmZGVzIGVuY291bnRlcmVkIGFsb25nIHRoZSB3YXkuICovDQo+IA0KPiAg IHN0YXRpYyBzaXplX3QNCj4gLWNsYXNzaWZ5X29iamVjdF9vdmVyX2ZkZXMgKHN0cnVjdCBvYmpl Y3QgKm9iLCBjb25zdCBmZGUgKnRoaXNfZmRlKQ0KPiArY2xhc3NpZnlfb2JqZWN0X292ZXJfZmRl cyAoc3RydWN0IG9iamVjdCAqb2IsIGNvbnN0IGZkZSAqdGhpc19mZGUsDQo+ICsJCQkgICB1aW50 cHRyX3QgKnJhbmdlKQ0KPiAgIHsNCj4gICAgIGNvbnN0IHN0cnVjdCBkd2FyZl9jaWUgKmxhc3Rf Y2llID0gMDsNCj4gICAgIHNpemVfdCBjb3VudCA9IDA7DQo+IEBAIC02NDQsNyArNjg3LDcgQEAg Y2xhc3NpZnlfb2JqZWN0X292ZXJfZmRlcyAoc3RydWN0IG9iamVjdCAqb2IsIGNvbnN0DQo+IGZk ZSAqdGhpc19mZGUpDQo+ICAgICBmb3IgKDsgISBsYXN0X2ZkZSAob2IsIHRoaXNfZmRlKTsgdGhp c19mZGUgPSBuZXh0X2ZkZSAodGhpc19mZGUpKQ0KPiAgICAgICB7DQo+ICAgICAgICAgY29uc3Qg c3RydWN0IGR3YXJmX2NpZSAqdGhpc19jaWU7DQo+IC0gICAgICBfVW53aW5kX1B0ciBtYXNrLCBw Y19iZWdpbjsNCj4gKyAgICAgIF9VbndpbmRfUHRyIG1hc2ssIHBjX2JlZ2luLCBwY19yYW5nZTsN Cj4gDQo+ICAgICAgICAgLyogU2tpcCBDSUVzLiAgKi8NCj4gICAgICAgICBpZiAodGhpc19mZGUt PkNJRV9kZWx0YSA9PSAwKQ0KPiBAQCAtNjYwLDE0ICs3MDMsMTkgQEAgY2xhc3NpZnlfb2JqZWN0 X292ZXJfZmRlcyAoc3RydWN0IG9iamVjdCAqb2IsIGNvbnN0DQo+IGZkZSAqdGhpc19mZGUpDQo+ ICAgCSAgaWYgKGVuY29kaW5nID09IERXX0VIX1BFX29taXQpDQo+ICAgCSAgICByZXR1cm4gLTE7 DQo+ICAgCSAgYmFzZSA9IGJhc2VfZnJvbV9vYmplY3QgKGVuY29kaW5nLCBvYik7DQo+IC0JICBp ZiAob2ItPnMuYi5lbmNvZGluZyA9PSBEV19FSF9QRV9vbWl0KQ0KPiAtCSAgICBvYi0+cy5iLmVu Y29kaW5nID0gZW5jb2Rpbmc7DQo+IC0JICBlbHNlIGlmIChvYi0+cy5iLmVuY29kaW5nICE9IGVu Y29kaW5nKQ0KPiAtCSAgICBvYi0+cy5iLm1peGVkX2VuY29kaW5nID0gMTsNCj4gKwkgIGlmICgh cmFuZ2UpDQo+ICsJICAgIHsNCj4gKwkgICAgICBpZiAob2ItPnMuYi5lbmNvZGluZyA9PSBEV19F SF9QRV9vbWl0KQ0KPiArCQlvYi0+cy5iLmVuY29kaW5nID0gZW5jb2Rpbmc7DQo+ICsJICAgICAg ZWxzZSBpZiAob2ItPnMuYi5lbmNvZGluZyAhPSBlbmNvZGluZykNCj4gKwkJb2ItPnMuYi5taXhl ZF9lbmNvZGluZyA9IDE7DQo+ICsJICAgIH0NCj4gICAJfQ0KPiANCj4gLSAgICAgIHJlYWRfZW5j b2RlZF92YWx1ZV93aXRoX2Jhc2UgKGVuY29kaW5nLCBiYXNlLCB0aGlzX2ZkZS0+cGNfYmVnaW4s DQo+IC0JCQkJICAgICZwY19iZWdpbik7DQo+ICsgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpw Ow0KPiArICAgICAgcCA9IHJlYWRfZW5jb2RlZF92YWx1ZV93aXRoX2Jhc2UgKGVuY29kaW5nLCBi YXNlLCB0aGlzX2ZkZS0NCj4gPnBjX2JlZ2luLA0KPiArCQkJCQkmcGNfYmVnaW4pOw0KPiArICAg ICAgcmVhZF9lbmNvZGVkX3ZhbHVlX3dpdGhfYmFzZSAoZW5jb2RpbmcgJiAweDBGLCAwLCBwLCAm cGNfcmFuZ2UpOw0KPiANCj4gICAgICAgICAvKiBUYWtlIGNhcmUgdG8gaWdub3JlIGxpbmstb25j ZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIHJlbW92ZWQuDQo+ICAgCSBJbiB0aGVzZSBjYXNlcywgdGhl IGZ1bmN0aW9uIGFkZHJlc3Mgd2lsbCBiZSBOVUxMLCBidXQgaWYgQEAgLTY4Myw4DQo+ICs3MzEs MjcgQEAgY2xhc3NpZnlfb2JqZWN0X292ZXJfZmRlcyAoc3RydWN0IG9iamVjdCAqb2IsIGNvbnN0 IGZkZQ0KPiAqdGhpc19mZGUpDQo+ICAgCWNvbnRpbnVlOw0KPiANCj4gICAgICAgICBjb3VudCAr PSAxOw0KPiAtICAgICAgaWYgKCh2b2lkICopIHBjX2JlZ2luIDwgb2ItPnBjX2JlZ2luKQ0KPiAt CW9iLT5wY19iZWdpbiA9ICh2b2lkICopIHBjX2JlZ2luOw0KPiArICAgICAgaWYgKHJhbmdlKQ0K PiArCXsNCj4gKwkgIF9VbndpbmRfUHRyIHBjX2VuZCA9IHBjX2JlZ2luICsgcGNfcmFuZ2U7DQo+ ICsJICBpZiAoKCFyYW5nZVswXSkgJiYgKCFyYW5nZVsxXSkpDQo+ICsJICAgIHsNCj4gKwkgICAg ICByYW5nZVswXSA9IHBjX2JlZ2luOw0KPiArCSAgICAgIHJhbmdlWzFdID0gcGNfZW5kOw0KPiAr CSAgICB9DQo+ICsJICBlbHNlDQo+ICsJICAgIHsNCj4gKwkgICAgICBpZiAocGNfYmVnaW4gPCBy YW5nZVswXSkNCj4gKwkJcmFuZ2VbMF0gPSBwY19iZWdpbjsNCj4gKwkgICAgICBpZiAocGNfZW5k ID4gcmFuZ2VbMV0pDQo+ICsJCXJhbmdlWzFdID0gcGNfZW5kOw0KPiArCSAgICB9DQo+ICsJfQ0K PiArICAgICAgZWxzZQ0KPiArCXsNCj4gKwkgIGlmICgodm9pZCAqKSBwY19iZWdpbiA8IG9iLT5w Y19iZWdpbikNCj4gKwkgICAgb2ItPnBjX2JlZ2luID0gKHZvaWQgKikgcGNfYmVnaW47DQo+ICsJ fQ0KPiAgICAgICB9DQo+IA0KPiAgICAgcmV0dXJuIGNvdW50Ow0KPiBAQCAtNzY5LDcgKzgzNiw3 IEBAIGluaXRfb2JqZWN0IChzdHJ1Y3Qgb2JqZWN0KiBvYikNCj4gICAJICBmZGUgKipwID0gb2It PnUuYXJyYXk7DQo+ICAgCSAgZm9yIChjb3VudCA9IDA7ICpwOyArK3ApDQo+ICAgCSAgICB7DQo+ IC0JICAgICAgc2l6ZV90IGN1cl9jb3VudCA9IGNsYXNzaWZ5X29iamVjdF9vdmVyX2ZkZXMgKG9i LCAqcCk7DQo+ICsJICAgICAgc2l6ZV90IGN1cl9jb3VudCA9IGNsYXNzaWZ5X29iamVjdF9vdmVy X2ZkZXMgKG9iLCAqcCwgTlVMTCk7DQo+ICAgCSAgICAgIGlmIChjdXJfY291bnQgPT0gKHNpemVf dCkgLTEpDQo+ICAgCQlnb3RvIHVuaGFuZGxlZF9mZGVzOw0KPiAgIAkgICAgICBjb3VudCArPSBj dXJfY291bnQ7DQo+IEBAIC03NzcsNyArODQ0LDcgQEAgaW5pdF9vYmplY3QgKHN0cnVjdCBvYmpl Y3QqIG9iKQ0KPiAgIAl9DQo+ICAgICAgICAgZWxzZQ0KPiAgIAl7DQo+IC0JICBjb3VudCA9IGNs YXNzaWZ5X29iamVjdF9vdmVyX2ZkZXMgKG9iLCBvYi0+dS5zaW5nbGUpOw0KPiArCSAgY291bnQg PSBjbGFzc2lmeV9vYmplY3Rfb3Zlcl9mZGVzIChvYiwgb2ItPnUuc2luZ2xlLCBOVUxMKTsNCj4g ICAJICBpZiAoY291bnQgPT0gKHNpemVfdCkgLTEpDQo+ICAgCSAgICB7DQo+ICAgCSAgICAgIHN0 YXRpYyBjb25zdCBmZGUgdGVybWluYXRvcjsNCj4gQEAgLTgyMSw2ICs4ODgsMzIgQEAgaW5pdF9v YmplY3QgKHN0cnVjdCBvYmplY3QqIG9iKQ0KPiAgICAgb2ItPnMuYi5zb3J0ZWQgPSAxOw0KPiAg IH0NCj4gDQo+ICsjaWZkZWYgQVRPTUlDX0ZERV9GQVNUX1BBVEgNCj4gKy8qIEdldCB0aGUgUEMg cmFuZ2UgZm9yIGxvb2t1cCAqLw0KPiArc3RhdGljIHZvaWQNCj4gK2dldF9wY19yYW5nZSAoY29u c3Qgc3RydWN0IG9iamVjdCAqb2IsIHVpbnRwdHJfdCAqcmFuZ2UpIHsNCj4gKyAgLy8gSXQgaXMg c2FmZSB0byBjYXN0IHRvIG5vbi1jb25zdCBvYmplY3QqIGhlcmUgYXMNCj4gKyAgLy8gY2xhc3Np Znlfb2JqZWN0X292ZXJfZmRlcyBkb2VzIG5vdCBtb2RpZnkgb2IgaW4gcXVlcnkgbW9kZS4NCj4g KyAgc3RydWN0IG9iamVjdCAqbmNvYiA9IChzdHJ1Y3Qgb2JqZWN0ICopICh1aW50cHRyX3QpIG9i Ow0KPiArICByYW5nZVswXSA9IHJhbmdlWzFdID0gMDsNCj4gKyAgaWYgKG9iLT5zLmIuc29ydGVk KQ0KPiArICAgIHsNCj4gKyAgICAgIGNsYXNzaWZ5X29iamVjdF9vdmVyX2ZkZXMgKG5jb2IsIG9i LT51LnNvcnQtPm9yaWdfZGF0YSwgcmFuZ2UpOw0KPiArICAgIH0NCj4gKyAgZWxzZSBpZiAob2It PnMuYi5mcm9tX2FycmF5KQ0KPiArICAgIHsNCj4gKyAgICAgIGZkZSAqKnAgPSBvYi0+dS5hcnJh eTsNCj4gKyAgICAgIGZvciAoOyAqcDsgKytwKQ0KPiArCWNsYXNzaWZ5X29iamVjdF9vdmVyX2Zk ZXMgKG5jb2IsICpwLCByYW5nZSk7DQo+ICsgICAgfQ0KPiArICBlbHNlDQo+ICsgICAgew0KPiAr ICAgICAgY2xhc3NpZnlfb2JqZWN0X292ZXJfZmRlcyAobmNvYiwgb2ItPnUuc2luZ2xlLCByYW5n ZSk7DQo+ICsgICAgfQ0KPiArfQ0KPiArI2VuZGlmDQo+ICsNCj4gICAvKiBBIGxpbmVhciBzZWFy Y2ggdGhyb3VnaCBhIHNldCBvZiBGREVzIGZvciB0aGUgZ2l2ZW4gUEMuICBUaGlzIGlzDQo+ICAg ICAgdXNlZCB3aGVuIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIGFu ZCBzb3J0IGFuDQo+ICAgICAgYXJyYXkuICAqLw0KPiBAQCAtOTg1LDYgKzEwNzgsOSBAQCBiaW5h cnlfc2VhcmNoX21peGVkX2VuY29kaW5nX2ZkZXMgKHN0cnVjdCBvYmplY3QNCj4gKm9iLCB2b2lk ICpwYykNCj4gICBzdGF0aWMgY29uc3QgZmRlICoNCj4gICBzZWFyY2hfb2JqZWN0IChzdHJ1Y3Qg b2JqZWN0KiBvYiwgdm9pZCAqcGMpDQo+ICAgew0KPiArICAvKiBUaGUgZmFzdCBwYXRoIGluaXRp YWxpemVzIG9iamVjdHMgZWFnZXJseSB0byBhdm9pZCBsb2NraW5nLg0KPiArICAgKiBPbiB0aGUg c2xvdyBwYXRoIHdlIGluaXRpYWxpemUgdGhlbSBub3cgKi8gI2lmbmRlZg0KPiArQVRPTUlDX0ZE RV9GQVNUX1BBVEgNCj4gICAgIC8qIElmIHRoZSBkYXRhIGhhc24ndCBiZWVuIHNvcnRlZCwgdHJ5 IHRvIGRvIHRoaXMgbm93LiAgV2UgbWF5IGhhdmUNCj4gICAgICAgIG1vcmUgbWVtb3J5IGF2YWls YWJsZSB0aGFuIGxhc3QgdGltZSB3ZSB0cmllZC4gICovDQo+ICAgICBpZiAoISBvYi0+cy5iLnNv cnRlZCkNCj4gQEAgLTk5Nyw2ICsxMDkzLDcgQEAgc2VhcmNoX29iamVjdCAoc3RydWN0IG9iamVj dCogb2IsIHZvaWQgKnBjKQ0KPiAgICAgICAgIGlmIChwYyA8IG9iLT5wY19iZWdpbikNCj4gICAJ cmV0dXJuIE5VTEw7DQo+ICAgICAgIH0NCj4gKyNlbmRpZg0KPiANCj4gICAgIGlmIChvYi0+cy5i LnNvcnRlZCkNCj4gICAgICAgew0KPiBAQCAtMTAzMywxNyArMTEzMCwxMiBAQCBfVW53aW5kX0Zp bmRfRkRFICh2b2lkICpwYywgc3RydWN0DQo+IGR3YXJmX2VoX2Jhc2VzICpiYXNlcykNCj4gICAg IGNvbnN0IGZkZSAqZiA9IE5VTEw7DQo+IA0KPiAgICNpZmRlZiBBVE9NSUNfRkRFX0ZBU1RfUEFU SA0KPiAtICAvKiBGb3IgdGFyZ2V0cyB3aGVyZSB1bndpbmQgaW5mbyBpcyB1c3VhbGx5IG5vdCBy ZWdpc3RlcmVkIHRocm91Z2ggdGhlc2UNCj4gLSAgICAgQVBJcyBhbnltb3JlLCBhdm9pZCB0YWtp bmcgYSBnbG9iYWwgbG9jay4NCj4gLSAgICAgVXNlIHJlbGF4ZWQgTU8gaGVyZSwgaXQgaXMgdXAg dG8gdGhlIGFwcCB0byBlbnN1cmUgdGhhdCB0aGUgbGlicmFyeQ0KPiAtICAgICBsb2FkaW5nL2lu aXRpYWxpemF0aW9uIGhhcHBlbnMtYmVmb3JlIHVzaW5nIHRoYXQgbGlicmFyeSBpbiBvdGhlcg0K PiAtICAgICB0aHJlYWRzIChpbiBwYXJ0aWN1bGFyIHVud2luZGluZyB3aXRoIHRoYXQgbGlicmFy eSdzIGZ1bmN0aW9ucw0KPiAtICAgICBhcHBlYXJpbmcgaW4gdGhlIGJhY2t0cmFjZXMpLiAgQ2Fs bGluZyB0aGF0IGxpYnJhcnkncyBmdW5jdGlvbnMNCj4gLSAgICAgd2l0aG91dCB3YWl0aW5nIGZv ciB0aGUgbGlicmFyeSB0byBpbml0aWFsaXplIHdvdWxkIGJlIHJhY3kuICAqLw0KPiAtICBpZiAo X19idWlsdGluX2V4cGVjdCAoIV9fYXRvbWljX2xvYWRfbiAoJmFueV9vYmplY3RzX3JlZ2lzdGVy ZWQsDQo+IC0JCQkJCSAgX19BVE9NSUNfUkVMQVhFRCksIDEpKQ0KPiArICBvYiA9IGJ0cmVlX2xv b2t1cCAoJnJlZ2lzdGVyZWRfZnJhbWVzLCAodWludHB0cl90KSBwYyk7ICBpZiAoIW9iKQ0KPiAg ICAgICByZXR1cm4gTlVMTDsNCj4gLSNlbmRpZg0KPiArDQo+ICsgIGYgPSBzZWFyY2hfb2JqZWN0 IChvYiwgcGMpOw0KPiArI2Vsc2UNCj4gDQo+ICAgICBpbml0X29iamVjdF9tdXRleF9vbmNlICgp Ow0KPiAgICAgX19ndGhyZWFkX211dGV4X2xvY2sgKCZvYmplY3RfbXV0ZXgpOyBAQCAtMTA4MSw2 ICsxMTczLDcgQEANCj4gX1Vud2luZF9GaW5kX0ZERSAodm9pZCAqcGMsIHN0cnVjdCBkd2FyZl9l aF9iYXNlcyAqYmFzZXMpDQo+IA0KPiAgICBmaW5pOg0KPiAgICAgX19ndGhyZWFkX211dGV4X3Vu bG9jayAoJm9iamVjdF9tdXRleCk7DQo+ICsjZW5kaWYNCj4gDQo+ICAgICBpZiAoZikNCj4gICAg ICAgew0KPiBkaWZmIC0tZ2l0IGEvbGliZ2NjL3Vud2luZC1kdzItZmRlLmggYi9saWJnY2MvdW53 aW5kLWR3Mi1mZGUuaCBpbmRleA0KPiA4YTAxMWMzNThiNC4uNzdjMmNhYTRmNWEgMTAwNjQ0DQo+ IC0tLSBhL2xpYmdjYy91bndpbmQtZHcyLWZkZS5oDQo+ICsrKyBiL2xpYmdjYy91bndpbmQtZHcy LWZkZS5oDQo+IEBAIC0xNjYsNyArMTY2LDcgQEAgbmV4dF9mZGUgKGNvbnN0IGZkZSAqZikNCj4g ICBleHRlcm4gY29uc3QgZmRlICogX1Vud2luZF9GaW5kX0ZERSAodm9pZCAqLCBzdHJ1Y3QgZHdh cmZfZWhfYmFzZXMgKik7DQo+IA0KPiAgIHN0YXRpYyBpbmxpbmUgaW50DQo+IC1sYXN0X2ZkZSAo c3RydWN0IG9iamVjdCAqb2JqIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksIGNvbnN0IGZk ZSAqZikNCj4gK2xhc3RfZmRlIChjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmogX19hdHRyaWJ1dGVf XyAoKF9fdW51c2VkX18pKSwgY29uc3QNCj4gK2ZkZSAqZikNCj4gICB7DQo+ICAgI2lmZGVmIERX QVJGMl9PQkpFQ1RfRU5EX1BUUl9FWFRFTlNJT04NCj4gICAgIHJldHVybiBmID09IChjb25zdCBm ZGUgKikgb2JqLT5mZGVfZW5kIHx8IGYtPmxlbmd0aCA9PSAwOw0KPiAtLQ0KPiAyLjM0LjENCg0K