From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20086.outbound.protection.outlook.com [40.107.2.86]) by sourceware.org (Postfix) with ESMTPS id 651163858C53 for ; Tue, 12 Jul 2022 09:39:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 651163858C53 ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=AsTX6LeqQbN2v0ochGNcsEanZLFO2ryUqXzW/jJ/qdf/Vnh5C9ua6VhGBvRj03e/t0Yht9k78qBdrmAf5PSfiOk9AwnOanFoE8xDN3qEddE3vrTFXOweSL7dDCaikD1pnhZ/xcdQriDv6xLeBbrvnXtZIXyTLyXjo2bYrtwWJGoCHdq0jrHNRGU9Dy9fQI0H6rY2bxARq9D/581MkWFnqHXigAsEh3lvS/tPsXhTA2+/5XzbUI529QHjvCVvzpcrr7/NxHO2M3eqlJ1ySIk1V2XpQzONG6qBt3Z/Nhc8Or6ZR+FevnUnAw0ONqsjcVZdCWJyewGo3kNdwz9ylm70zg== 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=sRqXrO429+gV8cTb0b0KqWtHQWLFD8ktC2RIuq6sg+E=; b=YPo7oEy2nTvhFB2mLbzeaxPsgzBF42iO2gK2kve6Ev+syvqovpThVxiIQSlB4BUeSezhXjwjCyHTCd29m1CDnMjUaujPztaXIvFhDo8B1H0J0Yc2dlKMgRk+EICBc7FlLPFJk4ccaFoAe36Otl6CDM9I/dZSFSwEDBJvRtj4DcXzr+M16EjOSnZ+DvPDRlQDR5bVml9ycy1yekMc2L7ALe4E4hwaJMFZaQj/VY36nbt4Rtt1Up0LYov7E2JgL+LHSgs7MLIwiJCUMbgh3gnU/l6ovOipqhizqzK0OfZgDqNnol1+CQm2nyl03j3pl4o5s0afWaKfK3r7CqDeqD0zzQ== 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 AM7PR02CA0025.eurprd02.prod.outlook.com (2603:10a6:20b:100::35) by AM4PR08MB2788.eurprd08.prod.outlook.com (2603:10a6:205:10::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.23; Tue, 12 Jul 2022 09:39:44 +0000 Received: from VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:100:cafe::45) by AM7PR02CA0025.outlook.office365.com (2603:10a6:20b:100::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.26 via Frontend Transport; Tue, 12 Jul 2022 09:39:44 +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 VE1EUR03FT060.mail.protection.outlook.com (10.152.19.187) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.15 via Frontend Transport; Tue, 12 Jul 2022 09:39:44 +0000 Received: ("Tessian outbound 8e3d5168572a:v122"); Tue, 12 Jul 2022 09:39:44 +0000 X-CR-MTA-TID: 64aa7808 Received: from c6a866f13775.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 1A1A7218-234E-4AFE-89E7-0EB2BEA89559.1; Tue, 12 Jul 2022 09:39:37 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c6a866f13775.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 12 Jul 2022 09:39:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hW8ceeTx9NlQf1tVuo0Kl5ayMDy+n7a9fsdX6m/6R8Yry4pZpQt0vAhV4CWkFzP6EQ9paob9vKd1EY0COqAc7kKBLM49QQ4lajlhOZIAHcQp4/SSENsXxnoGO+m7Y/aUcF58ovhbGoIA8N7KHKKfepJr+kCiLqR1Zn6sYILYdyypMvn7Crtiqwm1wIf6jaivCmWbB1XsEyZ+f3CPl+XebDF38S6qJC9ACGemjxmIOYhWlwyeJctF9IxJ6tzMOrEKltWPDj5jKWWGM2V3/nZL++BGj/I7C1cPzZpr4gvwE5+NTkw+BFtOnhmsAxc+vOgotgHbGgcEqJIMu83D42QxQg== 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=sRqXrO429+gV8cTb0b0KqWtHQWLFD8ktC2RIuq6sg+E=; b=NcRi3BqJC8yGTrCX8aXCVFx760xt6QkRS7BfxqZSl2vxuKZBwQOT4IunXjKSlc6b0G0yPqI5kypukHY9s3o+3Z22AGX/J3J3/AXqAWGMKGPeYT641EZpa/ZNpN3MSxhvEc0MjukoPJCGv0YnjpZQDizEngKkDrfc0jS0oPNN6sL/WkX3j6sH1COAfdTlX76BDphu86xL8ZFJVmrI/N+4Qh99x8SIETezPZlJn3oLn4li2LpdfZIvTCq1sPe83kXt0QaAUV4KfabGBjj/S9J+xQnTsWstGt3tZWtvJ0gRfA5AO8+wyQeBcmTXI9jssnQ1cf1ie15OR458H8ittPB+cQ== 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 PA4PR08MB6126.eurprd08.prod.outlook.com (2603:10a6:102:ea::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.20; Tue, 12 Jul 2022 09:39:34 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::54e5:594b:e5fd:a9b4]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::54e5:594b:e5fd:a9b4%9]) with mapi id 15.20.5417.026; Tue, 12 Jul 2022 09:39:34 +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/qYAgBgCxwCACqI9kA== Date: Tue, 12 Jul 2022 09:39:34 +0000 Message-ID: References: <29n37062-n3s3-71o9-8411-r851o15ss72@fhfr.qr> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 53FD1F67EDC8E8489113D638685342DA.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: a9122dd7-a4d7-4b1d-f4c5-08da63ea73d0 x-ms-traffictypediagnostic: PA4PR08MB6126:EE_|VE1EUR03FT060:EE_|AM4PR08MB2788:EE_ 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: wRFdVg/gIT9Djk0WAYnpNSrxoJAwxEis82r/VNnpkwUxy/FPUHFw5bFGfSB1NKrWEmeV4BHlZLyS3HtuUW86Bv5QfpTWVxcyIkW1WtOsgceNcQ3tO3845ATXKTof3GP3QmUk3Wd48BhD+TR3MpmK2EOiE0PQ/EJgYMMmNVhUNWMAFiqCbyB0wDy7NHDsjdKBp5TRthqBwOk3tuWrPwfzGtKHojFUHzD0rNgW5Z1pT96bRNTqxLf8R9PbwucAyMz/ONPXohV6bTu+7I81WKnRuECffe+uH3SgaEKnVvBq1rSYO/UFH7wRSKWeSr+fM6UyPwKh0WHV0RCEG4x78/8ZKSeYUw2nDNFPGS9EZxqa7/NJXKk1/lKG1wqKdLIIyYDNp61tzrf/bEL2lolrCAfT/yxq8uyNdhdtPRG5M2S9+SO9+PTI2vZUWmco/5XnfrGiez4J3K0rQPnVzlI0ijbClX6QReg/xG9Pza7SwVACDnZ18rgqoYffF+pJttRuMXCzm80WT8kKUlxyPVgTCwSWlgPam6W0XjwTFmymU/JSlyKB2rdBtWuEUTyLtG/iAGNUju6hVdw5Mf7H43ZZtiWyu24hBJAUfDZUZzgmovGYyI5+wO1FTubq7+WPWBi1tYglD/MAjQvvQStIud6U1AWa4xwkozUPRLTrXIthjmm6tQoFtVLsahXObcqnLkj00gaa2Kdtg+seZpr09r3XXe7qXe8zZ3X3z1imyoD97S0hmS+DLd1xh7a2Im2WVxQ+jjNTObTg6altgItfxpJnT+VIQSxRLO/QlwzQQ15J51hqT9eubgHiw09+O4PYAelUcfk01T4iRh0Cz8PPjXBAFamWCma/RAMu79zsQRrAyO7XyeILld09NZ1wuu2owPH/v1QL 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)(39860400002)(366004)(396003)(346002)(136003)(376002)(66556008)(84970400001)(316002)(8676002)(38100700002)(2906002)(64756008)(66476007)(4326008)(66446008)(8936002)(33656002)(71200400001)(52536014)(5660300002)(41300700001)(76116006)(30864003)(26005)(6916009)(7696005)(9686003)(6506007)(53546011)(478600001)(86362001)(66946007)(83380400001)(186003)(38070700005)(122000001)(55016003)(54906003)(559001)(579004); DIR:OUT; SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6126 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: VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 797b593c-8145-465c-16ba-08da63ea6df8 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4kZuTF7+Sw2frmgiDU4sjIZ+MAosJfA2t+4hVLavXIXJ4rde7WuoH52LYsnEoecbZjnDvp0I8n4euyZt8HiU/jaED4YpLTsniGkgZS+9DlP0CIxiDBSjEx5ybYQlOgRSi+/pJpIrz8R1aok9TSTV7xXnriFueSk1HiSthiOUyPYZLr97eNGIhGSI6GYoP+2v72NKZKK7UBpqbJKZifeLBy9ThG0mJHQeAgfdzy220uam40GsB4Et4G3PbKpAXqJ02qXODJ/0S60K2ZRq/L73caq9DFtpZBBIKOA529a5tgxqfuW2BJBV6iOiv8ejRXUhgr0kZL0aKwdfTc7RpFI3jLD9TfrGrMJXhrr1uAzXcuOtRxyeIn6dkc1xMO0NhhyOXKhl+LGcv4rQfTJ0afMy1JmcFJ18fyBFGfmvVKDOXbrwKzWfkol49FQ58fZLNxWR3+Qy+oF43lev0YocPbR2Yf88RndbEwUxx9/8ZyxbeM+WyNV4NOhWPJ8PqPb7GlQSO5D0OJCxv0RjGlprqWmqOubdMl8kjYyTNJBiqFjkyfelsAC9GdnMP2WG1m+CjUJs3ZANjyMcHGg2xgplDIxfHtQPLsXnLfRAw0nEsSN0yriAiDtoBhN4fBm8QZP/wLNGbOJszmyzuFOFW1D0sETc6dAicZ6scINUW5PM+c6Q8psFr3yhahdE/TCOl10kdTtoUGj10WHO5BrnDb7qKwxm+IadAWgrroopVsz/GgsGMRvUxAlmJrxaDpicVI38hR03VbhBxcYHcmMpvPQ+eceKLxKCsYZ4528If3SostFY233ohw1BCTrIz3Ud93hVAuHDqMGteAVqWwQOk6r01KC5Q3g2nA9UoLpGU0G9DvjQO1kleg61dnMhCKlix3gzt5BFqnOuyS0LMgX97qxWG9pcIg== 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)(39860400002)(396003)(136003)(346002)(376002)(40470700004)(36840700001)(46966006)(55016003)(107886003)(47076005)(8936002)(6862004)(478600001)(336012)(7696005)(36860700001)(52536014)(40480700001)(186003)(84970400001)(33656002)(26005)(86362001)(82310400005)(8676002)(9686003)(54906003)(316002)(40460700003)(81166007)(2906002)(83380400001)(356005)(30864003)(5660300002)(82740400003)(70586007)(70206006)(4326008)(53546011)(41300700001)(6506007); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jul 2022 09:39:44.1355 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a9122dd7-a4d7-4b1d-f4c5-08da63ea73d0 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: VE1EUR03FT060.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR08MB2788 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, KAM_LOTSOFHASH, 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 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: Tue, 12 Jul 2022 09:39:54 -0000 cGluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFRhbWFyIENocmlz dGluYQ0KPiBTZW50OiBUdWVzZGF5LCBKdWx5IDUsIDIwMjIgNDoyNiBQTQ0KPiBUbzogUmljaGFy ZCBCaWVuZXIgPHJndWVudGhlckBzdXNlLmRlPg0KPiBDYzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5v cmc7IG5kIDxuZEBhcm0uY29tPjsgamFrdWJAcmVkaGF0LmNvbQ0KPiBTdWJqZWN0OiBSRTogW1BB VENIIDIvMl1taWRkbGUtZW5kOiBTdXBwb3J0IHJlY29nbml0aW9uIG9mIHRocmVlLXdheQ0KPiBt YXgvbWluLg0KPiANCj4gPiA+ICAJfQ0KPiA+ID4gKyAgICAgIGVsc2UgaWYgKEVER0VfU1VDQyAo YmIxLCAwKS0+ZGVzdCA9PSBFREdFX1NVQ0MgKGJiMiwgMCktPmRlc3QNCj4gPiA+ICsJICAgICAg ICYmIHNpbmdsZV9zdWNjX3AgKGJiMSkNCj4gPiA+ICsJICAgICAgICYmIHNpbmdsZV9zdWNjX3Ag KGJiMikNCj4gPiA+ICsJICAgICAgICYmIHNpbmdsZV9wcmVkX3AgKGJiMSkNCj4gPiA+ICsJICAg ICAgICYmIHNpbmdsZV9wcmVkX3AgKGJiMikNCj4gPiA+ICsJICAgICAgICYmIHNpbmdsZV9zdWNj X3AgKEVER0VfU1VDQyAoYmIxLCAwKS0+ZGVzdCkpDQo+ID4NCj4gPiBwbGVhc2UgZG8gdGhlIHNp bmdsZV9zdWNjL3ByZWQgY2hlY2tzIGJlbG93IHdoZXJlIGFwcHJvcHJpYXRlLCBhbHNvDQo+ID4g d2hhdCdzIHRoZSBsYXN0IGNoZWNrIGFib3V0Pw0KPiANCj4gRG9uZS4NCj4gDQo+ID4gd2h5IGRv ZXMgdGhlIG1lcmdlIGJsb2NrIG5lZWQgYSBzaW5nbGUgc3VjY2Vzc29yPw0KPiANCj4gSSB3YXMg dXNpbmcgaXQgdG8gZml4IGFuIElDRSwgYnV0IEkgcmVhbGl6ZSB0aGF0J3Mgbm90IHRoZSByaWdo dCBmaXguIEknbSBub3cNCj4gY2hlY2tpbmcgSWYgdGhlIEJCIGlzIGVtcHR5IGluc3RlYWQsIGlu IHdoaWNoIGNhc2UgaXQncyBqdXN0IGEgZmFsbCB0aHJvdWdoIGVkZ2UNCj4gc28gZG9uJ3QgdHJl YXQgaXQgYXMgYSBkaWFtb25kLg0KPiANCj4gPg0KPiA+ID4gKwl7DQo+ID4gPiArCSAgZ2ltcGxl X3N0bXRfaXRlcmF0b3IgaXQxID0gZ3NpX3N0YXJ0X25vbmRlYnVnX2FmdGVyX2xhYmVsc19iYg0K PiA+IChiYjEpOw0KPiA+ID4gKwkgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGl0MiA9IGdzaV9zdGFy dF9ub25kZWJ1Z19hZnRlcl9sYWJlbHNfYmINCj4gPiAoYmIyKTsNCj4gPiA+ICsJICBpZiAoZ3Np X29uZV9iZWZvcmVfZW5kX3AgKGl0MSkgJiYgZ3NpX29uZV9iZWZvcmVfZW5kX3AgKGl0MikpDQo+ ID4gPiArCSAgICB7DQo+ID4gPiArCSAgICAgIGdpbXBsZSAqc3RtdDEgPSBnc2lfc3RtdCAoaXQx KTsNCj4gPiA+ICsJICAgICAgZ2ltcGxlICpzdG10MiA9IGdzaV9zdG10IChpdDIpOw0KPiA+ID4g KwkgICAgICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdDEpICYmIGlzX2dpbXBsZV9hc3NpZ24g KHN0bXQyKSkNCj4gPiA+ICsJCXsNCj4gPiA+ICsJCSAgZW51bSB0cmVlX2NvZGUgY29kZTEgPSBn aW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10MSk7DQo+ID4gPiArCQkgIGVudW0gdHJlZV9jb2Rl IGNvZGUyID0gZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoc3RtdDIpOw0KPiA+ID4gKwkJICBkaWFt b25kX21pbm1heF9wDQo+ID4gPiArCQkgICAgPSAoY29kZTEgPT0gTUlOX0VYUFIgfHwgY29kZTEg PT0gTUFYX0VYUFIpDQo+ID4gPiArCQkgICAgICAmJiAoY29kZTIgPT0gTUlOX0VYUFIgfHwgY29k ZTIgPT0gTUFYX0VYUFIpOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwkgICAgfQ0KPiA+ID4gKwl9DQo+ ID4NCj4gPiBJJ2QgZ2VuZXJhbGl6ZSB0aGlzIHRvIGdlbmVyYWwgZGlhbW9uZCBkZXRlY3Rpb24s IHNpbXBseSBjdXR0aW5nIG9mZg0KPiA+ICpfcmVwbGFjZW1lbnQgd29ya2VycyB0aGF0IGRvIG5v dCBoYW5kbGUgZGlhbW9uZHMgYW5kIGRvIGFwcHJvcHJpYXRlDQo+ID4gY2hlY2tzIGluIG1pbm1h eF9yZXBsYWNlbWVudCBvbmx5Lg0KPiA+DQo+IA0KPiBEb25lLg0KPiANCj4gPiA+ICAgICAgICBl bHNlDQo+ID4gPiAgCWNvbnRpbnVlOw0KPiA+ID4NCj4gPiA+IEBAIC0zMTYsNiArMzQwLDEzIEBA IHRyZWVfc3NhX3BoaW9wdF93b3JrZXIgKGJvb2wgZG9fc3RvcmVfZWxpbSwNCj4gPiBib29sIGRv X2hvaXN0X2xvYWRzLCBib29sIGVhcmx5X3ApDQo+ID4gPiAgCSAgaWYgKCFjYW5kb3Jlc3QpDQo+ ID4gPiAgCSAgICBjb250aW51ZTsNCj4gPiA+DQo+ID4gPiArCSAgLyogQ2hlY2sgdGhhdCB3ZSdy ZSBsb29raW5nIGZvciBuZXN0ZWQgcGhpcy4gICovDQo+ID4gPiArCSAgaWYgKHBoaXMgPT0gTlVM TCAmJiBkaWFtb25kX21pbm1heF9wKQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkgICAgICBwaGlz ID0gcGhpX25vZGVzIChFREdFX1NVQ0MgKGJiMiwgMCktPmRlc3QpOw0KPiA+ID4gKwkgICAgICBl MiA9IEVER0VfU1VDQyAoYmIyLCAwKTsNCj4gPiA+ICsJICAgIH0NCj4gPiA+ICsNCj4gPg0KPiA+ IGluc3RlYWQNCj4gPg0KPiA+ICAgICAgICAgICBiYXNpY19ibG9jayBtZXJnZSA9IGRpYW1vbmRf cCA/IEVER0VfU1VDQyAoYmIyLCAwKS0+ZGVzdCA6IGJiMjsNCj4gPiAgICAgICAgICAgZ2ltcGxl X3NlcSBwaGlzID0gcGhpX25vZGVzIChtZXJnZSk7DQo+ID4NCj4gDQo+IERvbmUuDQo+IA0KPiA+ DQo+ID4gPiAgCSAgcGhpID0gc2luZ2xlX25vbl9zaW5nbGV0b25fcGhpX2Zvcl9lZGdlcyAocGhp cywgZTEsIGUyKTsNCj4gPiA+ICAJICBpZiAoIXBoaSkNCj4gPiA+ICAJICAgIGNvbnRpbnVlOw0K PiA+ID4gQEAgLTMyOSw2ICszNjAsNyBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRv X3N0b3JlX2VsaW0sDQo+IGJvb2wNCj4gPiA+IGRvX2hvaXN0X2xvYWRzLCBib29sIGVhcmx5X3Ap DQo+ID4gPg0KPiA+ID4gIAkgIGdwaGkgKm5ld3BoaTsNCj4gPiA+ICAJICBpZiAoc2luZ2xlX3By ZWRfcCAoYmIxKQ0KPiA+ID4gKwkgICAgICAmJiAhZGlhbW9uZF9taW5tYXhfcA0KPiA+ID4gIAkg ICAgICAmJiAobmV3cGhpID0gZmFjdG9yX291dF9jb25kaXRpb25hbF9jb252ZXJzaW9uIChlMSwg ZTIsIHBoaSwNCj4gPiA+ICAJCQkJCQkJICAgICAgYXJnMCwgYXJnMSwNCj4gPiA+ICAJCQkJCQkJ ICAgICAgY29uZF9zdG10KSkpDQo+ID4gPiBAQCAtMzQzLDIwICszNzUsMjUgQEAgdHJlZV9zc2Ff cGhpb3B0X3dvcmtlciAoYm9vbCBkb19zdG9yZV9lbGltLA0KPiA+IGJvb2wgZG9faG9pc3RfbG9h ZHMsIGJvb2wgZWFybHlfcCkNCj4gPiA+ICAJICAgIH0NCj4gPiA+DQo+ID4gPiAgCSAgLyogRG8g dGhlIHJlcGxhY2VtZW50IG9mIGNvbmRpdGlvbmFsIGlmIGl0IGNhbiBiZSBkb25lLiAgKi8NCj4g PiA+IC0JICBpZiAoIWVhcmx5X3AgJiYgdHdvX3ZhbHVlX3JlcGxhY2VtZW50IChiYiwgYmIxLCBl MiwgcGhpLCBhcmcwLA0KPiA+IGFyZzEpKQ0KPiA+ID4gKwkgIGlmICghZWFybHlfcA0KPiA+ID4g KwkgICAgICAmJiAhZGlhbW9uZF9taW5tYXhfcA0KPiA+ID4gKwkgICAgICAmJiB0d29fdmFsdWVf cmVwbGFjZW1lbnQgKGJiLCBiYjEsIGUyLCBwaGksIGFyZzAsIGFyZzEpKQ0KPiA+ID4gIAkgICAg Y2ZnY2hhbmdlZCA9IHRydWU7DQo+ID4gPiAtCSAgZWxzZSBpZiAobWF0Y2hfc2ltcGxpZnlfcmVw bGFjZW1lbnQgKGJiLCBiYjEsIGUxLCBlMiwgcGhpLA0KPiA+ID4gLQkJCQkJICAgICAgIGFyZzAs IGFyZzEsDQo+ID4gPiAtCQkJCQkgICAgICAgZWFybHlfcCkpDQo+ID4gPiArCSAgZWxzZSBpZiAo IWRpYW1vbmRfbWlubWF4X3ANCj4gPiA+ICsJCSAgICYmIG1hdGNoX3NpbXBsaWZ5X3JlcGxhY2Vt ZW50IChiYiwgYmIxLCBlMSwgZTIsIHBoaSwNCj4gPiA+ICsJCQkJCQkgIGFyZzAsIGFyZzEsIGVh cmx5X3ApKQ0KPiA+ID4gIAkgICAgY2ZnY2hhbmdlZCA9IHRydWU7DQo+ID4gPiAgCSAgZWxzZSBp ZiAoIWVhcmx5X3ANCj4gPiA+ICsJCSAgICYmICFkaWFtb25kX21pbm1heF9wDQo+ID4gPiAgCQkg ICAmJiBzaW5nbGVfcHJlZF9wIChiYjEpDQo+ID4gPiAgCQkgICAmJiBjb25kX3JlbW92YWxfaW5f YnVpbHRpbl96ZXJvX3BhdHRlcm4gKGJiLCBiYjEsIGUxLA0KPiA+IGUyLA0KPiA+ID4gIAkJCQkJ CQkgICAgcGhpLCBhcmcwLCBhcmcxKSkNCj4gPiA+ICAJICAgIGNmZ2NoYW5nZWQgPSB0cnVlOw0K PiA+ID4gLQkgIGVsc2UgaWYgKG1pbm1heF9yZXBsYWNlbWVudCAoYmIsIGJiMSwgZTEsIGUyLCBw aGksIGFyZzAsIGFyZzEpKQ0KPiA+ID4gKwkgIGVsc2UgaWYgKG1pbm1heF9yZXBsYWNlbWVudCAo YmIsIGJiMSwgYmIyLCBlMSwgZTIsIHBoaSwgYXJnMCwgYXJnMSwNCj4gPiA+ICsJCQkJICAgICAg IGRpYW1vbmRfbWlubWF4X3ApKQ0KPiA+ID4gIAkgICAgY2ZnY2hhbmdlZCA9IHRydWU7DQo+ID4g PiAgCSAgZWxzZSBpZiAoc2luZ2xlX3ByZWRfcCAoYmIxKQ0KPiA+ID4gKwkJICAgJiYgIWRpYW1v bmRfbWlubWF4X3ANCj4gPiA+ICAJCSAgICYmIHNwYWNlc2hpcF9yZXBsYWNlbWVudCAoYmIsIGJi MSwgZTEsIGUyLCBwaGksIGFyZzAsDQo+ID4gYXJnMSkpDQo+ID4gPiAgCSAgICBjZmdjaGFuZ2Vk ID0gdHJ1ZTsNCj4gPiA+ICAJfQ0KPiA+ID4gQEAgLTM4NSw3ICs0MjIsNyBAQCB0cmVlX3NzYV9w aGlvcHRfd29ya2VyIChib29sIGRvX3N0b3JlX2VsaW0sDQo+IGJvb2wNCj4gPiA+IGRvX2hvaXN0 X2xvYWRzLCBib29sIGVhcmx5X3ApDQo+ID4gPg0KPiA+ID4gIHN0YXRpYyB2b2lkDQo+ID4gPiAg cmVwbGFjZV9waGlfZWRnZV93aXRoX3ZhcmlhYmxlIChiYXNpY19ibG9jayBjb25kX2Jsb2NrLA0K PiA+ID4gLQkJCQllZGdlIGUsIGdwaGkgKnBoaSwgdHJlZSBuZXdfdHJlZSkNCj4gPiA+ICsJCQkJ ZWRnZSBlLCBncGhpICpwaGksIHRyZWUgbmV3X3RyZWUsIGJvb2wNCj4gPiBkZWxldGVfYmIgPSB0 cnVlKQ0KPiA+ID4gIHsNCj4gPiA+ICAgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxlX2JiIChwaGkp Ow0KPiA+ID4gICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpOw0KPiA+ID4gQEAgLTQyOCw3ICs0 NjUsNyBAQCByZXBsYWNlX3BoaV9lZGdlX3dpdGhfdmFyaWFibGUgKGJhc2ljX2Jsb2NrDQo+ID4g Y29uZF9ibG9jaywNCj4gPiA+ICAgICAgZWRnZV90b19yZW1vdmUgPSBFREdFX1NVQ0MgKGNvbmRf YmxvY2ssIDEpOw0KPiA+ID4gICAgZWxzZQ0KPiA+ID4gICAgICBlZGdlX3RvX3JlbW92ZSA9IEVE R0VfU1VDQyAoY29uZF9ibG9jaywgMCk7DQo+ID4gPiAtICBpZiAoRURHRV9DT1VOVCAoZWRnZV90 b19yZW1vdmUtPmRlc3QtPnByZWRzKSA9PSAxKQ0KPiA+ID4gKyAgaWYgKEVER0VfQ09VTlQgKGVk Z2VfdG9fcmVtb3ZlLT5kZXN0LT5wcmVkcykgPT0gMSAmJg0KPiBkZWxldGVfYmIpDQo+ID4NCj4g PiB3aHkgZG8geW91IG5lZWQgdGhpcyBjaGFuZ2U/DQo+IA0KPiBXaGVuIHRoaXMgZnVuY3Rpb24g cmVwbGFjZXMgdGhlIGVkZ2UgaXQgZG9lc24ndCBzZWVtIHRvIHVwZGF0ZSB0aGUNCj4gZG9taW5h dG9ycy4NCj4gU2luY2UgSXQncyByZXBsYWNpbmcgdGhlIG1pZGRsZSBCQiB3ZSB0aGVuIGVuZCB1 cCB3aXRoIGFuIGVycm9yDQo+IA0KPiBnY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5t YXgtMTQuYzoxNzoxOiBlcnJvcjogZG9taW5hdG9yIG9mIDUNCj4gc2hvdWxkIGJlIDQsIG5vdCAy DQo+IA0KPiBkdXJpbmcgZWFybHkgdmVyaWZ5LiBTbyBpbnN0ZWFkLCBJIHJlcGxhY2UgdGhlIEJC IGJ1dCBkZWZlciBpdHMgZGVsZXRpb24gdW50aWwNCj4gY2xlYW51cCB3aGljaCByZW1vdmVzIGl0 IGFuZCB1cGRhdGVzIHRoZSBkb21pbmF0b3JzLg0KPiANCj4gPg0KPiA+IERpZCB5b3UgY2hlY2sg d2hldGhlciB0aGUgbmV3IGNhc2Ugd29ya3Mgd2hlbiB0aGUgbWVyZ2UgYmxvY2sgaGFzDQo+IG1v cmUNCj4gPiB0aGFuIHR3byBpbmNvbWluZyBlZGdlcz8NCj4gPg0KPiANCj4gWWVzLCBhZGRlZCBh IG5ldyB0ZXN0Y2FzZSBmb3IgaXQuDQo+IA0KPiA+ID4gKyAgZWxzZSBpZiAobWlkZGxlX2JiICE9 IGFsdF9taWRkbGVfYmIgJiYgdGhyZWV3YXlfcCkNCj4gPiA+ICsgICAgew0KPiA+ID4gKyAgICAg IC8qIFJlY29nbml6ZSB0aGUgZm9sbG93aW5nIGNhc2U6DQo+ID4gPiArDQo+ID4gPiArCSBpZiAo c21hbGxlciA8IGxhcmdlcikNCj4gPiA+ICsJICAgYSA9IE1JTiAoc21hbGxlciwgYyk7DQo+ID4g PiArCSBlbHNlDQo+ID4gPiArCSAgIGIgPSBNSU4gKGxhcmdlciwgYyk7DQo+ID4gPiArCSB4ID0g UEhJIDxhLCBiPg0KPiA+ID4gKw0KPiA+ID4gKwkgVGhpcyBpcyBlcXVpdmFsZW50IHRvDQo+ID4g PiArDQo+ID4gPiArCSBhID0gTUlOIChzbWFsbGVyLCBjKTsNCj4gPiA+ICsJIHggPSBNSU4gKGxh cmdlciwgYSk7ICAqLw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIGdpbXBsZSAqYXNzaWduID0gbGFz dF9hbmRfb25seV9zdG10IChtaWRkbGVfYmIpOw0KPiA+ID4gKyAgICAgIHRyZWUgbGhzLCBvcDAs IG9wMSwgYm91bmQ7DQo+ID4gPiArICAgICAgdHJlZSBhbHRfbGhzLCBhbHRfb3AwLCBhbHRfb3Ax Ow0KPiA+ID4gKyAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgaWYgKCFzaW5nbGVfcHJlZF9wIChtaWRkbGVfYmIpDQo+ID4gPiArCSAgfHwgIXNpbmdsZV9w cmVkX3AgKGFsdF9taWRkbGVfYmIpKQ0KPiA+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgaWYgKCFhc3NpZ24NCj4gPiA+ICsJICB8fCBnaW1wbGVfY29kZSAoYXNzaWdu KSAhPSBHSU1QTEVfQVNTSUdOKQ0KPiA+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gPiArDQo+ID4g PiArICAgICAgbGhzID0gZ2ltcGxlX2Fzc2lnbl9saHMgKGFzc2lnbik7DQo+ID4gPiArICAgICAg YXNzX2NvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChhc3NpZ24pOw0KPiA+ID4gKyAgICAg IGlmIChhc3NfY29kZSAhPSBNQVhfRVhQUiAmJiBhc3NfY29kZSAhPSBNSU5fRVhQUikNCj4gPiA+ ICsJcmV0dXJuIGZhbHNlOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgIG9wMCA9IGdpbXBsZV9hc3Np Z25fcmhzMSAoYXNzaWduKTsNCj4gPiA+ICsgICAgICBvcDEgPSBnaW1wbGVfYXNzaWduX3JoczIg KGFzc2lnbik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgYXNzaWduID0gbGFzdF9hbmRfb25seV9z dG10IChhbHRfbWlkZGxlX2JiKTsNCj4gPiA+ICsgICAgICBpZiAoIWFzc2lnbg0KPiA+ID4gKwkg IHx8IGdpbXBsZV9jb2RlIChhc3NpZ24pICE9IEdJTVBMRV9BU1NJR04pDQo+ID4gPiArCXJldHVy biBmYWxzZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICBhbHRfbGhzID0gZ2ltcGxlX2Fzc2lnbl9s aHMgKGFzc2lnbik7DQo+ID4gPiArICAgICAgaWYgKGFzc19jb2RlICE9IGdpbXBsZV9hc3NpZ25f cmhzX2NvZGUgKGFzc2lnbikpDQo+ID4gPiArCXJldHVybiBmYWxzZTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICBhbHRfb3AwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChhc3NpZ24pOw0KPiA+ID4gKyAg ICAgIGFsdF9vcDEgPSBnaW1wbGVfYXNzaWduX3JoczIgKGFzc2lnbik7DQo+ID4gPiArDQo+ID4g PiArICAgICAgaWYgKCFvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKGxocywgYXJnX3RydWUp DQo+ID4gPiArCSB8fCAhb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRfbGhzLCBhcmdf ZmFsc2UpKQ0KPiA+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gPiArDQo+ID4gPiArICAgICAgaWYg KChvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9wMCwgc21hbGxlcikNCj4gPiA+ICsJCXx8 IChhbHRfc21hbGxlcg0KPiA+ID4gKwkJICAgICYmIG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdf cCAob3AwLCBhbHRfc21hbGxlcikpKQ0KPiA+ID4gKwkgICAgICAgJiYgKG9wZXJhbmRfZXF1YWxf Zm9yX3BoaV9hcmdfcCAoYWx0X29wMCwgbGFyZ2VyKQ0KPiA+ID4gKwkJICAgfHwgKGFsdF9sYXJn ZXINCj4gPiA+ICsJCSAgICAgICAmJiBvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKGFsdF9v cDAsIGFsdF9sYXJnZXIpKSkpDQo+ID4gPiArCXsNCj4gPiA+ICsJICAvKiBXZSBnb3QgaGVyZSBp ZiB0aGUgY29uZGl0aW9uIGlzIHRydWUsIGkuZS4sIFNNQUxMRVIgPCBMQVJHRVIuICAqLw0KPiA+ ID4gKwkgIGlmICghb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChvcDEsIGFsdF9vcDEpKQ0K PiA+ID4gKwkgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4gKw0KPiA+ID4gKwkgIGlmICgoYXJnMCA9 IHN0cmlwX2JpdF9ub3QgKG9wMCkpICE9IE5VTEwNCj4gPiA+ICsJICAgICAgJiYgKGFyZzEgPSBz dHJpcF9iaXRfbm90IChhbHRfb3AwKSkgIT0gTlVMTA0KPiA+ID4gKwkgICAgICAmJiAoYm91bmQg PSBzdHJpcF9iaXRfbm90IChvcDEpKSAhPSBOVUxMKQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkg ICAgICBtaW5tYXggPSBNQVhfRVhQUjsNCj4gPiA+ICsJICAgICAgYXNzX2NvZGUgPSBpbnZlcnRf bWlubWF4X2NvZGUgKGFzc19jb2RlKTsNCj4gPiA+ICsJICAgICAgaW52ZXJ0ID0gdHJ1ZTsNCj4g PiA+ICsJICAgIH0NCj4gPiA+ICsJICBlbHNlDQo+ID4gPiArCSAgICB7DQo+ID4gPiArCSAgICAg IGJvdW5kID0gb3AxOw0KPiA+ID4gKwkgICAgICBtaW5tYXggPSBNSU5fRVhQUjsNCj4gPiA+ICsJ ICAgICAgYXJnMCA9IG9wMDsNCj4gPiA+ICsJICAgICAgYXJnMSA9IGFsdF9vcDA7DQo+ID4gPiAr CSAgICAgfQ0KPiA+ID4gKwl9DQo+ID4gPiArICAgICAgZWxzZSBpZiAoKG9wZXJhbmRfZXF1YWxf Zm9yX3BoaV9hcmdfcCAob3AwLCBsYXJnZXIpDQo+ID4gPiArCQl8fCAoYWx0X2xhcmdlcg0KPiA+ ID4gKwkJICAgICYmIG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAob3AwLCBhbHRfbGFyZ2Vy KSkpDQo+ID4gPiArCSAgICAgICAmJiAob3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRf b3AwLCBzbWFsbGVyKQ0KPiA+ID4gKwkJICAgfHwgKGFsdF9zbWFsbGVyDQo+ID4gPiArCQkgICAg ICAgJiYgb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRfb3AwLA0KPiA+IGFsdF9zbWFs bGVyKSkpKQ0KPiA+ID4gKwl7DQo+ID4gPiArCSAgLyogV2UgZ290IGhlcmUgaWYgdGhlIGNvbmRp dGlvbiBpcyB0cnVlLCBpLmUuLCBTTUFMTEVSID4gTEFSR0VSLiAgKi8NCj4gPiA+ICsJICBpZiAo IW9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAob3AxLCBhbHRfb3AxKSkNCj4gPiA+ICsJICAg IHJldHVybiBmYWxzZTsNCj4gPiA+ICsNCj4gPiA+ICsJICBpZiAoKGFyZzAgPSBzdHJpcF9iaXRf bm90IChvcDApKSAhPSBOVUxMDQo+ID4gPiArCSAgICAgICYmIChhcmcxID0gc3RyaXBfYml0X25v dCAoYWx0X29wMCkpICE9IE5VTEwNCj4gPiA+ICsJICAgICAgJiYgKGJvdW5kID0gc3RyaXBfYml0 X25vdCAob3AxKSkgIT0gTlVMTCkNCj4gPiA+ICsJICAgIHsNCj4gPiA+ICsJICAgICAgbWlubWF4 ID0gTUlOX0VYUFI7DQo+ID4gPiArCSAgICAgIGFzc19jb2RlID0gaW52ZXJ0X21pbm1heF9jb2Rl IChhc3NfY29kZSk7DQo+ID4gPiArCSAgICAgIGludmVydCA9IHRydWU7DQo+ID4gPiArCSAgICB9 DQo+ID4gPiArCSAgZWxzZQ0KPiA+ID4gKwkgICAgew0KPiA+ID4gKwkgICAgICBib3VuZCA9IG9w MTsNCj4gPiA+ICsJICAgICAgbWlubWF4ID0gTUFYX0VYUFI7DQo+ID4gPiArCSAgICAgIGFyZzAg PSBvcDA7DQo+ID4gPiArCSAgICAgIGFyZzEgPSBhbHRfb3AwOw0KPiA+ID4gKwkgICAgIH0NCj4g PiA+ICsJfQ0KPiA+ID4gKyAgICAgIGVsc2UNCj4gPiA+ICsJcmV0dXJuIGZhbHNlOw0KPiA+DQo+ ID4gRGlkIHlvdSBjaGVjayB5b3UgaGF2ZSBjb3ZlcmFnZSBmb3IgYWxsIGNhc2VzIGFib3ZlIGlu IHlvdXIgdGVzdGNhc2VzPw0KPiANCj4gSSd2ZSBhZGRlZCBzb21lIG1vcmUsIHNob3VsZCBub3cg aGF2ZSBmdWxsIGNvdmVyYWdlLg0KPiANCj4gPg0KPiA+ID4gKyAgICAgIC8qIFJlc2V0IGFueSBy YW5nZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBiYXNpYyBibG9jay4gICovDQo+ID4gPiArICAgICAg cmVzZXRfZmxvd19zZW5zaXRpdmVfaW5mb19pbl9iYiAoY29uZF9iYik7DQo+ID4NCj4gPiBIdWgu ICBZb3UgbmVlZCB0byByZXNldCBmbG93LXNlbnNpdGl2ZSBpbmZvIG9mIHRoZSBtaWRkbGUtYmIg c3RtdCB0aGF0DQo+ID4gcHJldmFpbHMgb25seS4uLg0KPiA+DQo+ID4gPiArICAgICAgLyogRW1p dCB0aGUgc3RhdGVtZW50IHRvIGNvbXB1dGUgbWluL21heC4gICovDQo+ID4gPiArICAgICAgZ2lt cGxlX3NlcSBzdG10cyA9IE5VTEw7DQo+ID4gPiArICAgICAgdHJlZSBwaGlfcmVzdWx0ID0gUEhJ X1JFU1VMVCAocGhpKTsNCj4gPiA+ICsgICAgICByZXN1bHQgPSBnaW1wbGVfYnVpbGQgKCZzdG10 cywgbWlubWF4LCBUUkVFX1RZUEUNCj4gPiA+ICsgKHBoaV9yZXN1bHQpLCBhcmcwLA0KPiA+IGJv dW5kKTsNCj4gPiA+ICsgICAgICByZXN1bHQgPSBnaW1wbGVfYnVpbGQgKCZzdG10cywgYXNzX2Nv ZGUsIFRSRUVfVFlQRQ0KPiA+ID4gKyAocGhpX3Jlc3VsdCksIHJlc3VsdCwgYXJnMSk7DQo+ID4N Cj4gPiAuLi4gYnV0IHlvdSBhcmUgcmUtYnVpbGRpbmcgYm90aCBoZXJlLiAgQW5kIGFsc28geW91 IGRyb3AgbG9jYXRpb25zLA0KPiA+IHRoZSBwcmVzZXJ2ZWQgbWluL21heCBzaG91bGQga2VlcCB0 aGUgb2xkLCB0aGUgbmV3IHNob3VsZCBnZXQgdGhlDQo+ID4gbG9jYXRpb24gb2YgLi4uIGhtbSwg dGhlIGNvbmRpdGlvbiBwb3NzaWJseT8NCj4gDQo+IERvbmUsIGFsc28gYWRkZWQgYSB0ZXN0Y2Fz ZSB3aGljaCBjaGVja3MgdGhhdCBpdCBzdGlsbCB3b3JrcyB3aGVuIC1nLg0KPiANCj4gQm9vdHN0 cmFwcGVkIFJlZ3Rlc3RlZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251IGFuZCBubyBpc3N1ZXMu DQo+IA0KPiBPayBmb3IgbWFzdGVyPw0KPiANCj4gVGhhbmtzLA0KPiBUYW1hcg0KPiANCj4gZ2Nj L0NoYW5nZUxvZzoNCj4gDQo+IAkqIHRyZWUtc3NhLXBoaW9wdC5jYyAobWlubWF4X3JlcGxhY2Vt ZW50KTogT3B0aW9uYWxseSBzZWFyY2ggZm9yDQo+IHRoZSBwaGkNCj4gCXNlcXVlbmNlIG9mIGEg dGhyZWUtd2F5IGNvbmRpdGlvbmFsLg0KPiAJKHJlcGxhY2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJs ZSk6IFN1cHBvcnQgZGVmZXJyaW5nIG9mIEJCIHJlbW92YWwuDQo+IAkodHJlZV9zc2FfcGhpb3B0 X3dvcmtlcik6IERldGVjdCBkaWFtb25kIHBoaSBzdHJ1Y3R1cmUgZm9yIHRocmVlLQ0KPiB3YXkN Cj4gCW1pbi9tYXguDQo+IAkoc3RyaXBfYml0X25vdCwgaW52ZXJ0X21pbm1heF9jb2RlKTogTmV3 Lg0KPiANCj4gZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQo+IA0KPiAJKiBnY2MuZGcvdHJlZS1z c2Evc3BsaXQtcGF0aC0xLmM6IERpc2FibGUgcGhpLW9wdHMgc28gd2UgZG9uJ3QNCj4gb3B0aW1p emUNCj4gCWNvZGUgYXdheS4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMC5jOiBOZXcg dGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMS5jOiBOZXcgdGVzdC4NCj4gCSog Z2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMi5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUt c3NhL21pbm1heC0xMy5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0x NC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xNS5jOiBOZXcgdGVz dC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xNi5jOiBOZXcgdGVzdC4NCj4gCSogZ2Nj LmRnL3RyZWUtc3NhL21pbm1heC0zLmM6IE5ldyB0ZXN0Lg0KPiAJKiBnY2MuZGcvdHJlZS1zc2Ev bWlubWF4LTQuYzogTmV3IHRlc3QuDQo+IAkqIGdjYy5kZy90cmVlLXNzYS9taW5tYXgtNS5jOiBO ZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC02LmM6IE5ldyB0ZXN0Lg0KPiAJ KiBnY2MuZGcvdHJlZS1zc2EvbWlubWF4LTcuYzogTmV3IHRlc3QuDQo+IAkqIGdjYy5kZy90cmVl LXNzYS9taW5tYXgtOC5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLmRnL3RyZWUtc3NhL21pbm1heC05 LmM6IE5ldyB0ZXN0Lg0KPiANCj4gLS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tLQ0KPiANCj4g ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMC5jDQo+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTEwLmMNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uNTg5OTUzNjg0NDE2YTlkMjYzMDg0ZGViNQ0KPiA4ZjZjZGU3MDk0ZGQ1MTcNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5t YXgtMTAuYw0KPiBAQCAtMCwwICsxLDIwIEBADQo+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0K PiArLyogeyBkZy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8NCj4gKw0K PiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArDQo+ICt1aW50OF90IHRocmVlX21heCAodWludDhf dCB4YywgdWludDhfdCB4bSwgdWludDhfdCB4eSkgew0KPiArICAgIHVpbnQ4X3QJIHhrOw0KPiAr ICAgIHhjPX54YzsNCj4gKyAgICB4bT1+eG07DQo+ICsgICAgeHk9fnh5Ow0KPiArICAgIGlmICh4 YyA+IHhtKSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4YyA+IHh5ID8geGMgOiB4eSk7 DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhtID4geHkgPyB4 bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0KPiArfQ0KPiArDQo+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAyICJvcHRpbWl6ZWQi IH0gfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICI9IH4iIDEg Im9wdGltaXplZCIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9taW5tYXgtMTEuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21p bm1heC0xMS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMmVmMDFiNWQxZTYzOWZiZjk1YmI1Y2E0 DQo+IDczYjYzY2M5OGU5ZGYxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTExLmMNCj4gQEAgLTAsMCArMSwyMSBAQA0KPiArLyog eyBkZy1kbyBjb21waWxlIH0gKi8NCj4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUt b3B0aW1pemVkIiB9ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArdWlu dDhfdCB0aHJlZV9taW5tYXgxICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7 DQo+ICsJdWludDhfdAkgeGs7DQo+ICsgICAgeGM9fnhjOw0KPiArICAgIHhtPX54bTsNCj4gKyAg ICB4eT1+eHk7DQo+ICsgICAgaWYgKHhjID4geG0pIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhf dCkgKHhjIDwgeHkgPyB4YyA6IHh5KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICB4ayA9 ICh1aW50OF90KSAoeG0gPCB4eSA/IHhtIDogeHkpOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4g eGs7DQo+ICt9DQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi TUlOX0VYUFIiIDEgIm9wdGltaXplZCIgfSB9ICovDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIk1BWF9FWFBSIiAxICJvcHRpbWl6ZWQiIH0gfSAqLw0KPiArLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICI9IH4iIDEgIm9wdGltaXplZCIgfSB9ICov DQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtMTIu Yw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMi5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjNkMGMwN2Q5YjU3ZGQ2ODliY2I4OTY1MzkNCj4gMzc3MjdhYjQ0MWU3ZjJi DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev bWlubWF4LTEyLmMNCj4gQEAgLTAsMCArMSwyMCBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0g Ki8NCj4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtcGhpb3B0IiB9ICovDQo+ICsN Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArdWludDhfdCB0aHJlZV9taW5tYXgzICh1 aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ICsgICAgICAgIHVpbnQ4X3Qg IHhrOw0KPiArICAgIHhjPX54YzsNCj4gKyAgICB4bT1+eG07DQo+ICsgICAgeHk9fnh5Ow0KPiAr ICAgIGlmICh4YyA+IHhtKSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4eSA8IHhjID8g eGMgOiB4eSk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHht IDwgeHkgPyB4bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0KPiArfQ0KPiAr DQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAxICJw aGlvcHQxIiB9IH0gKi8NCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi TUFYX0VYUFIiIDEgInBoaW9wdDEiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTEzLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9taW5tYXgtMTMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGQwZjI3YzgwMjdhZTg3 NjU0NTMyZDFiOQ0KPiAxOWNmZWNjZjQ0MTNlMA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xMy5jDQo+IEBAIC0wLDAgKzEsMTkg QEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMgIi1PIC1m ZHVtcC10cmVlLXBoaW9wdCIgfSAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsN Cj4gK3VpbnQ4X3QgdGhyZWVfbWlubWF4MiAodWludDhfdCB4YywgdWludDhfdCB4bSwgdWludDhf dCB4eSkgew0KPiArCXVpbnQ4X3QJIHhrOw0KPiArICAgIHhjPX54YzsNCj4gKyAgICB4bT1+eG07 DQo+ICsgICAgeHk9fnh5Ow0KPiArICAgIGlmICh4YyA+IHhtKSB7DQo+ICsgICAgICAgIHhrID0g KHVpbnQ4X3QpICh4YyA+IHh5ID8geGMgOiB4eSk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAg ICAgeGsgPSAodWludDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAg cmV0dXJuIHhrOw0KPiArfQ0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJNSU5fRVhQUiIgMSAicGhpb3B0MSIgfSB9ICovDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIk1BWF9FWFBSIiAxICJwaGlvcHQxIiB9IH0gKi8NCj4gZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xNC5jDQo+IGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTE0LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u OWMwY2FkYmY3ZTMxMTk1MjdjYjIwMDdkMDENCj4gZmU0YzdkZDc3MmMwNjkNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtMTQuYw0K PiBAQCAtMCwwICsxLDIxIEBADQo+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiArLyogeyBk Zy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1vcHRpbWl6ZWQiIH0gKi8NCj4gKw0KPiArI2luY2x1 ZGUgPHN0ZGludC5oPg0KPiArDQo+ICt1aW50OF90IHRocmVlX21pbm1heDExICh1aW50OF90IHhj LCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ICsgICAgICAgIHVpbnQ4X3QgIHhrOw0KPiAr ICAgIHhjPX54YzsNCj4gKyAgICB4bT1+eG07DQo+ICsgICAgeHk9fnh5Ow0KPiArICAgIGlmICh4 YyA8IHhtKSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4YyA+IHh5ID8geGMgOiB4eSk7 DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhtID4geHkgPyB4 bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0KPiArfQ0KPiArDQo+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAxICJvcHRpbWl6ZWQi IH0gfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNQVhfRVhQ UiIgMSAib3B0aW1pemVkIiB9IH0gKi8NCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiPSB+IiAxICJvcHRpbWl6ZWQiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTE1LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy90cmVlLXNzYS9taW5tYXgtMTUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDk3YTE2NTY0 ZjA2OWI0MzQ4ZmYzMjVjNGYNCj4gZDcxM2EyMjRmODM4YQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xNS5jDQo+IEBAIC0wLDAg KzEsMjEgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMg Ii1PIC1mZHVtcC10cmVlLXBoaW9wdCIgfSAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+ DQo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPiArDQo+ICt1aW50OF90IHRocmVlX21pbiAodWlu dDhfdCB4YywgdWludDhfdCB4bSwgdWludDhfdCB4eSwgYm9vbCBtKSB7DQo+ICsgICAgdWludDhf dCAgeGs7DQo+ICsgICAgaWYgKHhjKQ0KPiArICAgICAgew0KPiArICAgICAgICBpZiAoeGMgPCB4 bSkgew0KPiArICAgICAgICAgICAgeGsgPSAodWludDhfdCkgKHhjIDwgeHkgPyB4YyA6IHh5KTsN Cj4gKyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4bSA8 IHh5ID8geG0gOiB4eSk7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgIHJl dHVybiB4azsNCj4gK30NCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi TUlOX0VYUFIiIDMgInBoaW9wdDEiIH0gfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJNQVhfRVhQUiIgMCAicGhpb3B0MSIgfSB9ICovDQo+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtMTYuYw0KPiBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC0xNi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5 Mzc3YTJjYjM0MWJkYWZhNmJhMTQ1YzYxDQo+IGMxZjk2NmFmNTM2ODM5DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTE2LmMNCj4g QEAgLTAsMCArMSwxNyBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gKy8qIHsgZGct b3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtcGhpb3B0IC1nIiB9ICovDQo+ICsNCj4gKyNpbmNsdWRl IDxzdGRpbnQuaD4NCj4gKw0KPiArdWludDhfdCB0aHJlZV9taW4gKHVpbnQ4X3QgeGMsIHVpbnQ4 X3QgeG0sIHVpbnQ4X3QgeHkpIHsNCj4gKwl1aW50OF90CSB4azsNCj4gKyAgICBpZiAoeGMgPCB4 bSkgew0KPiArICAgICAgICB4ayA9ICh1aW50OF90KSAoeGMgPCB4eSA/IHhjIDogeHkpOw0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4bSA8IHh5ID8geG0gOiB4 eSk7DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiB4azsNCj4gK30NCj4gKw0KPiArLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNSU5fRVhQUiIgMyAicGhpb3B0MSIgfSB9ICov DQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1BWF9FWFBSIiAwICJw aGlvcHQxIiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL21pbm1heC0zLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgt My5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlM2IyZTk0NmU4MTcwMWUzYjc1ZjU4MGUNCj4gNmE4 NDM2OTVhMDU3ODZlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdHJlZS1zc2EvbWlubWF4LTMuYw0KPiBAQCAtMCwwICsxLDE3IEBADQo+ICsvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLw0KPiArLyogeyBkZy1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1waGlvcHQi IH0gKi8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArDQo+ICt1aW50OF90IHRocmVl X21pbiAodWludDhfdCB4YywgdWludDhfdCB4bSwgdWludDhfdCB4eSkgew0KPiArCXVpbnQ4X3QJ IHhrOw0KPiArICAgIGlmICh4YyA8IHhtKSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4 YyA8IHh5ID8geGMgOiB4eSk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWlu dDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0K PiArfQ0KPiArDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9F WFBSIiAzICJwaGlvcHQxIiB9IH0gKi8NCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiTUFYX0VYUFIiIDAgInBoaW9wdDEiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTQuYw0KPiBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL21pbm1heC00LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI2ZDY2N2Jl ODY4YzI0MDVlYWVmZDE3Yw0KPiBiNTIyZGE0NGJhZmEwZTINCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNC5jDQo+IEBAIC0wLDAg KzEsMTcgQEANCj4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMg Ii1PIC1mZHVtcC10cmVlLXBoaW9wdCIgfSAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+ DQo+ICsNCj4gK3VpbnQ4X3QgdGhyZWVfbWF4ICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50 OF90IHh5KSB7DQo+ICsgICAgdWludDhfdAkgeGs7DQo+ICsgICAgaWYgKHhjID4geG0pIHsNCj4g KyAgICAgICAgeGsgPSAodWludDhfdCkgKHhjID4geHkgPyB4YyA6IHh5KTsNCj4gKyAgICB9IGVs c2Ugew0KPiArICAgICAgICB4ayA9ICh1aW50OF90KSAoeG0gPiB4eSA/IHhtIDogeHkpOw0KPiAr ICAgIH0NCj4gKyAgICByZXR1cm4geGs7DQo+ICt9DQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiTUlOX0VYUFIiIDAgInBoaW9wdDEiIH0gfSAqLw0KPiArLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNQVhfRVhQUiIgMyAicGhpb3B0MSIg fSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5t YXgtNS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTUuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi42NTA2MDFhM2NjNzVkMDlhOWU2ZTU0YTM1Zg0KPiA1Yjk5OTMwNzRm ODUxMA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUt c3NhL21pbm1heC01LmMNCj4gQEAgLTAsMCArMSwxNyBAQA0KPiArLyogeyBkZy1kbyBjb21waWxl IH0gKi8NCj4gKy8qIHsgZGctb3B0aW9ucyAiLU8gLWZkdW1wLXRyZWUtcGhpb3B0IiB9ICovDQo+ ICsNCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiArdWludDhfdCB0aHJlZV9taW5tYXgx ICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ICsJdWludDhfdAkgeGs7 DQo+ICsgICAgaWYgKHhjID4geG0pIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhjIDwg eHkgPyB4YyA6IHh5KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICB4ayA9ICh1aW50OF90 KSAoeG0gPCB4eSA/IHhtIDogeHkpOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4geGs7DQo+ICt9 DQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUlOX0VYUFIi IDIgInBoaW9wdDEiIH0gfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJNQVhfRVhQUiIgMSAicGhpb3B0MSIgfSB9ICovDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy90cmVlLXNzYS9taW5tYXgtNi5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdHJlZS1zc2EvbWlubWF4LTYuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0K PiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjI4ZjZkOTkyMjI5 NThjZmQ4YzQxMGYwZQ0KPiA4NTYzOWUzYTQ5ZGQ0Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC02LmMNCj4gQEAgLTAsMCArMSwx NyBAQA0KPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gKy8qIHsgZGctb3B0aW9ucyAiLU8g LWZkdW1wLXRyZWUtcGhpb3B0IiB9ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4g Kw0KPiArdWludDhfdCB0aHJlZV9taW5tYXgzICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50 OF90IHh5KSB7DQo+ICsgICAgICAgIHVpbnQ4X3QgIHhrOw0KPiArICAgIGlmICh4YyA+IHhtKSB7 DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4eSA8IHhjID8geGMgOiB4eSk7DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsN Cj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0KPiArfQ0KPiArDQo+ICsvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAxICJwaGlvcHQxIiB9IH0gKi8NCj4g Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUFYX0VYUFIiIDEgInBoaW9w dDEiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev bWlubWF4LTcuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC03LmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I0MjQxMmM0YWRhNDMzYjJmNTlkZjBhOGINCj4gZWY5ZmE3 YjFjNWUxMDQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9taW5tYXgtNy5jDQo+IEBAIC0wLDAgKzEsMTYgQEANCj4gKy8qIHsgZGctZG8gY29t cGlsZSB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMgIi1PIC1mZHVtcC10cmVlLXBoaW9wdCIgfSAq Lw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsNCj4gK3VpbnQ4X3QgdGhyZWVfbWlu bWF4MiAodWludDhfdCB4YywgdWludDhfdCB4bSwgdWludDhfdCB4eSkgew0KPiArCXVpbnQ4X3QJ IHhrOw0KPiArICAgIGlmICh4YyA+IHhtKSB7DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4 YyA+IHh5ID8geGMgOiB4eSk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWlu dDhfdCkgKHhtIDwgeHkgPyB4bSA6IHh5KTsNCj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0K PiArfQ0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNSU5fRVhQUiIg MSAicGhpb3B0MSIgfSB9ICovDQo+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIk1BWF9FWFBSIiAxICJwaGlvcHQxIiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC04LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy90cmVlLXNzYS9taW5tYXgtOC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+ IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljZDA1MGU5MzIzNzZi YzUwYmQ2YWU2MGMNCj4gYjY1NGZjYWIwYmZkZDFjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvbWlubWF4LTguYw0KPiBAQCAtMCwwICsxLDE3 IEBADQo+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiArLyogeyBkZy1vcHRpb25zICItTyAt ZmR1bXAtdHJlZS1waGlvcHQiIH0gKi8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiAr DQo+ICt1aW50OF90IHRocmVlX21pbm1heDExICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50 OF90IHh5KSB7DQo+ICsgICAgICAgIHVpbnQ4X3QgIHhrOw0KPiArICAgIGlmICh4YyA8IHhtKSB7 DQo+ICsgICAgICAgIHhrID0gKHVpbnQ4X3QpICh4YyA+IHh5ID8geGMgOiB4eSk7DQo+ICsgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhtID4geHkgPyB4bSA6IHh5KTsN Cj4gKyAgICB9DQo+ICsgICAgcmV0dXJuIHhrOw0KPiArfQ0KPiArDQo+ICsvKiB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIk1JTl9FWFBSIiAxICJwaGlvcHQxIiB9IH0gKi8NCj4g Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiTUFYX0VYUFIiIDIgInBoaW9w dDEiIH0gfSAqLw0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev bWlubWF4LTkuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL21pbm1heC05LmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRmNTgwMjcxYzNhYzM5NDU4NjBiNTA2ZDQNCj4gZGM3ZDE3 OGE4MjYwOTMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy90 cmVlLXNzYS9taW5tYXgtOS5jDQo+IEBAIC0wLDAgKzEsMjAgQEANCj4gKy8qIHsgZGctZG8gY29t cGlsZSB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMgIi1PIC1mZHVtcC10cmVlLW9wdGltaXplZCIg fSAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ICsNCj4gK3VpbnQ4X3QgdGhyZWVf bWluICh1aW50OF90IHhjLCB1aW50OF90IHhtLCB1aW50OF90IHh5KSB7DQo+ICsJdWludDhfdAkg eGs7DQo+ICsgICAgeGM9fnhjOw0KPiArICAgIHhtPX54bTsNCj4gKyAgICB4eT1+eHk7DQo+ICsg ICAgaWYgKHhjIDwgeG0pIHsNCj4gKyAgICAgICAgeGsgPSAodWludDhfdCkgKHhjIDwgeHkgPyB4 YyA6IHh5KTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgICB4ayA9ICh1aW50OF90KSAoeG0g PCB4eSA/IHhtIDogeHkpOw0KPiArICAgIH0NCj4gKyAgICByZXR1cm4geGs7DQo+ICt9DQo+ICsN Cj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSB+IiAxICJvcHRpbWl6 ZWQiIH0gfSAqLw0KPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJNQVhf RVhQUiIgMiAib3B0aW1pemVkIiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3RyZWUtc3NhL3NwbGl0LXBhdGgtMS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dHJlZS1zc2Evc3BsaXQtcGF0aC0xLmMNCj4gaW5kZXgNCj4gOGIyM2VmNGM3YTM0ODRjZGMxNjQ3 ZWU2ZDFiMTUwZjE1Njg1YmVmZi4uOTAyZGRlNDRhNTBlMTcxYjRmMzRiYTcyNA0KPiA3ZDc1YTMy ZDJjODYwZWQgMTAwNjQ0DQo+IC0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3Nw bGl0LXBhdGgtMS5jDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3NwbGl0 LXBhdGgtMS5jDQo+IEBAIC0xLDUgKzEsNSBAQA0KPiAgLyogeyBkZy1kbyBydW4gfSAqLw0KPiAt LyogeyBkZy1vcHRpb25zICItTzIgLWZzcGxpdC1wYXRocyAtZmR1bXAtdHJlZS1zcGxpdC1wYXRo cy1kZXRhaWxzIC0tcGFyYW0NCj4gbWF4LWp1bXAtdGhyZWFkLWR1cGxpY2F0aW9uLXN0bXRzPTIw IiB9ICovDQo+ICsvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZnNwbGl0LXBhdGhzIC1mZHVtcC10cmVl LXNwbGl0LXBhdGhzLWRldGFpbHMNCj4gKy0tcGFyYW0gbWF4LWp1bXAtdGhyZWFkLWR1cGxpY2F0 aW9uLXN0bXRzPTIwIC1mbm8tc3NhLXBoaW9wdCIgfSAqLw0KPiANCj4gICNpbmNsdWRlIDxzdGRp by5oPg0KPiAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3Nh LXBoaW9wdC5jYyBiL2djYy90cmVlLXNzYS1waGlvcHQuY2MgaW5kZXgNCj4gZTYxZDk3MzY5Mzc1 NzNkNzczYWNkZjNlNDNhN2M3NjA3NGJmYjJjNy4uZGY1NDNiMjJjZDcyMDUzOGMxNGJjZWE3MmYN Cj4gYzc4YThkZWM5YmYxMmIgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXNzYS1waGlvcHQuY2MN Cj4gKysrIGIvZ2NjL3RyZWUtc3NhLXBoaW9wdC5jYw0KPiBAQCAtNjMsOCArNjMsOCBAQCBzdGF0 aWMgZ3BoaSAqZmFjdG9yX291dF9jb25kaXRpb25hbF9jb252ZXJzaW9uIChlZGdlLA0KPiBlZGdl LCBncGhpICosIHRyZWUsIHRyZWUsDQo+ICAJCQkJCQlnaW1wbGUgKik7DQo+ICBzdGF0aWMgaW50 IHZhbHVlX3JlcGxhY2VtZW50IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssDQo+ICAJCQkgICAg ICBlZGdlLCBlZGdlLCBncGhpICosIHRyZWUsIHRyZWUpOyAtc3RhdGljIGJvb2wNCj4gbWlubWF4 X3JlcGxhY2VtZW50IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssDQo+IC0JCQkJZWRnZSwgZWRn ZSwgZ3BoaSAqLCB0cmVlLCB0cmVlKTsNCj4gK3N0YXRpYyBib29sIG1pbm1heF9yZXBsYWNlbWVu dCAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywNCj4gKwkJCQllZGdlLCBl ZGdlLCBncGhpICosIHRyZWUsIHRyZWUsIGJvb2wpOw0KPiAgc3RhdGljIGJvb2wgc3BhY2VzaGlw X3JlcGxhY2VtZW50IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssDQo+ICAJCQkJICAgZWRnZSwg ZWRnZSwgZ3BoaSAqLCB0cmVlLCB0cmVlKTsgIHN0YXRpYyBib29sDQo+IGNvbmRfcmVtb3ZhbF9p bl9idWlsdGluX3plcm9fcGF0dGVybiAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBAQCAtNzQs Nw0KPiArNzQsNyBAQCBzdGF0aWMgYm9vbCBjb25kX3N0b3JlX3JlcGxhY2VtZW50IChiYXNpY19i bG9jaywgYmFzaWNfYmxvY2ssDQo+IGVkZ2UsIGVkZ2UsDQo+ICAJCQkJICAgIGhhc2hfc2V0PHRy ZWU+ICopOw0KPiAgc3RhdGljIGJvb2wgY29uZF9pZl9lbHNlX3N0b3JlX3JlcGxhY2VtZW50IChi YXNpY19ibG9jaywgYmFzaWNfYmxvY2ssDQo+IGJhc2ljX2Jsb2NrKTsgIHN0YXRpYyBoYXNoX3Nl dDx0cmVlPiAqIGdldF9ub25fdHJhcHBpbmcgKCk7IC1zdGF0aWMgdm9pZA0KPiByZXBsYWNlX3Bo aV9lZGdlX3dpdGhfdmFyaWFibGUgKGJhc2ljX2Jsb2NrLCBlZGdlLCBncGhpICosIHRyZWUpOw0K PiArc3RhdGljIHZvaWQgcmVwbGFjZV9waGlfZWRnZV93aXRoX3ZhcmlhYmxlIChiYXNpY19ibG9j aywgZWRnZSwgZ3BoaSAqLA0KPiArdHJlZSwgYm9vbCk7DQo+ICBzdGF0aWMgdm9pZCBob2lzdF9h ZGphY2VudF9sb2FkcyAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLA0KPiAgCQkJCSAgYmFzaWNf YmxvY2ssIGJhc2ljX2Jsb2NrKTsNCj4gIHN0YXRpYyBib29sIGdhdGVfaG9pc3RfbG9hZHMgKHZv aWQpOw0KPiBAQCAtMjAwLDYgKzIwMCw3IEBAIHRyZWVfc3NhX3BoaW9wdF93b3JrZXIgKGJvb2wg ZG9fc3RvcmVfZWxpbSwgYm9vbA0KPiBkb19ob2lzdF9sb2FkcywgYm9vbCBlYXJseV9wKQ0KPiAg ICAgICAgYmFzaWNfYmxvY2sgYmIxLCBiYjI7DQo+ICAgICAgICBlZGdlIGUxLCBlMjsNCj4gICAg ICAgIHRyZWUgYXJnMCwgYXJnMTsNCj4gKyAgICAgIGJvb2wgZGlhbW9uZF9wID0gZmFsc2U7DQo+ IA0KPiAgICAgICAgYmIgPSBiYl9vcmRlcltpXTsNCj4gDQo+IEBAIC0yNjYsNiArMjY3LDkgQEAg dHJlZV9zc2FfcGhpb3B0X3dvcmtlciAoYm9vbCBkb19zdG9yZV9lbGltLCBib29sDQo+IGRvX2hv aXN0X2xvYWRzLCBib29sIGVhcmx5X3ApDQo+ICAJICAgIGhvaXN0X2FkamFjZW50X2xvYWRzIChi YiwgYmIxLCBiYjIsIGJiMyk7DQo+ICAJICBjb250aW51ZTsNCj4gIAl9DQo+ICsgICAgICBlbHNl IGlmIChFREdFX1NVQ0MgKGJiMSwgMCktPmRlc3QgPT0gRURHRV9TVUNDIChiYjIsIDApLT5kZXN0 DQo+ICsJICAgICAgICYmICFlbXB0eV9ibG9ja19wIChiYjEpKQ0KPiArCWRpYW1vbmRfcCA9IHRy dWU7DQo+ICAgICAgICBlbHNlDQo+ICAJY29udGludWU7DQo+IA0KPiBAQCAtMjk0LDEwICsyOTgs MTMgQEAgdHJlZV9zc2FfcGhpb3B0X3dvcmtlciAoYm9vbCBkb19zdG9yZV9lbGltLCBib29sDQo+ IGRvX2hvaXN0X2xvYWRzLCBib29sIGVhcmx5X3ApDQo+ICAJfQ0KPiAgICAgICAgZWxzZQ0KPiAg CXsNCj4gLQkgIGdpbXBsZV9zZXEgcGhpcyA9IHBoaV9ub2RlcyAoYmIyKTsNCj4gIAkgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yIGdzaTsNCj4gIAkgIGJvb2wgY2FuZG9yZXN0ID0gdHJ1ZTsNCj4gDQo+ ICsJICAvKiBDaGVjayB0aGF0IHdlJ3JlIGxvb2tpbmcgZm9yIG5lc3RlZCBwaGlzLiAgKi8NCj4g KwkgIGJhc2ljX2Jsb2NrIG1lcmdlID0gZGlhbW9uZF9wID8gRURHRV9TVUNDIChiYjIsIDApLT5k ZXN0IDogYmIyOw0KPiArCSAgZ2ltcGxlX3NlcSBwaGlzID0gcGhpX25vZGVzIChtZXJnZSk7DQo+ ICsNCj4gIAkgIC8qIFZhbHVlIHJlcGxhY2VtZW50IGNhbiB3b3JrIHdpdGggbW9yZSB0aGFuIG9u ZSBQSEkNCj4gIAkgICAgIHNvIHRyeSB0aGF0IGZpcnN0LiAqLw0KPiAgCSAgaWYgKCFlYXJseV9w KQ0KPiBAQCAtMzE3LDYgKzMyNCw3IEBAIHRyZWVfc3NhX3BoaW9wdF93b3JrZXIgKGJvb2wgZG9f c3RvcmVfZWxpbSwgYm9vbA0KPiBkb19ob2lzdF9sb2FkcywgYm9vbCBlYXJseV9wKQ0KPiAgCSAg aWYgKCFjYW5kb3Jlc3QpDQo+ICAJICAgIGNvbnRpbnVlOw0KPiANCj4gKwkgIGUyID0gZGlhbW9u ZF9wID8gRURHRV9TVUNDIChiYjIsIDApIDogZTI7DQo+ICAJICBwaGkgPSBzaW5nbGVfbm9uX3Np bmdsZXRvbl9waGlfZm9yX2VkZ2VzIChwaGlzLCBlMSwgZTIpOw0KPiAgCSAgaWYgKCFwaGkpDQo+ ICAJICAgIGNvbnRpbnVlOw0KPiBAQCAtMzMwLDYgKzMzOCw3IEBAIHRyZWVfc3NhX3BoaW9wdF93 b3JrZXIgKGJvb2wgZG9fc3RvcmVfZWxpbSwgYm9vbA0KPiBkb19ob2lzdF9sb2FkcywgYm9vbCBl YXJseV9wKQ0KPiANCj4gIAkgIGdwaGkgKm5ld3BoaTsNCj4gIAkgIGlmIChzaW5nbGVfcHJlZF9w IChiYjEpDQo+ICsJICAgICAgJiYgIWRpYW1vbmRfcA0KPiAgCSAgICAgICYmIChuZXdwaGkgPSBm YWN0b3Jfb3V0X2NvbmRpdGlvbmFsX2NvbnZlcnNpb24gKGUxLCBlMiwgcGhpLA0KPiAgCQkJCQkJ CSAgICAgIGFyZzAsIGFyZzEsDQo+ICAJCQkJCQkJICAgICAgY29uZF9zdG10KSkpDQo+IEBAIC0z NDQsMjAgKzM1MywyNSBAQCB0cmVlX3NzYV9waGlvcHRfd29ya2VyIChib29sIGRvX3N0b3JlX2Vs aW0sIGJvb2wNCj4gZG9faG9pc3RfbG9hZHMsIGJvb2wgZWFybHlfcCkNCj4gIAkgICAgfQ0KPiAN Cj4gIAkgIC8qIERvIHRoZSByZXBsYWNlbWVudCBvZiBjb25kaXRpb25hbCBpZiBpdCBjYW4gYmUg ZG9uZS4gICovDQo+IC0JICBpZiAoIWVhcmx5X3AgJiYgdHdvX3ZhbHVlX3JlcGxhY2VtZW50IChi YiwgYmIxLCBlMiwgcGhpLCBhcmcwLA0KPiBhcmcxKSkNCj4gKwkgIGlmICghZWFybHlfcA0KPiAr CSAgICAgICYmICFkaWFtb25kX3ANCj4gKwkgICAgICAmJiB0d29fdmFsdWVfcmVwbGFjZW1lbnQg KGJiLCBiYjEsIGUyLCBwaGksIGFyZzAsIGFyZzEpKQ0KPiAgCSAgICBjZmdjaGFuZ2VkID0gdHJ1 ZTsNCj4gLQkgIGVsc2UgaWYgKG1hdGNoX3NpbXBsaWZ5X3JlcGxhY2VtZW50IChiYiwgYmIxLCBl MSwgZTIsIHBoaSwNCj4gLQkJCQkJICAgICAgIGFyZzAsIGFyZzEsDQo+IC0JCQkJCSAgICAgICBl YXJseV9wKSkNCj4gKwkgIGVsc2UgaWYgKCFkaWFtb25kX3ANCj4gKwkJICAgJiYgbWF0Y2hfc2lt cGxpZnlfcmVwbGFjZW1lbnQgKGJiLCBiYjEsIGUxLCBlMiwgcGhpLA0KPiArCQkJCQkJICBhcmcw LCBhcmcxLCBlYXJseV9wKSkNCj4gIAkgICAgY2ZnY2hhbmdlZCA9IHRydWU7DQo+ICAJICBlbHNl IGlmICghZWFybHlfcA0KPiArCQkgICAmJiAhZGlhbW9uZF9wDQo+ICAJCSAgICYmIHNpbmdsZV9w cmVkX3AgKGJiMSkNCj4gIAkJICAgJiYgY29uZF9yZW1vdmFsX2luX2J1aWx0aW5femVyb19wYXR0 ZXJuIChiYiwgYmIxLCBlMSwNCj4gZTIsDQo+ICAJCQkJCQkJICAgIHBoaSwgYXJnMCwgYXJnMSkp DQo+ICAJICAgIGNmZ2NoYW5nZWQgPSB0cnVlOw0KPiAtCSAgZWxzZSBpZiAobWlubWF4X3JlcGxh Y2VtZW50IChiYiwgYmIxLCBlMSwgZTIsIHBoaSwgYXJnMCwgYXJnMSkpDQo+ICsJICBlbHNlIGlm IChtaW5tYXhfcmVwbGFjZW1lbnQgKGJiLCBiYjEsIGJiMiwgZTEsIGUyLCBwaGksIGFyZzAsIGFy ZzEsDQo+ICsJCQkJICAgICAgIGRpYW1vbmRfcCkpDQo+ICAJICAgIGNmZ2NoYW5nZWQgPSB0cnVl Ow0KPiAgCSAgZWxzZSBpZiAoc2luZ2xlX3ByZWRfcCAoYmIxKQ0KPiArCQkgICAmJiAhZGlhbW9u ZF9wDQo+ICAJCSAgICYmIHNwYWNlc2hpcF9yZXBsYWNlbWVudCAoYmIsIGJiMSwgZTEsIGUyLCBw aGksIGFyZzAsDQo+IGFyZzEpKQ0KPiAgCSAgICBjZmdjaGFuZ2VkID0gdHJ1ZTsNCj4gIAl9DQo+ IEBAIC0zODYsNyArNDAwLDcgQEAgdHJlZV9zc2FfcGhpb3B0X3dvcmtlciAoYm9vbCBkb19zdG9y ZV9lbGltLCBib29sDQo+IGRvX2hvaXN0X2xvYWRzLCBib29sIGVhcmx5X3ApDQo+IA0KPiAgc3Rh dGljIHZvaWQNCj4gIHJlcGxhY2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSAoYmFzaWNfYmxvY2sg Y29uZF9ibG9jaywNCj4gLQkJCQllZGdlIGUsIGdwaGkgKnBoaSwgdHJlZSBuZXdfdHJlZSkNCj4g KwkJCQllZGdlIGUsIGdwaGkgKnBoaSwgdHJlZSBuZXdfdHJlZSwgYm9vbA0KPiBkZWxldGVfYmIg PSB0cnVlKQ0KPiAgew0KPiAgICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAocGhpKTsNCj4g ICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpOw0KPiBAQCAtNDI3LDcgKzQ0MSw3IEBAIHJlcGxh Y2VfcGhpX2VkZ2Vfd2l0aF92YXJpYWJsZSAoYmFzaWNfYmxvY2sNCj4gY29uZF9ibG9jaywNCj4g ICAgICBlZGdlX3RvX3JlbW92ZSA9IEVER0VfU1VDQyAoY29uZF9ibG9jaywgMSk7DQo+ICAgIGVs c2UNCj4gICAgICBlZGdlX3RvX3JlbW92ZSA9IEVER0VfU1VDQyAoY29uZF9ibG9jaywgMCk7DQo+ IC0gIGlmIChFREdFX0NPVU5UIChlZGdlX3RvX3JlbW92ZS0+ZGVzdC0+cHJlZHMpID09IDEpDQo+ ICsgIGlmIChFREdFX0NPVU5UIChlZGdlX3RvX3JlbW92ZS0+ZGVzdC0+cHJlZHMpID09IDEgJiYg ZGVsZXRlX2JiKQ0KPiAgICAgIHsNCj4gICAgICAgIGUtPmZsYWdzIHw9IEVER0VfRkFMTFRIUlU7 DQo+ICAgICAgICBlLT5mbGFncyAmPSB+KEVER0VfVFJVRV9WQUxVRSB8IEVER0VfRkFMU0VfVkFM VUUpOyBAQCAtMTczMywxNQ0KPiArMTc0Nyw1MiBAQCB2YWx1ZV9yZXBsYWNlbWVudCAoYmFzaWNf YmxvY2sgY29uZF9iYiwgYmFzaWNfYmxvY2sNCj4gbWlkZGxlX2JiLA0KPiAgICByZXR1cm4gMDsN Cj4gIH0NCj4gDQo+ICsvKiBJZiBWQVIgaXMgYW4gU1NBX05BTUUgdGhhdCBwb2ludHMgdG8gYSBC SVRfTk9UX0VYUFIgdGhlbiByZXR1cm4gdGhlDQo+IFRSRUUgZm9yDQo+ICsgICB0aGUgdmFsdWUg YmVpbmcgaW52ZXJ0ZWQuICAqLw0KPiArDQo+ICtzdGF0aWMgdHJlZQ0KPiArc3RyaXBfYml0X25v dCAodHJlZSB2YXIpDQo+ICt7DQo+ICsgIGlmIChUUkVFX0NPREUgKHZhcikgIT0gU1NBX05BTUUp DQo+ICsgICAgcmV0dXJuIE5VTExfVFJFRTsNCj4gKw0KPiArICBnaW1wbGUgKmFzc2lnbiA9IFNT QV9OQU1FX0RFRl9TVE1UICh2YXIpOyAgaWYgKGdpbXBsZV9jb2RlIChhc3NpZ24pDQo+ICsgIT0g R0lNUExFX0FTU0lHTikNCj4gKyAgICByZXR1cm4gTlVMTF9UUkVFOw0KPiArDQo+ICsgIGlmIChn aW1wbGVfYXNzaWduX3Joc19jb2RlIChhc3NpZ24pICE9IEJJVF9OT1RfRVhQUikNCj4gKyAgICBy ZXR1cm4gTlVMTF9UUkVFOw0KPiArDQo+ICsgIHJldHVybiBnaW1wbGVfYXNzaWduX3JoczEgKGFz c2lnbik7DQo+ICt9DQo+ICsNCj4gKy8qIEludmVydCBhIE1JTiB0byBhIE1BWCBvciBhIE1BWCB0 byBhIE1JTiBleHByZXNzaW9uIENPREUuICAqLw0KPiArDQo+ICtlbnVtIHRyZWVfY29kZQ0KPiAr aW52ZXJ0X21pbm1heF9jb2RlIChlbnVtIHRyZWVfY29kZSBjb2RlKSB7DQo+ICsgIHN3aXRjaCAo Y29kZSkgew0KPiArICBjYXNlIE1JTl9FWFBSOg0KPiArICAgIHJldHVybiBNQVhfRVhQUjsNCj4g KyAgY2FzZSBNQVhfRVhQUjoNCj4gKyAgICByZXR1cm4gTUlOX0VYUFI7DQo+ICsgIGRlZmF1bHQ6 DQo+ICsgICAgZ2NjX3VucmVhY2hhYmxlICgpOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gIC8qICBU aGUgZnVuY3Rpb24gbWlubWF4X3JlcGxhY2VtZW50IGRvZXMgdGhlIG1haW4gd29yayBvZiBkb2lu ZyB0aGUNCj4gbWlubWF4DQo+ICAgICAgcmVwbGFjZW1lbnQuICBSZXR1cm4gdHJ1ZSBpZiB0aGUg cmVwbGFjZW1lbnQgaXMgZG9uZS4gIE90aGVyd2lzZSByZXR1cm4NCj4gICAgICBmYWxzZS4NCj4g ICAgICBCQiBpcyB0aGUgYmFzaWMgYmxvY2sgd2hlcmUgdGhlIHJlcGxhY2VtZW50IGlzIGdvaW5n IHRvIGJlIGRvbmUgb24uICBBUkcwDQo+IC0gICAgaXMgYXJndW1lbnQgMCBmcm9tIHRoZSBQSEku ICBMaWtld2lzZSBmb3IgQVJHMS4gICovDQo+ICsgICAgaXMgYXJndW1lbnQgMCBmcm9tIHRoZSBQ SEkuICBMaWtld2lzZSBmb3IgQVJHMS4NCj4gKw0KPiArICAgIElmIFRIUkVFV0FZX1AgdGhlbiBl eHBlY3QgdGhlIEJCIHRvIGJlIGxhaWQgb3V0IGluIGRpYW1vbmQgc2hhcGUgd2l0aA0KPiBlYWNo DQo+ICsgICAgQkIgY29udGFpbmluZyBvbmx5IGEgTUlOIG9yIE1BWCBleHByZXNzaW9uLiAgKi8N Cj4gDQo+ICBzdGF0aWMgYm9vbA0KPiAtbWlubWF4X3JlcGxhY2VtZW50IChiYXNpY19ibG9jayBj b25kX2JiLCBiYXNpY19ibG9jayBtaWRkbGVfYmIsDQo+IC0JCSAgICBlZGdlIGUwLCBlZGdlIGUx LCBncGhpICpwaGksIHRyZWUgYXJnMCwgdHJlZSBhcmcxKQ0KPiArbWlubWF4X3JlcGxhY2VtZW50 IChiYXNpY19ibG9jayBjb25kX2JiLCBiYXNpY19ibG9jayBtaWRkbGVfYmIsDQo+IGJhc2ljX2Js b2NrIGFsdF9taWRkbGVfYmIsDQo+ICsJCSAgICBlZGdlIGUwLCBlZGdlIGUxLCBncGhpICpwaGks IHRyZWUgYXJnMCwgdHJlZSBhcmcxLCBib29sDQo+ICt0aHJlZXdheV9wKQ0KPiAgew0KPiAgICB0 cmVlIHJlc3VsdDsNCj4gICAgZWRnZSB0cnVlX2VkZ2UsIGZhbHNlX2VkZ2U7DQo+IEBAIC0xODk2 LDE2ICsxOTQ3LDIwIEBAIG1pbm1heF9yZXBsYWNlbWVudCAoYmFzaWNfYmxvY2sgY29uZF9iYiwN Cj4gYmFzaWNfYmxvY2sgbWlkZGxlX2JiLA0KPiAgICBpZiAoZmFsc2VfZWRnZS0+ZGVzdCA9PSBt aWRkbGVfYmIpDQo+ICAgICAgZmFsc2VfZWRnZSA9IEVER0VfU1VDQyAoZmFsc2VfZWRnZS0+ZGVz dCwgMCk7DQo+IA0KPiArICAvKiBXaGVuIFRIUkVFV0FZX1AgdGhlbiBlMSB3aWxsIHBvaW50IHRv IHRoZSBlZGdlIG9mIHRoZSBmaW5hbCB0cmFuc2l0aW9uDQo+ICsgICAgIGZyb20gbWlkZGxlLWJi IHRvIGVuZC4gICovDQo+ICAgIGlmICh0cnVlX2VkZ2UgPT0gZTApDQo+ICAgICAgew0KPiAtICAg ICAgZ2NjX2Fzc2VydCAoZmFsc2VfZWRnZSA9PSBlMSk7DQo+ICsgICAgICBpZiAoIXRocmVld2F5 X3ApDQo+ICsJZ2NjX2Fzc2VydCAoZmFsc2VfZWRnZSA9PSBlMSk7DQo+ICAgICAgICBhcmdfdHJ1 ZSA9IGFyZzA7DQo+ICAgICAgICBhcmdfZmFsc2UgPSBhcmcxOw0KPiAgICAgIH0NCj4gICAgZWxz ZQ0KPiAgICAgIHsNCj4gICAgICAgIGdjY19hc3NlcnQgKGZhbHNlX2VkZ2UgPT0gZTApOw0KPiAt ICAgICAgZ2NjX2Fzc2VydCAodHJ1ZV9lZGdlID09IGUxKTsNCj4gKyAgICAgIGlmICghdGhyZWV3 YXlfcCkNCj4gKwlnY2NfYXNzZXJ0ICh0cnVlX2VkZ2UgPT0gZTEpOw0KPiAgICAgICAgYXJnX3Ry dWUgPSBhcmcxOw0KPiAgICAgICAgYXJnX2ZhbHNlID0gYXJnMDsNCj4gICAgICB9DQo+IEBAIC0x OTM3LDYgKzE5OTIsMTY1IEBAIG1pbm1heF9yZXBsYWNlbWVudCAoYmFzaWNfYmxvY2sgY29uZF9i YiwNCj4gYmFzaWNfYmxvY2sgbWlkZGxlX2JiLA0KPiAgICAgICAgZWxzZQ0KPiAgCXJldHVybiBm YWxzZTsNCj4gICAgICB9DQo+ICsgIGVsc2UgaWYgKG1pZGRsZV9iYiAhPSBhbHRfbWlkZGxlX2Ji ICYmIHRocmVld2F5X3ApDQo+ICsgICAgew0KPiArICAgICAgLyogUmVjb2duaXplIHRoZSBmb2xs b3dpbmcgY2FzZToNCj4gKw0KPiArCSBpZiAoc21hbGxlciA8IGxhcmdlcikNCj4gKwkgICBhID0g TUlOIChzbWFsbGVyLCBjKTsNCj4gKwkgZWxzZQ0KPiArCSAgIGIgPSBNSU4gKGxhcmdlciwgYyk7 DQo+ICsJIHggPSBQSEkgPGEsIGI+DQo+ICsNCj4gKwkgVGhpcyBpcyBlcXVpdmFsZW50IHRvDQo+ ICsNCj4gKwkgYSA9IE1JTiAoc21hbGxlciwgYyk7DQo+ICsJIHggPSBNSU4gKGxhcmdlciwgYSk7 ICAqLw0KPiArDQo+ICsgICAgICBnaW1wbGUgKmFzc2lnbiA9IGxhc3RfYW5kX29ubHlfc3RtdCAo bWlkZGxlX2JiKTsNCj4gKyAgICAgIHRyZWUgbGhzLCBvcDAsIG9wMSwgYm91bmQ7DQo+ICsgICAg ICB0cmVlIGFsdF9saHMsIGFsdF9vcDAsIGFsdF9vcDE7DQo+ICsgICAgICBib29sIGludmVydCA9 IGZhbHNlOw0KPiArDQo+ICsgICAgICBpZiAoIXNpbmdsZV9wcmVkX3AgKG1pZGRsZV9iYikNCj4g KwkgIHx8ICFzaW5nbGVfcHJlZF9wIChhbHRfbWlkZGxlX2JiKQ0KPiArCSAgfHwgIXNpbmdsZV9z dWNjX3AgKG1pZGRsZV9iYikNCj4gKwkgIHx8ICFzaW5nbGVfc3VjY19wIChhbHRfbWlkZGxlX2Ji KSkNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKyAgICAgIC8qIFdoZW4gVEhSRUVXQVlfUCB0 aGVuIGUxIHdpbGwgcG9pbnQgdG8gdGhlIGVkZ2Ugb2YgdGhlIGZpbmFsDQo+IHRyYW5zaXRpb24N Cj4gKwkgZnJvbSBtaWRkbGUtYmIgdG8gZW5kLiAgKi8NCj4gKyAgICAgIGlmICh0cnVlX2VkZ2Ug PT0gZTApDQo+ICsJZ2NjX2Fzc2VydCAoZmFsc2VfZWRnZSA9PSBFREdFX1BSRUQgKGUxLT5zcmMs IDApKTsNCj4gKyAgICAgIGVsc2UNCj4gKwlnY2NfYXNzZXJ0ICh0cnVlX2VkZ2UgPT0gRURHRV9Q UkVEIChlMS0+c3JjLCAwKSk7DQo+ICsNCj4gKyAgICAgIGJvb2wgdmFsaWRfbWlubWF4X3AgPSBm YWxzZTsNCj4gKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGl0MQ0KPiArCT0gZ3NpX3N0YXJ0 X25vbmRlYnVnX2FmdGVyX2xhYmVsc19iYiAobWlkZGxlX2JiKTsNCj4gKyAgICAgIGdpbXBsZV9z dG10X2l0ZXJhdG9yIGl0Mg0KPiArCT0gZ3NpX3N0YXJ0X25vbmRlYnVnX2FmdGVyX2xhYmVsc19i YiAoYWx0X21pZGRsZV9iYik7DQo+ICsgICAgICBpZiAoZ3NpX29uZV9ub25kZWJ1Z19iZWZvcmVf ZW5kX3AgKGl0MSkNCj4gKwkgICYmIGdzaV9vbmVfbm9uZGVidWdfYmVmb3JlX2VuZF9wIChpdDIp KQ0KPiArCXsNCj4gKwkgIGdpbXBsZSAqc3RtdDEgPSBnc2lfc3RtdCAoaXQxKTsNCj4gKwkgIGdp bXBsZSAqc3RtdDIgPSBnc2lfc3RtdCAoaXQyKTsNCj4gKwkgIGlmIChpc19naW1wbGVfYXNzaWdu IChzdG10MSkgJiYgaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdDIpKQ0KPiArCSAgICB7DQo+ICsJICAg ICAgZW51bSB0cmVlX2NvZGUgY29kZTEgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10MSk7 DQo+ICsJICAgICAgZW51bSB0cmVlX2NvZGUgY29kZTIgPSBnaW1wbGVfYXNzaWduX3Joc19jb2Rl IChzdG10Mik7DQo+ICsJICAgICAgdmFsaWRfbWlubWF4X3AgPSAoY29kZTEgPT0gTUlOX0VYUFIg fHwgY29kZTEgPT0gTUFYX0VYUFIpDQo+ICsJCQkgICAgICAgJiYgKGNvZGUyID09IE1JTl9FWFBS IHx8IGNvZGUyID09DQo+IE1BWF9FWFBSKTsNCj4gKwkgICAgfQ0KPiArCX0NCj4gKw0KPiArICAg ICAgaWYgKCF2YWxpZF9taW5tYXhfcCkNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKyAgICAg IGlmICghYXNzaWduDQo+ICsJICB8fCBnaW1wbGVfY29kZSAoYXNzaWduKSAhPSBHSU1QTEVfQVNT SUdOKQ0KPiArCXJldHVybiBmYWxzZTsNCj4gKw0KPiArICAgICAgbGhzID0gZ2ltcGxlX2Fzc2ln bl9saHMgKGFzc2lnbik7DQo+ICsgICAgICBhc3NfY29kZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2Nv ZGUgKGFzc2lnbik7DQo+ICsgICAgICBpZiAoYXNzX2NvZGUgIT0gTUFYX0VYUFIgJiYgYXNzX2Nv ZGUgIT0gTUlOX0VYUFIpDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgICAgICBvcDAgPSBn aW1wbGVfYXNzaWduX3JoczEgKGFzc2lnbik7DQo+ICsgICAgICBvcDEgPSBnaW1wbGVfYXNzaWdu X3JoczIgKGFzc2lnbik7DQo+ICsNCj4gKyAgICAgIGFzc2lnbiA9IGxhc3RfYW5kX29ubHlfc3Rt dCAoYWx0X21pZGRsZV9iYik7DQo+ICsgICAgICBpZiAoIWFzc2lnbg0KPiArCSAgfHwgZ2ltcGxl X2NvZGUgKGFzc2lnbikgIT0gR0lNUExFX0FTU0lHTikNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICsN Cj4gKyAgICAgIGFsdF9saHMgPSBnaW1wbGVfYXNzaWduX2xocyAoYXNzaWduKTsNCj4gKyAgICAg IGlmIChhc3NfY29kZSAhPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChhc3NpZ24pKQ0KPiArCXJl dHVybiBmYWxzZTsNCj4gKw0KPiArICAgICAgaWYgKCFvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJn X3AgKGxocywgYXJnX3RydWUpDQo+ICsJIHx8ICFvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3Ag KGFsdF9saHMsIGFyZ19mYWxzZSkpDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsgICAgICBh bHRfb3AwID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChhc3NpZ24pOw0KPiArICAgICAgYWx0X29wMSA9 IGdpbXBsZV9hc3NpZ25fcmhzMiAoYXNzaWduKTsNCj4gKw0KPiArICAgICAgaWYgKChvcGVyYW5k X2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9wMCwgc21hbGxlcikNCj4gKwkJfHwgKGFsdF9zbWFsbGVy DQo+ICsJCSAgICAmJiBvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9wMCwgYWx0X3NtYWxs ZXIpKSkNCj4gKwkgICAgICAgJiYgKG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAoYWx0X29w MCwgbGFyZ2VyKQ0KPiArCQkgICB8fCAoYWx0X2xhcmdlcg0KPiArCQkgICAgICAgJiYgb3BlcmFu ZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRfb3AwLCBhbHRfbGFyZ2VyKSkpKQ0KPiArCXsNCj4g KwkgIC8qIFdlIGdvdCBoZXJlIGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgaS5lLiwgU01BTExF UiA8IExBUkdFUi4gICovDQo+ICsJICBpZiAoIW9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAo b3AxLCBhbHRfb3AxKSkNCj4gKwkgICAgcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJICBpZiAoKGFy ZzAgPSBzdHJpcF9iaXRfbm90IChvcDApKSAhPSBOVUxMDQo+ICsJICAgICAgJiYgKGFyZzEgPSBz dHJpcF9iaXRfbm90IChhbHRfb3AwKSkgIT0gTlVMTA0KPiArCSAgICAgICYmIChib3VuZCA9IHN0 cmlwX2JpdF9ub3QgKG9wMSkpICE9IE5VTEwpDQo+ICsJICAgIHsNCj4gKwkgICAgICBtaW5tYXgg PSBNQVhfRVhQUjsNCj4gKwkgICAgICBhc3NfY29kZSA9IGludmVydF9taW5tYXhfY29kZSAoYXNz X2NvZGUpOw0KPiArCSAgICAgIGludmVydCA9IHRydWU7DQo+ICsJICAgIH0NCj4gKwkgIGVsc2UN Cj4gKwkgICAgew0KPiArCSAgICAgIGJvdW5kID0gb3AxOw0KPiArCSAgICAgIG1pbm1heCA9IE1J Tl9FWFBSOw0KPiArCSAgICAgIGFyZzAgPSBvcDA7DQo+ICsJICAgICAgYXJnMSA9IGFsdF9vcDA7 DQo+ICsJICAgICB9DQo+ICsJfQ0KPiArICAgICAgZWxzZSBpZiAoKG9wZXJhbmRfZXF1YWxfZm9y X3BoaV9hcmdfcCAob3AwLCBsYXJnZXIpDQo+ICsJCXx8IChhbHRfbGFyZ2VyDQo+ICsJCSAgICAm JiBvcGVyYW5kX2VxdWFsX2Zvcl9waGlfYXJnX3AgKG9wMCwgYWx0X2xhcmdlcikpKQ0KPiArCSAg ICAgICAmJiAob3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChhbHRfb3AwLCBzbWFsbGVyKQ0K PiArCQkgICB8fCAoYWx0X3NtYWxsZXINCj4gKwkJICAgICAgICYmIG9wZXJhbmRfZXF1YWxfZm9y X3BoaV9hcmdfcCAoYWx0X29wMCwNCj4gYWx0X3NtYWxsZXIpKSkpDQo+ICsJew0KPiArCSAgLyog V2UgZ290IGhlcmUgaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBpLmUuLCBTTUFMTEVSID4gTEFS R0VSLiAgKi8NCj4gKwkgIGlmICghb3BlcmFuZF9lcXVhbF9mb3JfcGhpX2FyZ19wIChvcDEsIGFs dF9vcDEpKQ0KPiArCSAgICByZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwkgIGlmICgoYXJnMCA9IHN0 cmlwX2JpdF9ub3QgKG9wMCkpICE9IE5VTEwNCj4gKwkgICAgICAmJiAoYXJnMSA9IHN0cmlwX2Jp dF9ub3QgKGFsdF9vcDApKSAhPSBOVUxMDQo+ICsJICAgICAgJiYgKGJvdW5kID0gc3RyaXBfYml0 X25vdCAob3AxKSkgIT0gTlVMTCkNCj4gKwkgICAgew0KPiArCSAgICAgIG1pbm1heCA9IE1JTl9F WFBSOw0KPiArCSAgICAgIGFzc19jb2RlID0gaW52ZXJ0X21pbm1heF9jb2RlIChhc3NfY29kZSk7 DQo+ICsJICAgICAgaW52ZXJ0ID0gdHJ1ZTsNCj4gKwkgICAgfQ0KPiArCSAgZWxzZQ0KPiArCSAg ICB7DQo+ICsJICAgICAgYm91bmQgPSBvcDE7DQo+ICsJICAgICAgbWlubWF4ID0gTUFYX0VYUFI7 DQo+ICsJICAgICAgYXJnMCA9IG9wMDsNCj4gKwkgICAgICBhcmcxID0gYWx0X29wMDsNCj4gKwkg ICAgIH0NCj4gKwl9DQo+ICsgICAgICBlbHNlDQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsg ICAgICAvKiBFbWl0IHRoZSBzdGF0ZW1lbnQgdG8gY29tcHV0ZSBtaW4vbWF4LiAgKi8NCj4gKyAg ICAgIGxvY2F0aW9uX3QgbG9jdXMgPSBnaW1wbGVfbG9jYXRpb24gKGxhc3Rfc3RtdCAoY29uZF9i YikpOw0KPiArICAgICAgZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7DQo+ICsgICAgICB0cmVlIHBo aV9yZXN1bHQgPSBQSElfUkVTVUxUIChwaGkpOw0KPiArICAgICAgcmVzdWx0ID0gZ2ltcGxlX2J1 aWxkICgmc3RtdHMsIGxvY3VzLCBtaW5tYXgsIFRSRUVfVFlQRSAocGhpX3Jlc3VsdCksDQo+ICsJ CQkgICAgIGFyZzAsIGJvdW5kKTsNCj4gKyAgICAgIHJlc3VsdCA9IGdpbXBsZV9idWlsZCAoJnN0 bXRzLCBsb2N1cywgYXNzX2NvZGUsIFRSRUVfVFlQRSAocGhpX3Jlc3VsdCksDQo+ICsJCQkgICAg IHJlc3VsdCwgYXJnMSk7DQo+ICsgICAgICBpZiAoaW52ZXJ0KQ0KPiArCXJlc3VsdCA9IGdpbXBs ZV9idWlsZCAoJnN0bXRzLCBsb2N1cywgQklUX05PVF9FWFBSLCBUUkVFX1RZUEUNCj4gKHBoaV9y ZXN1bHQpLA0KPiArCQkJICAgICAgIHJlc3VsdCk7DQo+ICsNCj4gKyAgICAgIGdzaSA9IGdzaV9s YXN0X2JiIChjb25kX2JiKTsNCj4gKyAgICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoJmdzaSwg c3RtdHMsIEdTSV9ORVdfU1RNVCk7DQo+ICsNCj4gKyAgICAgIHJlcGxhY2VfcGhpX2VkZ2Vfd2l0 aF92YXJpYWJsZSAoY29uZF9iYiwgZTEsIHBoaSwgcmVzdWx0LCBmYWxzZSk7DQo+ICsNCj4gKyAg ICAgIHJldHVybiB0cnVlOw0KPiArICAgIH0NCj4gICAgZWxzZQ0KPiAgICAgIHsNCj4gICAgICAg IC8qIFJlY29nbml6ZSB0aGUgZm9sbG93aW5nIGNhc2UsIGFzc3VtaW5nIGQgPD0gdToNCg==