From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2058.outbound.protection.outlook.com [40.107.21.58]) by sourceware.org (Postfix) with ESMTPS id 94F343857014 for ; Thu, 8 Jun 2023 09:59:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 94F343857014 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=WGcm1RAANg4jXzEtvUAPFCsmy0u7HRnmzk4qtuJcOYI=; b=RVPUEhUBwaQ67V9YFIInsx86u+eK0DYhIpy/vh6P1NBFL2C6mPWZZ5+jf2icoJ1O6i20V2EcQeu6oqMxrnYA/8j7jYlMGIBxMyP2zvloDUPituPfrwIxU3U8twQiD2RCddODlu/wqCH0HCl5i7kg6Td9wBNVWk4SFTkq7U3vRsI= Received: from DU2PR04CA0078.eurprd04.prod.outlook.com (2603:10a6:10:232::23) by AS2PR08MB10208.eurprd08.prod.outlook.com (2603:10a6:20b:648::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.19; Thu, 8 Jun 2023 09:59:03 +0000 Received: from DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:232:cafe::ff) by DU2PR04CA0078.outlook.office365.com (2603:10a6:10:232::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.25 via Frontend Transport; Thu, 8 Jun 2023 09:59:03 +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 DBAEUR03FT012.mail.protection.outlook.com (100.127.142.126) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.24 via Frontend Transport; Thu, 8 Jun 2023 09:59:03 +0000 Received: ("Tessian outbound 945aec65ec65:v136"); Thu, 08 Jun 2023 09:59:03 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 32e66cb667a193c5 X-CR-MTA-TID: 64aa7808 Received: from ca3fdfe0f497.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 7141237E-FD61-416A-85CE-4C69CFAE19A8.1; Thu, 08 Jun 2023 09:58:55 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ca3fdfe0f497.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 08 Jun 2023 09:58:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mn3OAOT0y7IruUlXd+JMAjyjpGxqRMvyIxSVMkiKgcoxp/pUwn1SxPzfwJIA5Devy9xox17RRUYkMD7oQYCaWusKnmFX3RdIJNaemhBPNfvDBLpIQ85vPbzZsFfKEH+SY6dRkxJqAlfwLYOCfELdJs6lqQq5t7/FSeEW5CdVMMnn8KC0ac8ua1LhSjTfF3MZq14y9k+Qmq7IO7oGUvdrqzrCt5ASBDIU9BaPTZLe/HfKXXPn4JYnlyQf5f2rNHBVkAX9LKLV6W4auNSvC3lRGaa/zSMJ54jOWdekxXpBpvgWyzPl/pwmBZOq7A+CvXQbApUz95Qe0XsbNrxc9YEIZQ== 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=WGcm1RAANg4jXzEtvUAPFCsmy0u7HRnmzk4qtuJcOYI=; b=RbJUn0kw25lcDRGorplJiACyykD3qksY468cO7xKLqifulKo53F11ZuO5ScfmGDMt2fRaUW49MCOCx3TkqjLUlZiLPebSxkt27j907ZY3h9j3HWajPgvTaz/H60X+8q6aHv0SQSD4257t9I2dhNUwZcB6OCzyngeoBMpdp8t19XBcpgExTVMHpbxwwHS1wIGqSHc2YStVG8cumPgb7LdzeRLO7y/UwQYasxrmhv9e6+o967zRaFVKp493pK9PiB3dR8cfL2BK7oLKkb9wf5udcfdBNRM8Cxqdh28MTQCuiqiwTj8ASOTsMpz3aa8ISpU2L6qFEpQbcfKW1tyEEgewQ== 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=WGcm1RAANg4jXzEtvUAPFCsmy0u7HRnmzk4qtuJcOYI=; b=RVPUEhUBwaQ67V9YFIInsx86u+eK0DYhIpy/vh6P1NBFL2C6mPWZZ5+jf2icoJ1O6i20V2EcQeu6oqMxrnYA/8j7jYlMGIBxMyP2zvloDUPituPfrwIxU3U8twQiD2RCddODlu/wqCH0HCl5i7kg6Td9wBNVWk4SFTkq7U3vRsI= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by GV2PR08MB8049.eurprd08.prod.outlook.com (2603:10a6:150:ae::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.31; Thu, 8 Jun 2023 09:58:51 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::2301:1cde:cfe7:eaf0%6]) with mapi id 15.20.6455.030; Thu, 8 Jun 2023 09:58:50 +0000 From: Tamar Christina To: Richard Earnshaw , "gcc-patches@gcc.gnu.org" , nd , Richard Sandiford Subject: RE: [PATCH v2] machine descriptor: New compact syntax for insn and insn_split in Machine Descriptions. Thread-Topic: [PATCH v2] machine descriptor: New compact syntax for insn and insn_split in Machine Descriptions. Thread-Index: AQHZl+08kf326nq/x0q2PMtkKgB+m699qeyAgAARCb+AADjTAIACu6WA Date: Thu, 8 Jun 2023 09:58:50 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|GV2PR08MB8049:EE_|DBAEUR03FT012:EE_|AS2PR08MB10208:EE_ X-MS-Office365-Filtering-Correlation-Id: f0fc8ab3-dd76-4745-8bb8-08db6806fd4f 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: wTG7WsatpHtiT78DN1iSHKJ21il4xtjlyD8+VZ2r7Vyc28avBVJ7wTusV15ura0aVUxQhvctEE9rjHwUcLBo6eIm6kiwbFYcPsSbBjFrwO5DXptUjFTrWKjbiZHW65/yLws7p/4c2Xxx6WHYRh2JX/GJXeQzQ1i/c1XsEZcA3Vk32TL8qr8DFcDdtIA1ByjMQMfwq2xd9+yp0Zrz0mJRjqGg7jP3CmBLfBIpjJcCxiw639iYXc7OvyHDXcnImtiriOsCLS6dGiw40ZnL3GjeK0mh9tT/7/OMrp0q0wGGUt/CNTeM1XKuH2cpHaBUtaBOl3va0N7BLeMpO1Y75xE4YiXrHdCvHH3Y8P84aA4RpdlAOApB/u4+vu4x7h65sjue6ycJ3VMjkoFJEkwbwNk5lXzFeiAddIAEDRWiuwZVt1tmEtxcVETPNH8T0X+19aEauMasq+sEHpAionnQmtLabSnZiFLrDbNl9H01Kh9Tyd+AQHym5hxeZNhGpsOMHewBTdNa6A8WJrzDpbIQHPQSHKHrkGk0w0Yx2UWSuVyfO9Cz7FInYtoOpPGyBlYZsQOj0Gqls17LG8T8l9d4EflNrVDjkm0q72CzdGeBSEkR3o4= 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:(13230028)(4636009)(366004)(39860400002)(376002)(346002)(396003)(136003)(451199021)(478600001)(7696005)(38100700002)(122000001)(38070700005)(66946007)(66556008)(76116006)(6636002)(64756008)(66446008)(66476007)(33656002)(86362001)(110136005)(55016003)(316002)(99936003)(71200400001)(30864003)(2906002)(41300700001)(186003)(8936002)(8676002)(6506007)(26005)(9686003)(5660300002)(52536014)(83380400001)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: multipart/mixed; boundary="_002_VI1PR08MB532500C80282451D7D8524D0FF50AVI1PR08MB5325eurp_" MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8049 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: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 1e568db1-9366-48ea-595e-08db6806f5f0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7EQlpYyng29nSFfHw9MGJCYz4hqBSWhsIL4HIJ4d9cqSmaU6eBVEWoRr/Ud4OwSfA4K+dA2CC2RQXQHTruaRlO7UfqnhNGoWMdSs52I10UvFeclaWYue54UOrVSumuvkXUbX/4hwXLf/qlYjQNGqlKdM+NkU89TQtW+S34eGWFiP++TdhyySR+ByoG7MZyF3D8M6YZfJ1JYhjGebygRkrKaFOGXv7Nk/pmnE5YTOFYkTO6z2HXeO3HFvO6mPnle9+y++ZRYI41/Z0M4fRZ7GsqaoXBbeRZL+YUmEEzCNggrxc8glpMUVdIRh+kS2KZvP2N636y5Wo8YDGoCzDc8oODkCXK+o8lygPRUmGLuFjtQVvJv4Jq88tWure8ePIEzcNce5eocSm1QUklL5T42WpWtgplkFLaDJlmCHVIwHNtvP6T1phNilJ+rKnWUdq+CYDAlU2vRU5IvmSRdCH/IHcsRc0ojON5OVJnPtmlySqB++S+uezobDmgaNuDK9U8bV4dQzfOq3M8SLbJ69/MRojnrbbEEBVMHbkOtSGkqma1zfUxTw55mDTYXqmzlDDnZXaHRZb4P/rU23AErWnFDMj8OLh9E1VN5gd+gzkwc/3g6LLYt+MLiA77FxpORMqdvyRIOWA3RQQMdsS9HGtFmffi2h8+Qxx904j8OSa5ybJbflj4C+F72WFQggBZTI2x/Dy99YhZc/S77E+7xcTn2Mtk2XoVd65mmRCDRTMgCg3oo= 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:(13230028)(4636009)(136003)(346002)(39860400002)(376002)(396003)(451199021)(46966006)(36840700001)(40470700004)(356005)(186003)(82740400003)(5660300002)(9686003)(6506007)(81166007)(36860700001)(26005)(47076005)(99936003)(82310400005)(336012)(83380400001)(235185007)(55016003)(40460700003)(52536014)(478600001)(86362001)(110136005)(33964004)(7696005)(41300700001)(316002)(8936002)(6636002)(8676002)(70206006)(33656002)(30864003)(70586007)(40480700001)(2906002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jun 2023 09:59:03.1998 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f0fc8ab3-dd76-4745-8bb8-08db6806fd4f 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: DBAEUR03FT012.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10208 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,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: --_002_VI1PR08MB532500C80282451D7D8524D0FF50AVI1PR08MB5325eurp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGksDQoNCk5ldyB2ZXJzaW9uIG9mIHRoZSBwYXRjaCwgSSd2ZSBvbWl0dGVkIHRoZSBleHBsYW5h dGlvbiBhZ2FpbiDwn5iKDQoNCkJvb3RzdHJhcHBlZCBSZWd0ZXN0ZWQgb24gYWFyY2g2NC1ub25l LWxpbnV4LWdudSBhbmQgbm8gaXNzdWVzLg0KDQpBbnkgZmVlZGJhY2s/DQoNClRoYW5rcywNClRh bWFyDQoNCmdjYy9DaGFuZ2VMb2c6DQoNCgkqIGdlbnN1cHBvcnQuY2MgKGNsYXNzIGNvbmxpc3Qs IGFkZF9jb25zdHJhaW50cywgYWRkX2F0dHJpYnV0ZXMsDQoJY3JlYXRlX21pc3NpbmdfYXR0cmli dXRlcywgc2tpcF9zcGFjZXMsIGV4cGVjdF9jaGFyLA0KCXByZXByb2Nlc3NfY29tcGFjdF9zeW50 YXgsIHBhcnNlX3NlY3Rpb25fbGF5b3V0LCBwYXJzZV9zZWN0aW9uLA0KCWNvbnZlcnRfc3ludGF4 KTogTmV3Lg0KCShwcm9jZXNzX3J0eCk6IENoZWNrIGZvciBjb252ZXJzaW9uLg0KCSogZ2Vub3V0 cHV0LmNjIChwcm9jZXNzX3RlbXBsYXRlKTogQ2hlY2sgZm9yIHVucmVzb2x2ZWQgaXRlcmF0b3Jz Lg0KCShjbGFzcyBkYXRhKTogQWRkIGNvbXBhY3Rfc3ludGF4X3AuDQoJKGdlbl9pbnNuKTogVXNl IGl0Lg0KCSogZ2Vuc3VwcG9ydC5oIChjb21wYWN0X3N5bnRheCk6IE5ldy4NCgkoaGFzaC1zZXQu aCk6IEluY2x1ZGUuDQoNCkNvLUF1dGhvcmVkLUJ5OiBPbWFyIFRhaGlyIDxPbWFyLlRhaGlyMkBh cm0uY29tPg0KDQotLS0gaW5saW5lIGNvcHkgb2YgcGF0Y2ggLS0tDQoNCmRpZmYgLS1naXQgYS9n Y2MvZG9jL21kLnRleGkgYi9nY2MvZG9jL21kLnRleGkNCmluZGV4IDZhNDM1ZWI0NDYxMDk2MDUx M2U5NzM5YWM5YWMxZThhMjcxODJjMTAuLmVlZTM2ODRjZDA4NjVkYmIwN2MwZGE0NWUwYWE0YWMw Y2U0ZTk2NDMgMTAwNjQ0DQotLS0gYS9nY2MvZG9jL21kLnRleGkNCisrKyBiL2djYy9kb2MvbWQu dGV4aQ0KQEAgLTI3LDYgKzI3LDcgQEAgU2VlIHRoZSBuZXh0IGNoYXB0ZXIgZm9yIGluZm9ybWF0 aW9uIG9uIHRoZSBDIGhlYWRlciBmaWxlLg0KICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20g c3VjaCBhbiBpbnNuLg0KICogT3V0cHV0IFN0YXRlbWVudDo6ICAgIEZvciBtb3JlIGdlbmVyYWxp dHksIHdyaXRlIEMgY29kZSB0byBvdXRwdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg YXNzZW1ibGVyIGNvZGUuDQorKiBDb21wYWN0IFN5bnRheDo6ICAgICAgQ29tcGFjdCBzeW50YXgg Zm9yIHdyaXRpbmcgbWFjaGluZSBkZXNjcmlwdG9ycy4NCiAqIFByZWRpY2F0ZXM6OiAgICAgICAg ICBDb250cm9sbGluZyB3aGF0IGtpbmRzIG9mIG9wZXJhbmRzIGNhbiBiZSB1c2VkDQogICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIGFuIGluc24uDQogKiBDb25zdHJhaW50czo6ICAgICAgICAg RmluZS10dW5pbmcgb3BlcmFuZCBzZWxlY3Rpb24uDQpAQCAtNzEzLDYgKzcxNCwxODMgQEAgeW91 IGNhbiB1c2UgQHNhbXB7Kn0gaW5zaWRlIG9mIGEgQHNhbXB7QEB9IG11bHRpLWFsdGVybmF0aXZl IHRlbXBsYXRlOg0KIEBlbmQgZ3JvdXANCiBAZW5kIHNtYWxsZXhhbXBsZQ0KIA0KK0Bub2RlIENv bXBhY3QgU3ludGF4DQorQHNlY3Rpb24gQ29tcGFjdCBTeW50YXgNCitAY2luZGV4IGNvbXBhY3Qg c3ludGF4DQorDQorSW4gY2FzZXMgd2hlcmUgdGhlIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgaW4g YSBAY29kZXtkZWZpbmVfaW5zbn0gb3INCitAY29kZXtkZWZpbmVfaW5zbl9hbmRfc3BsaXR9IGFy ZSBsYXJnZSB0aGVuIGl0IG1heSBiZSBiZW5lZmljaWFsIHRvIHVzZSB0aGUNCitjb21wYWN0IHN5 bnRheCB3aGVuIHNwZWNpZnlpbmcgYWx0ZXJuYXRpdmVzLg0KKw0KK1RoaXMgc3ludGF4IHB1dHMg dGhlIGNvbnN0cmFpbnRzIGFuZCBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIGhvcml6b250YWwgbGlu ZSBhcw0KK3RoZSBpbnN0cnVjdGlvbiBhc3NlbWJseSB0ZW1wbGF0ZS4NCisNCitBcyBhbiBleGFt cGxlDQorDQorQHNtYWxsZXhhbXBsZQ0KK0Bncm91cA0KKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQg IiINCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAi PXIsayxyLHIscixyIikNCisJKG1hdGNoX29wZXJhbmQ6U0kgMSAiYWFyY2g2NF9tb3Zfb3BlcmFu ZCIgICIgcixyLGssTSxuLFVzdiIpKV0NCisgICIiDQorICAiQEANCisgICBtb3ZcXHQldzAsICV3 MQ0KKyAgIG1vdlxcdCV3MCwgJXcxDQorICAgbW92XFx0JXcwLCAldzENCisgICBtb3ZcXHQldzAs ICUxDQorICAgIw0KKyAgICogcmV0dXJuIGFhcmNoNjRfb3V0cHV0X3N2ZV9jbnRfaW1tZWRpYXRl ICgnY250JywgJyV4MCcsIG9wZXJhbmRzWzFdKTsiDQorICAiJiYgdHJ1ZSINCisgICBbKGNvbnN0 X2ludCAwKV0NCisgIEB7DQorICAgICBhYXJjaDY0X2V4cGFuZF9tb3ZfaW1tZWRpYXRlIChvcGVy YW5kc1swXSwgb3BlcmFuZHNbMV0pOw0KKyAgICAgRE9ORTsNCisgIEB9DQorICBbKHNldF9hdHRy ICJ0eXBlIiAibW92X3JlZyxtb3ZfcmVnLG1vdl9yZWcsbW92X2ltbSxtb3ZfaW1tLG1vdl9pbW0i KQ0KKyAgIChzZXRfYXR0ciAiYXJjaCIgICAiKiwqLCosKiwqLHN2ZSIpDQorICAgKHNldF9hdHRy ICJsZW5ndGgiICI0LDQsNCw0LCosICA0IikNCitdDQorKQ0KK0BlbmQgZ3JvdXANCitAZW5kIHNt YWxsZXhhbXBsZQ0KKw0KK2NhbiBiZSBiZXR0ZXIgZXhwcmVzc2VkIGFzOg0KKw0KK0BzbWFsbGV4 YW1wbGUNCitAZ3JvdXANCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiDQorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIpDQorCShtYXRjaF9vcGVyYW5k OlNJIDEgImFhcmNoNjRfbW92X29wZXJhbmQiKSldDQorICAiIg0KKyAgQHtAQCBbY29uczogPTAs IDE7IGF0dHJzOiB0eXBlLCBhcmNoLCBsZW5ndGhdDQorICAgICBbciAsIHIgIDsgbW92X3JlZyAg LCAqICAgLCA0XSBtb3ZcdCV3MCwgJXcxDQorICAgICBbayAsIHIgIDsgbW92X3JlZyAgLCAqICAg LCA0XSBeDQorICAgICBbciAsIGsgIDsgbW92X3JlZyAgLCAqICAgLCA0XSBeDQorICAgICBbciAs IE0gIDsgbW92X2ltbSAgLCAqICAgLCA0XSBtb3ZcdCV3MCwgJTENCisgICAgIFtyICwgbiAgOyBt b3ZfaW1tICAsICogICAsICpdICMNCisgICAgIFtyICwgVXN2OyBtb3ZfaW1tICAsIHN2ZSAsIDRd IDw8IGFhcmNoNjRfb3V0cHV0X3N2ZV9jbnRfaW1tZWRpYXRlICgiY250IiwgIiV4MCIsIG9wZXJh bmRzWzFdKTsNCisgIEB9DQorICAiJiYgdHJ1ZSINCisgIFsoY29uc3RfaW50IDApXQ0KKyAgQHsN CisgICAgYWFyY2g2NF9leHBhbmRfbW92X2ltbWVkaWF0ZSAob3BlcmFuZHNbMF0sIG9wZXJhbmRz WzFdKTsNCisgICAgRE9ORTsNCisgIEB9DQorKQ0KK0BlbmQgZ3JvdXANCitAZW5kIHNtYWxsZXhh bXBsZQ0KKw0KK1RoZSBzeW50YXggcnVsZXMgYXJlIGFzIGZvbGxvd3M6DQorQGl0ZW1pemUgQGJ1 bGxldA0KK0BpdGVtDQorVGVtcGxhdGVzIG11c3Qgc3RhcnQgd2l0aCBAc2FtcHtAe0BAfSB0byB1 c2UgdGhlIG5ldyBzeW50YXguDQorDQorQGl0ZW0NCitAc2FtcHtAe0BAfSBpcyBmb2xsb3dlZCBi eSBhIGxheW91dCBpbiBwYXJlbnRoZXNlcyB3aGljaCBpcyBAc2FtcHtjb25zOn0gZm9sbG93ZWQg YnkNCithIGxpc3Qgb2YgQGNvZGV7bWF0Y2hfb3BlcmFuZH0vQGNvZGV7bWF0Y2hfc2NyYXRjaH0g Y29tbWEgb3BlcmFuZCBudW1iZXJzLCB0aGVuIGENCitzZW1pY29sb24sIGZvbGxvd2VkIGJ5IHRo ZSBzYW1lIGZvciBhdHRyaWJ1dGVzIChAc2FtcHthdHRyczp9KS4gIE9wZXJhbmQNCittb2RpZmll cnMgY2FuIGJlIHBsYWNlZCBpbiB0aGlzIHNlY3Rpb24gZ3JvdXAgYXMgd2VsbC4gIEJvdGggc2Vj dGlvbnMNCithcmUgb3B0aW9uYWwgKHNvIHlvdSBjYW4gdXNlIG9ubHkgQHNhbXB7Y29uc30sIG9y IG9ubHkgQHNhbXB7YXR0cnN9LCBvciBib3RoKSwNCithbmQgQHNhbXB7Y29uc30gbXVzdCBjb21l IGJlZm9yZSBAc2FtcHthdHRyc30gaWYgcHJlc2VudC4NCisNCitAaXRlbQ0KK0VhY2ggYWx0ZXJu YXRpdmUgYmVnaW5zIHdpdGggYW55IGFtb3VudCBvZiB3aGl0ZXNwYWNlLg0KKw0KK0BpdGVtDQor Rm9sbG93aW5nIHRoZSB3aGl0ZXNwYWNlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImNv bnN0cmFpbnRzIiBhbmQvb3INCisiYXR0cmlidXRlcyIgd2l0aGluIGJyYWNrZXRzIEBjb2Rle1td fSwgd2l0aCBzZWN0aW9ucyBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24uDQorDQorQGl0ZW0NCitT aG91bGQgeW91IHdhbnQgdG8gY29weSB0aGUgcHJldmlvdXMgYXNtIGxpbmUsIHRoZSBzeW1ib2wg QGNvZGV7Xn0gY2FuIGJlIHVzZWQuDQorVGhpcyBhbGxvd3MgbGVzcyBjb3B5IHBhc3RpbmcgYmV0 d2VlbiBhbHRlcm5hdGl2ZSBhbmQgcmVkdWNlcyB0aGUgbnVtYmVyIG9mDQorbGluZXMgdG8gdXBk YXRlIG9uIGNoYW5nZXMuDQorDQorQGl0ZW0NCitXaGVuIHVzaW5nIEMgZnVuY3Rpb25zIGZvciBv dXRwdXQsIHRoZSBpZGlvbSBAc2FtcHsqIHJldHVybiA8ZnVuY3Rpb24+O30gY2FuIGJlDQorcmVw bGFjZWQgd2l0aCB0aGUgc2hvcnRoYW5kIEBzYW1wezw8IEB2YXJ7ZnVuY3Rpb259O30uDQorDQor QGl0ZW0NCitGb2xsb3dpbmcgdGhlIGNsb3NpbmcgQHNhbXB7XX0gaXMgYW55IGFtb3VudCBvZiB3 aGl0ZXNwYWNlLCBhbmQgdGhlbiB0aGUgYWN0dWFsDQorYXNtIG91dHB1dC4NCisNCitAaXRlbQ0K K1NwYWNlcyBhcmUgYWxsb3dlZCBpbiB0aGUgbGlzdCAodGhleSB3aWxsIHNpbXBseSBiZSByZW1v dmVkKS4NCisNCitAaXRlbQ0KK0FsbCBjb25zdHJhaW50IGFsdGVybmF0aXZlcyBzaG91bGQgYmUg c3BlY2lmaWVkOiBhIGJsYW5rIGxpc3Qgc2hvdWxkIGJlDQorQHNhbXB7WywsXX0gb3IgZ2VuZXJh bGx5IHVzZSBAc2FtcHsqfSBmb3IgdGhlIGFsdGVybmF0aXZlcy4gZS5nLiBAc2FtcHtbKiwqLCpd fS4NCisNCitAaXRlbQ0KK1dpdGhpbiBhbiBAc2FtcHtAe0BAfSBibG9jayBib3RoIG11bHRpbGlu ZSBhbmQgc2luZ2xlbGluZSBDIGNvbW1lbnRzIGFyZQ0KK2FsbG93ZWQsIGJ1dCB3aGVuIHVzZWQg b3V0c2lkZSBvZiBhIEMgYmxvY2sgdGhleSBtdXN0IGJlIHRoZSBvbmx5IG5vbi13aGl0ZXNwYWNl DQorYmxvY2tzIG9uIHRoZSBsaW5lLg0KKw0KK0BpdGVtDQorV2l0aGluIGFuIEBzYW1we0B7QEB9 IGJsb2NrLCBhbnkgaXRlcmF0b3JzIHRoYXQgZG8gbm90IGdldCBleHBhbmRlZCB3aWxsIHJlc3Vs dCBpbiBhbg0KK2Vycm9yLiAgSWYgZm9yIHNvbWUgcmVhc29uIGl0IGlzIHJlcXVpcmVkIHRvIGhh dmUgQGNvZGV7PD59IGluIHRoZSBvdXRwdXQgdGhlbg0KK3RoZXNlIG11c3QgYmUgZXNjYXBlZCB1 c2luZyBAYmFja3NsYXNoY2hhcnt9Lg0KKw0KK0BpdGVtDQorVGhlIGFjdHVhbCBjb25zdHJhaW50 IHN0cmluZyBpbiB0aGUgQGNvZGV7bWF0Y2hfb3BlcmFuZH0gb3INCitAY29kZXttYXRjaF9zY3Jh dGNofSwgYW5kIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIGluIHRoZSBAY29kZXtzZXRfYXR0cn0sIG11 c3QgYmUNCitibGFuayBvciBhbiBlbXB0eSBzdHJpbmcgKHlvdSBjYW4ndCBjb21iaW5lIHRoZSBv bGQgYW5kIG5ldyBzeW50YXhlcykuDQorDQorQGl0ZW0NCitBZGRpdGlvbmFsIEBjb2Rle3NldF9h dHRyfSBjYW4gYmUgc3BlY2lmaWVkIG90aGVyIHRoYW4gdGhlIG9uZXMgaW4gdGhlDQorQHNhbXB7 YXR0cnN9IGxpc3QuICBUaGVzZSBtdXN0IHVzZSB0aGUgbm9ybWFsIHN5bnRheCBhbmQgbXVzdCBj b21lIGxhc3QuICBUaGVyZQ0KK211c3Qgbm90IGJlIGFueSBvdmVybGFwIGJldHdlZW4gdGhlIHR3 byBsaXN0cy4NCisNCitJbiBvdGhlciB3b3JkcywgdGhlIGZvbGxvd2luZyBpcyB2YWxpZDoNCitA c21hbGxleGFtcGxlDQorQGdyb3VwDQorKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiIg0KKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQ0KKwkobWF0Y2hf b3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIikpXQ0KKyAgIiINCisgIEB7QEAgW2Nv bnM6IDAsIDE7IGF0dHJzOiB0eXBlLCBhcmNoLCBsZW5ndGhdQH0NCisgIEBkb3Rze30gDQorICBb KHNldF9hdHRyICJmb28iICJtb3ZfaW1tIildDQorKQ0KK0BlbmQgZ3JvdXANCitAZW5kIHNtYWxs ZXhhbXBsZQ0KKw0KK2J1dCB0aGVzZSBhcmUgbm90IHZhbGlkOg0KK0BzbWFsbGV4YW1wbGUNCitA Z3JvdXANCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiDQorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIpDQorCShtYXRjaF9vcGVyYW5kOlNJIDEgImFh cmNoNjRfbW92X29wZXJhbmQiKSldDQorICAiIg0KKyAgQHtAQCBbY29uczogMCwgMTsgYXR0cnM6 IHR5cGUsIGFyY2gsIGxlbmd0aF1AfQ0KKyAgQGRvdHN7fSANCisgIFsoc2V0X2F0dHIgInR5cGUi KQ0KKyAgIChzZXRfYXR0ciAiYXJjaCIpDQorICAgKHNldF9hdHRyICJmb28iICJtb3ZfaW1tIild DQorKQ0KK0BlbmQgZ3JvdXANCitAZW5kIHNtYWxsZXhhbXBsZQ0KKw0KK2FuZA0KKw0KK0BzbWFs bGV4YW1wbGUNCitAZ3JvdXANCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiDQorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpTSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIpDQorCShtYXRjaF9vcGVy YW5kOlNJIDEgImFhcmNoNjRfbW92X29wZXJhbmQiKSldDQorICAiIg0KKyAgQHtAQCBbY29uczog MCwgMTsgYXR0cnM6IHR5cGUsIGFyY2gsIGxlbmd0aF1AfQ0KKyAgQGRvdHN7fSANCisgIFsoc2V0 X2F0dHIgInR5cGUiKQ0KKyAgIChzZXRfYXR0ciAiZm9vIiAibW92X2ltbSIpDQorICAgKHNldF9h dHRyICJhcmNoIikNCisgICAoc2V0X2F0dHIgImxlbmd0aCIpXQ0KKykNCitAZW5kIGdyb3VwDQor QGVuZCBzbWFsbGV4YW1wbGUNCisNCitiZWNhdXNlIHRoZSBvcmRlciBvZiB0aGUgZW50cmllcyBk b24ndCBtYXRjaCBhbmQgbmV3IGVudHJpZXMgbXVzdCBiZSBsYXN0Lg0KK0BlbmQgaXRlbWl6ZQ0K Kw0KIEBub2RlIFByZWRpY2F0ZXMNCiBAc2VjdGlvbiBQcmVkaWNhdGVzDQogQGNpbmRleCBwcmVk aWNhdGVzDQpkaWZmIC0tZ2l0IGEvZ2NjL2dlbm91dHB1dC5jYyBiL2djYy9nZW5vdXRwdXQuY2MN CmluZGV4IDE2M2U4ZGZlZjRjYTJjMmM5MmNlMWNmMDAxZWU2YmU0MGE1NGNhM2UuLjcwODhmODE2 Y2ZhNmU2YWIyYzFmNTFiOGJiYWE1ZWFlOTkwYTBhNGIgMTAwNjQ0DQotLS0gYS9nY2MvZ2Vub3V0 cHV0LmNjDQorKysgYi9nY2MvZ2Vub3V0cHV0LmNjDQpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1Ymxp YzoNCiAgIGludCBuX2FsdGVybmF0aXZlczsJCS8qIE51bWJlciBvZiBhbHRlcm5hdGl2ZXMgaW4g ZWFjaCBjb25zdHJhaW50ICovDQogICBpbnQgb3BlcmFuZF9udW1iZXI7CQkvKiBPcGVyYW5kIGlu ZGV4IGluIHRoZSBiaWcgYXJyYXkuICAqLw0KICAgaW50IG91dHB1dF9mb3JtYXQ7CQkvKiBJTlNO X09VVFBVVF9GT1JNQVRfKi4gICovDQorICBib29sIGNvbXBhY3Rfc3ludGF4X3A7DQogICBzdHJ1 Y3Qgb3BlcmFuZF9kYXRhIG9wZXJhbmRbTUFYX01BWF9PUEVSQU5EU107DQogfTsNCiANCkBAIC03 MDAsMTIgKzcwMSw1MSBAQCBwcm9jZXNzX3RlbXBsYXRlIChjbGFzcyBkYXRhICpkLCBjb25zdCBj aGFyICp0ZW1wbGF0ZV9jb2RlKQ0KIAkgIGlmIChzcCAhPSBlcCkNCiAJICAgIG1lc3NhZ2VfYXQg KGQtPmxvYywgInRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gb3V0cHV0IHRlbXBsYXRlIik7DQogDQot CSAgd2hpbGUgKGNwIDwgc3ApDQorCSAgLyogQ2hlY2sgZm9yIGFueSB1bmV4cGFuZGVkIGl0ZXJh dG9ycy4gICovDQorCSAgaWYgKGJwWzBdICE9ICcqJyAmJiBkLT5jb21wYWN0X3N5bnRheF9wKQ0K IAkgICAgew0KLQkgICAgICBwdXRjaGFyICgqY3ApOw0KLQkgICAgICBjcCsrOw0KKwkgICAgICBj b25zdCBjaGFyICpwID0gY3A7DQorCSAgICAgIGNvbnN0IGNoYXIgKmxhc3RfYnJhY2tldCA9IG51 bGxwdHI7DQorCSAgICAgIHdoaWxlIChwIDwgc3ApDQorCQl7DQorCQkgIGlmICgqcCA9PSAnXFwn ICYmIHAgKyAxIDwgc3ApDQorCQkgICAgew0KKwkJICAgICAgcHV0Y2hhciAoKnApOw0KKwkJICAg ICAgcHV0Y2hhciAoKihwKzEpKTsNCisJCSAgICAgIHAgKz0gMjsNCisJCSAgICAgIGNvbnRpbnVl Ow0KKwkJICAgIH0NCisNCisJCSAgaWYgKCpwID09ICc+JyAmJiBsYXN0X2JyYWNrZXQgJiYgKmxh c3RfYnJhY2tldCA9PSAnPCcpDQorCQkgICAgew0KKwkJICAgICAgaW50IGxlbiA9IHAgLSBsYXN0 X2JyYWNrZXQ7DQorCQkgICAgICBmYXRhbF9hdCAoZC0+bG9jLCAidW5yZXNvbHZlZCBpdGVyYXRv ciAnJS4qcycgaW4gJyVzJyIsDQorCQkJCWxlbiAtIDEsIGxhc3RfYnJhY2tldCArIDEsIGNwKTsN CisJCSAgICB9DQorCQkgIGVsc2UgaWYgKCpwID09ICc8JyB8fCAqcCA9PSAnPicpDQorCQkgICAg bGFzdF9icmFja2V0ID0gcDsNCisNCisJCSAgcHV0Y2hhciAoKnApOw0KKwkJICBwICs9IDE7DQor CQl9DQorDQorCSAgICAgIGlmIChsYXN0X2JyYWNrZXQpDQorCQl7DQorCQkgIGNoYXIgKm5sID0g c3RyY2hyIChjb25zdF9jYXN0PGNoYXIqPiAoY3ApLCAnXG4nKTsNCisJCSAgaWYgKG5sKQ0KKwkJ ICAgICpubCA9J1wwJzsNCisJCSAgZmF0YWxfYXQgKGQtPmxvYywgInVubWF0Y2hlZCBhbmdsZSBi cmFja2V0cywgbGlrZWx5IGFuICINCisJCQkgICAgImVycm9yIGluIGl0ZXJhdG9yIHN5bnRheCBp biAlcyIsIGNwKTsNCisJCX0NCisJICAgIH0NCisJICBlbHNlDQorCSAgICB7DQorCSAgICAgIHdo aWxlIChjcCA8IHNwKQ0KKwkJcHV0Y2hhciAoKihjcCsrKSk7DQogCSAgICB9DQogDQorCSAgY3Ag PSBzcDsNCisNCiAJICBpZiAoIWZvdW5kX3N0YXIpDQogCSAgICBwdXRzICgiXCIsIik7DQogCSAg ZWxzZSBpZiAoKmJwICE9ICcqJykNCkBAIC04ODEsNiArOTIxLDggQEAgZ2VuX2luc24gKG1kX3J0 eF9pbmZvICppbmZvKQ0KICAgZWxzZQ0KICAgICBkLT5uYW1lID0gMDsNCiANCisgIGQtPmNvbXBh Y3Rfc3ludGF4X3AgPSBjb21wYWN0X3N5bnRheC5jb250YWlucyAoaW5zbik7DQorDQogICAvKiBC dWlsZCB1cCB0aGUgbGlzdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgaW5zbnMgYXJlIHNlZW4N CiAgICAgIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgKi8NCiAgIGQtPm5leHQgPSAwOw0K ZGlmZiAtLWdpdCBhL2djYy9nZW5zdXBwb3J0LmggYi9nY2MvZ2Vuc3VwcG9ydC5oDQppbmRleCBh MWVkZmJkNzE5MDhiNjI0NGI0MGY4MDFjNmMwMTA3NGRlNTY3NzdlLi43OTI1ZTIyZWQ0MTg3Njc1 NzY1NjdjYWQ1ODNiZGRmODNjMDg0NmIxIDEwMDY0NA0KLS0tIGEvZ2NjL2dlbnN1cHBvcnQuaA0K KysrIGIvZ2NjL2dlbnN1cHBvcnQuaA0KQEAgLTIwLDYgKzIwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUNCiAjaWZuZGVmIEdDQ19HRU5TVVBQ T1JUX0gNCiAjZGVmaW5lIEdDQ19HRU5TVVBQT1JUX0gNCiANCisjaW5jbHVkZSAiaGFzaC1zZXQu aCINCiAjaW5jbHVkZSAicmVhZC1tZC5oIg0KIA0KIHN0cnVjdCBvYnN0YWNrOw0KQEAgLTIxOCw2 ICsyMTksOCBAQCBzdHJ1Y3QgcGF0dGVybl9zdGF0cw0KICAgaW50IG51bV9vcGVyYW5kX3ZhcnM7 DQogfTsNCiANCitleHRlcm4gaGFzaF9zZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsNCisNCiBleHRl cm4gdm9pZCBnZXRfcGF0dGVybl9zdGF0cyAoc3RydWN0IHBhdHRlcm5fc3RhdHMgKnJhbmdlcywg cnR2ZWMgdmVjKTsNCiBleHRlcm4gdm9pZCBjb21wdXRlX3Rlc3RfY29kZXMgKHJ0eCwgZmlsZV9s b2NhdGlvbiwgY2hhciAqKTsNCiBleHRlcm4gZmlsZV9sb2NhdGlvbiBnZXRfZmlsZV9sb2NhdGlv biAocnR4KTsNCmRpZmYgLS1naXQgYS9nY2MvZ2Vuc3VwcG9ydC5jYyBiL2djYy9nZW5zdXBwb3J0 LmNjDQppbmRleCBmOWVmYzZlYjc1NzJhNDRiOGJiMTU0YjBiMjJiZTM4MTViZDBkMjQ0Li41MDcy ODVlOGZlZjU0NDNlYzQyNTAxNDQ3ZTczMDAyMmUxNDI2ZWUxIDEwMDY0NA0KLS0tIGEvZ2NjL2dl bnN1cHBvcnQuY2MNCisrKyBiL2djYy9nZW5zdXBwb3J0LmNjDQpAQCAtMTgsNiArMTgsOCBAQA0K ICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovDQogDQogI2luY2x1ZGUgImJj b25maWcuaCINCisjZGVmaW5lIElOQ0xVREVfU1RSSU5HDQorI2RlZmluZSBJTkNMVURFX1ZFQ1RP Ug0KICNpbmNsdWRlICJzeXN0ZW0uaCINCiAjaW5jbHVkZSAiY29yZXR5cGVzLmgiDQogI2luY2x1 ZGUgInRtLmgiDQpAQCAtMzMsNiArMzUsOCBAQA0KIHN0YXRpYyBydHggb3BlcmFuZF9kYXRhW01B WF9PUEVSQU5EU107DQogc3RhdGljIHJ0eCBtYXRjaF9vcGVyYW5kX2VudHJpZXNfaW5fcGF0dGVy bltNQVhfT1BFUkFORFNdOw0KIHN0YXRpYyBjaGFyIHVzZWRfb3BlcmFuZHNfbnVtYmVyc1tNQVhf T1BFUkFORFNdOw0KKy8qIExpc3Qgb2YgZW50cmllcyB3aGljaCBhcmUgcGFydCBvZiB0aGUgbmV3 IHN5bnRheC4gICovDQoraGFzaF9zZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsNCiANCiANCiAvKiBJ biBjYXNlIHNvbWUgbWFjcm9zIHVzZWQgYnkgZmlsZXMgd2UgaW5jbHVkZSBuZWVkIGl0LCBkZWZp bmUgdGhpcyBoZXJlLiAgKi8NCkBAIC01NDUsNiArNTQ5LDUyNiBAQCBnZW5fcmV3cml0ZV9zZXF1 ZW5jZSAocnR2ZWMgdmVjKQ0KICAgcmV0dXJuIG5ld192ZWM7DQogfQ0KIA0KKy8qIFRoZSBmb2xs b3dpbmcgaXMgZm9yIGhhbmRsaW5nIHRoZSBjb21wYWN0IHN5bnRheCBmb3IgY29uc3RyYWludHMg YW5kDQorICAgYXR0cmlidXRlcy4NCisNCisgICBUaGUgbm9ybWFsIHN5bnRheCBsb29rcyBsaWtl IHRoaXM6DQorDQorICAgICAgIC4uLg0KKyAgICAgICAobWF0Y2hfb3BlcmFuZDogMCAic19yZWdp c3Rlcl9vcGVyYW5kIiAicixJLGsiKQ0KKyAgICAgICAobWF0Y2hfb3BlcmFuZDogMiAic19yZWdp c3Rlcl9vcGVyYW5kIiAicixrLEkiKQ0KKyAgICAgICAuLi4NCisgICAgICAgIkANCisJPGFzbT4N CisJPGFzbT4NCisJPGFzbT4iDQorICAgICAgIC4uLg0KKyAgICAgICAoc2V0X2F0dHIgImxlbmd0 aCIgIjQsOCw4IikNCisNCisgICBUaGUgY29tcGFjdCBzeW50YXggbG9va3MgbGlrZSB0aGlzOg0K Kw0KKyAgICAgICAuLi4NCisgICAgICAgKG1hdGNoX29wZXJhbmQ6IDAgInNfcmVnaXN0ZXJfb3Bl cmFuZCIpDQorICAgICAgIChtYXRjaF9vcGVyYW5kOiAyICJzX3JlZ2lzdGVyX29wZXJhbmQiKQ0K KyAgICAgICAuLi4NCisgICAgICAge0AgW2NvbnM6IDAsIDI7IGF0dHJzOiBsZW5ndGhdDQorCVty LHI7IDRdIDxhc20+DQorCVtJLGs7IDhdIDxhc20+DQorCVtrLEk7IDhdIDxhc20+DQorICAgICAg IH0NCisgICAgICAgLi4uDQorICAgICAgIChzZXRfYXR0ciAibGVuZ3RoIikNCisNCisgICBUaGlz IGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIHRoaXMgc3ludGF4IG5lZWRzIHRvIGJlIGhhbmRsZWQu ICBSZWxldmFudA0KKyAgIHBhdHRlcm5zIGFyZSB0cmFuc2Zvcm1lZCBmcm9tIGNvbXBhY3QgdG8g dGhlIG5vcm1hbCBzeW50YXggYmVmb3JlIHRoZXkgYXJlDQorICAgcXVldWVkLCBzbyBub25lIG9m IHRoZSBnZW4qIHByb2dyYW1zIG5lZWQgdG8ga25vdyBhYm91dCB0aGlzIHN5bnRheCBhdCBhbGwu DQorDQorICAgQ29udmVyc2lvbiBwcm9jZXNzIChjb252ZXJ0X3N5bnRheCk6DQorDQorICAgMCkg Q2hlY2sgdGhhdCBwYXR0ZXJuIGFjdHVhbGx5IHVzZXMgbmV3IHN5bnRheCAoY2hlY2sgZm9yIHtA IC4uLiB9KS4NCisNCisgICAxKSBHZXQgdGhlICJsYXlvdXQiLCBpLmUuIHRoZSAiW2NvbnM6IDAg MjsgYXR0cnM6IGxlbmd0aF0iIGZyb20gdGhlIGFib3ZlDQorICAgICAgZXhhbXBsZS4gIGNvbnMg bXVzdCBjb21lIGZpcnN0OyBib3RoIGFyZSBvcHRpb25hbC4gU2V0IHVwIHR3byB2ZWNzLA0KKyAg ICAgIGNvbnZlYyBhbmQgYXR0cnZlYywgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHRy YW5zZm9ybWF0aW9uLg0KKw0KKyAgIDIpIEZvciBlYWNoIGFsdGVybmF0aXZlOiBwYXJzZSB0aGUg bGlzdCBvZiBjb25zdHJhaW50cyBhbmQvb3IgYXR0cmlidXRlcywNCisgICAgICBhbmQgZW5xdWV1 ZSB0aGVtIGluIHRoZSByZWxldmFudCBsaXN0cyBpbiBjb252ZWMgYW5kIGF0dHJ2ZWMuICBCeSB0 aGUgZW5kDQorICAgICAgb2YgdGhpcyBwcm9jZXNzLCBjb252ZWNbTl0uY29uIGFuZCBhdHRydmVj W05dLmNvbiBzaG91bGQgY29udGFpbiByZWd1bGFyDQorICAgICAgc3ludGF4IGNvbnN0cmFpbnQv YXR0cmlidXRlIGxpc3RzIGxpa2UgInIsSSxrIi4gIENvcHkgdGhlIGFzbSB0byBhIHN0cmluZw0K KyAgICAgIGFzIHdlIGdvLg0KKw0KKyAgIDMpIFNlYXJjaCB0aGUgcnR4IGFuZCB3cml0ZSB0aGUg Y29uc3RyYWludCBhbmQgYXR0cmlidXRlIGxpc3RzIGludG8gdGhlDQorICAgICAgY29ycmVjdCBw bGFjZXMuIFdyaXRlIHRoZSBhc20gYmFjayBpbnRvIHRoZSB0ZW1wbGF0ZS4gICovDQorDQorLyog SGVscGVyIGNsYXNzIGZvciBzaHVmZmxpbmcgY29uc3RyYWludHMvYXR0cmlidXRlcyBpbiBjb252 ZXJ0X3N5bnRheCBhbmQNCisgICBhZGRfY29uc3RyYWludHMvYWRkX2F0dHJpYnV0ZXMuICBUaGlz IGluY2x1ZGVzIGNvbW1hcyBidXQgbm90IHdoaXRlc3BhY2UuICAqLw0KKw0KK2NsYXNzIGNvbmxp c3Qgew0KK3ByaXZhdGU6DQorICBzdGQ6OnN0cmluZyBjb247DQorDQorcHVibGljOg0KKyAgc3Rk OjpzdHJpbmcgbmFtZTsNCisgIGludCBpZHggPSAtMTsNCisNCisgIGNvbmxpc3QgKCkgPSBkZWZh dWx0Ow0KKw0KKyAgLyogW25zLi5ucyArIGxlbikgc2hvdWxkIGJlIGEgc3RyaW5nIHdpdGggdGhl IGlkIG9mIHRoZSBydHggdG8gbWF0Y2gNCisgICAgIGkuZS4gaWYgcnR4IGlzIHRoZSByZWxldmFu dCBtYXRjaF9vcGVyYW5kIG9yIG1hdGNoX3NjcmF0Y2ggdGhlbg0KKyAgICAgW25zLi5ucyArIGxl bikgc2hvdWxkIGVxdWFsIGl0b2EgKFhJTlQgKHJ0eCwgMCkpLCBhbmQgaWYgc2V0X2F0dHIgdGhl bg0KKyAgICAgW25zLi5ucyArIGxlbikgc2hvdWxkIGVxdWFsIFhTVFIgKHJ0eCwgMCkuICAqLw0K KyAgY29ubGlzdCAoY29uc3QgY2hhciAqbnMsIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgbnVtZXJp YykNCisgIHsNCisgICAgLyogVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2VzLiAgKi8NCisgICAgd2hp bGUgKElTU1BBQ0UgKCpucykpDQorICAgICAgew0KKwlucysrOw0KKwlsZW4tLTsNCisgICAgICB9 DQorDQorICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZS4gICovDQorICAgIGZvciAoaW50 IGkgPSBsZW4gLSAxOyBpID49IDA7IGkrKywgbGVuLS0pDQorICAgICAgaWYgKCFJU1NQQUNFICgq bnMpKQ0KKwlicmVhazsNCisNCisgICAgLyogUGFyc2Ugb2ZmIGFueSBtb2RpZmllcnMuICAqLw0K KyAgICB3aGlsZSAoIUlTQUxOVU0gKCpucykpDQorICAgICAgew0KKwljb24gKz0gKihucysrKTsN CisJbGVuLS07DQorICAgICAgfQ0KKw0KKyAgICBuYW1lLmFzc2lnbiAobnMsIGxlbik7DQorICAg IGlmIChudW1lcmljKQ0KKyAgICAgIGlkeCA9IHN0ZDo6c3RvaSAobmFtZSk7DQorICB9DQorDQor ICAvKiBBZGRzIGEgY2hhcmFjdGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gICovDQorICB2 b2lkIGFkZCAoY2hhciBjKQ0KKyAgew0KKyAgICBjb24gKz0gYzsNCisgIH0NCisNCisgIC8qIE91 dHB1dCB0aGUgc3RyaW5nIGluIHRoZSBmb3JtIG9mIGEgYnJhbmQtbmV3IGNoYXIgKiwgdGhlbiBl ZmZlY3RpdmVseQ0KKyAgICAgY2xlYXIgdGhlIGludGVybmFsIHN0cmluZyBieSByZXNldHRpbmcg bGVuIHRvIDAuICAqLw0KKyAgY2hhciAqb3V0ICgpDQorICB7DQorICAgIC8qIEZpbmFsIGNoYXJh Y3RlciBpcyBhbHdheXMgYSB0cmFpbGluZyBjb21tYSwgc28gc3RyaXAgaXQgb3V0LiAgKi8NCisg ICAgY2hhciAqcSA9IHhzdHJuZHVwIChjb24uY19zdHIgKCksIGNvbi5zaXplICgpIC0gMSk7DQor ICAgIGNvbi5jbGVhciAoKTsNCisgICAgcmV0dXJuIHE7DQorICB9DQorfTsNCisNCit0eXBlZGVm IHN0ZDo6dmVjdG9yPGNvbmxpc3Q+IHZlY19jb25saXN0Ow0KKw0KKy8qIEFkZCBjb25zdHJhaW50 cyB0byBhbiBydHguICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gcmVtb3ZlX2NvbnN0cmFp bnRzLg0KKyAgIEVycm9ycyBpZiBhZGRpbmcgdGhlIGNvbnN0cmFpbnRzIHdvdWxkIG92ZXJ3cml0 ZSBleGlzdGluZyBjb25zdHJhaW50cy4gICovDQorDQorc3RhdGljIHZvaWQNCithZGRfY29uc3Ry YWludHMgKHJ0eCBwYXJ0LCBmaWxlX2xvY2F0aW9uIGxvYywgdmVjX2Nvbmxpc3QgJmNvbnMpDQor ew0KKyAgY29uc3QgY2hhciAqZm9ybWF0X3B0cjsNCisNCisgIGlmIChwYXJ0ID09IE5VTExfUlRY KQ0KKyAgICByZXR1cm47DQorDQorICAvKiBJZiBtYXRjaF9vcCBvciBtYXRjaF9zY3IsIGNoZWNr IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IG9uZSwgYW5kIGlmIHNvLCBjb3B5DQorICAgICBvdmVyIHRo ZSBjb25zdHJhaW50IGxpc3QuICAqLw0KKyAgaWYgKEdFVF9DT0RFIChwYXJ0KSA9PSBNQVRDSF9P UEVSQU5EIHx8IEdFVF9DT0RFIChwYXJ0KSA9PSBNQVRDSF9TQ1JBVENIKQ0KKyAgICB7DQorICAg ICAgaW50IGZpZWxkID0gR0VUX0NPREUgKHBhcnQpID09IE1BVENIX09QRVJBTkQgPyAyIDogMTsN CisgICAgICB1bnNpZ25lZCBpZCA9IFhJTlQgKHBhcnQsIDApOw0KKw0KKyAgICAgIGlmIChpZCA+ PSBjb25zLnNpemUgKCkpDQorCWZhdGFsX2F0IChsb2MsICJjb3VsZCBub3QgZmluZCBtYXRjaF9v cGVyYW5kL3NjcmF0Y2ggd2l0aCBpZCAlZCIsIGlkKTsNCisNCisgICAgICBpZiAoY29uc1tpZF0u aWR4ID09IC0xKQ0KKwl7DQorCSAgZXJyb3JfYXQgKGxvYywgImNvbnN0cnVjdG9yICVkIGVuY291 bnRlcmVkIG1vcmUgdGhhbiBvbmNlIiwgaWQpOw0KKwkgIHJldHVybjsNCisJfQ0KKw0KKyAgICAg IGlmIChYU1RSIChwYXJ0LCBmaWVsZClbMF0gIT0gJ1wwJykNCisJew0KKwkgIGVycm9yX2F0IChs b2MsICJjYW4ndCBtaXggbm9ybWFsIGFuZCBjb21wYWN0IGNvbnN0cmFpbnQgc3ludGF4Iik7DQor CSAgcmV0dXJuOw0KKwl9DQorICAgICAgWFNUUiAocGFydCwgZmllbGQpID0gY29uc1tpZF0ub3V0 ICgpOw0KKyAgICAgIGNvbnNbaWRdLmlkeCA9IC0xOw0KKyAgICB9DQorDQorICBmb3JtYXRfcHRy ID0gR0VUX1JUWF9GT1JNQVQgKEdFVF9DT0RFIChwYXJ0KSk7DQorDQorICAvKiBSZWN1cnNpdmVs eSBzZWFyY2ggdGhlIHJ0eC4gICovDQorICBmb3IgKGludCBpID0gMDsgaSA8IEdFVF9SVFhfTEVO R1RIIChHRVRfQ09ERSAocGFydCkpOyBpKyspDQorICAgIHN3aXRjaCAoKmZvcm1hdF9wdHIrKykN CisgICAgICB7DQorICAgICAgY2FzZSAnZSc6DQorICAgICAgY2FzZSAndSc6DQorCWFkZF9jb25z dHJhaW50cyAoWEVYUCAocGFydCwgaSksIGxvYywgY29ucyk7DQorCWJyZWFrOw0KKyAgICAgIGNh c2UgJ0UnOg0KKwlpZiAoWFZFQyAocGFydCwgaSkgIT0gTlVMTCkNCisJICBmb3IgKGludCBqID0g MDsgaiA8IFhWRUNMRU4gKHBhcnQsIGkpOyBqKyspDQorCSAgICBhZGRfY29uc3RyYWludHMgKFhW RUNFWFAgKHBhcnQsIGksIGopLCBsb2MsIGNvbnMpOw0KKwlicmVhazsNCisgICAgICBkZWZhdWx0 Og0KKwljb250aW51ZTsNCisgICAgICB9DQorfQ0KKw0KKy8qIEFkZCBhdHRyaWJ1dGVzIHRvIGFu IHJ0eC4gVGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbWF0Y2hlZCBtdXN0IGJlIGluIG9yZGVyDQor ICAgaS5lLiByZWFkIGZyb20gdG9wIHRvIGJvdHRvbSBpbiB0aGUgcGF0dGVybi4NCisgICBFcnJv cnMgaWYgYWRkaW5nIHRoZSBhdHRyaWJ1dGVzIHdvdWxkIG92ZXJ3cml0ZSBleGlzdGluZyBhdHRy aWJ1dGVzLg0KKyAgIFJldHVybnMgMSArIGluZGV4IG9mIGxhc3QgY29ubGlzdCB0byBiZSBtYXRj aGVkLiAgKi8NCisNCitzdGF0aWMgdW5zaWduZWQgaW50DQorYWRkX2F0dHJpYnV0ZXMgKHJ0eCB4 LCBmaWxlX2xvY2F0aW9uIGxvYywgdmVjX2Nvbmxpc3QgJmF0dHJzKQ0KK3sNCisgIHVuc2lnbmVk IGludCBhdHRyX2luZGV4ID0gR0VUX0NPREUgKHgpID09IERFRklORV9JTlNOID8gNCA6IDM7DQor ICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOw0KKw0KKyAgaWYgKFhWRUMgKHgsIGF0dHJfaW5kZXgp ID09IE5VTEwpDQorICAgIHJldHVybiBpbmRleDsNCisNCisgIGZvciAoaW50IGkgPSAwOyBpIDwg WFZFQ0xFTiAoeCwgYXR0cl9pbmRleCk7ICsraSkNCisgICAgew0KKyAgICAgIHJ0eCBwYXJ0ID0g WFZFQ0VYUCAoeCwgYXR0cl9pbmRleCwgaSk7DQorDQorICAgICAgaWYgKEdFVF9DT0RFIChwYXJ0 KSAhPSBTRVRfQVRUUikNCisJY29udGludWU7DQorDQorICAgICAgaWYgKGF0dHJzW2luZGV4XS5u YW1lID09IFhTVFIgKHBhcnQsIDApKQ0KKwl7DQorCSAgaWYgKFhTVFIgKHBhcnQsIDEpICYmIFhT VFIgKHBhcnQsIDEpWzBdICE9ICdcMCcpDQorCSAgICBmYXRhbF9hdCAobG9jLCAiY2FuJ3QgbWl4 IG5vcm1hbCBhbmQgY29tcGFjdCBhdHRyaWJ1dGUgc3ludGF4Iik7DQorCSAgWFNUUiAocGFydCwg MSkgPSBhdHRyc1tpbmRleF0ub3V0ICgpOw0KKw0KKwkgIGlmICgrK2luZGV4ID09IGF0dHJzLnNp emUgKCkpDQorCSAgICBicmVhazsNCisJfQ0KKyAgICAgIGVsc2UNCisJZmF0YWxfYXQgKGxvYywg ImNhbid0IG1peCBub3JtYWwgYW5kIGNvbXBhY3QgYXR0cmlidXRlIHN5bnRheCIpOw0KKyAgICB9 DQorDQorICByZXR1cm4gaW5kZXg7DQorfQ0KKw0KKy8qIE1vZGlmeSB0aGUgYXR0cmlidXRlcyBs aXN0IHRvIG1ha2Ugc3BhY2UgZm9yIHRoZSBpbXBsaWNpdGx5IGRlY2xhcmVkDQorICAgYXR0cmli dXRlcyBpbiB0aGUgYXR0cnM6IGxpc3QuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorY3JlYXRlX21p c3NpbmdfYXR0cmlidXRlcyAocnR4IHgsIGZpbGVfbG9jYXRpb24gLyogbG9jICovLCB2ZWNfY29u bGlzdCAmYXR0cnMpDQorew0KKyAgaWYgKGF0dHJzLmVtcHR5ICgpKQ0KKyAgICByZXR1cm47DQor DQorICB1bnNpZ25lZCBpbnQgYXR0cl9pbmRleCA9IEdFVF9DT0RFICh4KSA9PSBERUZJTkVfSU5T TiA/IDQgOiAzOw0KKyAgcnR2ZWMgb3JpZyA9IFhWRUMgKHgsIGF0dHJfaW5kZXgpOw0KKyAgc2l6 ZV90IG5fY3VyciA9IG9yaWcgPyBYVkVDTEVOICh4LCBhdHRyX2luZGV4KSA6IDA7DQorICBydHZl YyBjb3B5ID0gcnR2ZWNfYWxsb2MgKG5fY3VyciArIGF0dHJzLnNpemUgKCkpOw0KKw0KKyAgLyog Q3JlYXRlIGEgc2hhbGxvdyBjb3B5IG9mIGV4aXN0aW5nIGVudHJpZXMuICAqLw0KKyAgbWVtY3B5 ICgmY29weS0+ZWxlbVthdHRycy5zaXplICgpXSwgJm9yaWctPmVsZW1bMF0sIHNpemVvZiAocnR4 KSAqIG5fY3Vycik7DQorICBYVkVDICh4LCBhdHRyX2luZGV4KSA9IGNvcHk7DQorDQorICAvKiBD cmVhdGUgdGhlIG5ldyBlbGVtZW50cy4gICovDQorICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg YXR0cnMuc2l6ZSAoKTsgaSsrKQ0KKyAgICB7DQorICAgICAgcnR4IGF0dHIgPSBydHhfYWxsb2Mg KFNFVF9BVFRSKTsNCisgICAgICBYU1RSIChhdHRyLCAwKSA9IHhzdHJkdXAgKGF0dHJzW2ldLm5h bWUuY19zdHIgKCkpOw0KKyAgICAgIFhTVFIgKGF0dHIsIDEpID0gTlVMTDsNCisgICAgICBYVkVD RVhQICh4LCBhdHRyX2luZGV4LCBpKSA9IGF0dHI7DQorICAgIH0NCisNCisgIHJldHVybjsNCit9 DQorDQorLyogQ29uc3VtZXMgc3BhY2VzIGFuZCB0YWJzLiAgKi8NCisNCitzdGF0aWMgaW5saW5l IHZvaWQNCitza2lwX3NwYWNlcyAoY29uc3QgY2hhciAqKnN0cikNCit7DQorICB3aGlsZSAoSVNT UEFDRSAoKipzdHIpKQ0KKyAgICAoKnN0cikrKzsNCit9DQorDQorLyogQ29uc3VtZXMgdGhlIGdp dmVuIGNoYXJhY3RlciwgaWYgaXQncyB0aGVyZS4gICovDQorDQorc3RhdGljIGlubGluZSBib29s DQorZXhwZWN0X2NoYXIgKGNvbnN0IGNoYXIgKipzdHIsIGNoYXIgYykNCit7DQorICBpZiAoKipz dHIgIT0gYykNCisgICAgcmV0dXJuIGZhbHNlOw0KKyAgKCpzdHIpKys7DQorICByZXR1cm4gdHJ1 ZTsNCit9DQorDQorLyogUGFyc2VzIHRoZSBzZWN0aW9uIGxheW91dCB0aGF0IGZvbGxvd3MgYSAi e0B9IiBpZiB1c2luZyBuZXcgc3ludGF4LiBCdWlsZHMNCisgICBhIHZlY3RvciBmb3IgYSBzaW5n bGUgc2VjdGlvbi4gRS5nLiBpZiB3ZSBoYXZlICJhdHRyczogbGVuZ3RoIGFyY2hdLi4uIg0KKyAg IHRoZW4gbGlzdCB3aWxsIGhhdmUgdHdvIGVsZW1lbnRzLCB0aGUgZmlyc3QgZm9yICJsZW5ndGgi IGFuZCB0aGUgc2Vjb25kDQorICAgZm9yICJhcmNoIi4gICovDQorDQorc3RhdGljIHZvaWQNCitw YXJzZV9zZWN0aW9uX2xheW91dCAoY29uc3QgY2hhciAqKnRlbXBsLCBjb25zdCBjaGFyICpsYWJl bCwNCisJCSAgICAgIHZlY19jb25saXN0ICZsaXN0LCBib29sIG51bWVyaWMpDQorew0KKyAgY29u c3QgY2hhciAqbmFtZV9zdGFydDsNCisgIHNpemVfdCBsYWJlbF9sZW4gPSBzdHJsZW4gKGxhYmVs KTsNCisgIGlmIChzdHJuY21wIChsYWJlbCwgKnRlbXBsLCBsYWJlbF9sZW4pID09IDApDQorICAg IHsNCisgICAgICAqdGVtcGwgKz0gbGFiZWxfbGVuOw0KKw0KKyAgICAgIC8qIEdhdGhlciB0aGUg bmFtZXMuICAqLw0KKyAgICAgIHdoaWxlICgqKnRlbXBsICE9ICc7JyAmJiAqKnRlbXBsICE9ICdd JykNCisJew0KKwkgIHNraXBfc3BhY2VzICh0ZW1wbCk7DQorCSAgbmFtZV9zdGFydCA9ICp0ZW1w bDsNCisJICBpbnQgbGVuID0gMDsNCisJICBjaGFyIHZhbCA9ICgqdGVtcGwpW2xlbl07DQorCSAg d2hpbGUgKHZhbCAhPSAnLCcgJiYgdmFsICE9ICc7JyAmJiB2YWwgIT0gJ10nKQ0KKwkgICAgIHZh bCA9ICgqdGVtcGwpWysrbGVuXTsNCisJICAqdGVtcGwgKz0gbGVuOw0KKwkgIGlmICh2YWwgPT0g JywnKQ0KKwkgICAgKCp0ZW1wbCkrKzsNCisJICBsaXN0LnB1c2hfYmFjayAoY29ubGlzdCAobmFt ZV9zdGFydCwgbGVuLCBudW1lcmljKSk7DQorCX0NCisgICAgfQ0KK30NCisNCisvKiBQYXJzZSBh IHNlY3Rpb24sIGEgc2VjdGlvbiBpcyBkZWZpbmVkIGFzIGEgbmFtZWQgc3BhY2Ugc2VwYXJhdGVk IGxpc3QsIGUuZy4NCisNCisgICBmb286IGEsIGIsIGMNCisNCisgICBpcyBhIHNlY3Rpb24gbmFt ZWQgImZvbyIgd2l0aCBlbnRyaWVzIGEsIGIgYW5kIGMuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQor cGFyc2Vfc2VjdGlvbiAoY29uc3QgY2hhciAqKnRlbXBsLCB1bnNpZ25lZCBpbnQgbl9lbGVtcywg dW5zaWduZWQgaW50IGFsdF9ubywNCisJICAgICAgIHZlY19jb25saXN0ICZsaXN0LCBmaWxlX2xv Y2F0aW9uIGxvYywgY29uc3QgY2hhciAqbmFtZSkNCit7DQorICB1bnNpZ25lZCBpbnQgaTsNCisN CisgIC8qIEdvIHRocm91Z2ggdGhlIGxpc3QsIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLCBhZGRp bmcgc2FpZCBjaGFyYWN0ZXINCisgICAgIHRvIHRoZSBjb3JyZWN0IHN0cmluZy4gICovDQorICBm b3IgKGkgPSAwOyAqKnRlbXBsICE9ICddJyAmJiAqKnRlbXBsICE9ICc7JzsgKCp0ZW1wbCkrKykN CisgICAgew0KKyAgICAgIGlmICghSVNTUEFDRSAoKip0ZW1wbCkpDQorCXsNCisJICBsaXN0W2ld LmFkZCgqKnRlbXBsKTsNCisJICBpZiAoKip0ZW1wbCA9PSAnLCcpDQorCSAgICB7DQorCSAgICAg ICsraTsNCisJICAgICAgaWYgKGkgPT0gbl9lbGVtcykNCisJCWZhdGFsX2F0IChsb2MsICJ0b28g bWFueSAlc3MgaW4gYWx0ZXJuYXRpdmUgJWQ6IGV4cGVjdGVkICVkIiwNCisJCQkgIG5hbWUsIGFs dF9ubywgbl9lbGVtcyk7DQorCSAgICB9DQorCX0NCisgICAgfQ0KKw0KKyAgaWYgKGkgKyAxIDwg bl9lbGVtcykNCisgICAgZmF0YWxfYXQgKGxvYywgInRvbyBmZXcgJXNzIGluIGFsdGVybmF0aXZl ICVkOiBleHBlY3RlZCAlZCwgZ290ICVkIiwNCisJICAgICAgbmFtZSwgYWx0X25vLCBuX2VsZW1z LCBpKTsNCisNCisgIGxpc3RbaV0uYWRkKCcsJyk7DQorfQ0KKw0KKy8qIFRoZSBjb21wYWN0IHN5 bnRheCBoYXMgbW9yZSBjb252aWVuY2Ugc3ludGF4ZXMuICBBcyBzdWNoIHdlIHBvc3QgcHJvY2Vz cw0KKyAgIHRoZSBsaW5lcyB0byBnZXQgdGhlbSBiYWNrIHRvIHNvbWV0aGluZyB0aGUgbm9ybWFs IHN5bnRheCB1bmRlcnN0YW5kcy4gICovDQorDQorc3RhdGljIHZvaWQNCitwcmVwcm9jZXNzX2Nv bXBhY3Rfc3ludGF4IChmaWxlX2xvY2F0aW9uIGxvYywgaW50IGFsdF9ubywgc3RkOjpzdHJpbmcg JmxpbmUsDQorCQkJICAgc3RkOjpzdHJpbmcgJmxhc3RfbGluZSkNCit7DQorICAvKiBDaGVjayBp ZiB3ZSdyZSBjb3B5aW5nIHRoZSBsYXN0IHN0YXRlbWVudC4gICovDQorICBpZiAobGluZS5maW5k ICgiXiIpID09IDAgJiYgbGluZS5zaXplICgpID09IDEpDQorICAgIHsNCisgICAgICBpZiAobGFz dF9saW5lLmVtcHR5ICgpKQ0KKwlmYXRhbF9hdCAobG9jLCAiZm91bmQgaW5zdHJ1Y3Rpb24gdG8g Y29weSBwcmV2aW91cyBsaW5lICheKSBpbiINCisJCSAgICAgICAiYWx0ZXJuYXRpdmUgJWQgYnV0 IG5vIHByZXZpb3VzIGxpbmUgdG8gY29weSIsIGFsdF9ubyk7DQorICAgICAgbGluZSA9IGxhc3Rf bGluZTsNCisgICAgICByZXR1cm47DQorICAgIH0NCisNCisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsN CisgIHN0ZDo6c3RyaW5nIGJ1ZmZlcjsNCisgIC8qIENoZWNrIGlmIHdlIGhhdmUgPDwgd2hpY2gg bWVhbnMgcmV0dXJuIGMgc3RhdGVtZW50LiAgKi8NCisgIGlmIChsaW5lLmZpbmQgKCI8PCIpID09 IDApDQorICAgIHsNCisgICAgICByZXN1bHQuYXBwZW5kICgiKiByZXR1cm4gIik7DQorICAgICAg Y29uc3QgY2hhciAqY2h1bmsgPSBsaW5lLmNfc3RyICgpICsgMjsNCisgICAgICBza2lwX3NwYWNl cyAoJmNodW5rKTsNCisgICAgICByZXN1bHQuYXBwZW5kIChjaHVuayk7DQorICAgIH0NCisgIGVs c2UNCisgICAgcmVzdWx0LmFwcGVuZCAobGluZSk7DQorDQorICBsaW5lID0gcmVzdWx0Ow0KKyAg cmV0dXJuOw0KK30NCisNCisvKiBDb252ZXJ0cyBhbiBydHggZnJvbSBjb21wYWN0IHN5bnRheCB0 byBub3JtYWwgc3ludGF4IGlmIHBvc3NpYmxlLiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK2NvbnZl cnRfc3ludGF4IChydHggeCwgZmlsZV9sb2NhdGlvbiBsb2MpDQorew0KKyAgaW50IGFsdF9ubzsN CisgIHVuc2lnbmVkIGludCBpbmRleCwgdGVtcGxfaW5kZXg7DQorICBjb25zdCBjaGFyICp0ZW1w bDsNCisgIHZlY19jb25saXN0IHRjb252ZWMsIGNvbnZlYywgYXR0cnZlYzsNCisNCisgIHRlbXBs X2luZGV4ID0gR0VUX0NPREUgKHgpID09IERFRklORV9JTlNOID8gMyA6IDI7DQorDQorICB0ZW1w bCA9IFhUTVBMICh4LCB0ZW1wbF9pbmRleCk7DQorDQorICAvKiBUZW1wbGF0ZXMgd2l0aCBjb25z dHJhaW50cyBzdGFydCB3aXRoICJ7QCIuICAqLw0KKyAgaWYgKHN0cm5jbXAgKCIqe0AiLCB0ZW1w bCwgMykpDQorICAgIHJldHVybjsNCisNCisgIC8qIEdldCB0aGUgbGF5b3V0IGZvciB0aGUgdGVt cGxhdGUuICAqLw0KKyAgdGVtcGwgKz0gMzsNCisgIHNraXBfc3BhY2VzICgmdGVtcGwpOw0KKw0K KyAgaWYgKCFleHBlY3RfY2hhciAoJnRlbXBsLCAnWycpKQ0KKyAgICBmYXRhbF9hdCAobG9jLCAi ZXhwZWNpbmcgYFsnIHRvIGJlZ2luIHNlY3Rpb24gbGlzdCIpOw0KKw0KKyAgcGFyc2Vfc2VjdGlv bl9sYXlvdXQgKCZ0ZW1wbCwgImNvbnM6IiwgdGNvbnZlYywgdHJ1ZSk7DQorICBjb252ZWMucmVz aXplICh0Y29udmVjLnNpemUgKCkpOw0KKw0KKyAgLyogQ2hlY2sgZm9yIGFueSBkdXBsaWNhdGUg Y29ucyBlbnRyaWVzIGFuZCBzb3J0IGJhc2VkIG9uIGkuICAqLw0KKyAgZm9yIChhdXRvIGUgOiB0 Y29udmVjKQ0KKyAgICB7DQorICAgICAgdW5zaWduZWQgaWR4ID0gZS5pZHg7DQorICAgICAgaWYg KGlkeCA+PSBjb252ZWMuc2l6ZSAoKSkNCisJY29udmVjLnJlc2l6ZSAoaWR4ICsgMSk7DQorDQor ICAgICAgaWYgKGNvbnZlY1tpZHhdLmlkeCA+PSAwKQ0KKwlmYXRhbF9hdCAobG9jLCAiZHVwbGlj YXRlIGNvbnMgbnVtYmVyIGZvdW5kOiAlZCIsIGlkeCk7DQorICAgICAgY29udmVjW2lkeF0gPSBl Ow0KKyAgICB9DQorICB0Y29udmVjLmNsZWFyICgpOw0KKw0KKyAgaWYgKCp0ZW1wbCAhPSAnXScp DQorICAgIHsNCisgICAgICBpZiAoKnRlbXBsID09ICc7JykNCisJc2tpcF9zcGFjZXMgKCYoKyt0 ZW1wbCkpOw0KKyAgICAgIHBhcnNlX3NlY3Rpb25fbGF5b3V0ICgmdGVtcGwsICJhdHRyczoiLCBh dHRydmVjLCBmYWxzZSk7DQorICAgICAgY3JlYXRlX21pc3NpbmdfYXR0cmlidXRlcyAoeCwgbG9j LCBhdHRydmVjKTsNCisgICAgfQ0KKw0KKyAgaWYgKCFleHBlY3RfY2hhciAoJnRlbXBsLCAnXScp KQ0KKyAgICBmYXRhbF9hdCAobG9jLCAiZXhwZWN0aW5nIGBdYCB0byBlbmQgc2VjdGlvbiBsaXN0 IC0gc2VjdGlvbiBsaXN0IG11c3QgaGF2ZSAiDQorCQkgICAiY29ucyBmaXJzdCwgYXR0cnMgc2Vj b25kIik7DQorDQorICAvKiBXZSB3aWxsIHdyaXRlIHRoZSB1bi1jb25zdHJhaW5pZmllZCB0ZW1w bGF0ZSBpbnRvIG5ld190ZW1wbC4gICovDQorICBzdGQ6OnN0cmluZyBuZXdfdGVtcGw7DQorICBu ZXdfdGVtcGwuYXBwZW5kICgiQCIpOw0KKw0KKyAgLyogU2tpcCB0byB0aGUgZmlyc3QgcHJvcGVy IGxpbmUuICAqLw0KKyAgc2tpcF9zcGFjZXMgKCZ0ZW1wbCk7DQorDQorICBhbHRfbm8gPSAwOw0K KyAgc3RkOjpzdHJpbmcgbGFzdF9saW5lOw0KKw0KKyAgLyogUHJvY2VzcyB0aGUgYWx0ZXJuYXRp dmVzLiAgKi8NCisgIHdoaWxlICgqKHRlbXBsIC0gMSkgIT0gJ1wwJykNCisgICAgew0KKyAgICAg IC8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAgKi8NCisgICAgICBzdGQ6OnN0cmluZyBidWZm ZXI7DQorICAgICAgc2tpcF9zcGFjZXMgKCZ0ZW1wbCk7DQorDQorICAgICAgLyogQ2hlY2sgaWYg d2UncmUgYXQgdGhlIGVuZC4gICovDQorICAgICAgaWYgKHRlbXBsWzBdID09ICd9JyAmJiB0ZW1w bFsxXSA9PSAnXDAnKQ0KKwlicmVhazsNCisNCisgICAgICBuZXdfdGVtcGwgKz0gJ1xuJzsNCisg ICAgICBuZXdfdGVtcGwuYXBwZW5kIChidWZmZXIpOw0KKw0KKyAgICAgIGlmIChleHBlY3RfY2hh ciAoJnRlbXBsLCAnWycpKQ0KKwl7DQorCSAgLyogUGFyc2UgdGhlIGNvbnN0cmFpbnQgbGlzdCwg dGhlbiB0aGUgYXR0cmlidXRlIGxpc3QuICAqLw0KKwkgIGlmIChjb252ZWMuc2l6ZSAoKSA+IDAp DQorCSAgICBwYXJzZV9zZWN0aW9uICgmdGVtcGwsIGNvbnZlYy5zaXplICgpLCBhbHRfbm8sIGNv bnZlYywgbG9jLA0KKwkJCSAgICJjb25zdHJhaW50Iik7DQorDQorCSAgaWYgKGF0dHJ2ZWMuc2l6 ZSAoKSA+IDApDQorCSAgICB7DQorCSAgICAgIGlmIChjb252ZWMuc2l6ZSAoKSA+IDAgJiYgIWV4 cGVjdF9jaGFyICgmdGVtcGwsICc7JykpDQorCQlmYXRhbF9hdCAobG9jLCAiZXhwZWN0ZWQgYDsn IHRvIHNlcGFyYXRlIGNvbnN0cmFpbnRzICINCisJCQkgICAgICAgImFuZCBhdHRyaWJ1dGVzIGlu IGFsdGVybmF0aXZlICVkIiwgYWx0X25vKTsNCisNCisJICAgICAgcGFyc2Vfc2VjdGlvbiAoJnRl bXBsLCBhdHRydmVjLnNpemUgKCksIGFsdF9ubywNCisJCQkgICAgIGF0dHJ2ZWMsIGxvYywgImF0 dHJpYnV0ZSIpOw0KKwkgICAgfQ0KKw0KKwkgIGlmICghZXhwZWN0X2NoYXIgKCZ0ZW1wbCwgJ10n KSkNCisJICAgIGZhdGFsX2F0IChsb2MsICJleHBlY3RlZCBlbmQgb2YgY29uc3RyYWludC9hdHRy aWJ1dGUgbGlzdCBidXQgIg0KKwkJCSAgICJtaXNzaW5nIGFuIGVuZGluZyBgXScgaW4gYWx0ZXJu YXRpdmUgJWQiLCBhbHRfbm8pOw0KKwl9DQorICAgICAgZWxzZSBpZiAodGVtcGxbMF0gPT0gJy8n ICYmIHRlbXBsWzFdID09ICcvJykNCisJew0KKwkgIHRlbXBsICs9IDI7DQorIAkgIC8qIEdsb2Ig dGlsbCBuZXdsaW5lIG9yIGVuZCBvZiBzdHJpbmcuICAqLw0KKwkgIHdoaWxlICgqdGVtcGwgIT0g J1xuJyB8fCAqdGVtcGwgIT0gJ1wwJykNCisJICAgIHRlbXBsKys7DQorCSAgdGVtcGwrKzsNCisJ ICBjb250aW51ZTsNCisJfQ0KKyAgICAgIGVsc2UgaWYgKHRlbXBsWzBdID09ICcvJyAmJiB0ZW1w bFsxXSA9PSAnKicpDQorCXsNCisJICB0ZW1wbCArPSAyOw0KKyAJICAvKiBHbG9iIHRpbGwgbmV3 bGluZSBvciBlbmQgb2YgbXVsdGlsaW5lIGNvbW1lbnQuICAqLw0KKwkgIHdoaWxlICh0ZW1wbFsw XSAhPSAnKicgJiYgdGVtcGxbMV0gIT0gJy8nKQ0KKwkgICAgdGVtcGwrKzsNCisJICB0ZW1wbCAr PSAyOw0KKwkgIGNvbnRpbnVlOw0KKwl9DQorICAgICAgZWxzZQ0KKwlmYXRhbF9hdCAobG9jLCAi ZXhwZWN0ZWQgY29uc3RyYWludC9hdHRyaWJ1dGUgbGlzdCBhdCBiZWdpbm5pbmcgb2YgIg0KKwkJ ICAgICAgICJhbHRlcm5hdGl2ZSAlZCBidXQgbWlzc2luZyBhIHN0YXJ0aW5nIGBbJyIsIGFsdF9u byk7DQorDQorICAgICAgLyogU2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gbGlzdCBhbmQgYXNtLiAg Ki8NCisgICAgICArK3RlbXBsOw0KKyAgICAgIHNraXBfc3BhY2VzICgmdGVtcGwpOw0KKw0KKyAg ICAgIC8qIENvcHkgYXNtIHRvIG5ldyB0ZW1wbGF0ZS4gICovDQorICAgICAgc3RkOjpzdHJpbmcg bGluZTsNCisgICAgICB3aGlsZSAoKnRlbXBsICE9ICdcbicgJiYgKnRlbXBsICE9ICdcMCcpDQor CWxpbmUgKz0gKnRlbXBsKys7DQorDQorICAgICAgLyogQXBwbHkgYW55IHByZS1wcm9jZXNzaW5n IG5lZWRlZCB0byB0aGUgbGluZS4gICovDQorICAgICAgcHJlcHJvY2Vzc19jb21wYWN0X3N5bnRh eCAobG9jLCBhbHRfbm8sIGxpbmUsIGxhc3RfbGluZSk7DQorICAgICAgbmV3X3RlbXBsLmFwcGVu ZCAobGluZSk7DQorICAgICAgbGFzdF9saW5lID0gbGluZTsNCisNCisgICAgICAvKiBOb3JtYWwg IiouLi4iIHN5bnRheCBleHBlY3RzIHRoZSBjbG9zaW5nIHF1b3RlIHRvIGJlIG9uIHRoZSBmaW5h bA0KKwkgbGluZSBvZiBhc20sIHdoZXJlYXMgd2UgYWxsb3cgdGhlIGNsb3NpbmcgIn0iIHRvIGJl IG9uIGl0cyBvd24gbGluZS4NCisJIFBvc3Rwb25lIGNvcHlpbmcgdGhlICdcbicgdW50aWwgd2Ug a25vdyB0aGF0IHRoZXJlIGlzIGFub3RoZXINCisJIGFsdGVybmF0aXZlIGluIHRoZSBsaXN0LiAg Ki8NCisgICAgICB3aGlsZSAodGVtcGxbMF0gPT0gJ1xuJyB8fCBJU1NQQUNFICgqdGVtcGwpKQ0K Kwl0ZW1wbCsrOw0KKyAgICAgICsrYWx0X25vOw0KKyAgICB9DQorDQorICAvKiBXcml0ZSB0aGUg Y29uc3RyYWludHMgYW5kIGF0dHJpYnV0ZXMgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzLiAgKi8N CisgIGlmIChjb252ZWMuc2l6ZSAoKSA+IDApDQorICAgIGFkZF9jb25zdHJhaW50cyAoeCwgbG9j LCBjb252ZWMpOw0KKw0KKyAgaWYgKGF0dHJ2ZWMuc2l6ZSAoKSA+IDApDQorICAgIHsNCisgICAg ICBpbmRleCA9IGFkZF9hdHRyaWJ1dGVzICh4LCBsb2MsIGF0dHJ2ZWMpOw0KKyAgICAgIGlmIChp bmRleCA8IGF0dHJ2ZWMuc2l6ZSAoKSkNCisJZmF0YWxfYXQgKGxvYywgImNvdWxkIG5vdCBmaW5k IHNldF9hdHRyIGZvciBhdHRyaWJ1dGUgJXMiLA0KKwkJICBhdHRydmVjW2luZGV4XS5uYW1lLmNf c3RyICgpKTsNCisgICAgfQ0KKw0KKyAgLyogQ29weSBvdmVyIHRoZSBuZXcgdW4tY29uc3RyYWlu aWZpZWQgdGVtcGxhdGUuICAqLw0KKyAgWFRNUEwgKHgsIHRlbXBsX2luZGV4KSA9IHhzdHJkdXAg KG5ld190ZW1wbC5jX3N0ciAoKSk7DQorDQorICAvKiBSZWdpc3RlciBmb3IgbGF0ZXIgY2hlY2tz IGR1cmluZyBpdGVyYXRvciBleHBhbnNpb25zLiAgKi8NCisgIGNvbXBhY3Rfc3ludGF4LmFkZCAo eCk7DQorfQ0KKw0KIC8qIFByb2Nlc3MgYSB0b3AgbGV2ZWwgcnR4IGluIHNvbWUgd2F5LCBxdWV1 aW5nIGFzIGFwcHJvcHJpYXRlLiAgKi8NCiANCiBzdGF0aWMgdm9pZA0KQEAgLTU1MywxMCArMTA3 NywxMiBAQCBwcm9jZXNzX3J0eCAocnR4IGRlc2MsIGZpbGVfbG9jYXRpb24gbG9jKQ0KICAgc3dp dGNoIChHRVRfQ09ERSAoZGVzYykpDQogICAgIHsNCiAgICAgY2FzZSBERUZJTkVfSU5TTjoNCisg ICAgICBjb252ZXJ0X3N5bnRheCAoZGVzYywgbG9jKTsNCiAgICAgICBxdWV1ZV9wYXR0ZXJuIChk ZXNjLCAmZGVmaW5lX2luc25fdGFpbCwgbG9jKTsNCiAgICAgICBicmVhazsNCiANCiAgICAgY2Fz ZSBERUZJTkVfQ09ORF9FWEVDOg0KKyAgICAgIGNvbnZlcnRfc3ludGF4IChkZXNjLCBsb2MpOw0K ICAgICAgIHF1ZXVlX3BhdHRlcm4gKGRlc2MsICZkZWZpbmVfY29uZF9leGVjX3RhaWwsIGxvYyk7 DQogICAgICAgYnJlYWs7DQogDQpAQCAtNjMxLDYgKzExNTcsNyBAQCBwcm9jZXNzX3J0eCAocnR4 IGRlc2MsIGZpbGVfbG9jYXRpb24gbG9jKQ0KIAlhdHRyID0gWFZFQyAoZGVzYywgc3BsaXRfY29k ZSArIDEpOw0KIAlQVVRfQ09ERSAoZGVzYywgREVGSU5FX0lOU04pOw0KIAlYVkVDIChkZXNjLCA0 KSA9IGF0dHI7DQorCWNvbnZlcnRfc3ludGF4IChkZXNjLCBsb2MpOw0KIA0KIAkvKiBRdWV1ZSB0 aGVtLiAgKi8NCiAJaW5zbl9lbGVtID0gcXVldWVfcGF0dGVybiAoZGVzYywgJmRlZmluZV9pbnNu X3RhaWwsIGxvYyk7DQo= --_002_VI1PR08MB532500C80282451D7D8524D0FF50AVI1PR08MB5325eurp_ Content-Type: application/octet-stream; name="rb17151.patch" Content-Description: rb17151.patch Content-Disposition: attachment; filename="rb17151.patch"; size=24815; creation-date="Thu, 08 Jun 2023 09:58:38 GMT"; modification-date="Thu, 08 Jun 2023 09:58:50 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2djYy9kb2MvbWQudGV4aQppbmRleCA2YTQz NWViNDQ2MTA5NjA1MTNlOTczOWFjOWFjMWU4YTI3MTgyYzEwLi5lZWUzNjg0Y2QwODY1ZGJiMDdj MGRhNDVlMGFhNGFjMGNlNGU5NjQzIDEwMDY0NAotLS0gYS9nY2MvZG9jL21kLnRleGkKKysrIGIv Z2NjL2RvYy9tZC50ZXhpCkBAIC0yNyw2ICsyNyw3IEBAIFNlZSB0aGUgbmV4dCBjaGFwdGVyIGZv ciBpbmZvcm1hdGlvbiBvbiB0aGUgQyBoZWFkZXIgZmlsZS4KICAgICAgICAgICAgICAgICAgICAg ICAgIGZyb20gc3VjaCBhbiBpbnNuLgogKiBPdXRwdXQgU3RhdGVtZW50OjogICAgRm9yIG1vcmUg Z2VuZXJhbGl0eSwgd3JpdGUgQyBjb2RlIHRvIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGFzc2VtYmxlciBjb2RlLgorKiBDb21wYWN0IFN5bnRheDo6ICAgICAgQ29tcGFjdCBz eW50YXggZm9yIHdyaXRpbmcgbWFjaGluZSBkZXNjcmlwdG9ycy4KICogUHJlZGljYXRlczo6ICAg ICAgICAgIENvbnRyb2xsaW5nIHdoYXQga2luZHMgb2Ygb3BlcmFuZHMgY2FuIGJlIHVzZWQKICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciBhbiBpbnNuLgogKiBDb25zdHJhaW50czo6ICAgICAg ICAgRmluZS10dW5pbmcgb3BlcmFuZCBzZWxlY3Rpb24uCkBAIC03MTMsNiArNzE0LDE4MyBAQCB5 b3UgY2FuIHVzZSBAc2FtcHsqfSBpbnNpZGUgb2YgYSBAc2FtcHtAQH0gbXVsdGktYWx0ZXJuYXRp dmUgdGVtcGxhdGU6CiBAZW5kIGdyb3VwCiBAZW5kIHNtYWxsZXhhbXBsZQogCitAbm9kZSBDb21w YWN0IFN5bnRheAorQHNlY3Rpb24gQ29tcGFjdCBTeW50YXgKK0BjaW5kZXggY29tcGFjdCBzeW50 YXgKKworSW4gY2FzZXMgd2hlcmUgdGhlIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgaW4gYSBAY29k ZXtkZWZpbmVfaW5zbn0gb3IKK0Bjb2Rle2RlZmluZV9pbnNuX2FuZF9zcGxpdH0gYXJlIGxhcmdl IHRoZW4gaXQgbWF5IGJlIGJlbmVmaWNpYWwgdG8gdXNlIHRoZQorY29tcGFjdCBzeW50YXggd2hl biBzcGVjaWZ5aW5nIGFsdGVybmF0aXZlcy4KKworVGhpcyBzeW50YXggcHV0cyB0aGUgY29uc3Ry YWludHMgYW5kIGF0dHJpYnV0ZXMgb24gdGhlIHNhbWUgaG9yaXpvbnRhbCBsaW5lIGFzCit0aGUg aW5zdHJ1Y3Rpb24gYXNzZW1ibHkgdGVtcGxhdGUuCisKK0FzIGFuIGV4YW1wbGUKKworQHNtYWxs ZXhhbXBsZQorQGdyb3VwCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiCisgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiPXIsayxyLHIscixyIikKKwko bWF0Y2hfb3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIiAgIiByLHIsayxNLG4sVXN2 IikpXQorICAiIgorICAiQEAKKyAgIG1vdlxcdCV3MCwgJXcxCisgICBtb3ZcXHQldzAsICV3MQor ICAgbW92XFx0JXcwLCAldzEKKyAgIG1vdlxcdCV3MCwgJTEKKyAgICMKKyAgICogcmV0dXJuIGFh cmNoNjRfb3V0cHV0X3N2ZV9jbnRfaW1tZWRpYXRlICgnY250JywgJyV4MCcsIG9wZXJhbmRzWzFd KTsiCisgICImJiB0cnVlIgorICAgWyhjb25zdF9pbnQgMCldCisgIEB7CisgICAgIGFhcmNoNjRf ZXhwYW5kX21vdl9pbW1lZGlhdGUgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7CisgICAgIERP TkU7CisgIEB9CisgIFsoc2V0X2F0dHIgInR5cGUiICJtb3ZfcmVnLG1vdl9yZWcsbW92X3JlZyxt b3ZfaW1tLG1vdl9pbW0sbW92X2ltbSIpCisgICAoc2V0X2F0dHIgImFyY2giICAgIiosKiwqLCos KixzdmUiKQorICAgKHNldF9hdHRyICJsZW5ndGgiICI0LDQsNCw0LCosICA0IikKK10KKykKK0Bl bmQgZ3JvdXAKK0BlbmQgc21hbGxleGFtcGxlCisKK2NhbiBiZSBiZXR0ZXIgZXhwcmVzc2VkIGFz OgorCitAc21hbGxleGFtcGxlCitAZ3JvdXAKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIiIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCShtYXRj aF9vcGVyYW5kOlNJIDEgImFhcmNoNjRfbW92X29wZXJhbmQiKSldCisgICIiCisgIEB7QEAgW2Nv bnM6ID0wLCAxOyBhdHRyczogdHlwZSwgYXJjaCwgbGVuZ3RoXQorICAgICBbciAsIHIgIDsgbW92 X3JlZyAgLCAqICAgLCA0XSBtb3ZcdCV3MCwgJXcxCisgICAgIFtrICwgciAgOyBtb3ZfcmVnICAs ICogICAsIDRdIF4KKyAgICAgW3IgLCBrICA7IG1vdl9yZWcgICwgKiAgICwgNF0gXgorICAgICBb ciAsIE0gIDsgbW92X2ltbSAgLCAqICAgLCA0XSBtb3ZcdCV3MCwgJTEKKyAgICAgW3IgLCBuICA7 IG1vdl9pbW0gICwgKiAgICwgKl0gIworICAgICBbciAsIFVzdjsgbW92X2ltbSAgLCBzdmUgLCA0 XSA8PCBhYXJjaDY0X291dHB1dF9zdmVfY250X2ltbWVkaWF0ZSAoImNudCIsICIleDAiLCBvcGVy YW5kc1sxXSk7CisgIEB9CisgICImJiB0cnVlIgorICBbKGNvbnN0X2ludCAwKV0KKyAgQHsKKyAg ICBhYXJjaDY0X2V4cGFuZF9tb3ZfaW1tZWRpYXRlIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0p OworICAgIERPTkU7CisgIEB9CispCitAZW5kIGdyb3VwCitAZW5kIHNtYWxsZXhhbXBsZQorCitU aGUgc3ludGF4IHJ1bGVzIGFyZSBhcyBmb2xsb3dzOgorQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0K K1RlbXBsYXRlcyBtdXN0IHN0YXJ0IHdpdGggQHNhbXB7QHtAQH0gdG8gdXNlIHRoZSBuZXcgc3lu dGF4LgorCitAaXRlbQorQHNhbXB7QHtAQH0gaXMgZm9sbG93ZWQgYnkgYSBsYXlvdXQgaW4gcGFy ZW50aGVzZXMgd2hpY2ggaXMgQHNhbXB7Y29uczp9IGZvbGxvd2VkIGJ5CithIGxpc3Qgb2YgQGNv ZGV7bWF0Y2hfb3BlcmFuZH0vQGNvZGV7bWF0Y2hfc2NyYXRjaH0gY29tbWEgb3BlcmFuZCBudW1i ZXJzLCB0aGVuIGEKK3NlbWljb2xvbiwgZm9sbG93ZWQgYnkgdGhlIHNhbWUgZm9yIGF0dHJpYnV0 ZXMgKEBzYW1we2F0dHJzOn0pLiAgT3BlcmFuZAorbW9kaWZpZXJzIGNhbiBiZSBwbGFjZWQgaW4g dGhpcyBzZWN0aW9uIGdyb3VwIGFzIHdlbGwuICBCb3RoIHNlY3Rpb25zCithcmUgb3B0aW9uYWwg KHNvIHlvdSBjYW4gdXNlIG9ubHkgQHNhbXB7Y29uc30sIG9yIG9ubHkgQHNhbXB7YXR0cnN9LCBv ciBib3RoKSwKK2FuZCBAc2FtcHtjb25zfSBtdXN0IGNvbWUgYmVmb3JlIEBzYW1we2F0dHJzfSBp ZiBwcmVzZW50LgorCitAaXRlbQorRWFjaCBhbHRlcm5hdGl2ZSBiZWdpbnMgd2l0aCBhbnkgYW1v dW50IG9mIHdoaXRlc3BhY2UuCisKK0BpdGVtCitGb2xsb3dpbmcgdGhlIHdoaXRlc3BhY2UgaXMg YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAiY29uc3RyYWludHMiIGFuZC9vcgorImF0dHJpYnV0 ZXMiIHdpdGhpbiBicmFja2V0cyBAY29kZXtbXX0sIHdpdGggc2VjdGlvbnMgc2VwYXJhdGVkIGJ5 IGEgc2VtaWNvbG9uLgorCitAaXRlbQorU2hvdWxkIHlvdSB3YW50IHRvIGNvcHkgdGhlIHByZXZp b3VzIGFzbSBsaW5lLCB0aGUgc3ltYm9sIEBjb2Rle159IGNhbiBiZSB1c2VkLgorVGhpcyBhbGxv d3MgbGVzcyBjb3B5IHBhc3RpbmcgYmV0d2VlbiBhbHRlcm5hdGl2ZSBhbmQgcmVkdWNlcyB0aGUg bnVtYmVyIG9mCitsaW5lcyB0byB1cGRhdGUgb24gY2hhbmdlcy4KKworQGl0ZW0KK1doZW4gdXNp bmcgQyBmdW5jdGlvbnMgZm9yIG91dHB1dCwgdGhlIGlkaW9tIEBzYW1weyogcmV0dXJuIDxmdW5j dGlvbj47fSBjYW4gYmUKK3JlcGxhY2VkIHdpdGggdGhlIHNob3J0aGFuZCBAc2FtcHs8PCBAdmFy e2Z1bmN0aW9ufTt9LgorCitAaXRlbQorRm9sbG93aW5nIHRoZSBjbG9zaW5nIEBzYW1we119IGlz IGFueSBhbW91bnQgb2Ygd2hpdGVzcGFjZSwgYW5kIHRoZW4gdGhlIGFjdHVhbAorYXNtIG91dHB1 dC4KKworQGl0ZW0KK1NwYWNlcyBhcmUgYWxsb3dlZCBpbiB0aGUgbGlzdCAodGhleSB3aWxsIHNp bXBseSBiZSByZW1vdmVkKS4KKworQGl0ZW0KK0FsbCBjb25zdHJhaW50IGFsdGVybmF0aXZlcyBz aG91bGQgYmUgc3BlY2lmaWVkOiBhIGJsYW5rIGxpc3Qgc2hvdWxkIGJlCitAc2FtcHtbLCxdfSBv ciBnZW5lcmFsbHkgdXNlIEBzYW1weyp9IGZvciB0aGUgYWx0ZXJuYXRpdmVzLiBlLmcuIEBzYW1w e1sqLCosKl19LgorCitAaXRlbQorV2l0aGluIGFuIEBzYW1we0B7QEB9IGJsb2NrIGJvdGggbXVs dGlsaW5lIGFuZCBzaW5nbGVsaW5lIEMgY29tbWVudHMgYXJlCithbGxvd2VkLCBidXQgd2hlbiB1 c2VkIG91dHNpZGUgb2YgYSBDIGJsb2NrIHRoZXkgbXVzdCBiZSB0aGUgb25seSBub24td2hpdGVz cGFjZQorYmxvY2tzIG9uIHRoZSBsaW5lLgorCitAaXRlbQorV2l0aGluIGFuIEBzYW1we0B7QEB9 IGJsb2NrLCBhbnkgaXRlcmF0b3JzIHRoYXQgZG8gbm90IGdldCBleHBhbmRlZCB3aWxsIHJlc3Vs dCBpbiBhbgorZXJyb3IuICBJZiBmb3Igc29tZSByZWFzb24gaXQgaXMgcmVxdWlyZWQgdG8gaGF2 ZSBAY29kZXs8Pn0gaW4gdGhlIG91dHB1dCB0aGVuCit0aGVzZSBtdXN0IGJlIGVzY2FwZWQgdXNp bmcgQGJhY2tzbGFzaGNoYXJ7fS4KKworQGl0ZW0KK1RoZSBhY3R1YWwgY29uc3RyYWludCBzdHJp bmcgaW4gdGhlIEBjb2Rle21hdGNoX29wZXJhbmR9IG9yCitAY29kZXttYXRjaF9zY3JhdGNofSwg YW5kIHRoZSBhdHRyaWJ1dGUgc3RyaW5nIGluIHRoZSBAY29kZXtzZXRfYXR0cn0sIG11c3QgYmUK K2JsYW5rIG9yIGFuIGVtcHR5IHN0cmluZyAoeW91IGNhbid0IGNvbWJpbmUgdGhlIG9sZCBhbmQg bmV3IHN5bnRheGVzKS4KKworQGl0ZW0KK0FkZGl0aW9uYWwgQGNvZGV7c2V0X2F0dHJ9IGNhbiBi ZSBzcGVjaWZpZWQgb3RoZXIgdGhhbiB0aGUgb25lcyBpbiB0aGUKK0BzYW1we2F0dHJzfSBsaXN0 LiAgVGhlc2UgbXVzdCB1c2UgdGhlIG5vcm1hbCBzeW50YXggYW5kIG11c3QgY29tZSBsYXN0LiAg VGhlcmUKK211c3Qgbm90IGJlIGFueSBvdmVybGFwIGJldHdlZW4gdGhlIHR3byBsaXN0cy4KKwor SW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmcgaXMgdmFsaWQ6CitAc21hbGxleGFtcGxlCitA Z3JvdXAKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQorCShtYXRjaF9vcGVyYW5kOlNJIDEgImFhcmNo NjRfbW92X29wZXJhbmQiKSldCisgICIiCisgIEB7QEAgW2NvbnM6IDAsIDE7IGF0dHJzOiB0eXBl LCBhcmNoLCBsZW5ndGhdQH0KKyAgQGRvdHN7fSAKKyAgWyhzZXRfYXR0ciAiZm9vIiAibW92X2lt bSIpXQorKQorQGVuZCBncm91cAorQGVuZCBzbWFsbGV4YW1wbGUKKworYnV0IHRoZXNlIGFyZSBu b3QgdmFsaWQ6CitAc21hbGxleGFtcGxlCitAZ3JvdXAKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQg IiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiKQor CShtYXRjaF9vcGVyYW5kOlNJIDEgImFhcmNoNjRfbW92X29wZXJhbmQiKSldCisgICIiCisgIEB7 QEAgW2NvbnM6IDAsIDE7IGF0dHJzOiB0eXBlLCBhcmNoLCBsZW5ndGhdQH0KKyAgQGRvdHN7fSAK KyAgWyhzZXRfYXR0ciAidHlwZSIpCisgICAoc2V0X2F0dHIgImFyY2giKQorICAgKHNldF9hdHRy ICJmb28iICJtb3ZfaW1tIildCispCitAZW5kIGdyb3VwCitAZW5kIHNtYWxsZXhhbXBsZQorCith bmQKKworQHNtYWxsZXhhbXBsZQorQGdyb3VwCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIiCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikKKwkobWF0 Y2hfb3BlcmFuZDpTSSAxICJhYXJjaDY0X21vdl9vcGVyYW5kIikpXQorICAiIgorICBAe0BAIFtj b25zOiAwLCAxOyBhdHRyczogdHlwZSwgYXJjaCwgbGVuZ3RoXUB9CisgIEBkb3Rze30gCisgIFso c2V0X2F0dHIgInR5cGUiKQorICAgKHNldF9hdHRyICJmb28iICJtb3ZfaW1tIikKKyAgIChzZXRf YXR0ciAiYXJjaCIpCisgICAoc2V0X2F0dHIgImxlbmd0aCIpXQorKQorQGVuZCBncm91cAorQGVu ZCBzbWFsbGV4YW1wbGUKKworYmVjYXVzZSB0aGUgb3JkZXIgb2YgdGhlIGVudHJpZXMgZG9uJ3Qg bWF0Y2ggYW5kIG5ldyBlbnRyaWVzIG11c3QgYmUgbGFzdC4KK0BlbmQgaXRlbWl6ZQorCiBAbm9k ZSBQcmVkaWNhdGVzCiBAc2VjdGlvbiBQcmVkaWNhdGVzCiBAY2luZGV4IHByZWRpY2F0ZXMKZGlm ZiAtLWdpdCBhL2djYy9nZW5vdXRwdXQuY2MgYi9nY2MvZ2Vub3V0cHV0LmNjCmluZGV4IDE2M2U4 ZGZlZjRjYTJjMmM5MmNlMWNmMDAxZWU2YmU0MGE1NGNhM2UuLjcwODhmODE2Y2ZhNmU2YWIyYzFm NTFiOGJiYWE1ZWFlOTkwYTBhNGIgMTAwNjQ0Ci0tLSBhL2djYy9nZW5vdXRwdXQuY2MKKysrIGIv Z2NjL2dlbm91dHB1dC5jYwpAQCAtMTU3LDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgaW50IG5fYWx0 ZXJuYXRpdmVzOwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlcyBpbiBlYWNoIGNvbnN0cmFpbnQg Ki8KICAgaW50IG9wZXJhbmRfbnVtYmVyOwkJLyogT3BlcmFuZCBpbmRleCBpbiB0aGUgYmlnIGFy cmF5LiAgKi8KICAgaW50IG91dHB1dF9mb3JtYXQ7CQkvKiBJTlNOX09VVFBVVF9GT1JNQVRfKi4g ICovCisgIGJvb2wgY29tcGFjdF9zeW50YXhfcDsKICAgc3RydWN0IG9wZXJhbmRfZGF0YSBvcGVy YW5kW01BWF9NQVhfT1BFUkFORFNdOwogfTsKIApAQCAtNzAwLDEyICs3MDEsNTEgQEAgcHJvY2Vz c190ZW1wbGF0ZSAoY2xhc3MgZGF0YSAqZCwgY29uc3QgY2hhciAqdGVtcGxhdGVfY29kZSkKIAkg IGlmIChzcCAhPSBlcCkKIAkgICAgbWVzc2FnZV9hdCAoZC0+bG9jLCAidHJhaWxpbmcgd2hpdGVz cGFjZSBpbiBvdXRwdXQgdGVtcGxhdGUiKTsKIAotCSAgd2hpbGUgKGNwIDwgc3ApCisJICAvKiBD aGVjayBmb3IgYW55IHVuZXhwYW5kZWQgaXRlcmF0b3JzLiAgKi8KKwkgIGlmIChicFswXSAhPSAn KicgJiYgZC0+Y29tcGFjdF9zeW50YXhfcCkKIAkgICAgewotCSAgICAgIHB1dGNoYXIgKCpjcCk7 Ci0JICAgICAgY3ArKzsKKwkgICAgICBjb25zdCBjaGFyICpwID0gY3A7CisJICAgICAgY29uc3Qg Y2hhciAqbGFzdF9icmFja2V0ID0gbnVsbHB0cjsKKwkgICAgICB3aGlsZSAocCA8IHNwKQorCQl7 CisJCSAgaWYgKCpwID09ICdcXCcgJiYgcCArIDEgPCBzcCkKKwkJICAgIHsKKwkJICAgICAgcHV0 Y2hhciAoKnApOworCQkgICAgICBwdXRjaGFyICgqKHArMSkpOworCQkgICAgICBwICs9IDI7CisJ CSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCisJCSAgaWYgKCpwID09ICc+JyAmJiBsYXN0X2Jy YWNrZXQgJiYgKmxhc3RfYnJhY2tldCA9PSAnPCcpCisJCSAgICB7CisJCSAgICAgIGludCBsZW4g PSBwIC0gbGFzdF9icmFja2V0OworCQkgICAgICBmYXRhbF9hdCAoZC0+bG9jLCAidW5yZXNvbHZl ZCBpdGVyYXRvciAnJS4qcycgaW4gJyVzJyIsCisJCQkJbGVuIC0gMSwgbGFzdF9icmFja2V0ICsg MSwgY3ApOworCQkgICAgfQorCQkgIGVsc2UgaWYgKCpwID09ICc8JyB8fCAqcCA9PSAnPicpCisJ CSAgICBsYXN0X2JyYWNrZXQgPSBwOworCisJCSAgcHV0Y2hhciAoKnApOworCQkgIHAgKz0gMTsK KwkJfQorCisJICAgICAgaWYgKGxhc3RfYnJhY2tldCkKKwkJeworCQkgIGNoYXIgKm5sID0gc3Ry Y2hyIChjb25zdF9jYXN0PGNoYXIqPiAoY3ApLCAnXG4nKTsKKwkJICBpZiAobmwpCisJCSAgICAq bmwgPSdcMCc7CisJCSAgZmF0YWxfYXQgKGQtPmxvYywgInVubWF0Y2hlZCBhbmdsZSBicmFja2V0 cywgbGlrZWx5IGFuICIKKwkJCSAgICAiZXJyb3IgaW4gaXRlcmF0b3Igc3ludGF4IGluICVzIiwg Y3ApOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHdoaWxlIChjcCA8IHNw KQorCQlwdXRjaGFyICgqKGNwKyspKTsKIAkgICAgfQogCisJICBjcCA9IHNwOworCiAJICBpZiAo IWZvdW5kX3N0YXIpCiAJICAgIHB1dHMgKCJcIiwiKTsKIAkgIGVsc2UgaWYgKCpicCAhPSAnKicp CkBAIC04ODEsNiArOTIxLDggQEAgZ2VuX2luc24gKG1kX3J0eF9pbmZvICppbmZvKQogICBlbHNl CiAgICAgZC0+bmFtZSA9IDA7CiAKKyAgZC0+Y29tcGFjdF9zeW50YXhfcCA9IGNvbXBhY3Rfc3lu dGF4LmNvbnRhaW5zIChpbnNuKTsKKwogICAvKiBCdWlsZCB1cCB0aGUgbGlzdCBpbiB0aGUgc2Ft ZSBvcmRlciBhcyB0aGUgaW5zbnMgYXJlIHNlZW4KICAgICAgaW4gdGhlIG1hY2hpbmUgZGVzY3Jp cHRpb24uICAqLwogICBkLT5uZXh0ID0gMDsKZGlmZiAtLWdpdCBhL2djYy9nZW5zdXBwb3J0Lmgg Yi9nY2MvZ2Vuc3VwcG9ydC5oCmluZGV4IGExZWRmYmQ3MTkwOGI2MjQ0YjQwZjgwMWM2YzAxMDc0 ZGU1Njc3N2UuLjc5MjVlMjJlZDQxODc2NzU3NjU2N2NhZDU4M2JkZGY4M2MwODQ2YjEgMTAwNjQ0 Ci0tLSBhL2djYy9nZW5zdXBwb3J0LmgKKysrIGIvZ2NjL2dlbnN1cHBvcnQuaApAQCAtMjAsNiAr MjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQogI2lmbmRlZiBHQ0NfR0VOU1VQUE9SVF9ICiAjZGVmaW5lIEdDQ19HRU5TVVBQT1JUX0gKIAor I2luY2x1ZGUgImhhc2gtc2V0LmgiCiAjaW5jbHVkZSAicmVhZC1tZC5oIgogCiBzdHJ1Y3Qgb2Jz dGFjazsKQEAgLTIxOCw2ICsyMTksOCBAQCBzdHJ1Y3QgcGF0dGVybl9zdGF0cwogICBpbnQgbnVt X29wZXJhbmRfdmFyczsKIH07CiAKK2V4dGVybiBoYXNoX3NldDxydHg+IGNvbXBhY3Rfc3ludGF4 OworCiBleHRlcm4gdm9pZCBnZXRfcGF0dGVybl9zdGF0cyAoc3RydWN0IHBhdHRlcm5fc3RhdHMg KnJhbmdlcywgcnR2ZWMgdmVjKTsKIGV4dGVybiB2b2lkIGNvbXB1dGVfdGVzdF9jb2RlcyAocnR4 LCBmaWxlX2xvY2F0aW9uLCBjaGFyICopOwogZXh0ZXJuIGZpbGVfbG9jYXRpb24gZ2V0X2ZpbGVf bG9jYXRpb24gKHJ0eCk7CmRpZmYgLS1naXQgYS9nY2MvZ2Vuc3VwcG9ydC5jYyBiL2djYy9nZW5z dXBwb3J0LmNjCmluZGV4IGY5ZWZjNmViNzU3MmE0NGI4YmIxNTRiMGIyMmJlMzgxNWJkMGQyNDQu LjUwNzI4NWU4ZmVmNTQ0M2VjNDI1MDE0NDdlNzMwMDIyZTE0MjZlZTEgMTAwNjQ0Ci0tLSBhL2dj Yy9nZW5zdXBwb3J0LmNjCisrKyBiL2djYy9nZW5zdXBwb3J0LmNjCkBAIC0xOCw2ICsxOCw4IEBA CiAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAjaW5jbHVkZSAiYmNv bmZpZy5oIgorI2RlZmluZSBJTkNMVURFX1NUUklORworI2RlZmluZSBJTkNMVURFX1ZFQ1RPUgog I2luY2x1ZGUgInN5c3RlbS5oIgogI2luY2x1ZGUgImNvcmV0eXBlcy5oIgogI2luY2x1ZGUgInRt LmgiCkBAIC0zMyw2ICszNSw4IEBACiBzdGF0aWMgcnR4IG9wZXJhbmRfZGF0YVtNQVhfT1BFUkFO RFNdOwogc3RhdGljIHJ0eCBtYXRjaF9vcGVyYW5kX2VudHJpZXNfaW5fcGF0dGVybltNQVhfT1BF UkFORFNdOwogc3RhdGljIGNoYXIgdXNlZF9vcGVyYW5kc19udW1iZXJzW01BWF9PUEVSQU5EU107 CisvKiBMaXN0IG9mIGVudHJpZXMgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIG5ldyBzeW50YXguICAq LworaGFzaF9zZXQ8cnR4PiBjb21wYWN0X3N5bnRheDsKIAogCiAvKiBJbiBjYXNlIHNvbWUgbWFj cm9zIHVzZWQgYnkgZmlsZXMgd2UgaW5jbHVkZSBuZWVkIGl0LCBkZWZpbmUgdGhpcyBoZXJlLiAg Ki8KQEAgLTU0NSw2ICs1NDksNTI2IEBAIGdlbl9yZXdyaXRlX3NlcXVlbmNlIChydHZlYyB2ZWMp CiAgIHJldHVybiBuZXdfdmVjOwogfQogCisvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBoYW5kbGlu ZyB0aGUgY29tcGFjdCBzeW50YXggZm9yIGNvbnN0cmFpbnRzIGFuZAorICAgYXR0cmlidXRlcy4K KworICAgVGhlIG5vcm1hbCBzeW50YXggbG9va3MgbGlrZSB0aGlzOgorCisgICAgICAgLi4uCisg ICAgICAgKG1hdGNoX29wZXJhbmQ6IDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIgInIsSSxrIikKKyAg ICAgICAobWF0Y2hfb3BlcmFuZDogMiAic19yZWdpc3Rlcl9vcGVyYW5kIiAicixrLEkiKQorICAg ICAgIC4uLgorICAgICAgICJACisJPGFzbT4KKwk8YXNtPgorCTxhc20+IgorICAgICAgIC4uLgor ICAgICAgIChzZXRfYXR0ciAibGVuZ3RoIiAiNCw4LDgiKQorCisgICBUaGUgY29tcGFjdCBzeW50 YXggbG9va3MgbGlrZSB0aGlzOgorCisgICAgICAgLi4uCisgICAgICAgKG1hdGNoX29wZXJhbmQ6 IDAgInNfcmVnaXN0ZXJfb3BlcmFuZCIpCisgICAgICAgKG1hdGNoX29wZXJhbmQ6IDIgInNfcmVn aXN0ZXJfb3BlcmFuZCIpCisgICAgICAgLi4uCisgICAgICAge0AgW2NvbnM6IDAsIDI7IGF0dHJz OiBsZW5ndGhdCisJW3IscjsgNF0gPGFzbT4KKwlbSSxrOyA4XSA8YXNtPgorCVtrLEk7IDhdIDxh c20+CisgICAgICAgfQorICAgICAgIC4uLgorICAgICAgIChzZXRfYXR0ciAibGVuZ3RoIikKKwor ICAgVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGlzIHN5bnRheCBuZWVkcyB0byBiZSBo YW5kbGVkLiAgUmVsZXZhbnQKKyAgIHBhdHRlcm5zIGFyZSB0cmFuc2Zvcm1lZCBmcm9tIGNvbXBh Y3QgdG8gdGhlIG5vcm1hbCBzeW50YXggYmVmb3JlIHRoZXkgYXJlCisgICBxdWV1ZWQsIHNvIG5v bmUgb2YgdGhlIGdlbiogcHJvZ3JhbXMgbmVlZCB0byBrbm93IGFib3V0IHRoaXMgc3ludGF4IGF0 IGFsbC4KKworICAgQ29udmVyc2lvbiBwcm9jZXNzIChjb252ZXJ0X3N5bnRheCk6CisKKyAgIDAp IENoZWNrIHRoYXQgcGF0dGVybiBhY3R1YWxseSB1c2VzIG5ldyBzeW50YXggKGNoZWNrIGZvciB7 QCAuLi4gfSkuCisKKyAgIDEpIEdldCB0aGUgImxheW91dCIsIGkuZS4gdGhlICJbY29uczogMCAy OyBhdHRyczogbGVuZ3RoXSIgZnJvbSB0aGUgYWJvdmUKKyAgICAgIGV4YW1wbGUuICBjb25zIG11 c3QgY29tZSBmaXJzdDsgYm90aCBhcmUgb3B0aW9uYWwuIFNldCB1cCB0d28gdmVjcywKKyAgICAg IGNvbnZlYyBhbmQgYXR0cnZlYywgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYW5z Zm9ybWF0aW9uLgorCisgICAyKSBGb3IgZWFjaCBhbHRlcm5hdGl2ZTogcGFyc2UgdGhlIGxpc3Qg b2YgY29uc3RyYWludHMgYW5kL29yIGF0dHJpYnV0ZXMsCisgICAgICBhbmQgZW5xdWV1ZSB0aGVt IGluIHRoZSByZWxldmFudCBsaXN0cyBpbiBjb252ZWMgYW5kIGF0dHJ2ZWMuICBCeSB0aGUgZW5k CisgICAgICBvZiB0aGlzIHByb2Nlc3MsIGNvbnZlY1tOXS5jb24gYW5kIGF0dHJ2ZWNbTl0uY29u IHNob3VsZCBjb250YWluIHJlZ3VsYXIKKyAgICAgIHN5bnRheCBjb25zdHJhaW50L2F0dHJpYnV0 ZSBsaXN0cyBsaWtlICJyLEksayIuICBDb3B5IHRoZSBhc20gdG8gYSBzdHJpbmcKKyAgICAgIGFz IHdlIGdvLgorCisgICAzKSBTZWFyY2ggdGhlIHJ0eCBhbmQgd3JpdGUgdGhlIGNvbnN0cmFpbnQg YW5kIGF0dHJpYnV0ZSBsaXN0cyBpbnRvIHRoZQorICAgICAgY29ycmVjdCBwbGFjZXMuIFdyaXRl IHRoZSBhc20gYmFjayBpbnRvIHRoZSB0ZW1wbGF0ZS4gICovCisKKy8qIEhlbHBlciBjbGFzcyBm b3Igc2h1ZmZsaW5nIGNvbnN0cmFpbnRzL2F0dHJpYnV0ZXMgaW4gY29udmVydF9zeW50YXggYW5k CisgICBhZGRfY29uc3RyYWludHMvYWRkX2F0dHJpYnV0ZXMuICBUaGlzIGluY2x1ZGVzIGNvbW1h cyBidXQgbm90IHdoaXRlc3BhY2UuICAqLworCitjbGFzcyBjb25saXN0IHsKK3ByaXZhdGU6Cisg IHN0ZDo6c3RyaW5nIGNvbjsKKworcHVibGljOgorICBzdGQ6OnN0cmluZyBuYW1lOworICBpbnQg aWR4ID0gLTE7CisKKyAgY29ubGlzdCAoKSA9IGRlZmF1bHQ7CisKKyAgLyogW25zLi5ucyArIGxl bikgc2hvdWxkIGJlIGEgc3RyaW5nIHdpdGggdGhlIGlkIG9mIHRoZSBydHggdG8gbWF0Y2gKKyAg ICAgaS5lLiBpZiBydHggaXMgdGhlIHJlbGV2YW50IG1hdGNoX29wZXJhbmQgb3IgbWF0Y2hfc2Ny YXRjaCB0aGVuCisgICAgIFtucy4ubnMgKyBsZW4pIHNob3VsZCBlcXVhbCBpdG9hIChYSU5UIChy dHgsIDApKSwgYW5kIGlmIHNldF9hdHRyIHRoZW4KKyAgICAgW25zLi5ucyArIGxlbikgc2hvdWxk IGVxdWFsIFhTVFIgKHJ0eCwgMCkuICAqLworICBjb25saXN0IChjb25zdCBjaGFyICpucywgdW5z aWduZWQgaW50IGxlbiwgYm9vbCBudW1lcmljKQorICB7CisgICAgLyogVHJpbSBsZWFkaW5nIHdo aXRlc3BhY2VzLiAgKi8KKyAgICB3aGlsZSAoSVNTUEFDRSAoKm5zKSkKKyAgICAgIHsKKwlucysr OworCWxlbi0tOworICAgICAgfQorCisgICAgLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlLiAg Ki8KKyAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpKyssIGxlbi0tKQorICAgICAg aWYgKCFJU1NQQUNFICgqbnMpKQorCWJyZWFrOworCisgICAgLyogUGFyc2Ugb2ZmIGFueSBtb2Rp ZmllcnMuICAqLworICAgIHdoaWxlICghSVNBTE5VTSAoKm5zKSkKKyAgICAgIHsKKwljb24gKz0g KihucysrKTsKKwlsZW4tLTsKKyAgICAgIH0KKworICAgIG5hbWUuYXNzaWduIChucywgbGVuKTsK KyAgICBpZiAobnVtZXJpYykKKyAgICAgIGlkeCA9IHN0ZDo6c3RvaSAobmFtZSk7CisgIH0KKwor ICAvKiBBZGRzIGEgY2hhcmFjdGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gICovCisgIHZv aWQgYWRkIChjaGFyIGMpCisgIHsKKyAgICBjb24gKz0gYzsKKyAgfQorCisgIC8qIE91dHB1dCB0 aGUgc3RyaW5nIGluIHRoZSBmb3JtIG9mIGEgYnJhbmQtbmV3IGNoYXIgKiwgdGhlbiBlZmZlY3Rp dmVseQorICAgICBjbGVhciB0aGUgaW50ZXJuYWwgc3RyaW5nIGJ5IHJlc2V0dGluZyBsZW4gdG8g MC4gICovCisgIGNoYXIgKm91dCAoKQorICB7CisgICAgLyogRmluYWwgY2hhcmFjdGVyIGlzIGFs d2F5cyBhIHRyYWlsaW5nIGNvbW1hLCBzbyBzdHJpcCBpdCBvdXQuICAqLworICAgIGNoYXIgKnEg PSB4c3RybmR1cCAoY29uLmNfc3RyICgpLCBjb24uc2l6ZSAoKSAtIDEpOworICAgIGNvbi5jbGVh ciAoKTsKKyAgICByZXR1cm4gcTsKKyAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnZlY3Rvcjxjb25s aXN0PiB2ZWNfY29ubGlzdDsKKworLyogQWRkIGNvbnN0cmFpbnRzIHRvIGFuIHJ0eC4gIFRoaXMg ZnVuY3Rpb24gaXMgc2ltaWxhciB0byByZW1vdmVfY29uc3RyYWludHMuCisgICBFcnJvcnMgaWYg YWRkaW5nIHRoZSBjb25zdHJhaW50cyB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uc3RyYWlu dHMuICAqLworCitzdGF0aWMgdm9pZAorYWRkX2NvbnN0cmFpbnRzIChydHggcGFydCwgZmlsZV9s b2NhdGlvbiBsb2MsIHZlY19jb25saXN0ICZjb25zKQoreworICBjb25zdCBjaGFyICpmb3JtYXRf cHRyOworCisgIGlmIChwYXJ0ID09IE5VTExfUlRYKQorICAgIHJldHVybjsKKworICAvKiBJZiBt YXRjaF9vcCBvciBtYXRjaF9zY3IsIGNoZWNrIGlmIHdlIGhhdmUgdGhlIHJpZ2h0IG9uZSwgYW5k IGlmIHNvLCBjb3B5CisgICAgIG92ZXIgdGhlIGNvbnN0cmFpbnQgbGlzdC4gICovCisgIGlmIChH RVRfQ09ERSAocGFydCkgPT0gTUFUQ0hfT1BFUkFORCB8fCBHRVRfQ09ERSAocGFydCkgPT0gTUFU Q0hfU0NSQVRDSCkKKyAgICB7CisgICAgICBpbnQgZmllbGQgPSBHRVRfQ09ERSAocGFydCkgPT0g TUFUQ0hfT1BFUkFORCA/IDIgOiAxOworICAgICAgdW5zaWduZWQgaWQgPSBYSU5UIChwYXJ0LCAw KTsKKworICAgICAgaWYgKGlkID49IGNvbnMuc2l6ZSAoKSkKKwlmYXRhbF9hdCAobG9jLCAiY291 bGQgbm90IGZpbmQgbWF0Y2hfb3BlcmFuZC9zY3JhdGNoIHdpdGggaWQgJWQiLCBpZCk7CisKKyAg ICAgIGlmIChjb25zW2lkXS5pZHggPT0gLTEpCisJeworCSAgZXJyb3JfYXQgKGxvYywgImNvbnN0 cnVjdG9yICVkIGVuY291bnRlcmVkIG1vcmUgdGhhbiBvbmNlIiwgaWQpOworCSAgcmV0dXJuOwor CX0KKworICAgICAgaWYgKFhTVFIgKHBhcnQsIGZpZWxkKVswXSAhPSAnXDAnKQorCXsKKwkgIGVy cm9yX2F0IChsb2MsICJjYW4ndCBtaXggbm9ybWFsIGFuZCBjb21wYWN0IGNvbnN0cmFpbnQgc3lu dGF4Iik7CisJICByZXR1cm47CisJfQorICAgICAgWFNUUiAocGFydCwgZmllbGQpID0gY29uc1tp ZF0ub3V0ICgpOworICAgICAgY29uc1tpZF0uaWR4ID0gLTE7CisgICAgfQorCisgIGZvcm1hdF9w dHIgPSBHRVRfUlRYX0ZPUk1BVCAoR0VUX0NPREUgKHBhcnQpKTsKKworICAvKiBSZWN1cnNpdmVs eSBzZWFyY2ggdGhlIHJ0eC4gICovCisgIGZvciAoaW50IGkgPSAwOyBpIDwgR0VUX1JUWF9MRU5H VEggKEdFVF9DT0RFIChwYXJ0KSk7IGkrKykKKyAgICBzd2l0Y2ggKCpmb3JtYXRfcHRyKyspCisg ICAgICB7CisgICAgICBjYXNlICdlJzoKKyAgICAgIGNhc2UgJ3UnOgorCWFkZF9jb25zdHJhaW50 cyAoWEVYUCAocGFydCwgaSksIGxvYywgY29ucyk7CisJYnJlYWs7CisgICAgICBjYXNlICdFJzoK KwlpZiAoWFZFQyAocGFydCwgaSkgIT0gTlVMTCkKKwkgIGZvciAoaW50IGogPSAwOyBqIDwgWFZF Q0xFTiAocGFydCwgaSk7IGorKykKKwkgICAgYWRkX2NvbnN0cmFpbnRzIChYVkVDRVhQIChwYXJ0 LCBpLCBqKSwgbG9jLCBjb25zKTsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJY29udGludWU7 CisgICAgICB9Cit9CisKKy8qIEFkZCBhdHRyaWJ1dGVzIHRvIGFuIHJ0eC4gVGhlIGF0dHJpYnV0 ZXMgdGhhdCBhcmUgbWF0Y2hlZCBtdXN0IGJlIGluIG9yZGVyCisgICBpLmUuIHJlYWQgZnJvbSB0 b3AgdG8gYm90dG9tIGluIHRoZSBwYXR0ZXJuLgorICAgRXJyb3JzIGlmIGFkZGluZyB0aGUgYXR0 cmlidXRlcyB3b3VsZCBvdmVyd3JpdGUgZXhpc3RpbmcgYXR0cmlidXRlcy4KKyAgIFJldHVybnMg MSArIGluZGV4IG9mIGxhc3QgY29ubGlzdCB0byBiZSBtYXRjaGVkLiAgKi8KKworc3RhdGljIHVu c2lnbmVkIGludAorYWRkX2F0dHJpYnV0ZXMgKHJ0eCB4LCBmaWxlX2xvY2F0aW9uIGxvYywgdmVj X2Nvbmxpc3QgJmF0dHJzKQoreworICB1bnNpZ25lZCBpbnQgYXR0cl9pbmRleCA9IEdFVF9DT0RF ICh4KSA9PSBERUZJTkVfSU5TTiA/IDQgOiAzOworICB1bnNpZ25lZCBpbnQgaW5kZXggPSAwOwor CisgIGlmIChYVkVDICh4LCBhdHRyX2luZGV4KSA9PSBOVUxMKQorICAgIHJldHVybiBpbmRleDsK KworICBmb3IgKGludCBpID0gMDsgaSA8IFhWRUNMRU4gKHgsIGF0dHJfaW5kZXgpOyArK2kpCisg ICAgeworICAgICAgcnR4IHBhcnQgPSBYVkVDRVhQICh4LCBhdHRyX2luZGV4LCBpKTsKKworICAg ICAgaWYgKEdFVF9DT0RFIChwYXJ0KSAhPSBTRVRfQVRUUikKKwljb250aW51ZTsKKworICAgICAg aWYgKGF0dHJzW2luZGV4XS5uYW1lID09IFhTVFIgKHBhcnQsIDApKQorCXsKKwkgIGlmIChYU1RS IChwYXJ0LCAxKSAmJiBYU1RSIChwYXJ0LCAxKVswXSAhPSAnXDAnKQorCSAgICBmYXRhbF9hdCAo bG9jLCAiY2FuJ3QgbWl4IG5vcm1hbCBhbmQgY29tcGFjdCBhdHRyaWJ1dGUgc3ludGF4Iik7CisJ ICBYU1RSIChwYXJ0LCAxKSA9IGF0dHJzW2luZGV4XS5vdXQgKCk7CisKKwkgIGlmICgrK2luZGV4 ID09IGF0dHJzLnNpemUgKCkpCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwlmYXRhbF9h dCAobG9jLCAiY2FuJ3QgbWl4IG5vcm1hbCBhbmQgY29tcGFjdCBhdHRyaWJ1dGUgc3ludGF4Iik7 CisgICAgfQorCisgIHJldHVybiBpbmRleDsKK30KKworLyogTW9kaWZ5IHRoZSBhdHRyaWJ1dGVz IGxpc3QgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIGltcGxpY2l0bHkgZGVjbGFyZWQKKyAgIGF0dHJp YnV0ZXMgaW4gdGhlIGF0dHJzOiBsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2NyZWF0ZV9taXNz aW5nX2F0dHJpYnV0ZXMgKHJ0eCB4LCBmaWxlX2xvY2F0aW9uIC8qIGxvYyAqLywgdmVjX2Nvbmxp c3QgJmF0dHJzKQoreworICBpZiAoYXR0cnMuZW1wdHkgKCkpCisgICAgcmV0dXJuOworCisgIHVu c2lnbmVkIGludCBhdHRyX2luZGV4ID0gR0VUX0NPREUgKHgpID09IERFRklORV9JTlNOID8gNCA6 IDM7CisgIHJ0dmVjIG9yaWcgPSBYVkVDICh4LCBhdHRyX2luZGV4KTsKKyAgc2l6ZV90IG5fY3Vy ciA9IG9yaWcgPyBYVkVDTEVOICh4LCBhdHRyX2luZGV4KSA6IDA7CisgIHJ0dmVjIGNvcHkgPSBy dHZlY19hbGxvYyAobl9jdXJyICsgYXR0cnMuc2l6ZSAoKSk7CisKKyAgLyogQ3JlYXRlIGEgc2hh bGxvdyBjb3B5IG9mIGV4aXN0aW5nIGVudHJpZXMuICAqLworICBtZW1jcHkgKCZjb3B5LT5lbGVt W2F0dHJzLnNpemUgKCldLCAmb3JpZy0+ZWxlbVswXSwgc2l6ZW9mIChydHgpICogbl9jdXJyKTsK KyAgWFZFQyAoeCwgYXR0cl9pbmRleCkgPSBjb3B5OworCisgIC8qIENyZWF0ZSB0aGUgbmV3IGVs ZW1lbnRzLiAgKi8KKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLnNpemUgKCk7IGkr KykKKyAgICB7CisgICAgICBydHggYXR0ciA9IHJ0eF9hbGxvYyAoU0VUX0FUVFIpOworICAgICAg WFNUUiAoYXR0ciwgMCkgPSB4c3RyZHVwIChhdHRyc1tpXS5uYW1lLmNfc3RyICgpKTsKKyAgICAg IFhTVFIgKGF0dHIsIDEpID0gTlVMTDsKKyAgICAgIFhWRUNFWFAgKHgsIGF0dHJfaW5kZXgsIGkp ID0gYXR0cjsKKyAgICB9CisKKyAgcmV0dXJuOworfQorCisvKiBDb25zdW1lcyBzcGFjZXMgYW5k IHRhYnMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NraXBfc3BhY2VzIChjb25zdCBjaGFy ICoqc3RyKQoreworICB3aGlsZSAoSVNTUEFDRSAoKipzdHIpKQorICAgICgqc3RyKSsrOworfQor CisvKiBDb25zdW1lcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyLCBpZiBpdCdzIHRoZXJlLiAgKi8KKwor c3RhdGljIGlubGluZSBib29sCitleHBlY3RfY2hhciAoY29uc3QgY2hhciAqKnN0ciwgY2hhciBj KQoreworICBpZiAoKipzdHIgIT0gYykKKyAgICByZXR1cm4gZmFsc2U7CisgICgqc3RyKSsrOwor ICByZXR1cm4gdHJ1ZTsKK30KKworLyogUGFyc2VzIHRoZSBzZWN0aW9uIGxheW91dCB0aGF0IGZv bGxvd3MgYSAie0B9IiBpZiB1c2luZyBuZXcgc3ludGF4LiBCdWlsZHMKKyAgIGEgdmVjdG9yIGZv ciBhIHNpbmdsZSBzZWN0aW9uLiBFLmcuIGlmIHdlIGhhdmUgImF0dHJzOiBsZW5ndGggYXJjaF0u Li4iCisgICB0aGVuIGxpc3Qgd2lsbCBoYXZlIHR3byBlbGVtZW50cywgdGhlIGZpcnN0IGZvciAi bGVuZ3RoIiBhbmQgdGhlIHNlY29uZAorICAgZm9yICJhcmNoIi4gICovCisKK3N0YXRpYyB2b2lk CitwYXJzZV9zZWN0aW9uX2xheW91dCAoY29uc3QgY2hhciAqKnRlbXBsLCBjb25zdCBjaGFyICps YWJlbCwKKwkJICAgICAgdmVjX2Nvbmxpc3QgJmxpc3QsIGJvb2wgbnVtZXJpYykKK3sKKyAgY29u c3QgY2hhciAqbmFtZV9zdGFydDsKKyAgc2l6ZV90IGxhYmVsX2xlbiA9IHN0cmxlbiAobGFiZWwp OworICBpZiAoc3RybmNtcCAobGFiZWwsICp0ZW1wbCwgbGFiZWxfbGVuKSA9PSAwKQorICAgIHsK KyAgICAgICp0ZW1wbCArPSBsYWJlbF9sZW47CisKKyAgICAgIC8qIEdhdGhlciB0aGUgbmFtZXMu ICAqLworICAgICAgd2hpbGUgKCoqdGVtcGwgIT0gJzsnICYmICoqdGVtcGwgIT0gJ10nKQorCXsK KwkgIHNraXBfc3BhY2VzICh0ZW1wbCk7CisJICBuYW1lX3N0YXJ0ID0gKnRlbXBsOworCSAgaW50 IGxlbiA9IDA7CisJICBjaGFyIHZhbCA9ICgqdGVtcGwpW2xlbl07CisJICB3aGlsZSAodmFsICE9 ICcsJyAmJiB2YWwgIT0gJzsnICYmIHZhbCAhPSAnXScpCisJICAgICB2YWwgPSAoKnRlbXBsKVsr K2xlbl07CisJICAqdGVtcGwgKz0gbGVuOworCSAgaWYgKHZhbCA9PSAnLCcpCisJICAgICgqdGVt cGwpKys7CisJICBsaXN0LnB1c2hfYmFjayAoY29ubGlzdCAobmFtZV9zdGFydCwgbGVuLCBudW1l cmljKSk7CisJfQorICAgIH0KK30KKworLyogUGFyc2UgYSBzZWN0aW9uLCBhIHNlY3Rpb24gaXMg ZGVmaW5lZCBhcyBhIG5hbWVkIHNwYWNlIHNlcGFyYXRlZCBsaXN0LCBlLmcuCisKKyAgIGZvbzog YSwgYiwgYworCisgICBpcyBhIHNlY3Rpb24gbmFtZWQgImZvbyIgd2l0aCBlbnRyaWVzIGEsIGIg YW5kIGMuICAqLworCitzdGF0aWMgdm9pZAorcGFyc2Vfc2VjdGlvbiAoY29uc3QgY2hhciAqKnRl bXBsLCB1bnNpZ25lZCBpbnQgbl9lbGVtcywgdW5zaWduZWQgaW50IGFsdF9ubywKKwkgICAgICAg dmVjX2Nvbmxpc3QgJmxpc3QsIGZpbGVfbG9jYXRpb24gbG9jLCBjb25zdCBjaGFyICpuYW1lKQor eworICB1bnNpZ25lZCBpbnQgaTsKKworICAvKiBHbyB0aHJvdWdoIHRoZSBsaXN0LCBvbmUgY2hh cmFjdGVyIGF0IGEgdGltZSwgYWRkaW5nIHNhaWQgY2hhcmFjdGVyCisgICAgIHRvIHRoZSBjb3Jy ZWN0IHN0cmluZy4gICovCisgIGZvciAoaSA9IDA7ICoqdGVtcGwgIT0gJ10nICYmICoqdGVtcGwg IT0gJzsnOyAoKnRlbXBsKSsrKQorICAgIHsKKyAgICAgIGlmICghSVNTUEFDRSAoKip0ZW1wbCkp CisJeworCSAgbGlzdFtpXS5hZGQoKip0ZW1wbCk7CisJICBpZiAoKip0ZW1wbCA9PSAnLCcpCisJ ICAgIHsKKwkgICAgICArK2k7CisJICAgICAgaWYgKGkgPT0gbl9lbGVtcykKKwkJZmF0YWxfYXQg KGxvYywgInRvbyBtYW55ICVzcyBpbiBhbHRlcm5hdGl2ZSAlZDogZXhwZWN0ZWQgJWQiLAorCQkJ ICBuYW1lLCBhbHRfbm8sIG5fZWxlbXMpOworCSAgICB9CisJfQorICAgIH0KKworICBpZiAoaSAr IDEgPCBuX2VsZW1zKQorICAgIGZhdGFsX2F0IChsb2MsICJ0b28gZmV3ICVzcyBpbiBhbHRlcm5h dGl2ZSAlZDogZXhwZWN0ZWQgJWQsIGdvdCAlZCIsCisJICAgICAgbmFtZSwgYWx0X25vLCBuX2Vs ZW1zLCBpKTsKKworICBsaXN0W2ldLmFkZCgnLCcpOworfQorCisvKiBUaGUgY29tcGFjdCBzeW50 YXggaGFzIG1vcmUgY29udmllbmNlIHN5bnRheGVzLiAgQXMgc3VjaCB3ZSBwb3N0IHByb2Nlc3MK KyAgIHRoZSBsaW5lcyB0byBnZXQgdGhlbSBiYWNrIHRvIHNvbWV0aGluZyB0aGUgbm9ybWFsIHN5 bnRheCB1bmRlcnN0YW5kcy4gICovCisKK3N0YXRpYyB2b2lkCitwcmVwcm9jZXNzX2NvbXBhY3Rf c3ludGF4IChmaWxlX2xvY2F0aW9uIGxvYywgaW50IGFsdF9ubywgc3RkOjpzdHJpbmcgJmxpbmUs CisJCQkgICBzdGQ6OnN0cmluZyAmbGFzdF9saW5lKQoreworICAvKiBDaGVjayBpZiB3ZSdyZSBj b3B5aW5nIHRoZSBsYXN0IHN0YXRlbWVudC4gICovCisgIGlmIChsaW5lLmZpbmQgKCJeIikgPT0g MCAmJiBsaW5lLnNpemUgKCkgPT0gMSkKKyAgICB7CisgICAgICBpZiAobGFzdF9saW5lLmVtcHR5 ICgpKQorCWZhdGFsX2F0IChsb2MsICJmb3VuZCBpbnN0cnVjdGlvbiB0byBjb3B5IHByZXZpb3Vz IGxpbmUgKF4pIGluIgorCQkgICAgICAgImFsdGVybmF0aXZlICVkIGJ1dCBubyBwcmV2aW91cyBs aW5lIHRvIGNvcHkiLCBhbHRfbm8pOworICAgICAgbGluZSA9IGxhc3RfbGluZTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICBzdGQ6OnN0cmluZyBidWZm ZXI7CisgIC8qIENoZWNrIGlmIHdlIGhhdmUgPDwgd2hpY2ggbWVhbnMgcmV0dXJuIGMgc3RhdGVt ZW50LiAgKi8KKyAgaWYgKGxpbmUuZmluZCAoIjw8IikgPT0gMCkKKyAgICB7CisgICAgICByZXN1 bHQuYXBwZW5kICgiKiByZXR1cm4gIik7CisgICAgICBjb25zdCBjaGFyICpjaHVuayA9IGxpbmUu Y19zdHIgKCkgKyAyOworICAgICAgc2tpcF9zcGFjZXMgKCZjaHVuayk7CisgICAgICByZXN1bHQu YXBwZW5kIChjaHVuayk7CisgICAgfQorICBlbHNlCisgICAgcmVzdWx0LmFwcGVuZCAobGluZSk7 CisKKyAgbGluZSA9IHJlc3VsdDsKKyAgcmV0dXJuOworfQorCisvKiBDb252ZXJ0cyBhbiBydHgg ZnJvbSBjb21wYWN0IHN5bnRheCB0byBub3JtYWwgc3ludGF4IGlmIHBvc3NpYmxlLiAgKi8KKwor c3RhdGljIHZvaWQKK2NvbnZlcnRfc3ludGF4IChydHggeCwgZmlsZV9sb2NhdGlvbiBsb2MpCit7 CisgIGludCBhbHRfbm87CisgIHVuc2lnbmVkIGludCBpbmRleCwgdGVtcGxfaW5kZXg7CisgIGNv bnN0IGNoYXIgKnRlbXBsOworICB2ZWNfY29ubGlzdCB0Y29udmVjLCBjb252ZWMsIGF0dHJ2ZWM7 CisKKyAgdGVtcGxfaW5kZXggPSBHRVRfQ09ERSAoeCkgPT0gREVGSU5FX0lOU04gPyAzIDogMjsK KworICB0ZW1wbCA9IFhUTVBMICh4LCB0ZW1wbF9pbmRleCk7CisKKyAgLyogVGVtcGxhdGVzIHdp dGggY29uc3RyYWludHMgc3RhcnQgd2l0aCAie0AiLiAgKi8KKyAgaWYgKHN0cm5jbXAgKCIqe0Ai LCB0ZW1wbCwgMykpCisgICAgcmV0dXJuOworCisgIC8qIEdldCB0aGUgbGF5b3V0IGZvciB0aGUg dGVtcGxhdGUuICAqLworICB0ZW1wbCArPSAzOworICBza2lwX3NwYWNlcyAoJnRlbXBsKTsKKwor ICBpZiAoIWV4cGVjdF9jaGFyICgmdGVtcGwsICdbJykpCisgICAgZmF0YWxfYXQgKGxvYywgImV4 cGVjaW5nIGBbJyB0byBiZWdpbiBzZWN0aW9uIGxpc3QiKTsKKworICBwYXJzZV9zZWN0aW9uX2xh eW91dCAoJnRlbXBsLCAiY29uczoiLCB0Y29udmVjLCB0cnVlKTsKKyAgY29udmVjLnJlc2l6ZSAo dGNvbnZlYy5zaXplICgpKTsKKworICAvKiBDaGVjayBmb3IgYW55IGR1cGxpY2F0ZSBjb25zIGVu dHJpZXMgYW5kIHNvcnQgYmFzZWQgb24gaS4gICovCisgIGZvciAoYXV0byBlIDogdGNvbnZlYykK KyAgICB7CisgICAgICB1bnNpZ25lZCBpZHggPSBlLmlkeDsKKyAgICAgIGlmIChpZHggPj0gY29u dmVjLnNpemUgKCkpCisJY29udmVjLnJlc2l6ZSAoaWR4ICsgMSk7CisKKyAgICAgIGlmIChjb252 ZWNbaWR4XS5pZHggPj0gMCkKKwlmYXRhbF9hdCAobG9jLCAiZHVwbGljYXRlIGNvbnMgbnVtYmVy IGZvdW5kOiAlZCIsIGlkeCk7CisgICAgICBjb252ZWNbaWR4XSA9IGU7CisgICAgfQorICB0Y29u dmVjLmNsZWFyICgpOworCisgIGlmICgqdGVtcGwgIT0gJ10nKQorICAgIHsKKyAgICAgIGlmICgq dGVtcGwgPT0gJzsnKQorCXNraXBfc3BhY2VzICgmKCsrdGVtcGwpKTsKKyAgICAgIHBhcnNlX3Nl Y3Rpb25fbGF5b3V0ICgmdGVtcGwsICJhdHRyczoiLCBhdHRydmVjLCBmYWxzZSk7CisgICAgICBj cmVhdGVfbWlzc2luZ19hdHRyaWJ1dGVzICh4LCBsb2MsIGF0dHJ2ZWMpOworICAgIH0KKworICBp ZiAoIWV4cGVjdF9jaGFyICgmdGVtcGwsICddJykpCisgICAgZmF0YWxfYXQgKGxvYywgImV4cGVj dGluZyBgXWAgdG8gZW5kIHNlY3Rpb24gbGlzdCAtIHNlY3Rpb24gbGlzdCBtdXN0IGhhdmUgIgor CQkgICAiY29ucyBmaXJzdCwgYXR0cnMgc2Vjb25kIik7CisKKyAgLyogV2Ugd2lsbCB3cml0ZSB0 aGUgdW4tY29uc3RyYWluaWZpZWQgdGVtcGxhdGUgaW50byBuZXdfdGVtcGwuICAqLworICBzdGQ6 OnN0cmluZyBuZXdfdGVtcGw7CisgIG5ld190ZW1wbC5hcHBlbmQgKCJAIik7CisKKyAgLyogU2tp cCB0byB0aGUgZmlyc3QgcHJvcGVyIGxpbmUuICAqLworICBza2lwX3NwYWNlcyAoJnRlbXBsKTsK KworICBhbHRfbm8gPSAwOworICBzdGQ6OnN0cmluZyBsYXN0X2xpbmU7CisKKyAgLyogUHJvY2Vz cyB0aGUgYWx0ZXJuYXRpdmVzLiAgKi8KKyAgd2hpbGUgKCoodGVtcGwgLSAxKSAhPSAnXDAnKQor ICAgIHsKKyAgICAgIC8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAgKi8KKyAgICAgIHN0ZDo6 c3RyaW5nIGJ1ZmZlcjsKKyAgICAgIHNraXBfc3BhY2VzICgmdGVtcGwpOworCisgICAgICAvKiBD aGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kLiAgKi8KKyAgICAgIGlmICh0ZW1wbFswXSA9PSAnfScg JiYgdGVtcGxbMV0gPT0gJ1wwJykKKwlicmVhazsKKworICAgICAgbmV3X3RlbXBsICs9ICdcbic7 CisgICAgICBuZXdfdGVtcGwuYXBwZW5kIChidWZmZXIpOworCisgICAgICBpZiAoZXhwZWN0X2No YXIgKCZ0ZW1wbCwgJ1snKSkKKwl7CisJICAvKiBQYXJzZSB0aGUgY29uc3RyYWludCBsaXN0LCB0 aGVuIHRoZSBhdHRyaWJ1dGUgbGlzdC4gICovCisJICBpZiAoY29udmVjLnNpemUgKCkgPiAwKQor CSAgICBwYXJzZV9zZWN0aW9uICgmdGVtcGwsIGNvbnZlYy5zaXplICgpLCBhbHRfbm8sIGNvbnZl YywgbG9jLAorCQkJICAgImNvbnN0cmFpbnQiKTsKKworCSAgaWYgKGF0dHJ2ZWMuc2l6ZSAoKSA+ IDApCisJICAgIHsKKwkgICAgICBpZiAoY29udmVjLnNpemUgKCkgPiAwICYmICFleHBlY3RfY2hh ciAoJnRlbXBsLCAnOycpKQorCQlmYXRhbF9hdCAobG9jLCAiZXhwZWN0ZWQgYDsnIHRvIHNlcGFy YXRlIGNvbnN0cmFpbnRzICIKKwkJCSAgICAgICAiYW5kIGF0dHJpYnV0ZXMgaW4gYWx0ZXJuYXRp dmUgJWQiLCBhbHRfbm8pOworCisJICAgICAgcGFyc2Vfc2VjdGlvbiAoJnRlbXBsLCBhdHRydmVj LnNpemUgKCksIGFsdF9ubywKKwkJCSAgICAgYXR0cnZlYywgbG9jLCAiYXR0cmlidXRlIik7CisJ ICAgIH0KKworCSAgaWYgKCFleHBlY3RfY2hhciAoJnRlbXBsLCAnXScpKQorCSAgICBmYXRhbF9h dCAobG9jLCAiZXhwZWN0ZWQgZW5kIG9mIGNvbnN0cmFpbnQvYXR0cmlidXRlIGxpc3QgYnV0ICIK KwkJCSAgICJtaXNzaW5nIGFuIGVuZGluZyBgXScgaW4gYWx0ZXJuYXRpdmUgJWQiLCBhbHRfbm8p OworCX0KKyAgICAgIGVsc2UgaWYgKHRlbXBsWzBdID09ICcvJyAmJiB0ZW1wbFsxXSA9PSAnLycp CisJeworCSAgdGVtcGwgKz0gMjsKKyAJICAvKiBHbG9iIHRpbGwgbmV3bGluZSBvciBlbmQgb2Yg c3RyaW5nLiAgKi8KKwkgIHdoaWxlICgqdGVtcGwgIT0gJ1xuJyB8fCAqdGVtcGwgIT0gJ1wwJykK KwkgICAgdGVtcGwrKzsKKwkgIHRlbXBsKys7CisJICBjb250aW51ZTsKKwl9CisgICAgICBlbHNl IGlmICh0ZW1wbFswXSA9PSAnLycgJiYgdGVtcGxbMV0gPT0gJyonKQorCXsKKwkgIHRlbXBsICs9 IDI7CisgCSAgLyogR2xvYiB0aWxsIG5ld2xpbmUgb3IgZW5kIG9mIG11bHRpbGluZSBjb21tZW50 LiAgKi8KKwkgIHdoaWxlICh0ZW1wbFswXSAhPSAnKicgJiYgdGVtcGxbMV0gIT0gJy8nKQorCSAg ICB0ZW1wbCsrOworCSAgdGVtcGwgKz0gMjsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAgIGVsc2UK KwlmYXRhbF9hdCAobG9jLCAiZXhwZWN0ZWQgY29uc3RyYWludC9hdHRyaWJ1dGUgbGlzdCBhdCBi ZWdpbm5pbmcgb2YgIgorCQkgICAgICAgImFsdGVybmF0aXZlICVkIGJ1dCBtaXNzaW5nIGEgc3Rh cnRpbmcgYFsnIiwgYWx0X25vKTsKKworICAgICAgLyogU2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4g bGlzdCBhbmQgYXNtLiAgKi8KKyAgICAgICsrdGVtcGw7CisgICAgICBza2lwX3NwYWNlcyAoJnRl bXBsKTsKKworICAgICAgLyogQ29weSBhc20gdG8gbmV3IHRlbXBsYXRlLiAgKi8KKyAgICAgIHN0 ZDo6c3RyaW5nIGxpbmU7CisgICAgICB3aGlsZSAoKnRlbXBsICE9ICdcbicgJiYgKnRlbXBsICE9 ICdcMCcpCisJbGluZSArPSAqdGVtcGwrKzsKKworICAgICAgLyogQXBwbHkgYW55IHByZS1wcm9j ZXNzaW5nIG5lZWRlZCB0byB0aGUgbGluZS4gICovCisgICAgICBwcmVwcm9jZXNzX2NvbXBhY3Rf c3ludGF4IChsb2MsIGFsdF9ubywgbGluZSwgbGFzdF9saW5lKTsKKyAgICAgIG5ld190ZW1wbC5h cHBlbmQgKGxpbmUpOworICAgICAgbGFzdF9saW5lID0gbGluZTsKKworICAgICAgLyogTm9ybWFs ICIqLi4uIiBzeW50YXggZXhwZWN0cyB0aGUgY2xvc2luZyBxdW90ZSB0byBiZSBvbiB0aGUgZmlu YWwKKwkgbGluZSBvZiBhc20sIHdoZXJlYXMgd2UgYWxsb3cgdGhlIGNsb3NpbmcgIn0iIHRvIGJl IG9uIGl0cyBvd24gbGluZS4KKwkgUG9zdHBvbmUgY29weWluZyB0aGUgJ1xuJyB1bnRpbCB3ZSBr bm93IHRoYXQgdGhlcmUgaXMgYW5vdGhlcgorCSBhbHRlcm5hdGl2ZSBpbiB0aGUgbGlzdC4gICov CisgICAgICB3aGlsZSAodGVtcGxbMF0gPT0gJ1xuJyB8fCBJU1NQQUNFICgqdGVtcGwpKQorCXRl bXBsKys7CisgICAgICArK2FsdF9ubzsKKyAgICB9CisKKyAgLyogV3JpdGUgdGhlIGNvbnN0cmFp bnRzIGFuZCBhdHRyaWJ1dGVzIGludG8gdGhlaXIgcHJvcGVyIHBsYWNlcy4gICovCisgIGlmIChj b252ZWMuc2l6ZSAoKSA+IDApCisgICAgYWRkX2NvbnN0cmFpbnRzICh4LCBsb2MsIGNvbnZlYyk7 CisKKyAgaWYgKGF0dHJ2ZWMuc2l6ZSAoKSA+IDApCisgICAgeworICAgICAgaW5kZXggPSBhZGRf YXR0cmlidXRlcyAoeCwgbG9jLCBhdHRydmVjKTsKKyAgICAgIGlmIChpbmRleCA8IGF0dHJ2ZWMu c2l6ZSAoKSkKKwlmYXRhbF9hdCAobG9jLCAiY291bGQgbm90IGZpbmQgc2V0X2F0dHIgZm9yIGF0 dHJpYnV0ZSAlcyIsCisJCSAgYXR0cnZlY1tpbmRleF0ubmFtZS5jX3N0ciAoKSk7CisgICAgfQor CisgIC8qIENvcHkgb3ZlciB0aGUgbmV3IHVuLWNvbnN0cmFpbmlmaWVkIHRlbXBsYXRlLiAgKi8K KyAgWFRNUEwgKHgsIHRlbXBsX2luZGV4KSA9IHhzdHJkdXAgKG5ld190ZW1wbC5jX3N0ciAoKSk7 CisKKyAgLyogUmVnaXN0ZXIgZm9yIGxhdGVyIGNoZWNrcyBkdXJpbmcgaXRlcmF0b3IgZXhwYW5z aW9ucy4gICovCisgIGNvbXBhY3Rfc3ludGF4LmFkZCAoeCk7Cit9CisKIC8qIFByb2Nlc3MgYSB0 b3AgbGV2ZWwgcnR4IGluIHNvbWUgd2F5LCBxdWV1aW5nIGFzIGFwcHJvcHJpYXRlLiAgKi8KIAog c3RhdGljIHZvaWQKQEAgLTU1MywxMCArMTA3NywxMiBAQCBwcm9jZXNzX3J0eCAocnR4IGRlc2Ms IGZpbGVfbG9jYXRpb24gbG9jKQogICBzd2l0Y2ggKEdFVF9DT0RFIChkZXNjKSkKICAgICB7CiAg ICAgY2FzZSBERUZJTkVfSU5TTjoKKyAgICAgIGNvbnZlcnRfc3ludGF4IChkZXNjLCBsb2MpOwog ICAgICAgcXVldWVfcGF0dGVybiAoZGVzYywgJmRlZmluZV9pbnNuX3RhaWwsIGxvYyk7CiAgICAg ICBicmVhazsKIAogICAgIGNhc2UgREVGSU5FX0NPTkRfRVhFQzoKKyAgICAgIGNvbnZlcnRfc3lu dGF4IChkZXNjLCBsb2MpOwogICAgICAgcXVldWVfcGF0dGVybiAoZGVzYywgJmRlZmluZV9jb25k X2V4ZWNfdGFpbCwgbG9jKTsKICAgICAgIGJyZWFrOwogCkBAIC02MzEsNiArMTE1Nyw3IEBAIHBy b2Nlc3NfcnR4IChydHggZGVzYywgZmlsZV9sb2NhdGlvbiBsb2MpCiAJYXR0ciA9IFhWRUMgKGRl c2MsIHNwbGl0X2NvZGUgKyAxKTsKIAlQVVRfQ09ERSAoZGVzYywgREVGSU5FX0lOU04pOwogCVhW RUMgKGRlc2MsIDQpID0gYXR0cjsKKwljb252ZXJ0X3N5bnRheCAoZGVzYywgbG9jKTsKIAogCS8q IFF1ZXVlIHRoZW0uICAqLwogCWluc25fZWxlbSA9IHF1ZXVlX3BhdHRlcm4gKGRlc2MsICZkZWZp bmVfaW5zbl90YWlsLCBsb2MpOwo= --_002_VI1PR08MB532500C80282451D7D8524D0FF50AVI1PR08MB5325eurp_--