From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80088.outbound.protection.outlook.com [40.107.8.88]) by sourceware.org (Postfix) with ESMTPS id 044A1385800B for ; Mon, 11 Jan 2021 10:24:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 044A1385800B Received: from MR2P264CA0165.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:1::28) by DB7PR08MB2953.eurprd08.prod.outlook.com (2603:10a6:5:1b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3721.22; Mon, 11 Jan 2021 10:24:26 +0000 Received: from VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com (2603:10a6:501:1:cafe::c6) by MR2P264CA0165.outlook.office365.com (2603:10a6:501:1::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.12 via Frontend Transport; Mon, 11 Jan 2021 10:24:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;gcc.gnu.org; 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT041.mail.protection.outlook.com (10.152.19.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6 via Frontend Transport; Mon, 11 Jan 2021 10:24:26 +0000 Received: ("Tessian outbound 8418c949a3fa:v71"); Mon, 11 Jan 2021 10:24:25 +0000 X-CR-MTA-TID: 64aa7808 Received: from dcc9b80ca420.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F406613E-3FF9-4CEF-86CD-DC17A1A40735.1; Mon, 11 Jan 2021 10:24:20 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id dcc9b80ca420.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 11 Jan 2021 10:24:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bHDjeGu72me7hn1BJMBL+VvDM6IYHeTmj2YlipYcyuYYdG1whuIyqqpSxVWKweBwBmc65lx1iOlIGJV5nd53Oe+C+gHAk5vL3H6IqELOZrhdTdWV8/Zr/X/HxOMZUcp3h+vlJtC43kb8YFikn//7UnZSmupyVXSGkQWjDqWaLbMr+VkOulteQkT4z1j0cccwQIuedIzUyp/HpuKFzO8QOLEV24XhluI0dU4bKnpiNp6y0fTeSBRHcZqzjUZ1ryj/v2ELjUl91sk/7WHQ11EnbwjpjrdqoGE5BeciQ9OXc9qZJAvhww8Dx7uDtza5kOY1Etv/d564LavzZfABaNlanw== 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-SenderADCheck; bh=nwx0owGUUu1rom4td/N+VeqyAci8OVoRjgTrf+rCc1w=; b=C68hm9OKvqwxm+LnI2BlIE6ZvnefW8JhZsyYYUuTERm6vTX3XcIvX9Z3bNhQo6MbZTT5bvVNlVOahNGhAF2wMwhIXeBcgxSXmKvdOEHi/NEyO2zj5allVZ7bWGrKTqHxMGYC+z3whZzUlC4T+hCy2Ki89LW6bAQ8TXLe8UwGPv0y4BOiasZSHgNd4Zw5HRjtOdL/b/YSNKKsGqvJWoy7vZzrV9ojNJn6ggPa7htWB2p/Im+jXQT9RelnClv2HnD4gHu9A4Q+KwTXBci+C30tE9Bbq68XTZODJVdf9ab4wJq+B2uqDQDbeVL+xYOGbeM6ru6x8Zzkx6wm2i6f+BmKpg== 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 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VE1PR08MB5597.eurprd08.prod.outlook.com (2603:10a6:800:1b3::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Mon, 11 Jan 2021 10:24:18 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::f937:5b3:12e1:8297]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::f937:5b3:12e1:8297%5]) with mapi id 15.20.3742.012; Mon, 11 Jan 2021 10:24:18 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd Subject: RE: [PATCH 6/8 v9]middle-end slp: support complex FMA and complex FMA conjugate Thread-Topic: [PATCH 6/8 v9]middle-end slp: support complex FMA and complex FMA conjugate Thread-Index: AQHW3R6fqk5bnkCFi0iOAFBbsZ7ibKodi6sAgATAwAA= Date: Mon, 11 Jan 2021 10:24:18 +0000 Message-ID: References: <20201228133743.GA29457@arm.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 195D097754A6E94F92BE0D34AEF95D65.0 x-checkrecipientchecked: true Authentication-Results-Original: suse.de; dkim=none (message not signed) header.d=none;suse.de; dmarc=none action=none header.from=arm.com; x-originating-ip: [82.11.185.166] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 4c737386-e77e-4064-251b-08d8b61b1273 x-ms-traffictypediagnostic: VE1PR08MB5597:|DB7PR08MB2953: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: K5rq1jPMVZTd7Q74R2YlS68TTT/VEmlrMHm4PwMdbuY0rwcg0LjdWHOzN84SVTmyDiFq0HGc3CaCdKir3gQs0zKR/5As+C+Q4PgI11kC5yN0rOYqhLZD+6F73VA412mLIYMIvAx831kysGjHcx1mU806l0XmM+ZPFeDL8To1HYeYkU5qoGco4px+9jFCUFa5N63XX1oCYKX8nvv014UcbMIg/wI8ol4KSReyzZdpMIDcrHuTtI/SkbgvodePdKqAs1eFA414EREgwxqkOghuNO3oUV1SRqepRqqd9veVLRTMvxonMYe5RhgvMlUi1iEoLhwM3YAuDZ1GINqMDAFtDItAozFlKORliao46UKy3po9PIhrOhRNcmFTMSs5SnSG961Z+UQBfY6ka3B/SXORlA== 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:(4636009)(136003)(39860400002)(366004)(376002)(346002)(396003)(478600001)(4326008)(86362001)(52536014)(66946007)(83380400001)(9686003)(66574015)(8936002)(6916009)(30864003)(33656002)(8676002)(76116006)(5660300002)(6506007)(2906002)(53546011)(316002)(186003)(26005)(66476007)(54906003)(71200400001)(55016002)(66556008)(64756008)(66446008)(7696005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?cjM3bUNqbitKeVFRWUJrTmpnazdvN05lSWI4V0VERnBCaUd3dDZ0V1BnTzEz?= =?utf-8?B?Z2dHQWtVMGtaZ1BwRnJFS0RzeUJOUDRqYUVocnNYd0hNV1YrWFIwcG1HNXpN?= =?utf-8?B?MHRrRjBGMXNJeExQRHUzY05DTlNGcGVkS2FxZytZTmx2blVDa1U2eUpKSE5j?= =?utf-8?B?eHE1QWVtQ042UmV2SmJoM1kreTE5SWsrTzlIcXk0T2oyckpIUlJoa3dqSTQ4?= =?utf-8?B?M3JqNWZoL3lMM2RnSjNJOWY2ZDhnOVpJZFJBNEZ2VWg4eTF5bzZxY1Z5WUpR?= =?utf-8?B?bEQrODlPL2h4NmZWQUdobHNKYjVCZXFXbjdJSGpqbFBvYWNkZis3U0pSYWdT?= =?utf-8?B?cEJlcXRmV21OcitUeTJmNmdNSWcvK21iWmdZT0R2TzIzS3ozWVIwdnRzSEZF?= =?utf-8?B?MDRhT0tlZUtLWElnSFc0ZlRSOUk5RzN6T0F2WTNBd2Vmd254Zm00dGlxVGRx?= =?utf-8?B?akhta01QSTgyWm9kUHliejlHVmJEM3VSdlc4cklsUEF4K1ZrVUpleHRUeGRZ?= =?utf-8?B?bWFwOE5RVEJFeU96RUpncGNKaUZFalpaUGlwbXh0SGlVK3RmOUU0MDVvTGlv?= =?utf-8?B?eTlDVHVtV3MvL24vdUl4S210blZ1MXhLY2VUZHNsK2htV3E5UXNvanBYbWFn?= =?utf-8?B?b0V6OXBQUHFBQTlkQjNtaVBPSG9NaG4wbkZjTjgyNzYxeFl6QXVMRHdydVc4?= =?utf-8?B?M3RvdHpXbENnRXlMVnVqQzNpc0wxU2xFaUluQ3JxbG91NGpnYzVaeHZXTExZ?= =?utf-8?B?R0RxTWpraVJvaldmWHlBa21oMWlvbW9aY1p2SVhKenlXRDBuNmwyc3R4L1dO?= =?utf-8?B?VGpMZFliZ1pINUVwcE9wUEtPME0xRy9EZXFhaDlDdks3M0V2dHRkQ0lEWEND?= =?utf-8?B?OVRqRlZKMVNrbXFoRFpQWVh4WXNoMmpEdUhJUDdMM1FoL3JIMDF4SHVZZVd2?= =?utf-8?B?RVFhemZXVm9iODB5VWZUUTRET0l6SGozSGxncmhmaEtVNkZMQ3FlOXZTWTR0?= =?utf-8?B?bmpXenJZN2FpY3hUMEFTTHZDMHJzQjA0SFE4eHhIZ0F6NDZUSEg2M21PWlJj?= =?utf-8?B?U2pqM2VpWG1sNHp5SFNXdFRhcno5ZGxHVmxVSWJrRjhsSWVodGxjYTJvUk1P?= =?utf-8?B?RmNsVGI1cVVFK1I4UGhtdFlpbDd2aXNibGFmRldYSjRYMVlQOFdkRHpqbXVs?= =?utf-8?B?S0xIWXV0WmNUdW5WUHlzTjdPUFNHbmhwZWNsbWhXbGpmdlZHQUpaY0hmSWg4?= =?utf-8?B?S2s2aXBnRUdOWE1rZU12eERTd3graGZjdFpOQ21PSTVCc09USGlTYWQ2Qmlt?= =?utf-8?Q?/PmS7+5Ps88wI=3D?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5597 Original-Authentication-Results: suse.de; dkim=none (message not signed) header.d=none;suse.de; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 2cd2d85b-6899-4ea6-8622-08d8b61b0df0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 060owxAjawb6gNE+LF3yADj9aYWQ+Q8oX+3wLeNcNSuzbYMIPF8CqpqYXICMTCCmJ+gGKDPXl5ic2QVUwMw09/zu5ETE/7ByRcvi4wpNv+B98SscCQwAgUkcPdAvWZJIZx9rryDtPmvtUzNiObulKzYsfVBZMxv6xe+sDgxaoBmo1sAzkIq9+ly32cgknk1lT8fYAmHerX/Q4Q1WQTXQZPbQxu3ZZv4uHvH7tKLS0/icMwNdvpVzLT1Ktf4ynKsj+qjqPAcJcTfl7ySaCXMCvebCYmGVwrjnsH/l6wOxc7aGkg7qokVIuNSgBnu+3xOxGGc+2sH+9zDQ0wJtrb+BCKVc+gJKCoFchUbYbIiZAKfX6zA2gyJSGwj9GBBq1UJC+cw9Ji1c5x4Cu1Qn76XlxA/nfQmjlS8VDxB2HC+kZpGIy9cn8Hu3S73gksVaOW0lyLK7htoUxjxo6KP+Ak2kus7IEGSQdAcWRRSvLn8AjrRPzDHBCofUSd3ykSfaZNIc 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:(4636009)(136003)(346002)(39860400002)(396003)(376002)(46966006)(86362001)(4326008)(52536014)(186003)(34020700004)(70206006)(6862004)(82310400003)(30864003)(336012)(356005)(478600001)(53546011)(9686003)(55016002)(8936002)(82740400003)(33656002)(70586007)(83380400001)(8676002)(5660300002)(66574015)(47076005)(7696005)(26005)(2906002)(54906003)(81166007)(6506007)(316002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2021 10:24:26.1074 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4c737386-e77e-4064-251b-08d8b61b1273 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: VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB2953 X-Spam-Status: No, score=-14.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jan 2021 10:24:32 -0000 SGkgUmljaGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmljaGFy ZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPg0KPiBTZW50OiBGcmlkYXksIEphbnVhcnkgOCwg MjAyMSA5OjQ1IEFNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0u Y29tPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBhcm0uY29tPjsgb29r QHVjdy5jeg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDYvOCB2OV1taWRkbGUtZW5kIHNscDogc3Vw cG9ydCBjb21wbGV4IEZNQSBhbmQNCj4gY29tcGxleCBGTUEgY29uanVnYXRlDQo+IA0KPiBPbiBN b24sIDI4IERlYyAyMDIwLCBUYW1hciBDaHJpc3RpbmEgd3JvdGU6DQo+IA0KPiA+IEhpIEFsbCwN Cj4gPg0KPiA+IFRoaXMgYWRkcyBzdXBwb3J0IGZvciBGTUEgYW5kIEZNQSBjb25qdWdhdGVkIHRv IHRoZSBzbHAgcGF0dGVybiBtYXRjaGVyLg0KPiA+DQo+ID4gQm9vdHN0cmFwcGVkIFJlZ3Rlc3Rl ZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251LCB4ODZfNjQtcGMtbGludXgtZ251DQo+ID4gYW5k IG5vIGlzc3Vlcy4NCj4gPg0KPiA+IE9rIGZvciBtYXN0ZXI/DQo+ID4NCj4gPiBUaGFua3MsDQo+ ID4gVGFtYXINCj4gPg0KPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4NCj4gPiAJKiBpbnRlcm5hbC1m bi5kZWYgKENPTVBMRVhfRk1BLCBDT01QTEVYX0ZNQV9DT05KKTogTmV3Lg0KPiA+IAkqIG9wdGFi cy5kZWYgKGNtbGFfb3B0YWIsIGNtbGFfY29ual9vcHRhYik6IE5ldy4NCj4gPiAJKiBkb2MvbWQu dGV4aTogRG9jdW1lbnQgdGhlbS4NCj4gPiAJKiB0cmVlLXZlY3Qtc2xwLXBhdHRlcm5zLmMgKHZl Y3RfbWF0Y2hfY2FsbF9wLA0KPiA+IAljbGFzcyBjb21wbGV4X2ZtYV9wYXR0ZXJuLCB2ZWN0X3Ns cF9yZXNldF9wYXR0ZXJuLA0KPiA+IAljb21wbGV4X2ZtYV9wYXR0ZXJuOjptYXRjaGVzLCBjb21w bGV4X2ZtYV9wYXR0ZXJuOjpyZWNvZ25pemUsDQo+ID4gCWNvbXBsZXhfZm1hX3BhdHRlcm46OmJ1 aWxkKTogTmV3Lg0KPiA+DQo+ID4gLS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tDQo+ID4gZGlm ZiAtLWdpdCBhL2djYy9kb2MvbWQudGV4aSBiL2djYy9kb2MvbWQudGV4aSBpbmRleA0KPiA+DQo+ IGI4Y2M5MGUxYTc1ZTQwMmFiYmY4YThjZjJlZmVmYzFhMzMzZjhiM2EuLjZkNWE5OGM0OTQ2ZDNm ZjRjMmI4YWJlYTVjMg0KPiA5DQo+ID4gY2FhNjg2M2ZkM2Y3IDEwMDY0NA0KPiA+IC0tLSBhL2dj Yy9kb2MvbWQudGV4aQ0KPiA+ICsrKyBiL2djYy9kb2MvbWQudGV4aQ0KPiA+IEBAIC02MjAyLDYg KzYyMDIsNTEgQEAgVGhlIG9wZXJhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdmVjdG9yDQo+ IG1vZGVzIEB2YXJ7bX0uDQo+ID4NCj4gPiAgVGhpcyBwYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIHRv IEBjb2Rle0ZBSUx9Lg0KPiA+DQo+ID4gK0BjaW5kZXggQGNvZGV7Y21sYUB2YXJ7bX00fSBpbnN0 cnVjdGlvbiBwYXR0ZXJuIEBpdGVtDQo+ID4gK0BzYW1we2NtbGFAdmFye219NH0gUGVyZm9ybSBh IHZlY3RvciBtdWx0aXBseSBhbmQgYWNjdW11bGF0ZSB0aGF0IGlzDQo+ID4gK3NlbWFudGljYWxs eSB0aGUgc2FtZSBhcyBhIG11bHRpcGx5IGFuZCBhY2N1bXVsYXRlIG9mIGNvbXBsZXgNCj4gPiAr bnVtYmVycy4NCj4gPiArDQo+ID4gK0BzbWFsbGV4YW1wbGUNCj4gPiArICBjb21wbGV4IFRZUEUg Y1tOXTsNCj4gPiArICBjb21wbGV4IFRZUEUgYVtOXTsNCj4gPiArICBjb21wbGV4IFRZUEUgYltO XTsNCj4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMSkNCj4gPiArICAgIEB7DQo+ ID4gKyAgICAgIGNbaV0gKz0gYVtpXSAqIGJbaV07DQo+ID4gKyAgICBAfQ0KPiA+ICtAZW5kIHNt YWxsZXhhbXBsZQ0KPiA+ICsNCj4gPiArSW4gR0NDIGxhbmUgb3JkZXJpbmcgdGhlIHJlYWwgcGFy dCBvZiB0aGUgbnVtYmVyIG11c3QgYmUgaW4gdGhlIGV2ZW4NCj4gPiArbGFuZXMgd2l0aCB0aGUg aW1hZ2luYXJ5IHBhcnQgaW4gdGhlIG9kZCBsYW5lcy4NCj4gPiArDQo+ID4gK1RoZSBvcGVyYXRp b24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHZlY3RvciBtb2RlcyBAdmFye219Lg0KPiA+ICsNCj4g PiArVGhpcyBwYXR0ZXJuIGlzIG5vdCBhbGxvd2VkIHRvIEBjb2Rle0ZBSUx9Lg0KPiA+ICsNCj4g PiArQGNpbmRleCBAY29kZXtjbWxhX2NvbmpAdmFye219NH0gaW5zdHJ1Y3Rpb24gcGF0dGVybiBA aXRlbQ0KPiA+ICtAc2FtcHtjbWxhX2NvbmpAdmFye219NH0gUGVyZm9ybSBhIHZlY3RvciBtdWx0 aXBseSBieSBjb25qdWdhdGUgYW5kDQo+ID4gK2FjY3VtdWxhdGUgdGhhdCBpcyBzZW1hbnRpY2Fs bHkgdGhlIHNhbWUgYXMgYSBtdWx0aXBseSBhbmQgYWNjdW11bGF0ZQ0KPiA+ICtvZiBjb21wbGV4 IG51bWJlcnMgd2hlcmUgdGhlIHNlY29uZCBtdWx0aXBseSBhcmd1bWVudHMgaXMgY29uanVnYXRl ZC4NCj4gPiArDQo+ID4gK0BzbWFsbGV4YW1wbGUNCj4gPiArICBjb21wbGV4IFRZUEUgY1tOXTsN Cj4gPiArICBjb21wbGV4IFRZUEUgYVtOXTsNCj4gPiArICBjb21wbGV4IFRZUEUgYltOXTsNCj4g PiArICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMSkNCj4gPiArICAgIEB7DQo+ID4gKyAg ICAgIGNbaV0gKz0gYVtpXSAqIGNvbmogKGJbaV0pOw0KPiA+ICsgICAgQH0NCj4gPiArQGVuZCBz bWFsbGV4YW1wbGUNCj4gPiArDQo+ID4gK0luIEdDQyBsYW5lIG9yZGVyaW5nIHRoZSByZWFsIHBh cnQgb2YgdGhlIG51bWJlciBtdXN0IGJlIGluIHRoZSBldmVuDQo+ID4gK2xhbmVzIHdpdGggdGhl IGltYWdpbmFyeSBwYXJ0IGluIHRoZSBvZGQgbGFuZXMuDQo+ID4gKw0KPiA+ICtUaGUgb3BlcmF0 aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB2ZWN0b3IgbW9kZXMgQHZhcnttfS4NCj4gPiArDQo+ ID4gK1RoaXMgcGF0dGVybiBpcyBub3QgYWxsb3dlZCB0byBAY29kZXtGQUlMfS4NCj4gPiArDQo+ ID4gIEBjaW5kZXggQGNvZGV7Y211bEB2YXJ7bX00fSBpbnN0cnVjdGlvbiBwYXR0ZXJuICBAaXRl bQ0KPiA+IEBzYW1we2NtdWxAdmFye219NH0gIFBlcmZvcm0gYSB2ZWN0b3IgbXVsdGlwbHkgdGhh dCBpcyBzZW1hbnRpY2FsbHkNCj4gPiB0aGUgc2FtZSBhcyBtdWx0aXBseSBvZiBkaWZmIC0tZ2l0 IGEvZ2NjL2ludGVybmFsLWZuLmRlZg0KPiA+IGIvZ2NjL2ludGVybmFsLWZuLmRlZiBpbmRleA0K PiA+DQo+IDVhMGJiZTNmZTVkZWU1OTFkNTQxMzBlNjBmNjk5NmIyODE2NGFlMzguLjMwNTQ1MGUw MjZkNGI5NGFiNjJjZWI5Yw0KPiBhNzE5DQo+ID4gZWM1NTcwZmY0M2ViIDEwMDY0NA0KPiA+IC0t LSBhL2djYy9pbnRlcm5hbC1mbi5kZWYNCj4gPiArKysgYi9nY2MvaW50ZXJuYWwtZm4uZGVmDQo+ ID4gQEAgLTI4OCw2ICsyODgsOCBAQCBERUZfSU5URVJOQUxfRkxUX0ZOIChMREVYUCwgRUNGX0NP TlNULCBsZGV4cCwNCj4gPiBiaW5hcnkpDQo+ID4NCj4gPiAgLyogVGVybmFyeSBtYXRoIGZ1bmN0 aW9ucy4gICovDQo+ID4gIERFRl9JTlRFUk5BTF9GTFRfRkxPQVROX0ZOIChGTUEsIEVDRl9DT05T VCwgZm1hLCB0ZXJuYXJ5KQ0KPiA+ICtERUZfSU5URVJOQUxfT1BUQUJfRk4gKENPTVBMRVhfRk1B LCBFQ0ZfQ09OU1QsIGNtbGEsIHRlcm5hcnkpDQo+ID4gK0RFRl9JTlRFUk5BTF9PUFRBQl9GTiAo Q09NUExFWF9GTUFfQ09OSiwgRUNGX0NPTlNULA0KPiBjbWxhX2NvbmosDQo+ID4gK3Rlcm5hcnkp DQo+ID4NCj4gPiAgLyogVW5hcnkgaW50ZWdlciBvcHMuICAqLw0KPiA+ICBERUZfSU5URVJOQUxf SU5UX0ZOIChDTFJTQiwgRUNGX0NPTlNUIHwgRUNGX05PVEhST1csIGNscnNiLA0KPiB1bmFyeSkN Cj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL29wdGFicy5kZWYgYi9nY2Mvb3B0YWJzLmRlZiBpbmRleA0K PiA+DQo+IGU4MjM5NmJhZTExMTdjNmRlOTEzMDQ3NjFhNTYwYjdmYmNiNjljZTEuLjhlMjc1OGQ2 ODVlZDg1ZTAyZGYxMGRhYw0KPiA1NzFlDQo+ID4gYjQwZDQ1YTI5NGVkIDEwMDY0NA0KPiA+IC0t LSBhL2djYy9vcHRhYnMuZGVmDQo+ID4gKysrIGIvZ2NjL29wdGFicy5kZWYNCj4gPiBAQCAtMjk0 LDYgKzI5NCw4IEBAIE9QVEFCX0QgKGNhZGQ5MF9vcHRhYiwgImNhZGQ5MCRhMyIpICBPUFRBQl9E DQo+ID4gKGNhZGQyNzBfb3B0YWIsICJjYWRkMjcwJGEzIikgIE9QVEFCX0QgKGNtdWxfb3B0YWIs ICJjbXVsJGEzIikNCj4gPiBPUFRBQl9EIChjbXVsX2Nvbmpfb3B0YWIsICJjbXVsX2NvbmokYTMi KQ0KPiA+ICtPUFRBQl9EIChjbWxhX29wdGFiLCAiY21sYSRhNCIpDQo+ID4gK09QVEFCX0QgKGNt bGFfY29ual9vcHRhYiwgImNtbGFfY29uaiRhNCIpDQo+ID4gIE9QVEFCX0QgKGNvc19vcHRhYiwg ImNvcyRhMiIpDQo+ID4gIE9QVEFCX0QgKGNvc2hfb3B0YWIsICJjb3NoJGEyIikNCj4gPiAgT1BU QUJfRCAoZXhwMTBfb3B0YWIsICJleHAxMCRhMiIpDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVl LXZlY3Qtc2xwLXBhdHRlcm5zLmMNCj4gPiBiL2djYy90cmVlLXZlY3Qtc2xwLXBhdHRlcm5zLmMg aW5kZXgNCj4gPg0KPiA4MjcyMWFjYmFiOGNmODFjNGQ2Zjk5NTRjOThmYjkxM2E3YmI2MjgyLi4z NjI1YTgwYzA4ZTNkNzBmZDM2MmZjNTJlMQ0KPiA3ZQ0KPiA+IDY1YjNiMmM3ZGE4MyAxMDA2NDQN Cj4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LXNscC1wYXR0ZXJucy5jDQo+ID4gKysrIGIvZ2NjL3Ry ZWUtdmVjdC1zbHAtcGF0dGVybnMuYw0KPiA+IEBAIC0zMjUsNiArMzI1LDI0IEBAIHZlY3RfbWF0 Y2hfZXhwcmVzc2lvbl9wIChzbHBfdHJlZSBub2RlLA0KPiB0cmVlX2NvZGUgY29kZSkNCj4gPiAg ICByZXR1cm4gdHJ1ZTsNCj4gPiAgfQ0KPiA+DQo+ID4gKy8qIENoZWNrcyB0byBzZWUgaWYgdGhl IGV4cHJlc3Npb24gcmVwcmVzZW50ZWQgYnkgTk9ERSBpcyBhIGNhbGwgdG8gdGhlDQo+IGludGVy bmFsDQo+ID4gKyAgIGZ1bmN0aW9uIEZOLiAgKi8NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUg Ym9vbA0KPiA+ICt2ZWN0X21hdGNoX2NhbGxfcCAoc2xwX3RyZWUgbm9kZSwgaW50ZXJuYWxfZm4g Zm4pIHsNCj4gPiArICBpZiAoIW5vZGUNCj4gPiArICAgICAgfHwgIVNMUF9UUkVFX1JFUFJFU0VO VEFUSVZFIChub2RlKSkNCj4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgZ2lt cGxlKiBleHByID0gU1RNVF9WSU5GT19TVE1UIChTTFBfVFJFRV9SRVBSRVNFTlRBVElWRQ0KPiAo bm9kZSkpOw0KPiA+ICsgaWYgKCFleHByDQo+ID4gKyAgICAgIHx8ICFnaW1wbGVfY2FsbF9pbnRl cm5hbF9wIChleHByLCBmbikpDQo+ID4gKyAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsg ICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgLyogQ2hlY2sgaWYgdGhlIGdpdmVu IGxhbmUgcGVybXV0ZSBpbiBQRVJNVVRFUyBtYXRjaGVzIGFuIGFsdGVybmF0aW5nDQo+IHNlcXVl bmNlDQo+ID4gICAgIG9mIHtldmVuIG9kZCBldmVuIG9kZCAuLi59LiAgVGhpcyB0byBhY2NvdW50 IGZvciB1bnJvbGxlZCBsb29wcy4gIEZ1cnRoZXINCj4gPiAgICAgbW9kZSB0aGVyZSByZXN1bHRp bmcgcGVybXV0ZSBtdXN0IGJlIGxpbmVhci4gICAqLw0KPiA+IEBAIC0xMDgxLDYgKzEwOTksMTYx IEBAIGNvbXBsZXhfbXVsX3BhdHRlcm46OmJ1aWxkICh2ZWNfaW5mbyAqdmluZm8pDQo+ID4gICAg Y29tcGxleF9wYXR0ZXJuOjpidWlsZCAodmluZm8pOw0KPiA+ICB9DQo+ID4NCj4gPg0KPiArLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K PiAqKioqKioqKioqKg0KPiA+ICsqKioqKioqKioqKg0KPiA+ICsgKiBjb21wbGV4X2ZtYV9wYXR0 ZXJuIGNsYXNzDQo+ID4gKw0KPiA+DQo+ICsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqDQo+ID4gKyoqKioqKioq Ki8NCj4gPiArDQo+ID4gK2NsYXNzIGNvbXBsZXhfZm1hX3BhdHRlcm4gOiBwdWJsaWMgY29tcGxl eF9wYXR0ZXJuIHsNCj4gPiArICBwcm90ZWN0ZWQ6DQo+ID4gKyAgICBjb21wbGV4X2ZtYV9wYXR0 ZXJuIChzbHBfdHJlZSAqbm9kZSwgdmVjPHNscF90cmVlPiAqbV9vcHMsDQo+IGludGVybmFsX2Zu IGlmbikNCj4gPiArICAgICAgOiBjb21wbGV4X3BhdHRlcm4gKG5vZGUsIG1fb3BzLCBpZm4pDQo+ ID4gKyAgICB7DQo+ID4gKyAgICAgIHRoaXMtPm1fbnVtX2FyZ3MgPSAzOw0KPiA+ICsgICAgfQ0K PiA+ICsNCj4gPiArICBwdWJsaWM6DQo+ID4gKyAgICB2b2lkIGJ1aWxkICh2ZWNfaW5mbyAqKTsN Cj4gPiArICAgIHN0YXRpYyBpbnRlcm5hbF9mbg0KPiA+ICsgICAgbWF0Y2hlcyAoY29tcGxleF9v cGVyYXRpb25fdCBvcCwgc2xwX3RyZWVfdG9fbG9hZF9wZXJtX21hcF90ICosDQo+IHNscF90cmVl ICosDQo+ID4gKwkgICAgIHZlYzxzbHBfdHJlZT4gKik7DQo+ID4gKw0KPiA+ICsgICAgc3RhdGlj IHZlY3RfcGF0dGVybioNCj4gPiArICAgIHJlY29nbml6ZSAoc2xwX3RyZWVfdG9fbG9hZF9wZXJt X21hcF90ICosIHNscF90cmVlICopOw0KPiA+ICsNCj4gPiArICAgIHN0YXRpYyB2ZWN0X3BhdHRl cm4qDQo+ID4gKyAgICBta0luc3RhbmNlIChzbHBfdHJlZSAqbm9kZSwgdmVjPHNscF90cmVlPiAq bV9vcHMsIGludGVybmFsX2ZuIGlmbikNCj4gPiArICAgIHsNCj4gPiArICAgICAgcmV0dXJuIG5l dyBjb21wbGV4X2ZtYV9wYXR0ZXJuIChub2RlLCBtX29wcywgaWZuKTsNCj4gPiArICAgIH0NCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qIEhlbHBlciBmdW5jdGlvbiB0byAicmVzZXQiIGEgcHJldmlv dXNseSBtYXRjaGVkIG5vZGUgYW5kIHVuZG8gdGhlDQo+IGNoYW5nZXMNCj4gPiArICAgbWFkZSBl bm91Z2ggc28gdGhhdCB0aGUgbm9kZSBpcyB0cmVhdGVkIGFzIGFuIGlycmVsZXZhbnQgbm9kZS4g ICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiArdmVjdF9zbHBfcmVzZXRf cGF0dGVybiAoc2xwX3RyZWUgbm9kZSkgew0KPiA+ICsgIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZv ID0gdmVjdF9vcmlnX3N0bXQgKFNMUF9UUkVFX1JFUFJFU0VOVEFUSVZFDQo+ID4gKyhub2RlKSk7 DQo+ID4gKyAgU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKHN0bXRfaW5mbykgPSBmYWxzZTsNCj4g PiArICBTVE1UX1NMUF9UWVBFIChzdG10X2luZm8pID0gcHVyZV9zbHA7DQo+ID4gKyAgU0xQX1RS RUVfUkVQUkVTRU5UQVRJVkUgKG5vZGUpID0gc3RtdF9pbmZvOyB9DQo+ID4gKw0KPiA+ICsvKiBQ YXR0ZXJuIG1hdGNoZXIgZm9yIHRyeWluZyB0byBtYXRjaCBjb21wbGV4IG11bHRpcGx5IGFuZCBh Y2N1bXVsYXRlDQo+ID4gKyAgIGFuZCBtdWx0aXBseSBhbmQgc3VidHJhY3QgcGF0dGVybnMgaW4g U0xQIHRyZWUuDQo+ID4gKyAgIElmIHRoZSBvcGVyYXRpb24gbWF0Y2hlcyB0aGVuIElGTiBpcyBz ZXQgdG8gdGhlIG9wZXJhdGlvbiBpdCBtYXRjaGVkIGFuZA0KPiA+ICsgICB0aGUgYXJndW1lbnRz IHRvIHRoZSB0d28gcmVwbGFjZW1lbnQgc3RhdGVtZW50cyBhcmUgcHV0IGluIG1fb3BzLg0KPiA+ ICsNCj4gPiArICAgSWYgbm8gbWF0Y2ggaXMgZm91bmQgdGhlbiBJRk4gaXMgc2V0IHRvIElGTl9M QVNUIGFuZCBtX29wcyBpcyB1bmNoYW5nZWQuDQo+ID4gKw0KPiA+ICsgICBUaGlzIGZ1bmN0aW9u IG1hdGNoZXMgdGhlIHBhdHRlcm5zIHNoYXBlZCBhczoNCj4gPiArDQo+ID4gKyAgIGRvdWJsZSBh eCA9IChiW2krMV0gKiBhW2ldKSArIChiW2ldICogYVtpXSk7DQo+ID4gKyAgIGRvdWJsZSBieCA9 IChhW2krMV0gKiBiW2ldKSAtIChhW2krMV0gKiBiW2krMV0pOw0KPiA+ICsNCj4gPiArICAgY1tp XSA9IGNbaV0gLSBheDsNCj4gPiArICAgY1tpKzFdID0gY1tpKzFdICsgYng7DQo+ID4gKw0KPiA+ ICsgICBJZiBhIG1hdGNoIG9jY3VycmVkIHRoZW4gVFJVRSBpcyByZXR1cm5lZCwgZWxzZSBGQUxT RS4gIFRoZSBtYXRjaCBpcw0KPiA+ICsgICBwZXJmb3JtZWQgYWZ0ZXIgQ09NUExFWF9NVUwgd2hp Y2ggd291bGQgaGF2ZSBkb25lIHRoZSBtYWpvcml0eSBvZg0KPiB0aGUgd29yay4NCj4gPiArICAg VGhpcyBmdW5jdGlvbiBtZXJlbHkgbWF0Y2hlcyBhbiBBREQgd2l0aCBhIENPTVBMRVhfTVVMIElG Ti4gIFRoZQ0KPiBpbml0aWFsDQo+ID4gKyAgIG1hdGNoIGlzIGV4cGVjdGVkIHRvIGJlIGluIE9Q MSBhbmQgdGhlIGluaXRpYWwgbWF0Y2ggb3BlcmFuZHMgaW4NCj4gPiArIGFyZ3MwLiAgKi8NCj4g PiArDQo+ID4gK2ludGVybmFsX2ZuDQo+ID4gK2NvbXBsZXhfZm1hX3BhdHRlcm46Om1hdGNoZXMg KGNvbXBsZXhfb3BlcmF0aW9uX3Qgb3AsDQo+ID4gKwkJCSAgICAgIHNscF90cmVlX3RvX2xvYWRf cGVybV9tYXBfdCAqIC8qIHBlcm1fY2FjaGUNCj4gKi8sDQo+ID4gKwkJCSAgICAgIHNscF90cmVl ICpyZWZfbm9kZSwgdmVjPHNscF90cmVlPiAqb3BzKSB7DQo+ID4gKyAgaW50ZXJuYWxfZm4gaWZu ID0gSUZOX0xBU1Q7DQo+ID4gKw0KPiA+ICsgIC8qIEZpbmQgdGhlIHR3byBjb21wb25lbnRzLiAg V2UgbWF0Y2ggQ29tcGxleCBNVUwgZmlyc3Qgd2hpY2gNCj4gcmVkdWNlcyB0aGUNCj4gPiArICAg ICBhbW91bnQgb2Ygd29yayB0aGlzIHBhdHRlcm4gaGFzIHRvIGRvLiAgQWZ0ZXIgdGhhdCB3ZSBq dXN0IG1hdGNoIHRoZQ0KPiA+ICsgICAgIGhlYWQgbm9kZSBhbmQgd2UncmUgZG9uZS46DQo+ID4g Kw0KPiA+ICsgICAgICogRk1BOiArICsuDQo+ID4gKw0KPiA+ICsgICAgIFdlIG5lZWQgdG8gaWdu b3JlIHRoZSB0d29fb3BlcmFuZHMgbm9kZXMgdGhhdCBtYXkgYWxzbyBtYXRjaC4NCj4gPiArICAg ICBGb3IgdGhhdCB3ZSBjYW4gY2hlY2sgaWYgdGhleSBoYXZlIGFueSBzY2FsYXIgc3RhdGVtZW50 cyBhbmQgYWxzbw0KPiA+ICsgICAgIGNoZWNrIHRoYXQgaXQncyBub3QgYSBwZXJtdXRlIG5vZGUg YXMgd2UncmUgbG9va2luZyBmb3IgYSBub3JtYWwNCj4gPiArICAgICBQTFVTX0VYUFIgb3BlcmF0 aW9uLiAgKi8NCj4gPiArICBpZiAob3AgIT0gQ01QTFhfTk9ORSkNCj4gPiArICAgIHJldHVybiBJ Rk5fTEFTVDsNCj4gPiArDQo+ID4gKyAgLyogRmluZCB0aGUgdHdvIGNvbXBvbmVudHMuICBXZSBt YXRjaCBDb21wbGV4IE1VTCBmaXJzdCB3aGljaA0KPiByZWR1Y2VzIHRoZQ0KPiA+ICsgICAgIGFt b3VudCBvZiB3b3JrIHRoaXMgcGF0dGVybiBoYXMgdG8gZG8uICBBZnRlciB0aGF0IHdlIGp1c3Qg bWF0Y2ggdGhlDQo+ID4gKyAgICAgaGVhZCBub2RlIGFuZCB3ZSdyZSBkb25lLjoNCj4gPiArDQo+ ID4gKyAgICogRk1BOiArICsgb24gYSBub24tdHdvX29wZXJhbmRzIG5vZGUuICAqLw0KPiA+ICsg IHNscF90cmVlIHZub2RlID0gKnJlZl9ub2RlOw0KPiA+ICsgIGlmIChTTFBfVFJFRV9MQU5FX1BF Uk1VVEFUSU9OICh2bm9kZSkuZXhpc3RzICgpDQo+ID4gKyAgICAgIC8qIE5lZWQgdG8gZXhjbHVk ZSB0aGUgcGx1cyB0d28tb3BlcmFuZHMgbm9kZS4gIFRoZXNlIGFyZSBub3QNCj4gbWFya2VkDQo+ ID4gKwkgc28gd2UgaGF2ZSB0byBpbmZlciBpdCBiYXNlZCBvbiBjb25kaXRpb25zLiAgKi8NCj4g PiArICAgICAgfHwgIVNMUF9UUkVFX1NDQUxBUl9TVE1UUyAodm5vZGUpLmV4aXN0cyAoKQ0KPiAN Cj4gYXMgc2FpZCBlYXJsaWVyIHdlIHNob3VsZG4ndCB0ZXN0IHRoaXMuICBUaGUgZXhpc3Rpbmcg bGFuZSBwZXJtdXRlIHNob3VsZA0KPiBhbHJlYWR5IGNvdmVyIHRoaXMgLSB3aGVyZSB0aGUgdGVz dCB3b3VsZCBiZXR0ZXIgYmUNCj4gDQo+ICBTTFBfVFJFRV9DT0RFICh2bm9kZSkgPT0gVkVDX1BF Uk1fRVhQUg0KPiANCj4gPiArICAgICAgfHwgIXZlY3RfbWF0Y2hfZXhwcmVzc2lvbl9wICh2bm9k ZSwgUExVU19FWFBSKSkNCj4gDQo+IEJ1dCB0aGVuIGl0IHNob3VsZG4ndCBtYXRjaCB0aGlzICh0 aGUgdmVjdF9tYXRjaF9leHByZXNzaW9uX3Agc2hvdWxkIG9ubHkNCj4gZXZlciBtYXRjaCBTTFBf VFJFRV9DT0RFICh2bm9kZSkgIT0gVkVDX1BFUk1fRVhQUikgYW55d2F5Lg0KPiANCj4gPiArICAg IHJldHVybiBJRk5fTEFTVDsNCj4gPiArDQo+ID4gKyAgc2xwX3RyZWUgbm9kZSA9IFNMUF9UUkVF X0NISUxEUkVOICh2bm9kZSlbMV07DQo+ID4gKw0KPiA+ICsgIGlmICh2ZWN0X21hdGNoX2NhbGxf cCAobm9kZSwgSUZOX0NPTVBMRVhfTVVMKSkNCj4gPiArICAgIGlmbiA9IElGTl9DT01QTEVYX0ZN QTsNCj4gPiArICBlbHNlIGlmICh2ZWN0X21hdGNoX2NhbGxfcCAobm9kZSwgSUZOX0NPTVBMRVhf TVVMX0NPTkopKQ0KPiA+ICsgICAgaWZuID0gSUZOX0NPTVBMRVhfRk1BX0NPTko7DQo+ID4gKyAg ZWxzZQ0KPiA+ICsgICAgcmV0dXJuIElGTl9MQVNUOw0KPiA+ICsNCj4gPiArICBpZiAoIXZlY3Rf cGF0dGVybl92YWxpZGF0ZV9vcHRhYiAoaWZuLCB2bm9kZSkpDQo+ID4gKyAgICByZXR1cm4gSUZO X0xBU1Q7DQo+ID4gKw0KPiA+ICsgIHZlY3Rfc2xwX3Jlc2V0X3BhdHRlcm4gKG5vZGUpOw0KPiAN Cj4gSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgLi4uIGl0IGRlc2VydmVzIGEgY29tbWVudCBhdCBs ZWFzdC4NCj4gSGF2aW5nIG5vIHRlc3RjYXNlcyB3aXRoIHRoaXMgcGF0Y2ggbWFrZXMgaXQgaW1w b3NzaWJsZSBmb3IgbWUgdG8gZGlnIGluDQo+IG15c2VsZiA6Lw0KDQpJIGNsZWFuZWQgdXAgdGhl IHRoaW5ncyBwb2ludGVkIG91dCBpbiB0aGUgcmV2aWV3IGFuZCBhZGRlZCB0aGlzIGNvbW1lbnQ6 DQoNCiAgLyogRk1BIG1hdGNoZWQgQUREICsgQ01VTC4gIER1cmluZyB0aGUgbWF0Y2hpbmcgb2Yg Q01VTCB0aGUNCiAgICAgc3RtdCB0aGF0IHN0YXJ0cyB0aGUgcGF0dGVybiBpcyBtYXJrZWQgYXMg YmVpbmcgaW4gYSBwYXR0ZXJuLA0KICAgICBuYW1lbHkgdGhlIENNVUwuICBXaGVuIHJlcGxhY2lu ZyB0aGlzIHdpdGggYSBDRk1BIHdlIGhhdmUgdG8NCiAgICAgdW5tYXJrIHRoaXMgc3RhdGVtZW50 IGFzIGJlaW5nIGluIGEgcGF0dGVybi4gIFRoaXMgaXMgYmVjYXVzZQ0KICAgICB2ZWN0X21hcmtf cGF0dGVybl9zdG10cyB3aWxsIG9ubHkgbWFyayB0aGUgY3VycmVudCBzdG10IGFzIGJlaW5nDQog ICAgIGluIGEgcGF0dGVybi4gIExhdGVyIG9uIHdoZW4gdGhlIHNjYWxhciBzdG10cyBhcmUgZXhh bWluZWQgdGhlDQogICAgIG9sZCBzdGF0ZW1lbnQgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgaXJy ZWxldmFudCB3aWxsIHBvaW50IHRvDQogICAgIENNVUwgdW5sZXNzIHdlIHVuZG8gdGhlIHBhdHRl cm4gcmVsYXRpb25zaGlwIGhlcmUuICAqLw0KICB2ZWN0X3NscF9yZXNldF9wYXR0ZXJuIChub2Rl KTsNCg0KQXMgZm9yIHRlc3RjYXNlcywgdGhleSdyZSBxdWl0ZSBzaW1wbGUsIHRoZSBmaW5hbCBj b21taXQgd2lsbCBjb250YWluIGEgZnVsbCByYW5nZS4NCkkgdXN1YWxseSB0cnkgdG8gc2VuZCB0 aGUgdGVzdGNhc2VzIGEgbG9uZyBidXQgdGhlIG51bWJlciBvZiBJU0EgdGhpcyBzdXBwb3J0cyBh dA0KT25jZSBoYXMgZm9yY2VkIG1lIHRvIHRlc3Qgb3V0c2lkZSBvZiB0aGUgdGVzdHN1aXRlIGZv ciBxdWljayBpdGVyYXRpb24gYW5kIG1vdmluZw0KdGhlbSBpbnRvIHRoZSB0ZXN0c3VpdGUgcHJv cGVyIGlzIHRha2luZyBhIGJpdCBvZiB0aW1lIDovDQoNCkJ1dCB0aGV5J3JlIGFsbCBpbiB0aGUg c2hhcGUgb2YNCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8Y29tcGxleC5oPg0KDQoj ZGVmaW5lIE4gMjAwDQojZGVmaW5lIFJPVA0KI2RlZmluZSBUWVBFIGZsb2F0DQojZGVmaW5lIFRZ UEUyIGZsb2F0DQoNCnZvaWQgZyAoVFlQRTIgY29tcGxleCBhW3Jlc3RyaWN0IE5dLCBUWVBFIGNv bXBsZXggYltyZXN0cmljdCBOXSwgVFlQRSBjb21wbGV4IGNbcmVzdHJpY3QgTl0pDQp7DQogIGZv ciAoaW50IGk9MDsgaSA8IE47IGkrKykNCiAgICB7DQogICAgICBjW2ldICs9ICBhW2ldICogKGJb aV0gUk9UKTsNCiAgICB9DQp9DQoNCnZvaWQgZ19mMSAoVFlQRTIgY29tcGxleCBhW3Jlc3RyaWN0 IE5dLCBUWVBFIGNvbXBsZXggYltyZXN0cmljdCBOXSwgVFlQRSBjb21wbGV4IGNbcmVzdHJpY3Qg Tl0pDQp7DQogIGZvciAoaW50IGk9MDsgaSA8IE47IGkrKykNCiAgICB7DQogICAgICBjW2ldICs9 ICBjb25qZiAoYVtpXSkgKiAoYltpXSBST1QpOw0KICAgIH0NCn0NCg0Kdm9pZCBnX3MxIChUWVBF MiBjb21wbGV4IGFbcmVzdHJpY3QgTl0sIFRZUEUgY29tcGxleCBiW3Jlc3RyaWN0IE5dLCBUWVBF IGNvbXBsZXggY1tyZXN0cmljdCBOXSkNCnsNCiAgZm9yIChpbnQgaT0wOyBpIDwgTjsgaSsrKQ0K ICAgIHsNCiAgICAgIGNbaV0gKz0gIGFbaV0gKiBjb25qZiAoYltpXSBST1QpOw0KICAgIH0NCn0N Cg0Kdm9pZCBjYXhweV9hZGQoZG91YmxlIGNvbXBsZXggKiByZXN0cmljdCB5LCBkb3VibGUgY29t cGxleCAqIHJlc3RyaWN0IHgsIHNpemVfdCBOLCBkb3VibGUgY29tcGxleCBmKSB7DQogIGZvciAo c2l6ZV90IGkgPSAwOyBpIDwgTjsgKytpKQ0KICAgIHlbaV0gKz0geFtpXSogZjsNCn0NCg0KUmVn YXJkcywNClRhbWFyDQoNCj4gDQo+IE90aGVyd2lzZSBsb29rcyBPSy4NCj4gDQo+IFRoYW5rcywN Cj4gUmljaGFyZC4NCj4gDQo+ID4gKyAgb3BzLT50cnVuY2F0ZSAoMCk7DQo+ID4gKyAgb3BzLT5j cmVhdGUgKDMpOw0KPiA+ICsNCj4gPiArICBpZiAoaWZuID09IElGTl9DT01QTEVYX0ZNQSkNCj4g PiArICAgIHsNCj4gPiArICAgICAgb3BzLT5xdWlja19wdXNoIChTTFBfVFJFRV9DSElMRFJFTiAo dm5vZGUpWzBdKTsNCj4gPiArICAgICAgb3BzLT5xdWlja19wdXNoIChTTFBfVFJFRV9DSElMRFJF TiAobm9kZSlbMV0pOw0KPiA+ICsgICAgICBvcHMtPnF1aWNrX3B1c2ggKFNMUF9UUkVFX0NISUxE UkVOIChub2RlKVswXSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgZWxzZQ0KPiA+ICsgICAgew0KPiA+ ICsgICAgICBvcHMtPnF1aWNrX3B1c2ggKFNMUF9UUkVFX0NISUxEUkVOICh2bm9kZSlbMF0pOw0K PiA+ICsgICAgICBvcHMtPnF1aWNrX3B1c2ggKFNMUF9UUkVFX0NISUxEUkVOIChub2RlKVswXSk7 DQo+ID4gKyAgICAgIG9wcy0+cXVpY2tfcHVzaCAoU0xQX1RSRUVfQ0hJTERSRU4gKG5vZGUpWzFd KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIGlmbjsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogQXR0ZW1wdCB0byByZWNvZ25pemUgYSBjb21wbGV4IG11bCBwYXR0ZXJuLiAgKi8N Cj4gPiArDQo+ID4gK3ZlY3RfcGF0dGVybioNCj4gPiArY29tcGxleF9mbWFfcGF0dGVybjo6cmVj b2duaXplIChzbHBfdHJlZV90b19sb2FkX3Blcm1fbWFwX3QNCj4gKnBlcm1fY2FjaGUsDQo+ID4g KwkJCQlzbHBfdHJlZSAqbm9kZSkNCj4gPiArew0KPiA+ICsgIGF1dG9fdmVjPHNscF90cmVlPiBv cHM7DQo+ID4gKyAgY29tcGxleF9vcGVyYXRpb25fdCBvcA0KPiA+ICsgICAgPSB2ZWN0X2RldGVj dF9wYWlyX29wICgqbm9kZSwgdHJ1ZSwgJm9wcyk7DQo+ID4gKyAgaW50ZXJuYWxfZm4gaWZuDQo+ ID4gKyAgICA9IGNvbXBsZXhfZm1hX3BhdHRlcm46Om1hdGNoZXMgKG9wLCBwZXJtX2NhY2hlLCBu b2RlLCAmb3BzKTsNCj4gPiArICBpZiAoaWZuID09IElGTl9MQVNUKQ0KPiA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBuZXcgY29tcGxleF9mbWFfcGF0dGVybiAobm9k ZSwgJm9wcywgaWZuKTsgfQ0KPiA+ICsNCj4gPiArLyogUGVyZm9ybSBhIHJlcGxhY2VtZW50IG9m IHRoZSBkZXRlY3RlZCBjb21wbGV4IG11bCBwYXR0ZXJuIHdpdGggdGhlDQo+IG5ldw0KPiA+ICsg ICBpbnN0cnVjdGlvbiBzZXF1ZW5jZXMuICAqLw0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtjb21w bGV4X2ZtYV9wYXR0ZXJuOjpidWlsZCAodmVjX2luZm8gKnZpbmZvKSB7DQo+ID4gKyAgU0xQX1RS RUVfQ0hJTERSRU4gKCp0aGlzLT5tX25vZGUpLnRydW5jYXRlICgwKTsNCj4gPiArICBTTFBfVFJF RV9DSElMRFJFTiAoKnRoaXMtPm1fbm9kZSkuc2FmZV9zcGxpY2UgKHRoaXMtPm1fb3BzKTsNCj4g PiArDQo+ID4gKyAgY29tcGxleF9wYXR0ZXJuOjpidWlsZCAodmluZm8pOw0KPiA+ICt9DQo+ID4g Kw0KPiA+DQo+IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioqKioqKg0KPiA+ICAgKiBQYXR0ZXJuIG1h dGNoaW5nIGRlZmluaXRpb25zDQo+ID4NCj4gPg0KPiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKg0KPiA+ICoq KioqKioqLw0KPiA+DQo+ID4NCj4gPg0KPiANCj4gLS0NCj4gUmljaGFyZCBCaWVuZXIgPHJndWVu dGhlckBzdXNlLmRlPg0KPiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgsIE1h eGZlbGRzdHJhc3NlIDUsIDkwNDA5DQo+IE51ZXJuYmVyZywgR2VybWFueTsgR0Y6IEZlbGl4IElt ZW5kw7ZyZmZlcjsgSFJCIDM2ODA5IChBRyBOdWVybmJlcmcpDQo=