From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2073.outbound.protection.outlook.com [40.107.104.73]) by sourceware.org (Postfix) with ESMTPS id 9FB4E3858C27 for ; Mon, 20 Jun 2022 09:01:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9FB4E3858C27 ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=fHii1DWGWDHb6ThKPQ3cFmN4pVSEpNLnrxUZGi2WQneA/ZPfTNCZJcs738rQqZ448SOoriQHUs6d+O33SW5eqqvEqlJzahaV7l12kj7Q38t8tsKalWPh2wfZ4lr12KU4mjFYbbGv2988nboAjwdMHhViWseZCjtx1qpDxi9usvLaBGDVy6Sm0dr8Ho+CAux5w3ercoL1PePv6uXWEDWQ4vL8UAW/WEeI75mXDCTqHeSLAY7ccrYoYvkamOx47qEE4vzSnkxbkHzcOGW5uhCYk+oHmZTUN1dPP49VMdoc4eZTMmiagbGpMk5/bQhEI9WHs4eus/GFNlpRG+xeO/wzPQ== ARC-Message-Signature: i=2; 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=8bfo4LSf9EmfXIIl8V/q8vjiHnXKXHtGaDdzrPkLzys=; b=Ve0+480VptOxeLEma6m8fi+y0x7qlwrd+J4BAZF3cdSRZ0T5F6T9U9XYx2NjJDXnvJ1TTpD6LRx3H9FVCRpKQhpDnx2DiUHKQF2441XcmfrgwQxFzCstuLDvS0lmUs6z8ia5Z6f9HPNEUVix5sGpUDdyXc+G8PT2L2RX6L0EzdUsc4nwu6JOYtDK3A7e3T1VcbeJYIrGc8zxYOh3+BwLUbGJ6hiIqCtiqjr0yc5hxLT5NXTLdDAhGAeWy+UmltmInHF7JQWZe2cJHV8K8sQM449qSbQqvI8Ge1NXjLmfAR12SskvIZTWoJi79EXS6oVZqbMtEFcC12eip6DBwSsJtA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from AM5PR0202CA0017.eurprd02.prod.outlook.com (2603:10a6:203:69::27) by AS1PR08MB7636.eurprd08.prod.outlook.com (2603:10a6:20b:478::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 09:01:53 +0000 Received: from AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:69:cafe::e) by AM5PR0202CA0017.outlook.office365.com (2603:10a6:203:69::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22 via Frontend Transport; Mon, 20 Jun 2022 09:01:53 +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 AM5EUR03FT042.mail.protection.outlook.com (10.152.17.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.14 via Frontend Transport; Mon, 20 Jun 2022 09:01:52 +0000 Received: ("Tessian outbound 6f53897bcd4e:v120"); Mon, 20 Jun 2022 09:01:52 +0000 X-CR-MTA-TID: 64aa7808 Received: from 91b082de7a95.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C68CE958-CDB8-4C9C-B345-A45818CD486C.1; Mon, 20 Jun 2022 09:01:47 +0000 Received: from EUR03-AM5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 91b082de7a95.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 20 Jun 2022 09:01:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fQxtivQx1m7chJAQTpYDBAoMWLnNYQNimdTuOcLzy+U+eMVXyydI9bxQVo9/yxp8B6lbM7Es1ZhYGdSI1i/NOvjVdQN9LpyWesTDnEZbRAGB23h2f1IdOJGNF4lo/K72agbd7gf4ZWnHDHO6KGd22RU4bcv+1SUQOhsATJOfiJcaEGm/ETrp/E6vEWlJ3ZtlLQFtrvQaIrjhr26X+6DnCGDrHFrS5f4Xf81omrNKsEYKrhlxB7HgbeAfgvoPwkmzAHe1hi+nElL1OqwF8lEzTijrA92LEZYx69+GIYtKkqveq5nwB4BN1fUUmV10h2Sa7RBJuDaTr/kNB2jMKT1dUQ== 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=8bfo4LSf9EmfXIIl8V/q8vjiHnXKXHtGaDdzrPkLzys=; b=TESdR6OsyiKs6exg1M/id4flEMYoi9Dl3DyzUiK5uYFStXKNznQ52bwLqkL84I0p/bzBXTwFRaopt6ckUlW7k6wV1AwJOk1i4rGl9Rs84sp5cdoSPbvfw2o7YlhTHQ0i3e3rSBJTANvQ6b9d7A0VLUhMPs+Sawz9JirGiOjzHERmxqYuLUsv2E9Q620gJ2eVbomA3/tB3buK8vb4n+B8/Uy/RTm4ka2cs8WoI9FihUk1O+KdcOrfi73j4mVHrZdF3TrOvgH05YarEpK94rJpbThXD2Bkd3s52HimLwdZgrHgWIsUMepVIQBKtRMGxmYldr7A6iq5CJ3Iu1ipfiE05w== 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 DB8PR08MB5276.eurprd08.prod.outlook.com (2603:10a6:10:bf::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.18; Mon, 20 Jun 2022 09:01:44 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::54e5:594b:e5fd:a9b4]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::54e5:594b:e5fd:a9b4%8]) with mapi id 15.20.5353.022; Mon, 20 Jun 2022 09:01:43 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jakub@redhat.com" Subject: RE: [PATCH 2/2]middle-end: Support recognition of three-way max/min. Thread-Topic: [PATCH 2/2]middle-end: Support recognition of three-way max/min. Thread-Index: AQHYgXGf5qeydB2BT0ON9B9LcfwJDa1X/qYAgAAFiKA= Date: Mon, 20 Jun 2022 09:01:43 +0000 Message-ID: References: <29n37062-n3s3-71o9-8411-r851o15ss72@fhfr.qr> In-Reply-To: <29n37062-n3s3-71o9-8411-r851o15ss72@fhfr.qr> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: D594783E64296045AD054991038DBAC6.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-MS-Office365-Filtering-Correlation-Id: 15208ed0-e23a-49ba-e2ab-08da529b84ed x-ms-traffictypediagnostic: DB8PR08MB5276:EE_|AM5EUR03FT042:EE_|AS1PR08MB7636:EE_ X-Microsoft-Antispam-PRVS: 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: 3z/5az0B1EOUDgoUKX+RSVrD79II6nRGyhHbpzcT6DWICIpWEjVep+caKcoHBbQGjmYmdl0YDg91HXblD8Z0tFbaR94s35Ccrc57k/7RW3NaaRgGM1mmc688sZia/LW7yh12YF9eF9Bz5oRb4/bmJ+i7R5MM3Vnj7si07h5Qo3KdzmQLNI039qGCSx8KlFHXEs9Mw1JgJTIFFb6EtI/0KStL0b4pOBSFU9oyMYsvMcxP/Z+BLaCrQC4huM1Nc6Mh4WFhwqXOEaTxGcCKkOBVqWl6FBs5pdk//wQZCoWvGNxRILapiGo6aYYX4Es20jqh8EADPTgotSQm8ounZHkI4l6x7K1U+gR/38o4ec7a6dZhSKzoD8V39acnMrh0ki6iq2Bg91xzm9mS+ne3Wk4mY/opw9mErRreMobyHvHuGoFyN79wGBB+4OUxBEQt0xkeIPcq83VYN2nZNN8ct14PySeUdenFHBjmCf98XNYqw0aHqUTLhRDoKdXDu6s3hOlm70NjTQYEKbiPh1KZtasGMHJg/kxE8T2NFUJaCb1hxaxGbnjq3MC4UOTSM22EFPn3j1gPNKl9KynUHGKMOwve6jOxbFHKm0OFtow7oULUPfXcQXZo+XG3yVJO/DRK3GikzCJgo2kPg/6ivKKcnGLuqYKkmJlDlpiCQP73iPNYKssSVTHRVqwahl0l8dJfenJ/5q6qQEliCnLdPZCEo7fUyJ2YsCn+71AzpW5XFteAxKOJKHq0AJ4OdG498DwcLEJ58yq3emjP3KqrG/NXxKfllE6L248FvI7ilyiMMP0/1LqXaPOHb/UZjsTxuOAW8w0TFCyOoRMFhwTe4HI55JVQ9Q== 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:(13230016)(4636009)(366004)(376002)(136003)(396003)(346002)(39860400002)(66574015)(33656002)(38070700005)(186003)(122000001)(86362001)(84970400001)(76116006)(26005)(9686003)(83380400001)(38100700002)(66446008)(2906002)(52536014)(53546011)(66476007)(54906003)(64756008)(5660300002)(6916009)(8936002)(30864003)(41300700001)(7696005)(66556008)(66946007)(478600001)(316002)(8676002)(6506007)(55016003)(4326008)(71200400001)(579004); DIR:OUT; SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5276 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: AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c9654645-1805-4bce-33fb-08da529b7f70 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: egrIFVauWPUc2wMM6AiaYNulGrpnCsERal9bSTs4C03MwoyLchbE9lpHWsJpwgqOMgAV5/77Y6NClzq0/9TnxEnbLBov8GBsSExaakwjy3H2L73m6Ki6hnVDmq9nhD+GDBx4Gn/557USxNR+iAN5qSckXwTyPZ57AqrIz4oaPSLI+9lxDEzOVJ4pHLZaSQSs9TxiQLAxWa2lpZQRZi74JiQRUDPK7jwB+51sEBVoPJ4/4tv0KoelqUkGrvl1bBjKPKmT9ivy4VCM+rCzvJpRpR5tHRC+C0dfqR7QR/RcLqzMC1l61rGZcCw9MY3cY0hbm/tinBCnn/+7FiCDoDOjFfLA22p188CIiE3qck3tSSDgYGVq0QX6IDSXSmMsrxhYugbQly1DzY7fNZ6k9HZBUNGO1tbEcI3tDyR/9lw1gzduznSe6FPa671yeePGkHBQP7h1XkKCFSukMKNDVVADGOcU5Rvymm5kG9V519+Ued/mUGTGMmCW35GIr74dVkR/jMjK/jqUcVthQUDKcszDlC2Wdp6/Swyh0H2QwPeZhhnR/MKM5Z4bGKzZQpIwCp7lTUa6YUBL9NsPGIbGfRM8HypL36pfHOJklz5IyVzmv8Xk/sfbjwFTkAgp843IG5VvE5I/N1rrbWxKfwD9+KJxh+pURAjYHNcspdDEOOh8mm6klz24qkno5avamzZES64Twdy/hmXfhMrqWXaZxcNKUBjHU0YD3sAeyvCJo/XjcykgsNani7/uSnEhhwr80Nj5YTEwMlcf10NYnC2wpoYAruLH1G89pereUNUek5akkU8EKQPphHfd/TCgs+G2F5vs 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:(13230016)(4636009)(40470700004)(36840700001)(46966006)(47076005)(186003)(66574015)(4326008)(70206006)(8676002)(6506007)(70586007)(53546011)(40460700003)(498600001)(336012)(33656002)(107886003)(81166007)(2906002)(54906003)(55016003)(356005)(83380400001)(7696005)(316002)(36860700001)(82310400005)(8936002)(30864003)(6862004)(26005)(84970400001)(9686003)(52536014)(86362001)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2022 09:01:52.9104 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 15208ed0-e23a-49ba-e2ab-08da529b84ed 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: AM5EUR03FT042.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7636 X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_DMARC_NONE, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, 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 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, 20 Jun 2022 09:02:08 -0000 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1 ZW50aGVyQHN1c2UuZGU+DQo+IFNlbnQ6IE1vbmRheSwgSnVuZSAyMCwgMjAyMiA5OjM2IEFNDQo+ IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0uY29tPg0KPiBDYzogZ2Nj LXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBhcm0uY29tPjsgamFrdWJAcmVkaGF0LmNvbQ0K PiBTdWJqZWN0OiBSZTogW1BBVENIIDIvMl1taWRkbGUtZW5kOiBTdXBwb3J0IHJlY29nbml0aW9u IG9mIHRocmVlLXdheQ0KPiBtYXgvbWluLg0KPiANCj4gT24gVGh1LCAxNiBKdW4gMjAyMiwgVGFt YXIgQ2hyaXN0aW5hIHdyb3RlOg0KPiANCj4gPiBIaSBBbGwsDQo+ID4NCj4gPiBUaGlzIHBhdGNo IGFkZHMgc3VwcG9ydCBmb3IgdGhyZWUtd2F5IG1pbi9tYXggcmVjb2duaXRpb24gaW4gcGhpLW9w dHMuDQo+ID4NCj4gPiBDb25jcmV0ZWx5IGZvciBlLmcuDQo+ID4NCj4gPiAjaW5jbHVkZSA8c3Rk aW50Lmg+DQo+ID4NCj4gPiB1aW50OF90IHRocmVlX21pbiAodWludDhfdCB4YywgdWludDhfdCB4 bSwgdWludDhfdCB4eSkgew0KPiA+IAl1aW50OF90CSB4azsNCj4gPiAgICAgaWYgKHhjIDwgeG0p IHsNCj4gPiAgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4YyA8IHh5ID8geGMgOiB4eSk7DQo+ID4g ICAgIH0gZWxzZSB7DQo+ID4gICAgICAgICB4ayA9ICh1aW50OF90KSAoeG0gPCB4eSA/IHhtIDog eHkpOw0KPiA+ICAgICB9DQo+ID4gICAgIHJldHVybiB4azsNCj4gPiB9DQo+ID4NCj4gPiB3ZSBn ZW5lcmF0ZToNCj4gPg0KPiA+ICAgPGJiIDI+IFtsb2NhbCBjb3VudDogMTA3Mzc0MTgyNF06DQo+ ID4gICBfNSA9IE1JTl9FWFBSIDx4Y18xKEQpLCB4eV8zKEQpPjsNCj4gPiAgIF83ID0gTUlOX0VY UFIgPHhtXzIoRCksIF81PjsNCj4gPiAgIHJldHVybiBfNzsNCj4gPg0KPiA+IGluc3RlYWQgb2YN Cj4gPg0KPiA+ICAgPGJiIDI+Og0KPiA+ICAgaWYgKHhjXzIoRCkgPCB4bV8zKEQpKQ0KPiA+ICAg ICBnb3RvIDxiYiAzPjsNCj4gPiAgIGVsc2UNCj4gPiAgICAgZ290byA8YmIgND47DQo+ID4NCj4g PiAgIDxiYiAzPjoNCj4gPiAgIHhrXzUgPSBNSU5fRVhQUiA8eGNfMihEKSwgeHlfNChEKT47DQo+ ID4gICBnb3RvIDxiYiA1PjsNCj4gPg0KPiA+ICAgPGJiIDQ+Og0KPiA+ICAgeGtfNiA9IE1JTl9F WFBSIDx4bV8zKEQpLCB4eV80KEQpPjsNCj4gPg0KPiA+ICAgPGJiIDU+Og0KPiA+ICAgIyB4a18x ID0gUEhJIDx4a181KDMpLCB4a182KDQpPg0KPiA+ICAgcmV0dXJuIHhrXzE7DQo+ID4NCj4gPiBU aGUgc2FtZSBmdW5jdGlvbiBhbHNvIGltbWVkaWF0ZWx5IGRlYWxzIHdpdGggdHVybmluZyBhIG1p bmltaXphdGlvbg0KPiA+IHByb2JsZW0gaW50byBhIG1heGltaXphdGlvbiBvbmUgaWYgdGhlIHJl c3VsdHMgYXJlIGludmVydGVkLiAgV2UgZG8NCj4gPiB0aGlzIGhlcmUgc2luY2UgZG9pbmcgaXQg aW4gbWF0Y2gucGQgd291bGQgZW5kIHVwIGNoYW5naW5nIHRoZSBzaGFwZQ0KPiA+IG9mIHRoZSBC QnMgYW5kIGFkZGluZyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyB3aGljaCB3b3VsZCBwcmV2ZW50 IHZhcmlvdXMNCj4gb3B0aW1pemF0aW9ucyBmcm9tIHdvcmtpbmcuDQo+IA0KPiBDYW4geW91IGV4 cGxhaW4gYSBiaXQgbW9yZT8NCg0KSSdsbCByZXNwb25kIHRvIHRoaXMgb25lIGZpcnN0IEluIGNh c2UgaXQgY2hhbmdlcyBob3cgeW91IHdhbnQgbWUgdG8gcHJvY2VlZC4NCg0KSSBpbml0aWFsbHkg aGFkIHVzZWQgYSBtYXRjaC5wZCBydWxlIHRvIGRvIHRoZSBtaW4gdG8gbWF4IGNvbnZlcnNpb24s IGJ1dCBhDQpudW1iZXIgb2YgdGVzdGNhc2VzIHN0YXJ0ZWQgdG8gZmFpbC4gIFRoZSByZWFzb24g d2FzIHRoYXQgYSBsb3Qgb2YgdGhlIGZvbGRpbmdzDQpjaGVja2VkIHRoYXQgdGhlIEJCIGNvbnRh aW5zIG9ubHkgYSBzaW5nbGUgU1NBIGFuZCB0aGF0IHRoYXQgU1NBIGlzIGEgcGhpIG5vZGUuDQoN CkJ5IGNoYW5naW5nIHRoZSBtaW4gaW50byBtYXgsIHRoZSBuZWdhdGlvbiBvZiB0aGUgcmVzdWx0 IGVuZHMgdXAgSW4gdGhlIHNhbWUgQkINCmFuZCBzbyB0aGUgb3B0aW1pemF0aW9ucyBhcmUgc2tp cHBlZCBsZWFkaW5nIHRvIGxlc3Mgb3B0aW1hbCBjb2RlLg0KDQpJIGRpZCBsb29rIGludG8gcmVs YXhpbmcgdGhvc2UgcGhpIG9wdHMgYnV0IGl0IGZlbHQgbGlrZSBJJ2QgbWFrZSBhIHJhdGhlciBh cmJpdHJhcnkNCmV4Y2VwdGlvbiBmb3IgbWludXMgYW5kIHNlZW1lZCBiZXR0ZXIgdG8gaGFuZGxl IGl0IGluIHRoZSBtaW5tYXggZm9sZGluZy4gDQoNClRoYW5rcywNClRhbWFyDQoNCj4gDQo+ID4g Qm9vdHN0cmFwcGVkIFJlZ3Rlc3RlZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251IGFuZCBubyBp c3N1ZXMuDQo+ID4NCj4gPiBPayBmb3IgbWFzdGVyPw0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IFRh bWFyDQo+ID4NCj4gPiBnY2MvQ2hhbmdlTG9nOg0KPiA+DQo+ID4gCSogdHJlZS1zc2EtcGhpb3B0 LmNjIChtaW5tYXhfcmVwbGFjZW1lbnQpOiBPcHRpb25hbGx5IHNlYXJjaCBmb3INCj4gdGhlIHBo aQ0KPiA+IAlzZXF1ZW5jZSBvZiBhIHRocmVlLXdheSBjb25kaXRpb25hbC4NCj4gPiAJKHJlcGxh Y2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSk6IFN1cHBvcnQgZGVmZXJyaW5nIG9mIEJCIHJlbW92 YWwuDQo+ID4gCSh0cmVlX3NzYV9waGlvcHRfd29ya2VyKTogRGV0ZWN0IGRpYW1vbmQgcGhpIHN0 cnVjdHVyZSBmb3IgdGhyZWUtDQo+IHdheQ0KPiA+IAltaW4vbWF4Lg0KPiA+IAkoc3RyaXBfYml0 X25vdCwgaW52ZXJ0X21pbm1heF9jb2RlKTogTmV3Lg0KPiA+DQo+ID4gZ2NjL3Rlc3RzdWl0ZS9D aGFuZ2VMb2c6DQo+ID4NCj4gPiAJKiBnY2MuZGcvdHJlZS1zc2Evc3BsaXQtcGF0aC0xLmM6IERp c2FibGUgcGhpLW9wdHMgc28gd2UgZG9uJ3QNCj4gb3B0aW1pemUNCj4gPiAJY29kZSBhd2F5Lg0K PiA+IAkqIGdjYy5kZy90cmVlLXNzYS9taW5tYXgtMy5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2Mu ZGcvdHJlZS1zc2EvbWlubWF4LTQuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3RyZWUtc3Nh L21pbm1heC01LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy90cmVlLXNzYS9taW5tYXgtNi5j OiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdHJlZS1zc2EvbWlubWF4LTcuYzogTmV3IHRlc3Qu DQo+ID4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC04LmM6IE5ldyB0ZXN0Lg0KPiA+DQo+ID4g LS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0zLmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3RyZWUtc3NhL21pbm1heC0zLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGUzYjJl OTQ2ZTgxNzAxZTNiNzVmNTgwZQ0KPiA2YTgNCj4gPiA0MzY5NWEwNTc4NmUNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTMu Yw0KPiA+IEBAIC0wLDAgKzEsMTcgQEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4g PiArLyogeyBkZy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1waGlvcHQiIH0gKi8NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gPiArDQo+ID4gK3VpbnQ4X3QgdGhyZWVfbWluICh1 aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ID4gKwl1aW50OF90CSB4azsN Cj4gPiArICAgIGlmICh4YyA8IHhtKSB7DQo+ID4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhj IDwgeHkgPyB4YyA6IHh5KTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgeGsgPSAo dWludDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsNCj4gPiArICAgIH0NCj4gPiArICAgIHJldHVy biB4azsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJNSU5fRVhQUiIgMyAicGhpb3B0MSIgfSB9ICovDQo+ID4gKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUFYX0VYUFIiIDAgInBoaW9wdDEiIH0gfSAqLw0KPiA+ IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNC5jDQo+ ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNC5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjBiNmQ2NjdiZTg2OGMyNDA1ZWFlZmQxN2MNCj4gYjUyDQo+ID4g MmRhNDRiYWZhMGUyDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL21pbm1heC00LmMNCj4gPiBAQCAtMCwwICsxLDE3IEBADQo+ID4gKy8q IHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRy ZWUtcGhpb3B0IiB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKw0K PiA+ICt1aW50OF90IHRocmVlX21heCAodWludDhfdCB4YywgdWludDhfdCB4bSwgdWludDhfdCB4 eSkgew0KPiA+ICsgICAgdWludDhfdAkgeGs7DQo+ID4gKyAgICBpZiAoeGMgPiB4bSkgew0KPiA+ ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4YyA+IHh5ID8geGMgOiB4eSk7DQo+ID4gKyAgICB9 IGVsc2Ugew0KPiA+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4bSA+IHh5ID8geG0gOiB4eSk7 DQo+ID4gKyAgICB9DQo+ID4gKyAgICByZXR1cm4geGs7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUlOX0VYUFIiIDAgInBoaW9wdDEi IH0gfSAqLw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1BWF9F WFBSIiAzICJwaGlvcHQxIiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdHJlZS1zc2EvbWlubWF4LTUuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJl ZS1zc2EvbWlubWF4LTUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4g Pg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTA2MDFhM2Nj NzVkMDlhOWU2ZTU0YTM1Zg0KPiA1Yg0KPiA+IDk5OTMwNzRmODUxMA0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNS5jDQo+ ID4gQEAgLTAsMCArMSwxNyBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsv KiB7IGRnLW9wdGlvbnMgIi1PIC1mZHVtcC10cmVlLXBoaW9wdCIgfSAqLw0KPiA+ICsNCj4gPiAr I2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsNCj4gPiArdWludDhfdCB0aHJlZV9taW5tYXgxICh1 aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ID4gKwl1aW50OF90CSB4azsN Cj4gPiArICAgIGlmICh4YyA+IHhtKSB7DQo+ID4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhj IDwgeHkgPyB4YyA6IHh5KTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgeGsgPSAo dWludDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsNCj4gPiArICAgIH0NCj4gPiArICAgIHJldHVy biB4azsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJNSU5fRVhQUiIgMiAicGhpb3B0MSIgfSB9ICovDQo+ID4gKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUFYX0VYUFIiIDEgInBoaW9wdDEiIH0gfSAqLw0KPiA+ IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNi5jDQo+ ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNi5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmE2MjhmNmQ5OTIyMjk1OGNmZDhjNDEwZjBlDQo+IDg1DQo+ID4g NjM5ZTNhNDlkZDRiDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL21pbm1heC02LmMNCj4gPiBAQCAtMCwwICsxLDE3IEBADQo+ID4gKy8q IHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRy ZWUtcGhpb3B0IiB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKw0K PiA+ICt1aW50OF90IHRocmVlX21pbm1heDMgKHVpbnQ4X3QgeGMsIHVpbnQ4X3QgeG0sIHVpbnQ4 X3QgeHkpIHsNCj4gPiArICAgICAgICB1aW50OF90ICB4azsNCj4gPiArICAgIGlmICh4YyA+IHht KSB7DQo+ID4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHh5IDwgeGMgPyB4YyA6IHh5KTsNCj4g PiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhtIDwgeHkgPyB4 bSA6IHh5KTsNCj4gPiArICAgIH0NCj4gPiArICAgIHJldHVybiB4azsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNSU5fRVhQUiIgMSAi cGhpb3B0MSIgfSB9ICovDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiTUFYX0VYUFIiIDEgInBoaW9wdDEiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNy5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9taW5tYXgtNy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNi NDI0MTJjNGFkYTQzM2IyZjU5ZGYwYThiDQo+IGVmDQo+ID4gOWZhN2IxYzVlMTA0DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1h eC03LmMNCj4gPiBAQCAtMCwwICsxLDE2IEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICov DQo+ID4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtcGhpb3B0IiB9ICovDQo+ID4g Kw0KPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKw0KPiA+ICt1aW50OF90IHRocmVlX21p bm1heDIgKHVpbnQ4X3QgeGMsIHVpbnQ4X3QgeG0sIHVpbnQ4X3QgeHkpIHsNCj4gPiArCXVpbnQ4 X3QJIHhrOw0KPiA+ICsgICAgaWYgKHhjID4geG0pIHsNCj4gPiArICAgICAgICB4ayA9ICh1aW50 OF90KSAoeGMgPiB4eSA/IHhjIDogeHkpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAg ICB4ayA9ICh1aW50OF90KSAoeG0gPCB4eSA/IHhtIDogeHkpOw0KPiA+ICsgICAgfQ0KPiA+ICsg ICAgcmV0dXJuIHhrOw0KPiA+ICt9DQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiTUlOX0VYUFIiIDEgInBoaW9wdDEiIH0gfSAqLw0KPiA+ICsvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1BWF9FWFBSIiAxICJwaGlvcHQxIiB9IH0gKi8NCj4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTguYw0K PiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTguYw0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi45Y2QwNTBlOTMyMzc2YmM1MGJkNmFlNjBjDQo+IGI2NQ0KPiA+ IDRmY2FiMGJmZGQxYw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy90cmVlLXNzYS9taW5tYXgtOC5jDQo+ID4gQEAgLTAsMCArMSwxNyBAQA0KPiA+ICsv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLW9wdGlvbnMgIi1PIC1mZHVtcC10 cmVlLXBoaW9wdCIgfSAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsN Cj4gPiArdWludDhfdCB0aHJlZV9taW5tYXgxMSAodWludDhfdCB4YywgdWludDhfdCB4bSwgdWlu dDhfdCB4eSkgew0KPiA+ICsgICAgICAgIHVpbnQ4X3QgIHhrOw0KPiA+ICsgICAgaWYgKHhjIDwg eG0pIHsNCj4gPiArICAgICAgICB4ayA9ICh1aW50OF90KSAoeGMgPiB4eSA/IHhjIDogeHkpOw0K PiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICB4ayA9ICh1aW50OF90KSAoeG0gPiB4eSA/ IHhtIDogeHkpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgcmV0dXJuIHhrOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAx ICJwaGlvcHQxIiB9IH0gKi8NCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJNQVhfRVhQUiIgMiAicGhpb3B0MSIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NwbGl0LXBhdGgtMS5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy90cmVlLXNzYS9zcGxpdC1wYXRoLTEuYw0KPiA+IGluZGV4DQo+ID4NCj4gOGIy M2VmNGM3YTM0ODRjZGMxNjQ3ZWU2ZDFiMTUwZjE1Njg1YmVmZi4uOTAyZGRlNDRhNTBlMTcxYjRm MzRiYTcyNA0KPiA3ZDcNCj4gPiA1YTMyZDJjODYwZWQgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Evc3BsaXQtcGF0aC0xLmMNCj4gPiArKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy90cmVlLXNzYS9zcGxpdC1wYXRoLTEuYw0KPiA+IEBAIC0xLDUgKzEsNSBA QA0KPiA+ICAvKiB7IGRnLWRvIHJ1biB9ICovDQo+ID4gLS8qIHsgZGctb3B0aW9ucyAiLU8yIC1m c3BsaXQtcGF0aHMgLWZkdW1wLXRyZWUtc3BsaXQtcGF0aHMtZGV0YWlscw0KPiA+IC0tcGFyYW0g bWF4LWp1bXAtdGhyZWFkLWR1cGxpY2F0aW9uLXN0bXRzPTIwIiB9ICovDQo+ID4gKy8qIHsgZGct b3B0aW9ucyAiLU8yIC1mc3BsaXQtcGF0aHMgLWZkdW1wLXRyZWUtc3BsaXQtcGF0aHMtZGV0YWls cw0KPiA+ICstLXBhcmFtIG1heC1qdW1wLXRocmVhZC1kdXBsaWNhdGlvbi1zdG10cz0yMCAtZm5v LXNzYS1waGlvcHQiIH0gKi8NCj4gPg0KPiA+ICAjaW5jbHVkZSA8c3RkaW8uaD4NCj4gPiAgI2lu Y2x1ZGUgPHN0ZGxpYi5oPg0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtcGhpb3B0LmNj IGIvZ2NjL3RyZWUtc3NhLXBoaW9wdC5jYyBpbmRleA0KPiA+DQo+IDU2MjQ2OGI3ZjAyYTlmZmUy NzEzMzE4YWRkNTUxOTAyYzE0Zjg5YzMuLjYyNDZmMDU0MDA2ZmYxNmU3MzYwMmU3Y2UyZQ0KPiAz DQo+ID4gNjdkMmQyMTQyMWIxIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXNzYS1waGlvcHQu Y2MNCj4gPiArKysgYi9nY2MvdHJlZS1zc2EtcGhpb3B0LmNjDQo+ID4gQEAgLTYyLDggKzYyLDgg QEAgc3RhdGljIGdwaGkgKmZhY3Rvcl9vdXRfY29uZGl0aW9uYWxfY29udmVyc2lvbiAoZWRnZSwN Cj4gZWRnZSwgZ3BoaSAqLCB0cmVlLCB0cmVlLA0KPiA+ICAJCQkJCQlnaW1wbGUgKik7DQo+ID4g IHN0YXRpYyBpbnQgdmFsdWVfcmVwbGFjZW1lbnQgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywN Cj4gPiAgCQkJICAgICAgZWRnZSwgZWRnZSwgZ3BoaSAqLCB0cmVlLCB0cmVlKTsgLXN0YXRpYyBi b29sDQo+ID4gbWlubWF4X3JlcGxhY2VtZW50IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssDQo+ ID4gLQkJCQllZGdlLCBlZGdlLCBncGhpICosIHRyZWUsIHRyZWUpOw0KPiA+ICtzdGF0aWMgYm9v bCBtaW5tYXhfcmVwbGFjZW1lbnQgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywgYmFzaWNfYmxv Y2ssDQo+ID4gKwkJCQllZGdlLCBlZGdlLCBncGhpICosIHRyZWUsIHRyZWUsIGJvb2wpOw0KPiA+ ICBzdGF0aWMgYm9vbCBzcGFjZXNoaXBfcmVwbGFjZW1lbnQgKGJhc2ljX2Jsb2NrLCBiYXNpY19i bG9jaywNCj4gPiAgCQkJCSAgIGVkZ2UsIGVkZ2UsIGdwaGkgKiwgdHJlZSwgdHJlZSk7ICBzdGF0 aWMgYm9vbA0KPiA+IGNvbmRfcmVtb3ZhbF9pbl9idWlsdGluX3plcm9fcGF0dGVybiAoYmFzaWNf YmxvY2ssIGJhc2ljX2Jsb2NrLCBAQA0KPiA+IC03Myw3ICs3Myw3IEBAIHN0YXRpYyBib29sIGNv bmRfc3RvcmVfcmVwbGFjZW1lbnQgKGJhc2ljX2Jsb2NrLA0KPiBiYXNpY19ibG9jaywgZWRnZSwg ZWRnZSwNCj4gPiAgCQkJCSAgICBoYXNoX3NldDx0cmVlPiAqKTsNCj4gPiAgc3RhdGljIGJvb2wg Y29uZF9pZl9lbHNlX3N0b3JlX3JlcGxhY2VtZW50IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ss DQo+ID4gYmFzaWNfYmxvY2spOyAgc3RhdGljIGhhc2hfc2V0PHRyZWU+ICogZ2V0X25vbl90cmFw cGluZyAoKTsgLXN0YXRpYw0KPiA+IHZvaWQgcmVwbGFjZV9waGlfZWRnZV93aXRoX3ZhcmlhYmxl IChiYXNpY19ibG9jaywgZWRnZSwgZ3BoaSAqLCB0cmVlKTsNCj4gPiArc3RhdGljIHZvaWQgcmVw bGFjZV9waGlfZWRnZV93aXRoX3ZhcmlhYmxlIChiYXNpY19ibG9jaywgZWRnZSwgZ3BoaQ0KPiA+ ICsqLCB0cmVlLCBib29sKTsNCj4gPiAgc3RhdGljIHZvaWQgaG9pc3RfYWRqYWNlbnRfbG9hZHMg KGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywNCj4gPiAgCQkJCSAgYmFzaWNfYmxvY2ssIGJhc2lj X2Jsb2NrKTsNCj4gPiAgc3RhdGljIGJvb2wgZ2F0ZV9ob2lzdF9sb2FkcyAodm9pZCk7DQo+ID4g QEAgLTE5OSw2ICsxOTksNyBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRvX3N0b3Jl X2VsaW0sIGJvb2wNCj4gZG9faG9pc3RfbG9hZHMsIGJvb2wgZWFybHlfcCkNCj4gPiAgICAgICAg YmFzaWNfYmxvY2sgYmIxLCBiYjI7DQo+ID4gICAgICAgIGVkZ2UgZTEsIGUyOw0KPiA+ICAgICAg ICB0cmVlIGFyZzAsIGFyZzE7DQo+ID4gKyAgICAgIGJvb2wgZGlhbW9uZF9taW5tYXhfcCA9IGZh bHNlOw0KPiA+DQo+ID4gICAgICAgIGJiID0gYmJfb3JkZXJbaV07DQo+ID4NCj4gPiBAQCAtMjY1 LDYgKzI2NiwyOSBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRvX3N0b3JlX2VsaW0s DQo+IGJvb2wgZG9faG9pc3RfbG9hZHMsIGJvb2wgZWFybHlfcCkNCj4gPiAgCSAgICBob2lzdF9h ZGphY2VudF9sb2FkcyAoYmIsIGJiMSwgYmIyLCBiYjMpOw0KPiA+ICAJICBjb250aW51ZTsNCj4g PiAgCX0NCj4gPiArICAgICAgZWxzZSBpZiAoRURHRV9TVUNDIChiYjEsIDApLT5kZXN0ID09IEVE R0VfU1VDQyAoYmIyLCAwKS0+ZGVzdA0KPiA+ICsJICAgICAgICYmIHNpbmdsZV9zdWNjX3AgKGJi MSkNCj4gPiArCSAgICAgICAmJiBzaW5nbGVfc3VjY19wIChiYjIpDQo+ID4gKwkgICAgICAgJiYg c2luZ2xlX3ByZWRfcCAoYmIxKQ0KPiA+ICsJICAgICAgICYmIHNpbmdsZV9wcmVkX3AgKGJiMikN Cj4gPiArCSAgICAgICAmJiBzaW5nbGVfc3VjY19wIChFREdFX1NVQ0MgKGJiMSwgMCktPmRlc3Qp KQ0KPiANCj4gcGxlYXNlIGRvIHRoZSBzaW5nbGVfc3VjYy9wcmVkIGNoZWNrcyBiZWxvdyB3aGVy ZSBhcHByb3ByaWF0ZSwgYWxzbyB3aGF0J3MNCj4gdGhlIGxhc3QgY2hlY2sgYWJvdXQ/ICB3aHkg ZG9lcyB0aGUgbWVyZ2UgYmxvY2sgbmVlZCBhIHNpbmdsZSBzdWNjZXNzb3I/DQo+IA0KPiA+ICsJ ew0KPiA+ICsJICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpdDEgPSBnc2lfc3RhcnRfbm9uZGVidWdf YWZ0ZXJfbGFiZWxzX2JiDQo+IChiYjEpOw0KPiA+ICsJICBnaW1wbGVfc3RtdF9pdGVyYXRvciBp dDIgPSBnc2lfc3RhcnRfbm9uZGVidWdfYWZ0ZXJfbGFiZWxzX2JiDQo+IChiYjIpOw0KPiA+ICsJ ICBpZiAoZ3NpX29uZV9iZWZvcmVfZW5kX3AgKGl0MSkgJiYgZ3NpX29uZV9iZWZvcmVfZW5kX3Ag KGl0MikpDQo+ID4gKwkgICAgew0KPiA+ICsJICAgICAgZ2ltcGxlICpzdG10MSA9IGdzaV9zdG10 IChpdDEpOw0KPiA+ICsJICAgICAgZ2ltcGxlICpzdG10MiA9IGdzaV9zdG10IChpdDIpOw0KPiA+ ICsJICAgICAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQxKSAmJiBpc19naW1wbGVfYXNzaWdu IChzdG10MikpDQo+ID4gKwkJew0KPiA+ICsJCSAgZW51bSB0cmVlX2NvZGUgY29kZTEgPSBnaW1w bGVfYXNzaWduX3Joc19jb2RlIChzdG10MSk7DQo+ID4gKwkJICBlbnVtIHRyZWVfY29kZSBjb2Rl MiA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQyKTsNCj4gPiArCQkgIGRpYW1vbmRfbWlu bWF4X3ANCj4gPiArCQkgICAgPSAoY29kZTEgPT0gTUlOX0VYUFIgfHwgY29kZTEgPT0gTUFYX0VY UFIpDQo+ID4gKwkJICAgICAgJiYgKGNvZGUyID09IE1JTl9FWFBSIHx8IGNvZGUyID09IE1BWF9F WFBSKTsNCj4gPiArCQl9DQo+ID4gKwkgICAgfQ0KPiA+ICsJfQ0KPiANCj4gSSdkIGdlbmVyYWxp emUgdGhpcyB0byBnZW5lcmFsIGRpYW1vbmQgZGV0ZWN0aW9uLCBzaW1wbHkgY3V0dGluZyBvZmYN Cj4gKl9yZXBsYWNlbWVudCB3b3JrZXJzIHRoYXQgZG8gbm90IGhhbmRsZSBkaWFtb25kcyBhbmQg ZG8gYXBwcm9wcmlhdGUNCj4gY2hlY2tzIGluIG1pbm1heF9yZXBsYWNlbWVudCBvbmx5Lg0KPiAN Cj4gPiAgICAgICAgZWxzZQ0KPiA+ICAJY29udGludWU7DQo+ID4NCj4gPiBAQCAtMzE2LDYgKzM0 MCwxMyBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRvX3N0b3JlX2VsaW0sDQo+IGJv b2wgZG9faG9pc3RfbG9hZHMsIGJvb2wgZWFybHlfcCkNCj4gPiAgCSAgaWYgKCFjYW5kb3Jlc3Qp DQo+ID4gIAkgICAgY29udGludWU7DQo+ID4NCj4gPiArCSAgLyogQ2hlY2sgdGhhdCB3ZSdyZSBs b29raW5nIGZvciBuZXN0ZWQgcGhpcy4gICovDQo+ID4gKwkgIGlmIChwaGlzID09IE5VTEwgJiYg ZGlhbW9uZF9taW5tYXhfcCkNCj4gPiArCSAgICB7DQo+ID4gKwkgICAgICBwaGlzID0gcGhpX25v ZGVzIChFREdFX1NVQ0MgKGJiMiwgMCktPmRlc3QpOw0KPiA+ICsJICAgICAgZTIgPSBFREdFX1NV Q0MgKGJiMiwgMCk7DQo+ID4gKwkgICAgfQ0KPiA+ICsNCj4gDQo+IGluc3RlYWQNCj4gDQo+ICAg ICAgICAgICBiYXNpY19ibG9jayBtZXJnZSA9IGRpYW1vbmRfcCA/IEVER0VfU1VDQyAoYmIyLCAw KS0+ZGVzdCA6IGJiMjsNCj4gICAgICAgICAgIGdpbXBsZV9zZXEgcGhpcyA9IHBoaV9ub2RlcyAo bWVyZ2UpOw0KPiANCj4gDQo+ID4gIAkgIHBoaSA9IHNpbmdsZV9ub25fc2luZ2xldG9uX3BoaV9m b3JfZWRnZXMgKHBoaXMsIGUxLCBlMik7DQo+ID4gIAkgIGlmICghcGhpKQ0KPiA+ICAJICAgIGNv bnRpbnVlOw0KPiA+IEBAIC0zMjksNiArMzYwLDcgQEAgdHJlZV9zc2FfcGhpb3B0X3dvcmtlciAo Ym9vbCBkb19zdG9yZV9lbGltLCBib29sDQo+ID4gZG9faG9pc3RfbG9hZHMsIGJvb2wgZWFybHlf cCkNCj4gPg0KPiA+ICAJICBncGhpICpuZXdwaGk7DQo+ID4gIAkgIGlmIChzaW5nbGVfcHJlZF9w IChiYjEpDQo+ID4gKwkgICAgICAmJiAhZGlhbW9uZF9taW5tYXhfcA0KPiA+ICAJICAgICAgJiYg KG5ld3BoaSA9IGZhY3Rvcl9vdXRfY29uZGl0aW9uYWxfY29udmVyc2lvbiAoZTEsIGUyLCBwaGks DQo+ID4gIAkJCQkJCQkgICAgICBhcmcwLCBhcmcxLA0KPiA+ICAJCQkJCQkJICAgICAgY29uZF9z dG10KSkpDQo+ID4gQEAgLTM0MywyMCArMzc1LDI1IEBAIHRyZWVfc3NhX3BoaW9wdF93b3JrZXIg KGJvb2wgZG9fc3RvcmVfZWxpbSwNCj4gYm9vbCBkb19ob2lzdF9sb2FkcywgYm9vbCBlYXJseV9w KQ0KPiA+ICAJICAgIH0NCj4gPg0KPiA+ICAJICAvKiBEbyB0aGUgcmVwbGFjZW1lbnQgb2YgY29u ZGl0aW9uYWwgaWYgaXQgY2FuIGJlIGRvbmUuICAqLw0KPiA+IC0JICBpZiAoIWVhcmx5X3AgJiYg dHdvX3ZhbHVlX3JlcGxhY2VtZW50IChiYiwgYmIxLCBlMiwgcGhpLCBhcmcwLA0KPiBhcmcxKSkN Cj4gPiArCSAgaWYgKCFlYXJseV9wDQo+ID4gKwkgICAgICAmJiAhZGlhbW9uZF9taW5tYXhfcA0K PiA+ICsJICAgICAgJiYgdHdvX3ZhbHVlX3JlcGxhY2VtZW50IChiYiwgYmIxLCBlMiwgcGhpLCBh cmcwLCBhcmcxKSkNCj4gPiAgCSAgICBjZmdjaGFuZ2VkID0gdHJ1ZTsNCj4gPiAtCSAgZWxzZSBp ZiAobWF0Y2hfc2ltcGxpZnlfcmVwbGFjZW1lbnQgKGJiLCBiYjEsIGUxLCBlMiwgcGhpLA0KPiA+ IC0JCQkJCSAgICAgICBhcmcwLCBhcmcxLA0KPiA+IC0JCQkJCSAgICAgICBlYXJseV9wKSkNCj4g PiArCSAgZWxzZSBpZiAoIWRpYW1vbmRfbWlubWF4X3ANCj4gPiArCQkgICAmJiBtYXRjaF9zaW1w bGlmeV9yZXBsYWNlbWVudCAoYmIsIGJiMSwgZTEsIGUyLCBwaGksDQo+ID4gKwkJCQkJCSAgYXJn MCwgYXJnMSwgZWFybHlfcCkpDQo+ID4gIAkgICAgY2ZnY2hhbmdlZCA9IHRydWU7DQo+ID4gIAkg IGVsc2UgaWYgKCFlYXJseV9wDQo+ID4gKwkJICAgJiYgIWRpYW1vbmRfbWlubWF4X3ANCj4gPiAg CQkgICAmJiBzaW5nbGVfcHJlZF9wIChiYjEpDQo+ID4gIAkJICAgJiYgY29uZF9yZW1vdmFsX2lu X2J1aWx0aW5femVyb19wYXR0ZXJuIChiYiwgYmIxLCBlMSwNCj4gZTIsDQo+ID4gIAkJCQkJCQkg ICAgcGhpLCBhcmcwLCBhcmcxKSkNCj4gPiAgCSAgICBjZmdjaGFuZ2VkID0gdHJ1ZTsNCj4gPiAt CSAgZWxzZSBpZiAobWlubWF4X3JlcGxhY2VtZW50IChiYiwgYmIxLCBlMSwgZTIsIHBoaSwgYXJn MCwgYXJnMSkpDQo+ID4gKwkgIGVsc2UgaWYgKG1pbm1heF9yZXBsYWNlbWVudCAoYmIsIGJiMSwg YmIyLCBlMSwgZTIsIHBoaSwgYXJnMCwgYXJnMSwNCj4gPiArCQkJCSAgICAgICBkaWFtb25kX21p bm1heF9wKSkNCj4gPiAgCSAgICBjZmdjaGFuZ2VkID0gdHJ1ZTsNCj4gPiAgCSAgZWxzZSBpZiAo c2luZ2xlX3ByZWRfcCAoYmIxKQ0KPiA+ICsJCSAgICYmICFkaWFtb25kX21pbm1heF9wDQo+ID4g IAkJICAgJiYgc3BhY2VzaGlwX3JlcGxhY2VtZW50IChiYiwgYmIxLCBlMSwgZTIsIHBoaSwgYXJn MCwNCj4gYXJnMSkpDQo+ID4gIAkgICAgY2ZnY2hhbmdlZCA9IHRydWU7DQo+ID4gIAl9DQo+ID4g QEAgLTM4NSw3ICs0MjIsNyBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRvX3N0b3Jl X2VsaW0sIGJvb2wNCj4gPiBkb19ob2lzdF9sb2FkcywgYm9vbCBlYXJseV9wKQ0KPiA+DQo+ID4g IHN0YXRpYyB2b2lkDQo+ID4gIHJlcGxhY2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSAoYmFzaWNf YmxvY2sgY29uZF9ibG9jaywNCj4gPiAtCQkJCWVkZ2UgZSwgZ3BoaSAqcGhpLCB0cmVlIG5ld190 cmVlKQ0KPiA+ICsJCQkJZWRnZSBlLCBncGhpICpwaGksIHRyZWUgbmV3X3RyZWUsIGJvb2wNCj4g ZGVsZXRlX2JiID0gdHJ1ZSkNCj4gPiAgew0KPiA+ICAgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxl X2JiIChwaGkpOw0KPiA+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaTsNCj4gPiBAQCAtNDI4 LDcgKzQ2NSw3IEBAIHJlcGxhY2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSAoYmFzaWNfYmxvY2sN Cj4gY29uZF9ibG9jaywNCj4gPiAgICAgIGVkZ2VfdG9fcmVtb3ZlID0gRURHRV9TVUNDIChjb25k X2Jsb2NrLCAxKTsNCj4gPiAgICBlbHNlDQo+ID4gICAgICBlZGdlX3RvX3JlbW92ZSA9IEVER0Vf U1VDQyAoY29uZF9ibG9jaywgMCk7DQo+ID4gLSAgaWYgKEVER0VfQ09VTlQgKGVkZ2VfdG9fcmVt b3ZlLT5kZXN0LT5wcmVkcykgPT0gMSkNCj4gPiArICBpZiAoRURHRV9DT1VOVCAoZWRnZV90b19y ZW1vdmUtPmRlc3QtPnByZWRzKSA9PSAxICYmIGRlbGV0ZV9iYikNCj4gDQo+IHdoeSBkbyB5b3Ug bmVlZCB0aGlzIGNoYW5nZT8NCj4gDQo+IERpZCB5b3UgY2hlY2sgd2hldGhlciB0aGUgbmV3IGNh c2Ugd29ya3Mgd2hlbiB0aGUgbWVyZ2UgYmxvY2sgaGFzIG1vcmUNCj4gdGhhbiB0d28gaW5jb21p bmcgZWRnZXM/DQo+IA0KPiA+ICAgICAgew0KPiA+ICAgICAgICBlLT5mbGFncyB8PSBFREdFX0ZB TExUSFJVOw0KPiA+ICAgICAgICBlLT5mbGFncyAmPSB+KEVER0VfVFJVRV9WQUxVRSB8IEVER0Vf RkFMU0VfVkFMVUUpOyBAQCAtDQo+IDE1NjQsMTUNCj4gPiArMTYwMSw1MiBAQCB2YWx1ZV9yZXBs YWNlbWVudCAoYmFzaWNfYmxvY2sgY29uZF9iYiwgYmFzaWNfYmxvY2sNCj4gbWlkZGxlX2JiLA0K PiA+ICAgIHJldHVybiAwOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogSWYgVkFSIGlzIGFuIFNTQV9O QU1FIHRoYXQgcG9pbnRzIHRvIGEgQklUX05PVF9FWFBSIHRoZW4gcmV0dXJuIHRoZQ0KPiBUUkVF IGZvcg0KPiA+ICsgICB0aGUgdmFsdWUgYmVpbmcgaW52ZXJ0ZWQuICAqLw0KPiA+ICsNCj4gPiAr c3RhdGljIHRyZWUNCj4gPiArc3RyaXBfYml0X25vdCAodHJlZSB2YXIpDQo+ID4gK3sNCj4gPiAr ICBpZiAoVFJFRV9DT0RFICh2YXIpICE9IFNTQV9OQU1FKQ0KPiA+ICsgICAgcmV0dXJuIE5VTExf VFJFRTsNCj4gPiArDQo+ID4gKyAgZ2ltcGxlICphc3NpZ24gPSBTU0FfTkFNRV9ERUZfU1RNVCAo dmFyKTsgIGlmIChnaW1wbGVfY29kZSAoYXNzaWduKQ0KPiA+ICsgIT0gR0lNUExFX0FTU0lHTikN Cj4gPiArICAgIHJldHVybiBOVUxMX1RSRUU7DQo+ID4gKw0KPiA+ICsgIGlmIChnaW1wbGVfYXNz aWduX3Joc19jb2RlIChhc3NpZ24pICE9IEJJVF9OT1RfRVhQUikNCj4gPiArICAgIHJldHVybiBO VUxMX1RSRUU7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBnaW1wbGVfYXNzaWduX3JoczEgKGFzc2ln bik7IH0NCj4gPiArDQo+ID4gKy8qIEludmVydCBhIE1JTiB0byBhIE1BWCBvciBhIE1BWCB0byBh IE1JTiBleHByZXNzaW9uIENPREUuICAqLw0KPiA+ICsNCj4gPiArZW51bSB0cmVlX2NvZGUNCj4g PiAraW52ZXJ0X21pbm1heF9jb2RlIChlbnVtIHRyZWVfY29kZSBjb2RlKSB7DQo+ID4gKyAgc3dp dGNoIChjb2RlKSB7DQo+ID4gKyAgY2FzZSBNSU5fRVhQUjoNCj4gPiArICAgIHJldHVybiBNQVhf RVhQUjsNCj4gPiArICBjYXNlIE1BWF9FWFBSOg0KPiA+ICsgICAgcmV0dXJuIE1JTl9FWFBSOw0K PiA+ICsgIGRlZmF1bHQ6DQo+ID4gKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQo+ID4gKyAgfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICAvKiAgVGhlIGZ1bmN0aW9uIG1pbm1heF9yZXBsYWNlbWVudCBk b2VzIHRoZSBtYWluIHdvcmsgb2YgZG9pbmcgdGhlDQo+IG1pbm1heA0KPiA+ICAgICAgcmVwbGFj ZW1lbnQuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgcmVwbGFjZW1lbnQgaXMgZG9uZS4gIE90aGVyd2lz ZSByZXR1cm4NCj4gPiAgICAgIGZhbHNlLg0KPiA+ICAgICAgQkIgaXMgdGhlIGJhc2ljIGJsb2Nr IHdoZXJlIHRoZSByZXBsYWNlbWVudCBpcyBnb2luZyB0byBiZSBkb25lIG9uLg0KPiBBUkcwDQo+ ID4gLSAgICBpcyBhcmd1bWVudCAwIGZyb20gdGhlIFBISS4gIExpa2V3aXNlIGZvciBBUkcxLiAg Ki8NCj4gPiArICAgIGlzIGFyZ3VtZW50IDAgZnJvbSB0aGUgUEhJLiAgTGlrZXdpc2UgZm9yIEFS RzEuDQo+ID4gKw0KPiA+ICsgICAgSWYgVEhSRUVXQVlfUCB0aGVuIGV4cGVjdCB0aGUgQkIgdG8g YmUgbGFpZCBvdXQgaW4gZGlhbW9uZCBzaGFwZSB3aXRoDQo+IGVhY2gNCj4gPiArICAgIEJCIGNv bnRhaW5pbmcgb25seSBhIE1JTiBvciBNQVggZXhwcmVzc2lvbi4gICovDQo+ID4NCj4gPiAgc3Rh dGljIGJvb2wNCj4gPiAtbWlubWF4X3JlcGxhY2VtZW50IChiYXNpY19ibG9jayBjb25kX2JiLCBi YXNpY19ibG9jayBtaWRkbGVfYmIsDQo+ID4gLQkJICAgIGVkZ2UgZTAsIGVkZ2UgZTEsIGdwaGkg KnBoaSwgdHJlZSBhcmcwLCB0cmVlIGFyZzEpDQo+ID4gK21pbm1heF9yZXBsYWNlbWVudCAoYmFz aWNfYmxvY2sgY29uZF9iYiwgYmFzaWNfYmxvY2sgbWlkZGxlX2JiLA0KPiBiYXNpY19ibG9jayBh bHRfbWlkZGxlX2JiLA0KPiA+ICsJCSAgICBlZGdlIGUwLCBlZGdlIGUxLCBncGhpICpwaGksIHRy ZWUgYXJnMCwgdHJlZSBhcmcxLCBib29sDQo+ID4gK3RocmVld2F5X3ApDQo+ID4gIHsNCj4gPiAg ICB0cmVlIHJlc3VsdDsNCj4gPiAgICBlZGdlIHRydWVfZWRnZSwgZmFsc2VfZWRnZTsNCj4gPiBA QCAtMTcyNyw5ICsxODAxLDE0IEBAIG1pbm1heF9yZXBsYWNlbWVudCAoYmFzaWNfYmxvY2sgY29u ZF9iYiwNCj4gYmFzaWNfYmxvY2sgbWlkZGxlX2JiLA0KPiA+ICAgIGlmIChmYWxzZV9lZGdlLT5k ZXN0ID09IG1pZGRsZV9iYikNCj4gPiAgICAgIGZhbHNlX2VkZ2UgPSBFREdFX1NVQ0MgKGZhbHNl X2VkZ2UtPmRlc3QsIDApOw0KPiA+DQo+ID4gKyAgLyogV2hlbiBUSFJFRVdBWV9QIHRoZW4gZTEg d2lsbCBwb2ludCB0byB0aGUgZWRnZSBvZiB0aGUgZmluYWwNCj4gdHJhbnNpdGlvbg0KPiA+ICsg ICAgIGZyb20gbWlkZGxlLWJiIHRvIGVuZC4gICovDQo+ID4gICAgaWYgKHRydWVfZWRnZSA9PSBl MCkNCj4gPiAgICAgIHsNCj4gPiAtICAgICAgZ2NjX2Fzc2VydCAoZmFsc2VfZWRnZSA9PSBlMSk7 DQo+ID4gKyAgICAgIGlmICh0aHJlZXdheV9wKQ0KPiA+ICsJZ2NjX2Fzc2VydCAoZmFsc2VfZWRn ZSA9PSBFREdFX1BSRUQgKGUxLT5zcmMsIDApKTsNCj4gPiArICAgICAgZWxzZQ0KPiA+ICsJZ2Nj X2Fzc2VydCAoZmFsc2VfZWRnZSA9PSBlMSk7DQo+ID4gICAgICAgIGFyZ190cnVlID0gYXJnMDsN Cj4gPiAgICAgICAgYXJnX2ZhbHNlID0gYXJnMTsNCj4gPiAgICAgIH0NCj4gPiBAQCAtMTc2OCw2 ICsxODQ3LDEzMyBAQCBtaW5tYXhfcmVwbGFjZW1lbnQgKGJhc2ljX2Jsb2NrIGNvbmRfYmIsDQo+ IGJhc2ljX2Jsb2NrIG1pZGRsZV9iYiwNCj4gPiAgICAgICAgZWxzZQ0KPiA+ICAJcmV0dXJuIGZh bHNlOw0KPiA+ICAgICAgfQ0KPiA+ICsgIGVsc2UgaWYgKG1pZGRsZV9iYiAhPSBhbHRfbWlkZGxl X2JiICYmIHRocmVld2F5X3ApDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIC8qIFJlY29nbml6ZSB0 aGUgZm9sbG93aW5nIGNhc2U6DQo+ID4gKw0KPiA+ICsJIGlmIChzbWFsbGVyIDwgbGFyZ2VyKQ0K PiA+ICsJICAgYSA9IE1JTiAoc21hbGxlciwgYyk7DQo+ID4gKwkgZWxzZQ0KPiA+ICsJICAgYiA9 IE1JTiAobGFyZ2VyLCBjKTsNCj4gPiArCSB4ID0gUEhJIDxhLCBiPg0KPiA+ICsNCj4gPiArCSBU aGlzIGlzIGVxdWl2YWxlbnQgdG8NCj4gPiArDQo+ID4gKwkgYSA9IE1JTiAoc21hbGxlciwgYyk7 DQo+ID4gKwkgeCA9IE1JTiAobGFyZ2VyLCBhKTsgICovDQo+ID4gKw0KPiA+ICsgICAgICBnaW1w bGUgKmFzc2lnbiA9IGxhc3RfYW5kX29ubHlfc3RtdCAobWlkZGxlX2JiKTsNCj4gPiArICAgICAg dHJlZSBsaHMsIG9wMCwgb3AxLCBib3VuZDsNCj4gPiArICAgICAgdHJlZSBhbHRfbGhzLCBhbHRf b3AwLCBhbHRfb3AxOw0KPiA+ICsgICAgICBib29sIGludmVydCA9IGZhbHNlOw0KPiA+ICsNCj4g PiArICAgICAgaWYgKCFzaW5nbGVfcHJlZF9wIChtaWRkbGVfYmIpDQo+ID4gKwkgIHx8ICFzaW5n bGVfcHJlZF9wIChhbHRfbWlkZGxlX2JiKSkNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gPiArDQo+ ID4gKyAgICAgIGlmICghYXNzaWduDQo+ID4gKwkgIHx8IGdpbXBsZV9jb2RlIChhc3NpZ24pICE9 IEdJTVBMRV9BU1NJR04pDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAgICBs aHMgPSBnaW1wbGVfYXNzaWduX2xocyAoYXNzaWduKTsNCj4gPiArICAgICAgYXNzX2NvZGUgPSBn aW1wbGVfYXNzaWduX3Joc19jb2RlIChhc3NpZ24pOw0KPiA+ICsgICAgICBpZiAoYXNzX2NvZGUg IT0gTUFYX0VYUFIgJiYgYXNzX2NvZGUgIT0gTUlOX0VYUFIpDQo+ID4gKwlyZXR1cm4gZmFsc2U7 DQo+ID4gKw0KPiA+ICsgICAgICBvcDAgPSBnaW1wbGVfYXNzaWduX3JoczEgKGFzc2lnbik7DQo+ ID4gKyAgICAgIG9wMSA9IGdpbXBsZV9hc3NpZ25fcmhzMiAoYXNzaWduKTsNCj4gPiArDQo+ID4g KyAgICAgIGFzc2lnbiA9IGxhc3RfYW5kX29ubHlfc3RtdCAoYWx0X21pZGRsZV9iYik7DQo+ID4g KyAgICAgIGlmICghYXNzaWduDQo+ID4gKwkgIHx8IGdpbXBsZV9jb2RlIChhc3NpZ24pICE9IEdJ TVBMRV9BU1NJR04pDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAgICBhbHRf bGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKGFzc2lnbik7DQo+ID4gKyAgICAgIGlmIChhc3NfY29k ZSAhPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChhc3NpZ24pKQ0KPiA+ICsJcmV0dXJuIGZhbHNl Ow0KPiA+ICsNCj4gPiArICAgICAgYWx0X29wMCA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoYXNzaWdu KTsNCj4gPiArICAgICAgYWx0X29wMSA9IGdpbXBsZV9hc3NpZ25fcmhzMiAoYXNzaWduKTsNCj4g PiArDQo+ID4gKyAgICAgIGlmICghb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChsaHMsIGFy Z190cnVlKQ0KPiA+ICsJIHx8ICFvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKGFsdF9saHMs IGFyZ19mYWxzZSkpDQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgICAgICBpZiAo KG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAob3AwLCBzbWFsbGVyKQ0KPiA+ICsJCXx8IChh bHRfc21hbGxlcg0KPiA+ICsJCSAgICAmJiBvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9w MCwgYWx0X3NtYWxsZXIpKSkNCj4gPiArCSAgICAgICAmJiAob3BlcmFuZF9lcXVhbF9mb3JfcGhp X2FyZ19wIChhbHRfb3AwLCBsYXJnZXIpDQo+ID4gKwkJICAgfHwgKGFsdF9sYXJnZXINCj4gPiAr CQkgICAgICAgJiYgb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRfb3AwLCBhbHRfbGFy Z2VyKSkpKQ0KPiA+ICsJew0KPiA+ICsJICAvKiBXZSBnb3QgaGVyZSBpZiB0aGUgY29uZGl0aW9u IGlzIHRydWUsIGkuZS4sIFNNQUxMRVIgPCBMQVJHRVIuICAqLw0KPiA+ICsJICBpZiAoIW9wZXJh bmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAob3AxLCBhbHRfb3AxKSkNCj4gPiArCSAgICByZXR1cm4g ZmFsc2U7DQo+ID4gKw0KPiA+ICsJICBpZiAoKGFyZzAgPSBzdHJpcF9iaXRfbm90IChvcDApKSAh PSBOVUxMDQo+ID4gKwkgICAgICAmJiAoYXJnMSA9IHN0cmlwX2JpdF9ub3QgKGFsdF9vcDApKSAh PSBOVUxMDQo+ID4gKwkgICAgICAmJiAoYm91bmQgPSBzdHJpcF9iaXRfbm90IChvcDEpKSAhPSBO VUxMKQ0KPiA+ICsJICAgIHsNCj4gPiArCSAgICAgIG1pbm1heCA9IE1BWF9FWFBSOw0KPiA+ICsJ ICAgICAgYXNzX2NvZGUgPSBpbnZlcnRfbWlubWF4X2NvZGUgKGFzc19jb2RlKTsNCj4gPiArCSAg ICAgIGludmVydCA9IHRydWU7DQo+ID4gKwkgICAgfQ0KPiA+ICsJICBlbHNlDQo+ID4gKwkgICAg ew0KPiA+ICsJICAgICAgYm91bmQgPSBvcDE7DQo+ID4gKwkgICAgICBtaW5tYXggPSBNSU5fRVhQ UjsNCj4gPiArCSAgICAgIGFyZzAgPSBvcDA7DQo+ID4gKwkgICAgICBhcmcxID0gYWx0X29wMDsN Cj4gPiArCSAgICAgfQ0KPiA+ICsJfQ0KPiA+ICsgICAgICBlbHNlIGlmICgob3BlcmFuZF9lcXVh bF9mb3JfcGhpX2FyZ19wIChvcDAsIGxhcmdlcikNCj4gPiArCQl8fCAoYWx0X2xhcmdlcg0KPiA+ ICsJCSAgICAmJiBvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9wMCwgYWx0X2xhcmdlcikp KQ0KPiA+ICsJICAgICAgICYmIChvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKGFsdF9vcDAs IHNtYWxsZXIpDQo+ID4gKwkJICAgfHwgKGFsdF9zbWFsbGVyDQo+ID4gKwkJICAgICAgICYmIG9w ZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAoYWx0X29wMCwNCj4gYWx0X3NtYWxsZXIpKSkpDQo+ ID4gKwl7DQo+ID4gKwkgIC8qIFdlIGdvdCBoZXJlIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwg aS5lLiwgU01BTExFUiA+IExBUkdFUi4gICovDQo+ID4gKwkgIGlmICghb3BlcmFuZF9lcXVhbF9m b3JfcGhpX2FyZ19wIChvcDEsIGFsdF9vcDEpKQ0KPiA+ICsJICAgIHJldHVybiBmYWxzZTsNCj4g PiArDQo+ID4gKwkgIGlmICgoYXJnMCA9IHN0cmlwX2JpdF9ub3QgKG9wMCkpICE9IE5VTEwNCj4g PiArCSAgICAgICYmIChhcmcxID0gc3RyaXBfYml0X25vdCAoYWx0X29wMCkpICE9IE5VTEwNCj4g PiArCSAgICAgICYmIChib3VuZCA9IHN0cmlwX2JpdF9ub3QgKG9wMSkpICE9IE5VTEwpDQo+ID4g KwkgICAgew0KPiA+ICsJICAgICAgbWlubWF4ID0gTUlOX0VYUFI7DQo+ID4gKwkgICAgICBhc3Nf Y29kZSA9IGludmVydF9taW5tYXhfY29kZSAoYXNzX2NvZGUpOw0KPiA+ICsJICAgICAgaW52ZXJ0 ID0gdHJ1ZTsNCj4gPiArCSAgICB9DQo+ID4gKwkgIGVsc2UNCj4gPiArCSAgICB7DQo+ID4gKwkg ICAgICBib3VuZCA9IG9wMTsNCj4gPiArCSAgICAgIG1pbm1heCA9IE1BWF9FWFBSOw0KPiA+ICsJ ICAgICAgYXJnMCA9IG9wMDsNCj4gPiArCSAgICAgIGFyZzEgPSBhbHRfb3AwOw0KPiA+ICsJICAg ICB9DQo+ID4gKwl9DQo+ID4gKyAgICAgIGVsc2UNCj4gPiArCXJldHVybiBmYWxzZTsNCj4gDQo+ IERpZCB5b3UgY2hlY2sgeW91IGhhdmUgY292ZXJhZ2UgZm9yIGFsbCBjYXNlcyBhYm92ZSBpbiB5 b3VyIHRlc3RjYXNlcz8NCj4gDQo+ID4gKyAgICAgIC8qIFJlc2V0IGFueSByYW5nZSBpbmZvcm1h dGlvbiBmcm9tIHRoZSBiYXNpYyBibG9jay4gICovDQo+ID4gKyAgICAgIHJlc2V0X2Zsb3dfc2Vu c2l0aXZlX2luZm9faW5fYmIgKGNvbmRfYmIpOw0KPiANCj4gSHVoLiAgWW91IG5lZWQgdG8gcmVz ZXQgZmxvdy1zZW5zaXRpdmUgaW5mbyBvZiB0aGUgbWlkZGxlLWJiIHN0bXQgdGhhdA0KPiBwcmV2 YWlscyBvbmx5Li4uDQo+IA0KPiA+ICsgICAgICAvKiBFbWl0IHRoZSBzdGF0ZW1lbnQgdG8gY29t cHV0ZSBtaW4vbWF4LiAgKi8NCj4gPiArICAgICAgZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7DQo+ ID4gKyAgICAgIHRyZWUgcGhpX3Jlc3VsdCA9IFBISV9SRVNVTFQgKHBoaSk7DQo+ID4gKyAgICAg IHJlc3VsdCA9IGdpbXBsZV9idWlsZCAoJnN0bXRzLCBtaW5tYXgsIFRSRUVfVFlQRSAocGhpX3Jl c3VsdCksIGFyZzAsDQo+IGJvdW5kKTsNCj4gPiArICAgICAgcmVzdWx0ID0gZ2ltcGxlX2J1aWxk ICgmc3RtdHMsIGFzc19jb2RlLCBUUkVFX1RZUEUNCj4gPiArIChwaGlfcmVzdWx0KSwgcmVzdWx0 LCBhcmcxKTsNCj4gDQo+IC4uLiBidXQgeW91IGFyZSByZS1idWlsZGluZyBib3RoIGhlcmUuICBB bmQgYWxzbyB5b3UgZHJvcCBsb2NhdGlvbnMsIHRoZQ0KPiBwcmVzZXJ2ZWQgbWluL21heCBzaG91 bGQga2VlcCB0aGUgb2xkLCB0aGUgbmV3IHNob3VsZCBnZXQgdGhlIGxvY2F0aW9uIG9mDQo+IC4u LiBobW0sIHRoZSBjb25kaXRpb24gcG9zc2libHk/DQo+IA0KPiA+ICsgICAgICBpZiAoaW52ZXJ0 KQ0KPiA+ICsJcmVzdWx0ID0gZ2ltcGxlX2J1aWxkICgmc3RtdHMsIEJJVF9OT1RfRVhQUiwgVFJF RV9UWVBFDQo+IChwaGlfcmVzdWx0KSwNCj4gPiArcmVzdWx0KTsNCj4gPiArDQo+ID4gKyAgICAg IGdzaSA9IGdzaV9sYXN0X2JiIChjb25kX2JiKTsNCj4gPiArICAgICAgZ3NpX2luc2VydF9zZXFf YmVmb3JlICgmZ3NpLCBzdG10cywgR1NJX05FV19TVE1UKTsNCj4gPiArDQo+ID4gKyAgICAgIHJl cGxhY2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSAoY29uZF9iYiwgZTEsIHBoaSwgcmVzdWx0LCBm YWxzZSk7DQo+ID4gKyAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgfQ0KPiA+ICAgIGVsc2UN Cj4gPiAgICAgIHsNCj4gPiAgICAgICAgLyogUmVjb2duaXplIHRoZSBmb2xsb3dpbmcgY2FzZSwg YXNzdW1pbmcgZCA8PSB1Og0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gDQo+IC0tDQo+IFJp Y2hhcmQgQmllbmVyIDxyZ3VlbnRoZXJAc3VzZS5kZT4NCj4gU1VTRSBTb2Z0d2FyZSBTb2x1dGlv bnMgR2VybWFueSBHbWJILCBGcmFua2Vuc3RyYcOfZSAxNDYsIDkwNDYxDQo+IE51ZXJuYmVyZywg R2VybWFueTsgR0Y6IEl2byBUb3RldiwgQW5kcmV3IE15ZXJzLCBBbmRyZXcgTWNEb25hbGQsDQo+ IEJvdWRpZW4gTW9lcm1hbjsgSFJCIDM2ODA5IChBRyBOdWVybmJlcmcpDQo=