From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2051.outbound.protection.outlook.com [40.107.21.51]) by sourceware.org (Postfix) with ESMTPS id 3BB6C385084C for ; Fri, 18 Aug 2023 13:12:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3BB6C385084C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QwdTB/sJf2R00CGCJEsWiTYNyaXQ3lIdZjyMxALfkpI=; b=NWjYxsPX2VPFAjfsBLGeK2dvl2F7Lvag10vkRh+Lv9b7G6UwqWe5P2KaTomskmu187GmYZl+neL2GBP90XM9QvLKkR0eS6PjG2nRVcP84Gp/dR9u3SThgi24IvdT9vMdzEmTbupATzZrryMfWam40/Umrklc+OZzuYFqEsXSPPc= Received: from DU2PR04CA0305.eurprd04.prod.outlook.com (2603:10a6:10:2b5::10) by AS2PR08MB10252.eurprd08.prod.outlook.com (2603:10a6:20b:648::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6678.29; Fri, 18 Aug 2023 13:12:13 +0000 Received: from DBAEUR03FT052.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:2b5:cafe::e) by DU2PR04CA0305.outlook.office365.com (2603:10a6:10:2b5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.20 via Frontend Transport; Fri, 18 Aug 2023 13:12:13 +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 DBAEUR03FT052.mail.protection.outlook.com (100.127.142.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6699.20 via Frontend Transport; Fri, 18 Aug 2023 13:12:13 +0000 Received: ("Tessian outbound 1eb4e931b055:v175"); Fri, 18 Aug 2023 13:12:13 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 8c586475dc476f24 X-CR-MTA-TID: 64aa7808 Received: from 18fad6285414.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 0B5217B0-C218-45D9-AE37-7827651306D6.1; Fri, 18 Aug 2023 13:12:06 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 18fad6285414.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 18 Aug 2023 13:12:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hMDCiRvKmSmOm+SguSZgxNSUt6FscPR7L8pu3jAYwN98rEz0UE7F5ZRlYpNF8Q/4Cx+aU/nSusCbHmtpMgVbCx3LzfFAALEbaxyyY1FBkV0+Vnaa3ph7Bk6Usx96pB6l8mKdJCDWwLDqjTuyzKtjL2Whq1tFGX97t+3SkkDht1RyX8+FM1W7U9VXaqb1ubMX8tAU/jhcSdNQ/LuDCROAQ4pzNALj/GUwspUr7K5nvjGYQvYG08AiwfcicwYd8MuEqmvWH8uDtbKjtnxPAbzYYu5Eh7iRzAA1OPxFjBiFc8vp+fHamOqT0EOUIc/geSuzzIuylqP5JGYJt/72ZmVpfw== 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=QwdTB/sJf2R00CGCJEsWiTYNyaXQ3lIdZjyMxALfkpI=; b=nSnTmznOhrtlJqMrwryPXBftZx+9jaLCNkl8mo/K8Py9yFyyHhusjVcUBXiqx8/3ogZFbJDSXeTHFWGWuYzgY+nw68Emm5ASayhBd4a+Wn2zSif7dbLQLajjvNp1pKW/LsqKHYlJAKiIydlc57CzU9vTbohW+SJRtAuwrl2MtRsBpq3J/iVOlVl11XWOiM8tCkwve9l7MsDOduO3yxcEGY3t2Z5zgwebHA7JM71PNHae6K1DGbpmhh5jZ72YCbtBlx4jfNNMH3hFTXAnnMGTw87FnfKN6DPWx8/9myVsZJNx49FM1rAbSABdEWgIM0ptI9h7vLpLcKAfWfngAmwnwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QwdTB/sJf2R00CGCJEsWiTYNyaXQ3lIdZjyMxALfkpI=; b=NWjYxsPX2VPFAjfsBLGeK2dvl2F7Lvag10vkRh+Lv9b7G6UwqWe5P2KaTomskmu187GmYZl+neL2GBP90XM9QvLKkR0eS6PjG2nRVcP84Gp/dR9u3SThgi24IvdT9vMdzEmTbupATzZrryMfWam40/Umrklc+OZzuYFqEsXSPPc= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by AS8PR08MB9044.eurprd08.prod.outlook.com (2603:10a6:20b:5c0::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6678.31; Fri, 18 Aug 2023 13:12:02 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::a85:6d3:5dd7:7d3]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::a85:6d3:5dd7:7d3%7]) with mapi id 15.20.6678.029; Fri, 18 Aug 2023 13:12:01 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" Subject: RE: [PATCH 12/19]middle-end: implement loop peeling and IV updates for early break. Thread-Topic: [PATCH 12/19]middle-end: implement loop peeling and IV updates for early break. Thread-Index: AQHZqccHX5IjMK39iE64m4nr7rdxO6+4DBQAgAAQ3sCAAT9ugIA2vfCwgAA4AwCAAADQYA== Date: Fri, 18 Aug 2023 13:12:00 +0000 Message-ID: References: <2s4ro37o-pnn0-7750-4286-5982q36opn5@fhfr.qr> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|AS8PR08MB9044:EE_|DBAEUR03FT052:EE_|AS2PR08MB10252:EE_ X-MS-Office365-Filtering-Correlation-Id: 2881318e-9a60-45bd-a2b3-08db9fecbcc6 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: BmAcVKxBPBhsYRRcdHQrm9X2SxK+OslVgLJ1a5N2tkGL2RJafJXQJgDq+bCk4aN1msm8iZH4fGivhfgwGGpLel1CyuketrjK8/eazEWvI8Lp+H+QoxNGLiGQOvukfQyEKw4B8BVlRUH80Majh2X0CIxGpIG3i5xqTyQK8QUs6jwgq6APVPo8H8R1eRtXPZjwk/HaN3ayx7SGEW1PxOd8zlf723ziP07+Qazbn+zSgWPEinegE2HBhFPsiVSrY5WQxCbSVskNz4ZI69dadRtA3PowVvVd+DY2qbfyejx7LchQxwC7ICCQsKkwKfvg3VX0xz7gQlxRfNRKNE3YJJllbhHZ5YGI6ZxOraZ5u9x448JW7EJnClFWgKcAyEftaHy2o/usVR+4vja3Ke6giQwnhHkqiww/xhi1amWX3W8d2SP4zUdnRW1S3rOggN2QHRXcCgpaXxA7CheHwCypUeCfstZBT3GyTtIxqWZI8CJfkgIyz7DRx9e36IL1F80RaPBe0Ka15OAkOeCcYqN3RjZ0Mxsq5wKJtOqN8/UnRTJnoWSsW3BHqQVcMyIV38DCAHcQEgw8sA55NWyCGP0QLYX5QTH5nplgMEr99O06o0oumYgJwJ6Lv6yUjyfGfgb7xzRG 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:(13230031)(346002)(376002)(39860400002)(366004)(136003)(396003)(451199024)(1800799009)(186009)(86362001)(33656002)(38100700002)(122000001)(38070700005)(55016003)(76116006)(52536014)(5660300002)(7696005)(66556008)(66446008)(66476007)(64756008)(71200400001)(53546011)(6916009)(54906003)(316002)(6506007)(66946007)(26005)(9686003)(41300700001)(4326008)(8936002)(8676002)(66899024)(478600001)(83380400001)(15650500001)(2906002)(30864003)(579004)(559001);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9044 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: DBAEUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: ca64d7a7-f73e-475d-da06-08db9fecb56e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TblzYmPygg9TkEjpQ6xB7kslzrjBaEvFbrJnbvilPIVLBXO0cv50caQRZdIS5EcR2XPaSMZGEq7H09JKfQlwScDNUGxVy5pBScIjTH1nJnaTiFuEhsaBKGmzp7F8H1JaHcS/OfHHwP3k+NUHIIlS9fH5LQTKXcEUX8sTDVQqpnjmBAVA6uFH6P/x2n51PT1npnCihuz3pE61hYMlDS6x0Fde61Hk2YH2Dy9EygJDYkVPt6a4W95654H8mcvtUobngXHSxLkhWr5cskoYCZaCQ74cHINdqP48gnt9FmyaYKlT6iI58/eqQBRS3t4xyDzZVKTN1PrjI4baL4vZIg326ibqX6df5Eho2UtHydvUOxNIQ0qOwMMFdF1gZFZCBVTRlpGQDLyY9fDM28ghzSMm3ONX8l18I/fU0kYIQ2vkXeh3jBCwMSdHqekfIwqzARRz/XZrnNNnZbR94PzctpiLioWi96yYYDqBbiAHuayF8gXS0TFqlppdIIe/8zCAOT0BqgU24Q7GN3EjiMch7nZvrQPTzHQ6jveG9M2jFwltxLgdXkrCF9MF54G7gUMloP+o6Q7mUFAxj7X6hldSX3qntM6E7VcJuKsyoBbQ/x/CrHPKKkgTJcLnj9tQGp/QkRT18V3MNxY5mPz9FEu82DwNkUWMjUUcEEbJVrQUOJLrUOUYl4/GQpiRVJo/j9toXKX+CFjPcOnxydDf1Frnp5Lg0+adzcScfjjZEX059rb8rHP3Au/TaHBSVKiDsrdvVcIf 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:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(186009)(451199024)(1800799009)(82310400011)(46966006)(40470700004)(36840700001)(15650500001)(2906002)(40460700003)(83380400001)(30864003)(66899024)(26005)(86362001)(336012)(40480700001)(478600001)(6506007)(7696005)(107886003)(33656002)(9686003)(53546011)(55016003)(5660300002)(52536014)(36860700001)(41300700001)(70586007)(82740400003)(356005)(54906003)(70206006)(81166007)(316002)(4326008)(6862004)(8936002)(8676002)(47076005)(579004)(559001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2023 13:12:13.1289 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2881318e-9a60-45bd-a2b3-08db9fecbcc6 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: DBAEUR03FT052.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB10252 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1 ZW50aGVyQHN1c2UuZGU+DQo+IFNlbnQ6IEZyaWRheSwgQXVndXN0IDE4LCAyMDIzIDI6NTMgUE0N Cj4gVG86IFRhbWFyIENocmlzdGluYSA8VGFtYXIuQ2hyaXN0aW5hQGFybS5jb20+DQo+IENjOiBn Y2MtcGF0Y2hlc0BnY2MuZ251Lm9yZzsgbmQgPG5kQGFybS5jb20+OyBqbGF3QHZlbnRhbmFtaWNy by5jb20NCj4gU3ViamVjdDogUkU6IFtQQVRDSCAxMi8xOV1taWRkbGUtZW5kOiBpbXBsZW1lbnQg bG9vcCBwZWVsaW5nIGFuZCBJVg0KPiB1cGRhdGVzIGZvciBlYXJseSBicmVhay4NCj4gDQo+IE9u IEZyaSwgMTggQXVnIDIwMjMsIFRhbWFyIENocmlzdGluYSB3cm90ZToNCj4gDQo+ID4gPiA+IFll YWggaWYgeW91IGNvbW1lbnQgaXQgb3V0IG9uZSBvZiB0aGUgdGVzdGNhc2VzIHNob3VsZCBmYWls Lg0KPiA+ID4NCj4gPiA+IHVzaW5nIG5ld19wcmVoZWFkZXIgaW5zdGVhZCBvZiBlLT5kZXN0IHdv dWxkIG1ha2UgdGhpbmdzIGNsZWFyZXIuDQo+ID4gPg0KPiA+ID4gWW91IGFyZSBub3cgYWRkaW5n IHRoZSBzYW1lIGFyZyB0byBldmVyeSBleGl0ICh5b3UndmUganVzdCBxdWVyaWVkIHRoZQ0KPiA+ ID4gbWFpbiBleGl0IHJlZGlyZWN0X2VkZ2VfdmFyX21hcF92ZWN0b3IpLg0KPiA+ID4NCj4gPiA+ IE9LLCBzbyBJIHRoaW5rIEkgdW5kZXJzdGFuZCB3aGF0IHlvdSdyZSBkb2luZy4gIElmIEkgdW5k ZXJzdGFuZA0KPiA+ID4gY29ycmVjdGx5IHdlIGtub3cgdGhhdCB3aGVuIHdlIGV4aXQgdGhlIG1h aW4gbG9vcCB2aWEgb25lIG9mIHRoZQ0KPiA+ID4gZWFybHkgZXhpdHMgd2UgYXJlIGRlZmluaXRl bHkgZ29pbmcgdG8gZW50ZXIgdGhlIGVwaWxvZyBidXQgd2hlbg0KPiA+ID4gd2UgdGFrZSB0aGUg bWFpbiBleGl0IHdlIG1pZ2h0IG5vdC4NCj4gPiA+DQo+ID4NCj4gPiBDb3JyZWN0Li4gYnV0Li4N Cj4gPg0KPiA+ID4gTG9va2luZyBhdCB0aGUgQ0ZHIHdlIGNyZWF0ZSBjdXJyZW50bHkgdGhpcyBp c24ndCByZWZsZWN0ZWQgYW5kDQo+ID4gPiB0aGlzIGNvbXBsaWNhdGVzIHRoaXMgUEhJIG5vZGUg dXBkYXRpbmcuICBXaGF0IEknZCB0cnkgdG8gZG8NCj4gPiA+IGlzIGxlYXZlIHJlZGlyZWN0aW5n IHRoZSBhbHRlcm5hdGUgZXhpdHMgdW50aWwgYWZ0ZXINCj4gPg0KPiA+IEl0IGlzLCBpbiB0aGUg Y2FzZSBvZiB0aGUgYWx0ZXJuYXRlIGV4aXRzIHRoaXMgaXMgcmVmbGVjdGVkIGluIGNvcHlpbmcN Cj4gPiB0aGUgc2FtZSB2YWx1ZXMsIGFzIHRoZXkgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIG51bWJl ciBvZiBjb21wbGV0ZWQNCj4gPiBpdGVyYXRpb25zIHNpbmNlIHRoZSBzY2FsYXIgY29kZSByZXN0 YXJ0cyB0aGUgbGFzdCBpdGVyYXRpb24uDQo+ID4NCj4gPiBTbyBhbGwgdGhlIFBISSBub2RlcyBv ZiB0aGUgYWx0ZXJuYXRlIGV4aXRzIGFyZSBjb3JyZWN0LiAgVGhlIHZlY3Rvcg0KPiA+IEl0ZXJh dGlvbiBkb2Vzbid0IGhhbmRsZSB0aGUgcGFydGlhbCBpdGVyYXRpb24uDQo+ID4NCj4gPiA+IHNs cGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIGZpbmlzaGVkIHdoaWNoIHByb2Jh Ymx5DQo+ID4gPiBtZWFucyBsZWF2aW5nIGl0IGFsbW9zdCB1bmNoYW5nZWQgYmVzaWRlcyB0aGUg TEMgU1NBIG1haW50YWluaW5nDQo+ID4gPiBjaGFuZ2VzLiAgQWZ0ZXIgdGhhdCBmb3IgdGhlIG11 bHRpLWV4aXQgY2FzZSBzcGxpdCB0aGUNCj4gPiA+IGVwaWxvZyBwcmVoZWFkZXIgZWRnZSBhbmQg cmVkaXJlY3QgYWxsIHRoZSBhbHRlcm5hdGUgZXhpdHMgdG8gdGhlDQo+ID4gPiBuZXcgcHJlaGVh ZGVyLiAgU28gdGhlIENGRyBiZWNvbWVzDQo+ID4gPg0KPiA+ID4gICAgICAgICAgICAgICAgICA8 b3JpZ2luYWwgbG9vcD4NCj4gPiA+ICAgICAgICAgICAgICAgICAvICAgICAgfA0KPiA+ID4gICAg ICAgICAgICAgICAgLyAgICA8bWFpbiBleGl0IHcvIG9yaWdpbmFsIExDIFBIST4NCj4gPiA+ICAg ICAgICAgICAgICAgLyAgICAgIGlmIChlcGlsb2cpDQo+ID4gPiAgICBhbHQgZXhpdHMgLyAgICAg ICAgLyAgXA0KPiA+ID4gICAgICAgICAgICAgLyAgICAgICAgLyAgICBsb29wIGFyb3VuZA0KPiA+ ID4gICAgICAgICAgICAgfCAgICAgICAvDQo+ID4gPiAgICAgICAgICAgIHByZWhlYWRlciB3aXRo ICJoZWFkZXIiIFBISXMNCj4gPiA+ICAgICAgICAgICAgICAgfA0KPiA+ID4gICAgICAgICAgIDxl cGlsb2c+DQo+ID4gPg0KPiA+ID4gbm90ZSB5b3UgbmVlZCB0aGUgaGVhZGVyIFBISXMgYWxzbyBv biB0aGUgbWFpbiBleGl0IHBhdGggYnV0IHlvdQ0KPiA+ID4gb25seSBuZWVkIHRoZSBsb29wIGVu ZCBQSElzIHRoZXJlLg0KPiA+ID4NCj4gPiA+IEl0IHNlZW1zIHNvIHRoYXQgYXQgbGVhc3QgY3Vy cmVudGx5IHRoZSBvcmRlciBvZiB0aGluZ3MgbWFrZXMNCj4gPiA+IHRoZW0gbW9yZSBjb21wbGlj YXRlZCB0aGFuIG5lY2Vzc2FyeS4NCj4gPg0KPiA+IEkndmUgYmVlbiB0cnlpbmcgdG8sIGJ1dCB0 aGlzIHJlcHJlc2VudGF0aW9uIHNlZW1zIGEgbG90IGhhcmRlciB0byB3b3JrIHdpdGgsDQo+ID4g SW4gcGFydGljdWxhciBhdCB0aGUgbW9tZW50IG9uY2Ugd2UgZXhpdA0KPiBzbHBlZWxfdHJlZV9k dXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZw0KPiA+IHRoZSBsb29wIHN0cnVjdHVyZSBpcyBleGFj dGx5IHRoZSBzYW1lIGFzIG9uZSBleHBlY3RzIGZyb20gYW55IG5vcm1hbCBlcGlsb2cNCj4gdmVj dG9yaXphdGlvbi4NCj4gPg0KPiA+IEJ1dCB0aGlzIG5ldyByZXByZXNlbnRhdGlvbiByZXF1aXJl cyBtZSB0byBwbGFjZSB0aGUgZ3VhcmQgbXVjaCBlYXJsaWVyIHRoYW4NCj4gdGhlIGVwaWxvZ3Vl DQo+ID4gcHJlaGVhZGVyLCAgeWV0IEkgc3RpbGwgaGF2ZSB0byBhZGp1c3QgdGhlIFBISSBub2Rl cyBpbiB0aGUgcHJlaGVhZGVyLiAgU28gaXQNCj4gc2VlbXMgdGhhdCB0aGlzIHNwbGl0DQo+ID4g aXMgdGhlcmUgdG8gb25seSBpbmRpY2F0ZSB0aGF0IHdlIGFsd2F5cyBlbnRlciB0aGUgZXBpbG9n IHdoZW4gdGFraW5nIGFuIGVhcmx5DQo+IGV4aXQuDQo+ID4NCj4gPiBUb2RheSB0aGlzIGlzIHJl ZmxlY3RlZCBpbiB0aGUgdmFsdWVzIG9mIHRoZSBQSEkgbm9kZXMgcmF0aGVyIHRoYW4gc3RydWN0 dXJhbGx5Lg0KPiBPbmNlIHdlIHBsYWNlDQo+ID4gVGhlIGd1YXJkIHdlIHVwZGF0ZSB0aGUgbm9k ZXMgYW5kIHRoZSBhbHRlcm5hdGUgZXhpdHMgZ2V0IHRoZWlyIHZhbHVlIGZvcg0KPiBpdnRtcCB1 cGRhdGVkIHRvIFZGLg0KPiA+DQo+ID4gVGhpcyByZXByZXNlbnRhdGlvbiBhbHNvIGZvcmNlcyBt ZSB0byBkbyB0aGUgcmVkaXJlY3Rpb24gaW4gZXZlcnkgY2FsbCBzaXRlIG9mDQo+ID4gc2xwZWVs X3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgbWFraW5nIHRoZSBjb2RlIG1vcmUgY29t cGxpY2F0ZWQNCj4gaW4gYWxsIHVzZSBzaXRlcy4NCj4gPg0KPiA+IEJ1dCBJIHRoaW5rIHRoaXMg ZG9lc24ndCBhZGRyZXNzIHRoZSBtYWluIHJlYXNvbiB3aHkgdGhlDQo+IHNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+ID4gY29kZSBoYXMgYSBsYXJnZSBibG9jayBvZiBj b2RlIHRvIGRlYWwgd2l0aCBQSEkgbm9kZSB1cGRhdGVzLg0KPiA+DQo+ID4gVGhlIHJlYXNvbiBh cyB5b3UgbWVudGlvbmVkIHNvbWV3aGVyZSBlbHNlIGlzIHRoYXQgYWZ0ZXIgd2UgcmVkaXJlY3Qg dGhlDQo+IGVkZ2VzIEkgaGF2ZSB0byByZWNvbnN0cnVjdA0KPiA+IHRoZSBwaGkgbm9kZXMuICBG b3IgbW9zdCBpdCdzIHN0cmFpZ2h0IGZvcndhcmRzLCBidXQgZm9yIGxpdmUgdmFsdWVzIG9yIHZ1 c2UNCj4gY2hhaW5zIGl0IHJlcXVpcmVzIGV4dHJhIGNvZGUuDQo+ID4NCj4gPiBZb3UncmUgcmln aHQgaW4gdGhhdCBiZWZvcmUgd2UgcmVkaXJlY3QgdGhlIGVkZ2VzIHRoZXkgYXJlIGFsbCBjb3Jy ZWN0IGluIHRoZSBleGl0DQo+IGJsb2NrLCB5b3UgbWVudGlvbmVkIHRoYXQNCj4gPiB0aGUgQVBJ IGZvciB0aGUgZWRnZSByZWRpcmVjdGlvbiBpcyBzdXBwb3NlZCB0byBjb3B5IHRoZSB2YWx1ZXMg b3ZlciBpZiBJDQo+IGNyZWF0ZSB0aGUgcGhpIG5vZGVzIGJlZm9yZSBoYW5kLg0KPiA+DQo+ID4g SG93ZXZlciB0aGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrOg0KPiA+DQo+ID4gICAgICBmb3IgKGF1 dG8gZ3NpX2Zyb20gPSBnc2lfc3RhcnRfcGhpcyAoc2NhbGFyX2V4aXQtPmRlc3QpOw0KPiA+IAkg ICAhZ3NpX2VuZF9wIChnc2lfZnJvbSk7IGdzaV9uZXh0ICgmZ3NpX2Zyb20pKQ0KPiA+IAl7DQo+ ID4gCSAgZ2ltcGxlICpmcm9tX3BoaSA9IGdzaV9zdG10IChnc2lfZnJvbSk7DQo+ID4gCSAgdHJl ZSBuZXdfcmVzID0gY29weV9zc2FfbmFtZSAoZ2ltcGxlX3BoaV9yZXN1bHQgKGZyb21fcGhpKSk7 DQo+ID4gCSAgY3JlYXRlX3BoaV9ub2RlIChuZXdfcmVzLCBuZXdfcHJlaGVhZGVyKTsNCj4gPiAJ fQ0KPiA+DQo+ID4gICAgICAgZm9yIChlZGdlIGV4aXQgOiBsb29wX2V4aXRzKQ0KPiA+IAlyZWRp cmVjdF9lZGdlX2FuZF9icmFuY2ggKGV4aXQsIG5ld19wcmVoZWFkZXIpOw0KPiA+DQo+ID4gU3Rp bGwgbGVhdmVzIHRoZW0gZW1wdHkuICBHcmVwcGluZyBhcm91bmQgbW9zdCBjb2RlIHNlZW1zIHRv IHBhaXINCj4gcmVkaXJlY3RfZWRnZV9hbmRfYnJhbmNoIHdpdGgNCj4gPiBjb3B5X3BoaV9hcmdf aW50b19leGlzdGluZ19waGkuICBUaGUgcHJvYmxlbSBpcyB0aGF0IGluIGFsbCB0aGVzZSBjYXNl cyBhZnRlcg0KPiByZWRpcmVjdGluZyBhbiBlZGdlIHRoZXkNCj4gPiBjYWxsIGNvcHlfcGhpX2Fy Z19pbnRvX2V4aXN0aW5nX3BoaSBmcm9tIGEgcHJlZGVjZXNzb3IgZWRnZSB0byBmaWxsIGluIHRo ZSBwaGkNCj4gbm9kZXMuDQo+IA0KPiBZb3UgbmVlZCB0byBjYWxsIGZsdXNoX3BlbmRpbmdfc3Rt dHMgb24gZWFjaCBlZGdlIHlvdSByZWRpcmVjdC4NCj4gY29weV9waGlfYXJnX2ludG9fZXhpc3Rp bmdfcGhpIGlzbid0IHN1aXRhYmxlIGZvciBlZGdlIHJlZGlyZWN0aW5nLg0KDQpPaC4gSSdsbCBn aXZlIHRoYXQgYSB0cnksIHRoYXQgd291bGQgbWFrZSBzZW5zZS4uIEkgZGlkbid0IGZsdXNoIGl0 IGluIHRoZSBjdXJyZW50IGFwcHJvYWNoDQpiZWNhdXNlIEkgbmVlZGVkIHRoZSBtYXAsIGJ1dCBz aW5jZSBJIHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUgbWFwLCB0aGlzIG1ha2VzIHNlbnNlLg0KDQo+ IA0KPiA+IFRoaXMgaXMgYmVjYXVzZSBhcyBJIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCBkZXN0 cm95cyB0aGUgcGhpIG5vZGUgZW50cmllcw0KPiBhbmQgY29weV9waGlfYXJnX2ludG9fZXhpc3Rp bmdfcGhpDQo+ID4gc2ltcGx5IGp1c3QgcmVhZHMgdGhlIGdpbXBsZV9waGlfYXJnX2RlZiB3aGlj aCB3b3VsZCBiZSBOVUxMLg0KPiA+DQo+ID4gWW91IGNvdWxkIHBvaW50IGl0IHRvIHRoZSBzcmMg YmxvY2sgb2YgdGhlIGV4aXQsIGluIHdoaWNoIGNhc2UgaXQgY29waWVzIHRoZQ0KPiB3cm9uZyB2 YWx1ZXMgaW4gZm9yIHRoZSB2dXNlcy4gIEF0IHRoZSBlbmQNCj4gPiBvZiB2ZWN0b3JpemF0aW9u IHRoZSBjZmdjbGVhbnVwIGNvZGUgZG9lcyB0aGUgc2FtZSB0aGluZyB0byBtYWludGFpbiBMQ1NT QQ0KPiBpZiB5b3UgaGF2ZW4ndC4gIFRoaXMgY29kZSBhbHdheXMgZ29lcw0KPiA+IHdyb25nIGZv ciBtdWx0aXBsZSBleGl0cyBiZWNhdXNlIG9mIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBhYm92ZS4g IFRoZXJlJ3Mgbm8NCj4gbm9kZSBmb3IgaXQgdG8gY29weSB0aGUgcmlnaHQgdmFsdWUNCj4gPiBm cm9tLg0KPiA+DQo+ID4gQXMgYW4gYWx0ZXJuYXRlIGFwcHJvYWNoIEkgY2FuIHNwbGl0IHRoZSBl eGl0IGVkZ2VzLCBjb3B5IHRoZSBwaGkgbm9kZXMgaW50bw0KPiB0aGUgc3BsaXQgYW5kIGFmdGVy IHRoYXQgcmVkaXJlY3QgdGhlbS4NCj4gPiBUaGlzIGhvd2V2ZXIgY3JlYXRlcyB0aGUgYXdrd2Fy ZG5lc3Mgb2YgaGF2aW5nIHRoZSBleGl0IGVkZ2VzIG5vIGxvbmdlcg0KPiBjb25uZWN0IHRvIHRo ZSBwcmVoZWFkZXIuDQo+ID4NCj4gPiBBbGwgb2YgdGhpcyB0aGVuIGJlZ3MgdGhlIHF1ZXN0aW9u IGlmIHRoaXMgaXMgYWxsIGVhc2llciB0aGFuIHRoZSBjdXJyZW50IGFwcHJvYWNoDQo+IHdoaWNo IGlzIGp1c3QgdG8gcmVhZCB0aGUgZWRnZSB2YXINCj4gPiBtYXAgdG8gZmlndXJlIG91dCB0aGUg bm9kZXMgdGhhdCB3ZXJlIHJlbW92ZWQgZHVyaW5nIHRoZSByZWRpcmVjdC4NCj4gDQo+IEJ1dCB0 aGUgZWRnZSBtYXAgaXMgc3VwcG9zZWQgdG8gYmUgYXBwbGllZCB2aWEgZmx1c2hfcGVuZGluZ19z dG10cywNCj4gc3BlY2lmaWNhbGx5IGl0IHJlbGllcyBvbiBQSEkgbm9kZXMgaGF2aW5nIGEgMTox IGNvcnJlc3BvbmRlbmNlIGJldHdlZW4NCj4gb2xkIGFuZCBuZXcgZGVzdGluYXRpb24gYW5kIHRo dXMgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciB0aGUgY2FzZQ0KPiB5b3UgY29weSB0aGUgZGVzdGlu YXRpb24gYW5kIHJlZGlyZWN0IGFuIGVkZ2UgdG8gdGhlIGNvcHkuDQoNCkFoIHlvdSB3ZXJlIHJl ZmVycmluZyB0byBmbHVzaF9wZW5kaW5nX3N0bXRzLCAgcmlnaHQgdGhhdCB3b3VsZCBtYWtlIG1v cmUgc2Vuc2UuDQpXaWxsIGdpdmUgaXQgIGEgZ28sIHRoYW5rcyENCg0KPiANCj4gVGhhdCBpcywg dGhlIG1haW4gaXNzdWUgSSBoYXZlIHdpdGggdGhlIENGRyBtYW5pcHVsYXRpb24gaXMgdGhhdCBp dA0KPiBpc24ndCBicm9rZW4gZG93biB0byBzaW1wbGUgb3BlcmF0aW9ucyB0aGF0IGluIHRoZW1z ZWx2ZXMgbGVhdmUNCj4gZXZlcnl0aGluZyBjb3JyZWN0LiAgSSB0aGluayBpdCBzaG91bGQgYmUg cG9zc2libGUgdG8gZG8gdGhpcw0KPiBhbmQgYXMgMm5kIHN0ZXAgb25seSBkbyB0aGUgc3BlY2lh bCBtYXNzYWdpbmcgZm9yIHRoZSBlYXJseSBleGl0DQo+IExDIFBISXMgdGhhdCBmZWVkIGludG8g dGhlIGVwaWxvZ3VlIGxvb3AuDQo+IA0KDQpJIHNlZSwgU28gSSB0aGluaywgSWYgSSB1bmRlcnN0 YW5kIHdoYXQgeW91J3JlIHNheWluZyBjb3JyZWN0bHksIGlzIHRoYXQNCnlvdSB3b3VsZCBsaWtl IGluc3RlYWQgb2YgaGF2aW5nIDEgYmlnIGZ1bmN0aW9uLCB0byBoYXZlIGxpdHRsZSBzbWFsbGVy DQpoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZWFjaCBvbiB0aGVpciBvd24gZG8gc29tZXRoaW5nIHNt YWxsIGJ1dA0KY29ycmVjdCBhbmQgd2hlbiBjYWxsZWQgaW4gc2VxdWVuY2UgcGVyZm9ybSB0aGUg Y29tcGxpY2F0ZWQgd29yaz8NCg0KaS5lLiB5b3Ugc3RpbGwgaGF2ZSBvbmUgdG9wIGxldmVsIGZ1 bmN0aW9uLCBhbmQgYXQgdGhlIGVuZCBvZiB0aGF0IGNhbGwNCmV2ZXJ5dGhpbmcgaXMgaW4gb3Jk ZXI/IA0KDQo+IEFzIHlvdSBzYXkgdGhlIGNvZGUgaXMgcXVpdGUgY29tcGxpY2F0ZWQgZXZlbiB3 aXRob3V0IGVhcmx5IGJyZWFrDQo+IHZlY3Rvcml6YXRpb24gd2hpY2ggaXMgd2h5IEkgb3JpZ2lu YWxseSBzdWdnZXN0ZWQgdG8gdHJ5ICJmaXhpbmciIGl0DQo+IGFzIHByZXJlcXVlc2l0ZS4gIEl0 IGRvZXMgaGF2ZSB0aGUgc2FtZSBmdW5kYW1lbnRhbCBpc3N1ZSB3aGVuIGZlZWRpbmcNCj4gdGhl IGVwaWxvZ3VlIC0gdGhlICJtaXNzaW5nIiBMQyBQSElzLCB0aGUgZGlmZmVyZW5jZSBpcyBvbmx5 IHRoYXQNCj4gd2l0aG91dCBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9uIHdlIHRha2UgdGhlIGV4 aXQgdmFsdWVzIHdoaWxlDQo+IGZvciBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9uIHdlIHRha2Ug dGhlIGxhdGNoIHZhbHVlcyBmcm9tIHRoZQ0KPiBwcmV2aW91cyBpdGVyYXRpb24oPykNCg0KT2ss IElmIEkgdW5kZXJzdG9vZCB0aGUgYWJvdmUgY29ycmVjdGx5IHdpdGggaG93IHlvdSB3YW50ZWQg dGhlIHNlcXVlbmNlDQpzcGxpdCBvdXQsIHRoZW4gd291bGQgdGhpcyB3b3JrIGZvciB5b3U6DQoN CkkgcHVsbCBvdXQgZnJvbSB0aGUgcGF0Y2ggc2VyaWVzOg0KDQoxLiB0aGUgc2luZ2xlX2V4aXQg cmVtb3ZhbCBhbmQgdXNpbmcgb2Ygb3VyIG93biBJViBpbiB0aGUgdmVjdG9yaXplci4NCjIuIFRo ZSByZWZhY3RvcmluZyBvZiB0aGUgY3VycmVudCBwZWVsaW5nIGNvZGUsIHdpdGhvdXQgbmV3IGZ1 bmN0aW9uYWxpdHkgYnV0DQogICAgIHNwbGl0dGluZyBpdCB1cCBpbnRvIHRoZSBsb2dpY2FsIGxp dHRsZSBoZWxwZXIgZnVuY3Rpb25zLg0KDQpBbmQgZ2V0IHRob3NlIGNvbW1pdHRlZCBzZXBhcmF0 ZWx5IGFuZCB0aGVuIHJlYmFzZSBvbiB0aGUgZWFybHkgYnJlYWsgc3R1ZmYNCndoaWNoIHdpbGwg YWRkIGhhbmRsaW5nIHRoZSBhZGRpdGlvbmFsIGNhc2UgZm9yIG11bHRpcGxlIGV4aXRzIGluIHRo ZSBwZWVsaW5nIHN0ZXA/DQoNCkkgYWxyZWFkeSBkaWQgMSwgSSBkaWRuJ3QgZG8gMiBiZWNhdXNl IHRoZSBmdW5jdGlvbiB3YXMgcmV3b3JrZWQgaW4gb25lIGdvIHRvIGJvdGgNCmNsZWFuIGl0IHVw IGFuZCBzdXBwb3J0IG11bHRpcGxlIGV4aXRzLiAgQnV0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gcHVs bCB0aGVtIG91dC4NCg0KSXMgaXQgb2sgdG8gYWxzbyBwdWxsIG91dCB0aGUgdmVjdG9yYWJsZV9j b21wYXJpc29uIHJlZmFjdG9yaW5nIGFzIHdlbGw/IEkgaGF2ZW4ndA0KY29tbWl0dGVkIGl0IHll dCBiZWNhdXNlIHdpdGhvdXQgdGhlIGVhcmx5X2JyZWFrIHN1cHBvcnQgaXQgZG9lc24ndCBsb29r IHVzZWZ1bA0KYnV0IHJlYmFzZXMgYXJlIHRyaWNreSB3aGVuIGl0IGNoYW5nZXMuDQoNCj4gDQo+ ID4gTWF5YmUgSSdtIHN0aWxsIG1pc3VuZGVyc3RhbmRpbmcgdGhlIEFQSSwgYnV0IHJlYWRpbmcg dGhlIHNvdXJjZXMgb2YgdGhlDQo+IGZ1bmN0aW9ucywgdGhleSBhbGwgY29weSB2YWx1ZXMgZnJv bSAqZXhpc3RpbmcqDQo+ID4gcGhpIG5vZGVzLiAgQW5kIGFueSBleGlzdGluZyBwaGkgbm9kZSBh ZnRlciB0aGUgcmVkaXJlY3QgYXJlIG5vdCBjb3JyZWN0Lg0KPiA+DQo+ID4gZ2ltcGxlX3JlZGly ZWN0X2VkZ2VfYW5kX2JyYW5jaCBoYXMgYSBjaHVuayB0aGF0IGluZGljYXRlcyBpdCBzaG91bGQg aGF2ZQ0KPiB1cGRhdGVkIHRoZSBQSEkgbm9kZXMgYmVmb3JlIGNhbGxpbmcNCj4gPiBzc2FfcmVk aXJlY3RfZWRnZSB0byByZW1vdmUgdGhlIG9sZCBvbmVzLCBidXQgdGhlcmUncyBubyBjb2RlIHRo ZXJlLiBJdCdzIGFsbA0KPiBlbXB0eS4NCj4gPg0KPiA+IE1vc3Qgb2YgdGhlIG90aGVyIHJlZmFj dG9yaW5ncy9jaGFuZ2VzIHdlcmUgZWFzeSBlbm91Z2ggdG8gZG8sIGJ1dCB0aGlzDQo+IG9uZSBJ IHNlZW0gdG8gYmUgYSBzdHJ1Z2dsaW5nIHdpdGguDQo+IA0KPiBJIHNlZS4gIElmIHlvdSBhcmUg dGlyZWQgb2YgdHJ5aW5nIGZlZWwgZnJlZSB0byBzZW5kIGFuIHVwZGF0ZWQgc2VyaWVzDQo+IHdp dGggdGhlIG90aGVyIGNoYW5nZXMsIGlmIGl0IGxvb2tzIGF3a3dhcmQgYnV0IGNvcnJlY3Qgd2Ug Y2FuIHNlZQ0KPiBzb21lb25lIGRvaW5nIHRoZSBjbGVhbnVwIGFmdGVyd2FyZHMuDQo+IA0KDQpU aGFua3MsIEknbSBub3QgdGlyZWQgeWV0IPCfmIosIGp1c3QgY29uZnVzZWQsIGFuZCBJIHRoaW5r IGl0J3MgY2xlYXJlciBub3cuICBJZiB5b3UgYWdyZWUNCndpdGggdGhlIGFib3ZlIEkgY2FuIHB1 bGwgdGhlbSBvdXQgb2YgdGhlIHNlcmllcy4NCg0KQ2hlZXJzLA0KVGFtYXINCg0KPiBSaWNoYXJk Lg0KPiANCj4gPiBUaGFua3MsDQo+ID4gVGFtYXINCj4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ICAJfQ0KPiA+ID4gPiA+ID4gLSAgICAgIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaF9mb3Jj ZSAoZSwgbmV3X3ByZWhlYWRlcik7DQo+ID4gPiA+ID4gPiAtICAgICAgZmx1c2hfcGVuZGluZ19z dG10cyAoZSk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAgICAgICAgc2V0X2ltbWVkaWF0 ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBuZXdfcHJlaGVhZGVyLA0KPiBlLQ0KPiA+ID4g PnNyYyk7DQo+ID4gPiA+ID4gPiAtICAgICAgaWYgKHdhc19pbW1fZG9tIHx8IGR1cGxpY2F0ZV9v dXRlcl9sb29wKQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgIGlmICgod2FzX2lt bV9kb20gfHwgZHVwbGljYXRlX291dGVyX2xvb3ApICYmDQo+ICFtdWx0aXBsZV9leGl0c19wKQ0K PiA+ID4gPiA+ID4gIAlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4 aXRfZGVzdCwNCj4gbmV3X2V4aXQtDQo+ID4gPiA+ID4gPnNyYyk7DQo+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gICAgICAgIC8qIEFuZCByZW1vdmUgdGhlIG5vbi1uZWNlc3NhcnkgZm9yd2FyZGVy IGFnYWluLiAgS2VlcCB0aGUNCj4gb3RoZXINCj4gPiA+ID4gPiA+IEBAIC0xNjQ3LDkgKzE3NTYs NDIgQEAgc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gPiA+IChjbGFz cw0KPiA+ID4gPiA+IGxvb3AgKmxvb3AsDQo+ID4gPiA+ID4gPiAgICAgICAgZGVsZXRlX2Jhc2lj X2Jsb2NrIChwcmVoZWFkZXIpOw0KPiA+ID4gPiA+ID4gICAgICAgIHNldF9pbW1lZGlhdGVfZG9t aW5hdG9yIChDRElfRE9NSU5BVE9SUywgc2NhbGFyX2xvb3AtDQo+ID5oZWFkZXIsDQo+ID4gPiA+ ID4gPiAgCQkJICAgICAgIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKHNjYWxhcl9sb29wKS0+c3JjKTsN Cj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAvKiBGaW5hbGx5IGFmdGVyIHdpcmlu ZyB0aGUgbmV3IGVwaWxvZ3VlIHdlIG5lZWQgdG8gdXBkYXRlIGl0cw0KPiBtYWluDQo+ID4gPiBl eGl0DQo+ID4gPiA+ID4gPiArCSB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZXhpdCB3ZSByZWNv cmRlZC4gIE90aGVyIGV4aXRzIGFyZQ0KPiBhbHJlYWR5DQo+ID4gPiA+ID4gPiArCSBjb3JyZWN0 LiAgKi8NCj4gPiA+ID4gPiA+ICsgICAgICBpZiAobXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ID4g PiA+ICsJew0KPiA+ID4gPiA+ID4gKwkgIGZvciAoZWRnZSBlIDogZ2V0X2xvb3BfZXhpdF9lZGdl cyAobG9vcCkpDQo+ID4gPiA+ID4gPiArCSAgICBkb21zLnNhZmVfcHVzaCAoZS0+ZGVzdCk7DQo+ ID4gPiA+ID4gPiArCSAgdXBkYXRlX2xvb3AgPSBuZXdfbG9vcDsNCj4gPiA+ID4gPiA+ICsJICBk b21zLnNhZmVfcHVzaCAoZXhpdF9kZXN0KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJ ICAvKiBMaWtlbHkgYSBmYWxsLXRocm91Z2ggZWRnZSwgc28gdXBkYXRlIGlmIG5lZWRlZC4gICov DQo+ID4gPiA+ID4gPiArCSAgaWYgKHNpbmdsZV9zdWNjX3AgKGV4aXRfZGVzdCkpDQo+ID4gPiA+ ID4gPiArCSAgICBkb21zLnNhZmVfcHVzaCAoc2luZ2xlX3N1Y2MgKGV4aXRfZGVzdCkpOw0KPiA+ ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gPiA+ICAgIGVsc2UgLyog QWRkIHRoZSBjb3B5IGF0IGVudHJ5LiAgKi8NCj4gPiA+ID4gPiA+ICAgICAgew0KPiA+ID4gPiA+ ID4gKyAgICAgIC8qIENvcHkgdGhlIGN1cnJlbnQgbG9vcCBMQyBQSEkgbm9kZXMgYmV0d2VlbiB0 aGUgb3JpZ2luYWwgbG9vcA0KPiBleGl0DQo+ID4gPiA+ID4gPiArCSBibG9jayBhbmQgdGhlIG5l dyBsb29wIGhlYWRlci4gIFRoaXMgYWxsb3dzIHVzIHRvIGxhdGVyIHNwbGl0DQo+IHRoZQ0KPiA+ ID4gPiA+ID4gKwkgcHJlaGVhZGVyIGJsb2NrIGFuZCBzdGlsbCBmaW5kIHRoZSByaWdodCBMQyBu b2Rlcy4gICovDQo+ID4gPiA+ID4gPiArICAgICAgZWRnZSBvbGRfbGF0Y2hfbG9vcCA9IGxvb3Bf bGF0Y2hfZWRnZSAobG9vcCk7DQo+ID4gPiA+ID4gPiArICAgICAgZWRnZSBvbGRfbGF0Y2hfaW5p dCA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOw0KPiA+ID4gPiA+ID4gKyAgICAgIGVkZ2Ug bmV3X2xhdGNoX2xvb3AgPSBsb29wX2xhdGNoX2VkZ2UgKG5ld19sb29wKTsNCj4gPiA+ID4gPiA+ ICsgICAgICBlZGdlIG5ld19sYXRjaF9pbml0ID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobmV3X2xv b3ApOw0KPiA+ID4gPiA+ID4gKyAgICAgIGZvciAoYXV0byBnc2lfZnJvbSA9IGdzaV9zdGFydF9w aGlzIChuZXdfbGF0Y2hfaW5pdC0+ZGVzdCksDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBzZWUgYWJv dmUNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkgICBnc2lfdG8gPSBnc2lfc3RhcnRfcGhpcyAo b2xkX2xhdGNoX2xvb3AtPmRlc3QpOw0KPiA+ID4gPiA+ID4gKwkgICBmbG93X2xvb3BzICYmICFn c2lfZW5kX3AgKGdzaV9mcm9tKSAmJiAhZ3NpX2VuZF9wDQo+IChnc2lfdG8pOw0KPiA+ID4gPiA+ ID4gKwkgICBnc2lfbmV4dCAoJmdzaV9mcm9tKSwgZ3NpX25leHQgKCZnc2lfdG8pKQ0KPiA+ID4g PiA+ID4gKwl7DQo+ID4gPiA+ID4gPiArCSAgZ2ltcGxlICpmcm9tX3BoaSA9IGdzaV9zdG10IChn c2lfZnJvbSk7DQo+ID4gPiA+ID4gPiArCSAgZ2ltcGxlICp0b19waGkgPSBnc2lfc3RtdCAoZ3Np X3RvKTsNCj4gPiA+ID4gPiA+ICsJICB0cmVlIG5ld19hcmcgPSBQSElfQVJHX0RFRl9GUk9NX0VE R0UgKGZyb21fcGhpLA0KPiA+ID4gPiA+IG5ld19sYXRjaF9sb29wKTsNCj4gPiA+ID4gPiA+ICsJ ICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAodG9fcGhpLCBvbGRfbGF0Y2hfaW5pdCwNCj4g bmV3X2FyZyk7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICAg ICAgICBpZiAoc2NhbGFyX2xvb3AgIT0gbG9vcCkNCj4gPiA+ID4gPiA+ICAJew0KPiA+ID4gPiA+ ID4gIAkgIC8qIFJlbW92ZSB0aGUgbm9uLW5lY2Vzc2FyeSBmb3J3YXJkZXIgb2Ygc2NhbGFyX2xv b3AgYWdhaW4uDQo+ICovDQo+ID4gPiA+ID4gPiBAQCAtMTY3NywzMSArMTgxOSwzNiBAQA0KPiBz bHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZw0KPiA+ID4gKGNsYXNzDQo+ID4g PiA+ID4gbG9vcCAqbG9vcCwNCj4gPiA+ID4gPiA+ICAgICAgICBkZWxldGVfYmFzaWNfYmxvY2sg KG5ld19wcmVoZWFkZXIpOw0KPiA+ID4gPiA+ID4gICAgICAgIHNldF9pbW1lZGlhdGVfZG9taW5h dG9yIChDRElfRE9NSU5BVE9SUywgbmV3X2xvb3AtDQo+ID5oZWFkZXIsDQo+ID4gPiA+ID4gPiAg CQkJICAgICAgIGxvb3BfcHJlaGVhZGVyX2VkZ2UgKG5ld19sb29wKS0+c3JjKTsNCj4gPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICBpZiAobXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ID4g PiA+ICsJdXBkYXRlX2xvb3AgPSBsb29wOw0KPiA+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gLSAgaWYgKHNjYWxhcl9sb29wICE9IGxvb3ApDQo+ID4gPiA+ID4gPiAr ICBpZiAobXVsdGlwbGVfZXhpdHNfcCkNCj4gPiA+ID4gPiA+ICAgICAgew0KPiA+ID4gPiA+ID4g LSAgICAgIC8qIFVwZGF0ZSBuZXdfbG9vcC0+aGVhZGVyIFBISXMsIHNvIHRoYXQgb24gdGhlIHBy ZWhlYWRlcg0KPiA+ID4gPiA+ID4gLQkgZWRnZSB0aGV5IGFyZSB0aGUgb25lcyBmcm9tIGxvb3Ag cmF0aGVyIHRoYW4gc2NhbGFyX2xvb3AuICAqLw0KPiA+ID4gPiA+ID4gLSAgICAgIGdwaGlfaXRl cmF0b3IgZ3NpX29yaWcsIGdzaV9uZXc7DQo+ID4gPiA+ID4gPiAtICAgICAgZWRnZSBvcmlnX2Ug PSBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCj4gPiA+ID4gPiA+IC0gICAgICBlZGdlIG5l d19lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobmV3X2xvb3ApOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ ID4gPiA+ID4gLSAgICAgIGZvciAoZ3NpX29yaWcgPSBnc2lfc3RhcnRfcGhpcyAobG9vcC0+aGVh ZGVyKSwNCj4gPiA+ID4gPiA+IC0JICAgZ3NpX25ldyA9IGdzaV9zdGFydF9waGlzIChuZXdfbG9v cC0+aGVhZGVyKTsNCj4gPiA+ID4gPiA+IC0JICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpICYmICFn c2lfZW5kX3AgKGdzaV9uZXcpOw0KPiA+ID4gPiA+ID4gLQkgICBnc2lfbmV4dCAoJmdzaV9vcmln KSwgZ3NpX25leHQgKCZnc2lfbmV3KSkNCj4gPiA+ID4gPiA+ICsgICAgICBmb3IgKGVkZ2UgZSA6 IGdldF9sb29wX2V4aXRfZWRnZXMgKHVwZGF0ZV9sb29wKSkNCj4gPiA+ID4gPiA+ICAJew0KPiA+ ID4gPiA+ID4gLQkgIGdwaGkgKm9yaWdfcGhpID0gZ3NpX29yaWcucGhpICgpOw0KPiA+ID4gPiA+ ID4gLQkgIGdwaGkgKm5ld19waGkgPSBnc2lfbmV3LnBoaSAoKTsNCj4gPiA+ID4gPiA+IC0JICB0 cmVlIG9yaWdfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChvcmlnX3BoaSwgb3JpZ19lKTsN Cj4gPiA+ID4gPiA+IC0JICBsb2NhdGlvbl90IG9yaWdfbG9jdXMNCj4gPiA+ID4gPiA+IC0JICAg ID0gZ2ltcGxlX3BoaV9hcmdfbG9jYXRpb25fZnJvbV9lZGdlIChvcmlnX3BoaSwgb3JpZ19lKTsN Cj4gPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiA+IC0JICBhZGRfcGhpX2FyZyAobmV3X3BoaSwgb3Jp Z19hcmcsIG5ld19lLCBvcmlnX2xvY3VzKTsNCj4gPiA+ID4gPiA+ICsJICBlZGdlIGV4Ow0KPiA+ ID4gPiA+ID4gKwkgIGVkZ2VfaXRlcmF0b3IgZWk7DQo+ID4gPiA+ID4gPiArCSAgRk9SX0VBQ0hf RURHRSAoZXgsIGVpLCBlLT5kZXN0LT5zdWNjcykNCj4gPiA+ID4gPiA+ICsJICAgIHsNCj4gPiA+ ID4gPiA+ICsJICAgICAgLyogRmluZCB0aGUgZmlyc3Qgbm9uLWZhbGx0aHJvdWdoIGJsb2NrIGFz IGZhbGwtdGhyb3VnaHMgY2FuJ3QNCj4gPiA+ID4gPiA+ICsJCSBkb21pbmF0ZSBvdGhlciBibG9j a3MuICAqLw0KPiA+ID4gPiA+ID4gKwkgICAgICB3aGlsZSAoKGV4LT5mbGFncyAmIEVER0VfRkFM TFRIUlUpDQo+ID4gPg0KPiA+ID4gRm9yIHRoZSBwcm9sb2d1ZSBwZWVsaW5nIGFueSBlYXJseSBl eGl0IHdlIHRha2Ugd291bGQgc2tpcCBhbGwgb3RoZXINCj4gPiA+IGxvb3BzIHNvIHdlIGNhbiBz aW1wbHkgbGVhdmUgdGhlbSBhbmQgdGhlaXIgTEMgUEhJIG5vZGVzIGluIHBsYWNlLg0KPiA+ID4g V2UgbmVlZCBleHRyYSBQSElzIG9ubHkgb24gdGhlIHBhdGggdG8gdGhlIG1haW4gdmVjdG9yIGxv b3AuICBJDQo+ID4gPiB0aGluayB0aGUgY29tbWVudCBpc24ndCBhY2N1cmF0ZWx5IHJlZmxlY3Rp bmcgd2hhdCB3ZSBkby4gIEluDQo+ID4gPiBmYWN0IHdlIGRvIG5vdCBhZGQgYW55IExDIFBISSBu b2RlcyBoZXJlIGJ1dCBzaW1wbHkgYWRqdXN0IHRoZQ0KPiA+ID4gbWFpbiBsb29wIGhlYWRlciBQ SEkgYXJndW1lbnRzPw0KPiA+ID4NCj4gPiA+ID4gPiBJIGRvbid0IHRoaW5rIEVER0VfRkFMTFRI UlUgaXMgc2V0IGNvcnJlY3RseSwgd2hhdCdzIHdyb25nIHdpdGgNCj4gPiA+ID4gPiBqdXN0IHVz aW5nIHNpbmdsZV9zdWNjX3AgaGVyZT8gIEEgZmFsbHRocnUgZWRnZSBzcmMgZG9taW5hdGVzIHRo ZQ0KPiA+ID4gPiA+IGZhbGx0aHJ1IGVkZ2UgZGVzdCwgc28gdGhlIHNlbnRlbmNlIGFib3ZlIGRv ZXNuJ3QgbWFrZSBzZW5zZS4NCj4gPiA+ID4NCj4gPiA+ID4gSSB3YW50ZWQgdG8gc2F5LCB0aGF0 IHRoZSBpbW1lZGlhdGUgZG9taW5hdG9yIG9mIGEgYmxvY2sgaXMgbmV2ZXINCj4gPiA+ID4gYW4g ZmFsbCB0aHJvdWdoIGJsb2NrLiAgQXQgbGVhc3QgZnJvbSB3aGF0IEkgdW5kZXJzdG9vZCBmcm9t IGhvdw0KPiA+ID4gPiB0aGUgZG9taW5hdG9ycyBhcmUgY2FsY3VsYXRlZCBpbiB0aGUgY29kZSwg dGhvdWdoIG1heSBoYXZlIG1pc3NlZA0KPiA+ID4gPiBzb21ldGhpbmcuDQo+ID4gPg0KPiA+ID4g IEJCMQ0KPiA+ID4gICB8DQo+ID4gPiAgQkIyDQo+ID4gPiAgIHwNCj4gPiA+ICBCQjMNCj4gPiA+ DQo+ID4gPiBoZXJlIHRoZSBpbW1lZGlhdGUgZG9taW5hdG9yIG9mIEJCMyBpcyBCQjIgYW5kIHRo YXQgb2YgQkIyIGlzIEJCMS4NCj4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsJCSAgICAg JiYgc2luZ2xlX3N1Y2NfcCAoZXgtPmRlc3QpKQ0KPiA+ID4gPiA+ID4gKwkJew0KPiA+ID4gPiA+ ID4gKwkJICBkb21zLnNhZmVfcHVzaCAoZXgtPmRlc3QpOw0KPiA+ID4gPiA+ID4gKwkJICBleCA9 IHNpbmdsZV9zdWNjX2VkZ2UgKGV4LT5kZXN0KTsNCj4gPiA+ID4gPiA+ICsJCX0NCj4gPiA+ID4g PiA+ICsJICAgICAgZG9tcy5zYWZlX3B1c2ggKGV4LT5kZXN0KTsNCj4gPiA+ID4gPiA+ICsJICAg IH0NCj4gPiA+ID4gPiA+ICsJICBkb21zLnNhZmVfcHVzaCAoZS0+ZGVzdCk7DQo+ID4gPiA+ID4g PiAgCX0NCj4gPiA+ID4gPiA+IC0gICAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgICAg ICBpdGVyYXRlX2ZpeF9kb21pbmF0b3JzIChDRElfRE9NSU5BVE9SUywgZG9tcywgZmFsc2UpOw0K PiA+ID4gPiA+ID4gKyAgICAgIGlmICh1cGRhdGVkX2RvbXMpDQo+ID4gPiA+ID4gPiArCXVwZGF0 ZWRfZG9tcy0+c2FmZV9zcGxpY2UgKGRvbXMpOw0KPiA+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ID4gPiAgICBmcmVlIChuZXdfYmJzKTsNCj4gPiA+ID4gPiA+ICAgIGZyZWUgKGJicyk7DQo+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gQEAgLTE3NzcsNiArMTkyNCw5IEBAIHNscGVlbF9jYW5fZHVw bGljYXRlX2xvb3BfcCAoY29uc3QNCj4gPiA+ID4gPiBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8s IGNvbnN0X2VkZ2UgZSkNCj4gPiA+ID4gPiA+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGxvb3Bf ZXhpdF9nc2kgPSBnc2lfbGFzdF9iYiAoZXhpdF9lLT5zcmMpOw0KPiA+ID4gPiA+ID4gICAgdW5z aWduZWQgaW50IG51bV9iYiA9IGxvb3AtPmlubmVyPyA1IDogMjsNCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiArICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ ID4gPiA+ID4gKyAgICBudW1fYmIgKz0gTE9PUF9WSU5GT19BTFRfRVhJVFMgKGxvb3BfdmluZm8p Lmxlbmd0aCAoKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkgdGhpbmsg Y2hlY2tpbmcgdGhlIG51bWJlciBvZiBCQnMgaXMgb2RkLCBJIGRvbid0IHJlbWVtYmVyIGFueXRo aW5nDQo+ID4gPiA+ID4gaW4gc2xwZWVsIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoYXQ/ICBJ IHRoaW5rIHdlIGNhbiBzaW1wbHkgZHJvcA0KPiA+ID4gPiA+IHRoaXMgb3IgZG8geW91IHJlbWVt YmVyIGFueXRoaW5nIHRoYXQgd291bGQgZGVwZW5kIG9uIC0+bnVtX25vZGVzDQo+ID4gPiA+ID4g YmVpbmcgb25seSBleGFjdGx5IDUgb3IgMj8NCj4gPiA+ID4NCj4gPiA+ID4gTmV2ZXIgYWN0dWFs bHkgc2VlbWVkIHRvIHJlcXVpcmUgaXQsIGJ1dCB0aGV5J3JlIHVzZWQgYXMgc29tZSBjaGVjayB0 bw0KPiA+ID4gPiBzZWUgaWYgdGhlcmUgYXJlIHVuZXhwZWN0ZWQgY29udHJvbCBmbG93IGluIHRo ZSBsb29wLg0KPiA+ID4gPg0KPiA+ID4gPiBpLmUuIHRoaXMgd291bGQgc2F5IG5vIGlmIHlvdSBo YXZlIGFuIGlmIHN0YXRlbWVudCBpbiB0aGUgbG9vcCB0aGF0IHdhc24ndA0KPiA+ID4gPiBjb252 ZXJ0ZWQuICBUaGUgb3RoZXIgcGFydCBvZiB0aGlzIGFuZCB0aGUgYWNjb21wYW55aW5nIGV4cGxh bmF0aW9uIGlzIGluDQo+ID4gPiA+IHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0uICBJbiB0aGUgcGF0 Y2ggc2VyaWVzIEkgaGFkIHRvIHJlbW92ZSB0aGUgaGFyZA0KPiA+ID4gPiBudW1fbm9kZXMgPT0g MiBjaGVjayBmcm9tIHRoZXJlIGJlY2F1c2UgbnVtYmVyIG9mIG5vZGVzIHJlc3RyaWN0ZWQNCj4g PiA+ID4gdGhpbmdzIHRvbyBtdWNoLiAgSWYgeW91IGhhdmUgYW4gZW1wdHkgZmFsbCB0aHJvdWdo IGJsb2NrLCB3aGljaCBzZWVtcw0KPiB0bw0KPiA+ID4gPiBoYXBwZW4gb2Z0ZW4gYmV0d2VlbiB0 aGUgbWFpbiBleGl0IGFuZCB0aGUgbGF0Y2ggYmxvY2sgdGhlbiB3ZSdkIG5vdA0KPiA+ID4gPiB2 ZWN0b3JpemUuDQo+ID4gPiA+DQo+ID4gPiA+IFNvIGluc3RlYWQgSSBub3cgcmVqZWN0cyBsb29w cyBhZnRlciBhbmFseXppbmcgdGhlIGdjb25kLiAgU28gdGhpbmsgdGhpcw0KPiBjaGVjaw0KPiA+ ID4gPiBjYW4gZ28vbmVlZHMgdG8gYmUgZGlmZmVyZW50Lg0KPiA+ID4NCj4gPiA+IExldHMgcmVt b3ZlIGl0IGZyb20gdGhpcyBmdW5jdGlvbiB0aGVuLg0KPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gICAgLyogQWxsIGxvb3BzIGhhdmUgYW4gb3V0ZXIgc2NvcGU7IHRoZSBvbmx5IGNhc2Ug bG9vcC0+b3V0ZXIgaXMgTlVMTCBpcw0KPiBmb3INCj4gPiA+ID4gPiA+ICAgICAgIHRoZSBmdW5j dGlvbiBpdHNlbGYuICAqLw0KPiA+ID4gPiA+ID4gICAgaWYgKCFsb29wX291dGVyIChsb29wKQ0K PiA+ID4gPiA+ID4gQEAgLTIwNDQsNiArMjE5NCwxMSBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJf dmVjdG9yaXplcg0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ ID4gPiAgICBjbGFzcyBsb29wICpsb29wID0gTE9PUF9WSU5GT19MT09QIChsb29wX3ZpbmZvKTsN Cj4gPiA+ID4gPiA+ICAgIGJhc2ljX2Jsb2NrIHVwZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0Ow0K PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgIC8qIEZvciBlYXJseSBleGl0cyB3ZSdsbCB1cGRh dGUgdGhlIElWcyBpbg0KPiA+ID4gPiA+ID4gKyAgICAgdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vh cmx5X2JyZWFrLiAgKi8NCj4gPiA+ID4gPiA+ICsgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFL UyAobG9vcF92aW5mbykpDQo+ID4gPiA+ID4gPiArICAgIHJldHVybjsNCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBMT09QX1ZJTkZPX0lWX0VYSVQg KGxvb3BfdmluZm8pLT5kZXN0Ow0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgIC8qIE1ha2Ug c3VyZSB0aGVyZSBleGlzdHMgYSBzaW5nbGUtcHJlZGVjZXNzb3IgZXhpdCBiYjogICovDQo+ID4g PiA+ID4gPiBAQCAtMjEzMSw2ICsyMjg2LDIwOCBAQCB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfdmVj dG9yaXplcg0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ID4g PiAgICAgICAgLyogRml4IHBoaSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8N Cj4gPiA+ID4gPiA+ICAgICAgICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpMSwgdXBk YXRlX2UsIG5pX25hbWUpOw0KPiA+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4gPiArICByZXR1 cm47DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiB3ZSBkb24ndCB1c3VhbGx5IHBsYWNlIGEgcmV0dXJu IGF0IHRoZSBlbmQgb2Ygdm9pZCBmdW5jdGlvbnMNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gK30N Cj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiAgIEZ1bmN0aW9uIHZlY3RfdXBkYXRlX2l2 c19hZnRlcl9lYXJseV9icmVhay4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICJB ZHZhbmNlIiB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlcyBvZiBMT09QIHRvIHRoZSB2YWx1ZSB0aGV5 DQo+IHNob3VsZA0KPiA+ID4gdGFrZQ0KPiA+ID4gPiA+ID4gKyAgICAgYWZ0ZXIgdGhlIGV4ZWN1 dGlvbiBvZiBMT09QLiAgVGhpcyBpcyBjdXJyZW50bHkgbmVjZXNzYXJ5IGJlY2F1c2UNCj4gdGhl DQo+ID4gPiA+ID4gPiArICAgICB2ZWN0b3JpemVyIGRvZXMgbm90IGhhbmRsZSBpbmR1Y3Rpb24g dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYWZ0ZXINCj4gdGhlDQo+ID4gPiA+ID4gPiArICAgICBs b29wLiAgU3VjaCBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVyYXRpb25zIG9m IExPT1AgYXJlDQo+ID4gPiA+ID4gPiArICAgICBwZWVsZWQsIGJlY2F1c2Ugb2YgdGhlIGVhcmx5 IGV4aXQuICBXaXRoIGFuIGVhcmx5IGV4aXQgd2UgYWx3YXlzIHBlZWwNCj4gPiA+IHRoZQ0KPiA+ ID4gPiA+ID4gKyAgICAgbG9vcC4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgIElu cHV0Og0KPiA+ID4gPiA+ID4gKyAgICAgLSBMT09QX1ZJTkZPIC0gYSBsb29wIGluZm8gc3RydWN0 dXJlIGZvciB0aGUgbG9vcCB0aGF0IGlzIGdvaW5nIHRvDQo+IGJlDQo+ID4gPiA+ID4gPiArCQkg ICAgdmVjdG9yaXplZC4gVGhlIGxhc3QgZmV3IGl0ZXJhdGlvbnMgb2YgTE9PUCB3ZXJlDQo+IHBl ZWxlZC4NCj4gPiA+ID4gPiA+ICsgICAgIC0gTE9PUCAtIGEgbG9vcCB0aGF0IGlzIGdvaW5nIHRv IGJlIHZlY3Rvcml6ZWQuIFRoZSBsYXN0IGZldw0KPiBpdGVyYXRpb25zDQo+ID4gPiA+ID4gPiAr CSAgICAgIG9mIExPT1Agd2VyZSBwZWVsZWQuDQo+ID4gPiA+ID4gPiArICAgICAtIFZGIC0gVGhl IGxvb3AgdmVjdG9yaXphdGlvbiBmYWN0b3IuDQo+ID4gPiA+ID4gPiArICAgICAtIE5JVEVSU19P UklHIC0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgTE9PUCBleGVjdXRlcw0KPiAoYmVm b3JlDQo+ID4gPiBpdCBpcw0KPiA+ID4gPiA+ID4gKwkJICAgICB2ZWN0b3JpemVkKS4gaS5lLCB0 aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBpdnMgc2hvdWxkDQo+IGJlDQo+ID4gPiA+ID4gPiArCQkg ICAgIGJ1bXBlZC4NCj4gPiA+ID4gPiA+ICsgICAgIC0gTklURVJTX1ZFQ1RPUiAtIFRoZSBudW1i ZXIgb2YgaXRlcmF0aW9ucyB0aGF0IHRoZSB2ZWN0b3IgTE9PUA0KPiA+ID4gPiA+IGV4ZWN1dGVz Lg0KPiA+ID4gPiA+ID4gKyAgICAgLSBVUERBVEVfRSAtIGEgc3VjY2Vzc29yIGVkZ2Ugb2YgTE9P UC0+ZXhpdCB0aGF0IGlzIG9uIHRoZSAob25seSkNCj4gPiA+IHBhdGgNCj4gPiA+ID4gPiA+ICsJ CSAgY29taW5nIG91dCBmcm9tIExPT1Agb24gd2hpY2ggdGhlcmUgYXJlIHVzZXMgb2YNCj4gdGhl IExPT1ANCj4gPiA+ID4gPiBpdnMNCj4gPiA+ID4gPiA+ICsJCSAgKHRoaXMgaXMgdGhlIHBhdGgg ZnJvbSBMT09QLT5leGl0IHRvIGVwaWxvZ19sb29wLQ0KPiA+cHJlaGVhZGVyKS4NCj4gPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiA+ICsJCSAgVGhlIG5ldyBkZWZpbml0aW9ucyBvZiB0aGUgaXZzIGFy ZSBwbGFjZWQgaW4gTE9PUC0NCj4gPmV4aXQuDQo+ID4gPiA+ID4gPiArCQkgIFRoZSBwaGkgYXJn cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UgaW4NCj4gdGhlIGJiDQo+ID4gPiA+ ID4gPiArCQkgIFVQREFURV9FLT5kZXN0IGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgT3V0cHV0Og0KPiA+ID4gPiA+ID4gKyAgICAgICAt IElmIGF2YWlsYWJsZSwgdGhlIExDU1NBIHBoaSBub2RlIGZvciB0aGUgbG9vcCBJViB0ZW1wLg0K PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgICAgQXNzdW1wdGlvbiAxOiBMaWtlIHRoZSBy ZXN0IG9mIHRoZSB2ZWN0b3JpemVyLCB0aGlzIGZ1bmN0aW9uDQo+IGFzc3VtZXMNCj4gPiA+ID4g PiA+ICsgICAgIGEgc2luZ2xlIGxvb3AgZXhpdCB0aGF0IGhhcyBhIHNpbmdsZSBwcmVkZWNlc3Nv ci4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgIEFzc3VtcHRpb24gMjogVGhlIHBo aSBub2RlcyBpbiB0aGUgTE9PUCBoZWFkZXIgYW5kIGluDQo+IHVwZGF0ZV9iYg0KPiA+ID4gYXJl DQo+ID4gPiA+ID4gPiArICAgICBvcmdhbml6ZWQgaW4gdGhlIHNhbWUgb3JkZXIuDQo+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiArICAgICBBc3N1bXB0aW9uIDM6IFRoZSBhY2Nlc3MgZnVuY3Rp b24gb2YgdGhlIGl2cyBpcyBzaW1wbGUgZW5vdWdoIChzZWUNCj4gPiA+ID4gPiA+ICsgICAgIHZl Y3RfY2FuX2FkdmFuY2VfaXZzX3ApLiAgVGhpcyBhc3N1bXB0aW9uIHdpbGwgYmUgcmVsYXhlZCBp biB0aGUNCj4gPiA+IGZ1dHVyZS4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgIEFz c3VtcHRpb24gNDogRXhhY3RseSBvbmUgb2YgdGhlIHN1Y2Nlc3NvcnMgb2YgTE9PUCBleGl0LWJi IGlzIG9uDQo+IGENCj4gPiA+IHBhdGgNCj4gPiA+ID4gPiA+ICsgICAgIGNvbWluZyBvdXQgb2Yg TE9PUCBvbiB3aGljaCB0aGUgaXZzIG9mIExPT1AgYXJlIHVzZWQgKHRoaXMgaXMgdGhlDQo+ID4g PiBwYXRoDQo+ID4gPiA+ID4gPiArICAgICB0aGF0IGxlYWRzIHRvIHRoZSBlcGlsb2cgbG9vcDsg b3RoZXIgcGF0aHMgc2tpcCB0aGUgZXBpbG9nIGxvb3ApLg0KPiBUaGlzDQo+ID4gPiA+ID4gPiAr ICAgICBwYXRoIHN0YXJ0cyB3aXRoIHRoZSBlZGdlIFVQREFURV9FLCBhbmQgaXRzIGRlc3RpbmF0 aW9uIChkZW5vdGVkDQo+ID4gPiA+ID4gdXBkYXRlX2JiKQ0KPiA+ID4gPiA+ID4gKyAgICAgbmVl ZHMgdG8gaGF2ZSBpdHMgcGhpcyB1cGRhdGVkLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gK3N0YXRpYyB0cmVlDQo+ID4gPiA+ID4gPiArdmVjdF91cGRhdGVf aXZzX2FmdGVyX2Vhcmx5X2JyZWFrIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGNsYXNzDQo+ ID4gPiBsb29wICoNCj4gPiA+ID4gPiBlcGlsb2csDQo+ID4gPiA+ID4gPiArCQkJCSAgIHBvbHlf aW50NjQgdmYsIHRyZWUgbml0ZXJzX29yaWcsDQo+ID4gPiA+ID4gPiArCQkJCSAgIHRyZWUgbml0 ZXJzX3ZlY3RvciwgZWRnZSB1cGRhdGVfZSkNCj4gPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gPiAr ICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gPiA+ ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICBncGhpX2l0 ZXJhdG9yIGdzaSwgZ3NpMTsNCj4gPiA+ID4gPiA+ICsgIHRyZWUgbmlfbmFtZSwgaXZ0bXAgPSBO VUxMOw0KPiA+ID4gPiA+ID4gKyAgYmFzaWNfYmxvY2sgdXBkYXRlX2JiID0gdXBkYXRlX2UtPmRl c3Q7DQo+ID4gPiA+ID4gPiArICB2ZWM8ZWRnZT4gYWx0X2V4aXRzID0gTE9PUF9WSU5GT19BTFRf RVhJVFMgKGxvb3BfdmluZm8pOw0KPiA+ID4gPiA+ID4gKyAgZWRnZSBsb29wX2l2ID0gTE9PUF9W SU5GT19JVl9FWElUIChsb29wX3ZpbmZvKTsNCj4gPiA+ID4gPiA+ICsgIGJhc2ljX2Jsb2NrIGV4 aXRfYmIgPSBsb29wX2l2LT5kZXN0Ow0KPiA+ID4gPiA+ID4gKyAgY2xhc3MgbG9vcCAqbG9vcCA9 IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7DQo+ID4gPiA+ID4gPiArICBnY29uZCAqY29u ZCA9IExPT1BfVklORk9fTE9PUF9JVl9DT05EIChsb29wX3ZpbmZvKTsNCj4gPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiA+ICsgIGdjY19hc3NlcnQgKGNvbmQpOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ID4gKyAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAobG9vcC0+aGVhZGVyKSwgZ3NpMSA9 IGdzaV9zdGFydF9waGlzDQo+ID4gPiAodXBkYXRlX2JiKTsNCj4gPiA+ID4gPiA+ICsgICAgICAg IWdzaV9lbmRfcCAoZ3NpKSAmJiAhZ3NpX2VuZF9wIChnc2kxKTsNCj4gPiA+ID4gPiA+ICsgICAg ICAgZ3NpX25leHQgKCZnc2kpLCBnc2lfbmV4dCAoJmdzaTEpKQ0KPiA+ID4gPiA+ID4gKyAgICB7 DQo+ID4gPiA+ID4gPiArICAgICAgdHJlZSBpbml0X2V4cHIsIGZpbmFsX2V4cHIsIHN0ZXBfZXhw cjsNCj4gPiA+ID4gPiA+ICsgICAgICB0cmVlIHR5cGU7DQo+ID4gPiA+ID4gPiArICAgICAgdHJl ZSB2YXIsIG5pLCBvZmY7DQo+ID4gPiA+ID4gPiArICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3Ig bGFzdF9nc2k7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAgICAgZ3BoaSAqcGhpID0g Z3NpMS5waGkgKCk7DQo+ID4gPiA+ID4gPiArICAgICAgdHJlZSBwaGlfc3NhID0gUEhJX0FSR19E RUZfRlJPTV9FREdFIChwaGksDQo+ID4gPiBsb29wX3ByZWhlYWRlcl9lZGdlDQo+ID4gPiA+ID4g KGVwaWxvZykpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSdtIGNvbmZ1c2VkIGFib3V0IHRoZSBz ZXR1cC4gIHVwZGF0ZV9iYiBsb29rcyBsaWtlIHRoZSBibG9jayB3aXRoIHRoZQ0KPiA+ID4gPiA+ IGxvb3AtY2xvc2VkIFBISSBub2RlcyBvZiAnbG9vcCcgYW5kIHRoZSBleGl0ICh1cGRhdGVfZSk/ ICBIb3cgZG9lcw0KPiA+ID4gPiA+IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGVwaWxvZykgY29tZSBp bnRvIHBsYXkgaGVyZT8gIFRoYXQgd291bGQgZmVlZA0KPiBpbnRvDQo+ID4gPiA+ID4gZXBpbG9n LT5oZWFkZXIgUEhJcz8hDQo+ID4gPiA+DQo+ID4gPiA+IFdlIGNhbid0IHF1ZXJ5IHRoZSB0eXBl IG9mIHRoZSBwaGlzIGluIHRoZSBibG9jayB3aXRoIHRoZSBMQyBQSEkgbm9kZXMsIHNvDQo+IHRo ZQ0KPiA+ID4gPiBUeXBpY2FsIHBhdHRlcm4gc2VlbXMgdG8gYmUgdGhhdCB3ZSBpdGVyYXRlIG92 ZXIgYSBibG9jayB0aGF0J3MgcGFydCBvZiB0aGUNCj4gPiA+IGxvb3ANCj4gPiA+ID4gYW5kIHRo YXQgd291bGQgaGF2ZSB0aGUgUEhJcyBpbiB0aGUgc2FtZSBvcmRlciwganVzdCBzbyB3ZSBjYW4g Z2V0IHRvIHRoZQ0KPiA+ID4gPiBzdG10X3ZlY19pbmZvLg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gSXQgd291bGQgYmUgbmljZSB0byBuYW1lICdnc2lbMV0nLCAndXBkYXRlX2UnIGFu ZCAndXBkYXRlX2JiJyBpbiBhDQo+ID4gPiA+ID4gYmV0dGVyIHdheT8gIElzIHVwZGF0ZV9iYiBy ZWFsbHkgZXBpbG9nLT5oZWFkZXI/IQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2UncmUgbWlzc2lu ZyBjaGVja2luZyBpbiBQSElfQVJHX0RFRl9GUk9NX0VER0UsIG5hbWVseSB0aGF0DQo+ID4gPiA+ ID4gRS0+ZGVzdCA9PSBnaW1wbGVfYmIgKFBISSkgLSB3ZSdyZSBqdXN0IHVzaW5nIEUtPmRlc3Rf aWR4IHRoZXJlDQo+ID4gPiA+ID4gd2hpY2ggIndvcmtzIiBldmVuIGZvciB0b3RhbGx5IHVucmVs YXRlZCBlZGdlcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgIGdwaGkgKnBoaTEgPSBk eW5fY2FzdCA8Z3BoaSAqPiAoU1NBX05BTUVfREVGX1NUTVQNCj4gKHBoaV9zc2EpKTsNCj4gPiA+ ID4gPiA+ICsgICAgICBpZiAoIXBoaTEpDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBzaG91bGRuJ3Qg dGhhdCBiZSBhbiBhc3NlcnQ/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsJY29udGludWU7DQo+ ID4gPiA+ID4gPiArICAgICAgc3RtdF92ZWNfaW5mbyBwaGlfaW5mbyA9IGxvb3BfdmluZm8tPmxv b2t1cF9zdG10IChnc2kucGhpICgpKTsNCj4gPiA+ID4gPiA+ICsgICAgICBpZiAoZHVtcF9lbmFi bGVkX3AgKCkpDQo+ID4gPiA+ID4gPiArCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3Rf bG9jYXRpb24sDQo+ID4gPiA+ID4gPiArCQkJICJ2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlf YnJlYWs6IHBoaToNCj4gJUciLA0KPiA+ID4gPiA+ID4gKwkJCSAoZ2ltcGxlICopcGhpKTsNCj4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAvKiBTa2lwIHJlZHVjdGlvbiBhbmQgdmly dHVhbCBwaGlzLiAgKi8NCj4gPiA+ID4gPiA+ICsgICAgICBpZiAoIWl2X3BoaV9wIChwaGlfaW5m bykpDQo+ID4gPiA+ID4gPiArCXsNCj4gPiA+ID4gPiA+ICsJICBpZiAoZHVtcF9lbmFibGVkX3Ag KCkpDQo+ID4gPiA+ID4gPiArCSAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xv Y2F0aW9uLA0KPiA+ID4gPiA+ID4gKwkJCSAgICAgInJlZHVjIG9yIHZpcnR1YWwgcGhpLiBza2lw LlxuIik7DQo+ID4gPiA+ID4gPiArCSAgY29udGludWU7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICAvKiBGb3IgbXVsdGlwbGUgZXhpdHMgd2hlcmUg d2UgaGFuZGxlIGVhcmx5IGV4aXRzIHdlIG5lZWQgdG8gY2FycnkNCj4gb24NCj4gPiA+ID4gPiA+ ICsJIHdpdGggdGhlIHByZXZpb3VzIElWIGFzIGxvb3AgaXRlcmF0aW9uIHdhcyBub3QgZG9uZSBi ZWNhdXNlDQo+IHdlIGV4aXRlZA0KPiA+ID4gPiA+ID4gKwkgZWFybHkuICBBcyBzdWNoIGp1c3Qg Z3JhYiB0aGUgb3JpZ2luYWwgSVYuICAqLw0KPiA+ID4gPiA+ID4gKyAgICAgIHBoaV9zc2EgPSBQ SElfQVJHX0RFRl9GUk9NX0VER0UgKGdzaS5waGkgKCksIGxvb3BfbGF0Y2hfZWRnZQ0KPiA+ID4g PiA+IChsb29wKSk7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBidXQgdGhpcyBzaG91bGQgYmUgdGFr ZW4gY2FyZSBvZiBieSBMQyBTU0E/DQo+ID4gPiA+DQo+ID4gPiA+IEl0IGlzLCB0aGUgY29tbWVu dCBpcyBwcm9iYWJseSBtaXNzaW5nIGRldGFpbHMsIHRoaXMgcGFydCBqdXN0IHNjYWxlcyB0aGUN Cj4gPiA+IGNvdW50ZXINCj4gPiA+ID4gZnJvbSBWRiB0byBzY2FsYXIgY291bnRzLiAgSXQncyBq dXN0IGEgcmVtaW5kZXIgdGhhdCB0aGlzIHNjYWxpbmcgaXMgZG9uZQ0KPiA+ID4gZGlmZmVyZW50 bHkNCj4gPiA+ID4gZnJvbSBub3JtYWwgc2luZ2xlIGV4aXQgdmVjdG9yaXphdGlvbi4NCj4gPiA+ ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9LLCBoYXZlIHRvIGNvbnRpbnVlIHRvbW9ycm93IGZy b20gaGVyZS4NCj4gPiA+ID4NCj4gPiA+ID4gQ2hlZXJzLCBUaGFuayB5b3UhDQo+ID4gPiA+DQo+ ID4gPiA+IFRhbWFyDQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBSaWNoYXJkLg0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gPiArICAgICAgaWYgKGdpbXBsZV9jb25kX2xocyAoY29uZCkgIT0g cGhpX3NzYQ0KPiA+ID4gPiA+ID4gKwkgICYmIGdpbXBsZV9jb25kX3JocyAoY29uZCkgIT0gcGhp X3NzYSkNCj4gPiA+DQo+ID4gPiBzbyB0aGlzIGlzIGEgd2F5IHRvIGF2b2lkIHRvdWNoaW5nIHRo ZSBtYWluIElWPyAgTG9va3MgYSBiaXQgZnJhZ2lsZSB0bw0KPiA+ID4gbWUuICBIbW0sIHdlJ3Jl IGl0ZXJhdGluZyBvdmVyIHRoZSBtYWluIGxvb3AgaGVhZGVyIFBISXMgaGVyZT8NCj4gPiA+IENh bid0IHlvdSBjaGVjaywgc2F5LCB0aGUgcmVsZXZhbmN5IG9mIHRoZSBQSEkgbm9kZSBpbnN0ZWFk PyAgVGhvdWdoDQo+ID4gPiBpdCBtaWdodCBhbHNvIGJlIHVzZWQgYXMgaW5kdWN0aW9uLiAgQ2Fu J3QgaXQgYmUgdXNlZCBhcyBhbHRlcm5hdGUNCj4gPiA+IGV4aXQgbGlrZQ0KPiA+ID4NCj4gPiA+ ICAgZm9yIChpKQ0KPiA+ID4gICAgew0KPiA+ID4gICAgICBpZiAoaSAmIGJpdCkNCj4gPiA+ICAg ICAgICBicmVhazsNCj4gPiA+ICAgIH0NCj4gPiA+DQo+ID4gPiBhbmQgd291bGQgd2UgbmVlZCB0 byBhZGp1c3QgJ2knIHRoZW4/DQo+ID4gPg0KPiA+ID4gPiA+ID4gKwl7DQo+ID4gPiA+ID4gPiAr CSAgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX3BoaV9yZXN1bHQgKHBoaSkpOw0KPiA+ID4gPiA+ ID4gKwkgIHN0ZXBfZXhwciA9IFNUTVRfVklORk9fTE9PUF9QSElfRVZPTFVUSU9OX1BBUlQNCj4g KHBoaV9pbmZvKTsNCj4gPiA+ID4gPiA+ICsJICBzdGVwX2V4cHIgPSB1bnNoYXJlX2V4cHIgKHN0 ZXBfZXhwcik7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCSAgLyogV2UgcHJldmlvdXNs eSBnZW5lcmF0ZWQgdGhlIG5ldyBtZXJnZWQgcGhpIGluIHRoZSBzYW1lDQo+IEJCIGFzDQo+ID4g PiA+ID4gdGhlDQo+ID4gPiA+ID4gPiArCSAgICAgZ3VhcmQuICBTbyB1c2UgdGhhdCB0byBwZXJm b3JtIHRoZSBzY2FsaW5nIG9uIHJhdGhlciB0aGFuIHRoZQ0KPiA+ID4gPiA+ID4gKwkgICAgIG5v cm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtlIHRoZSBlYXJseSBicmVha3MgaW50bw0KPiBh Y2NvdW50LiAgKi8NCj4gPiA+ID4gPiA+ICsJICBmaW5hbF9leHByID0gZ2ltcGxlX3BoaV9yZXN1 bHQgKHBoaTEpOw0KPiA+ID4gPiA+ID4gKwkgIGluaXRfZXhwciA9IFBISV9BUkdfREVGX0ZST01f RURHRSAoZ3NpLnBoaSAoKSwNCj4gPiA+ID4gPiBsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKSk7 DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCSAgdHJlZSBzdHlwZSA9IFRSRUVfVFlQRSAo c3RlcF9leHByKTsNCj4gPiA+ID4gPiA+ICsJICAvKiBGb3IgZWFybHkgYnJlYWsgdGhlIGZpbmFs IGxvb3AgSVYgaXM6DQo+ID4gPiA+ID4gPiArCSAgICAgaW5pdCArIChmaW5hbCAtIGluaXQpICog dmYgd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IHBlZWxpbmcNCj4gPiA+ID4gPiA+ICsJICAgICB2 YWx1ZXMgYW5kIG5vbi1zaW5nbGUgc3RlcHMuICAqLw0KPiA+ID4gPiA+ID4gKwkgIG9mZiA9IGZv bGRfYnVpbGQyIChNSU5VU19FWFBSLCBzdHlwZSwNCj4gPiA+ID4gPiA+ICsJCQkgICAgIGZvbGRf Y29udmVydCAoc3R5cGUsIGZpbmFsX2V4cHIpLA0KPiA+ID4gPiA+ID4gKwkJCSAgICAgZm9sZF9j b252ZXJ0IChzdHlwZSwgaW5pdF9leHByKSk7DQo+ID4gPiA+ID4gPiArCSAgLyogTm93IGFkanVz dCBmb3IgVkYgdG8gZ2V0IHRoZSBmaW5hbCBpdGVyYXRpb24gdmFsdWUuICAqLw0KPiA+ID4gPiA+ ID4gKwkgIG9mZiA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIHN0eXBlLCBvZmYsIGJ1aWxkX2lu dF9jc3QNCj4gKHN0eXBlLCB2ZikpOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkgIC8q IEFkanVzdCB0aGUgdmFsdWUgd2l0aCB0aGUgb2Zmc2V0LiAgKi8NCj4gPiA+ID4gPiA+ICsJICBp ZiAoUE9JTlRFUl9UWVBFX1AgKHR5cGUpKQ0KPiA+ID4gPiA+ID4gKwkgICAgbmkgPSBmb2xkX2J1 aWxkX3BvaW50ZXJfcGx1cyAoaW5pdF9leHByLCBvZmYpOw0KPiA+ID4gPiA+ID4gKwkgIGVsc2UN Cj4gPiA+ID4gPiA+ICsJICAgIG5pID0gZm9sZF9jb252ZXJ0ICh0eXBlLA0KPiA+ID4gPiA+ID4g KwkJCSAgICAgICBmb2xkX2J1aWxkMiAoUExVU19FWFBSLCBzdHlwZSwNCj4gPiA+ID4gPiA+ICsJ CQkJCSAgICBmb2xkX2NvbnZlcnQgKHN0eXBlLA0KPiBpbml0X2V4cHIpLA0KPiA+ID4gPiA+ID4g KwkJCQkJICAgIG9mZikpOw0KPiA+ID4gPiA+ID4gKwkgIHZhciA9IGNyZWF0ZV90bXBfdmFyICh0 eXBlLCAidG1wIik7DQo+ID4gPg0KPiA+ID4gc28gaG93IGRvZXMgdGhlIG5vbi1lYXJseSBicmVh ayBjb2RlIGRlYWwgd2l0aCB1cGRhdGluZyBpbmR1Y3Rpb25zPw0KPiA+ID4gQW5kIGhvdyBkbyB5 b3UgYXZvaWQgYWx0ZXJpbmcgdGhpcyB3aGVuIHdlIGZsb3cgaW4gZnJvbSB0aGUgbm9ybWFsDQo+ ID4gPiBleGl0PyAgVGhhdCBpcywgeW91IGFyZSB1cGRhdGluZyB0aGUgdmFsdWUgaW4gdGhlIGVw aWxvZyBsb29wDQo+ID4gPiBoZWFkZXIgYnV0IGRvbid0IHlvdSBuZWVkIHRvIGluc3RlYWQgdXBk YXRlIHRoZSB2YWx1ZSBvbmx5IG9uDQo+ID4gPiB0aGUgYWx0ZXJuYXRlIGV4aXQgZWRnZXMgZnJv bSB0aGUgbWFpbiBsb29wIChhbmQga2VlcCB0aGUgbm90DQo+ID4gPiB1cGRhdGVkIHZhbHVlIG9u IHRoZSBtYWluIGV4aXQgZWRnZSk/DQo+ID4gPg0KPiA+ID4gPiA+ID4gKwkgIGxhc3RfZ3NpID0g Z3NpX2xhc3RfYmIgKGV4aXRfYmIpOw0KPiA+ID4gPiA+ID4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0 bXRzID0gTlVMTDsNCj4gPiA+ID4gPiA+ICsJICBuaV9uYW1lID0gZm9yY2VfZ2ltcGxlX29wZXJh bmQgKG5pLCAmbmV3X3N0bXRzLCBmYWxzZSwNCj4gdmFyKTsNCj4gPiA+ID4gPiA+ICsJICAvKiBF eGl0X2JiIHNob3VsZG4ndCBiZSBlbXB0eS4gICovDQo+ID4gPiA+ID4gPiArCSAgaWYgKCFnc2lf ZW5kX3AgKGxhc3RfZ3NpKSkNCj4gPiA+ID4gPiA+ICsJICAgIGdzaV9pbnNlcnRfc2VxX2FmdGVy ICgmbGFzdF9nc2ksIG5ld19zdG10cywNCj4gR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiA+ID4gPiAr CSAgZWxzZQ0KPiA+ID4gPiA+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9n c2ksIG5ld19zdG10cywNCj4gR1NJX1NBTUVfU1RNVCk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gPiArCSAgLyogRml4IHBoaSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8N Cj4gPiA+ID4gPiA+ICsJICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpLCB1cGRhdGVf ZSwgbmlfbmFtZSk7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsgICAgICBlbHNlDQo+ ID4gPiA+ID4gPiArCXsNCj4gPiA+ID4gPiA+ICsJICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVf cGhpX3Jlc3VsdCAocGhpKSk7DQo+ID4gPiA+ID4gPiArCSAgc3RlcF9leHByID0gU1RNVF9WSU5G T19MT09QX1BISV9FVk9MVVRJT05fUEFSVA0KPiAocGhpX2luZm8pOw0KPiA+ID4gPiA+ID4gKwkg IHN0ZXBfZXhwciA9IHVuc2hhcmVfZXhwciAoc3RlcF9leHByKTsNCj4gPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiA+ICsJICAvKiBXZSBwcmV2aW91c2x5IGdlbmVyYXRlZCB0aGUgbmV3IG1lcmdlZCBw aGkgaW4gdGhlIHNhbWUNCj4gQkIgYXMNCj4gPiA+ID4gPiB0aGUNCj4gPiA+ID4gPiA+ICsJICAg ICBndWFyZC4gIFNvIHVzZSB0aGF0IHRvIHBlcmZvcm0gdGhlIHNjYWxpbmcgb24gcmF0aGVyIHRo YW4gdGhlDQo+ID4gPiA+ID4gPiArCSAgICAgbm9ybWFsIGxvb3AgcGhpIHdoaWNoIGRvbid0IHRh a2UgdGhlIGVhcmx5IGJyZWFrcyBpbnRvDQo+IGFjY291bnQuICAqLw0KPiA+ID4gPiA+ID4gKwkg IGluaXRfZXhwciA9IFBISV9BUkdfREVGX0ZST01fRURHRSAocGhpMSwNCj4gbG9vcF9wcmVoZWFk ZXJfZWRnZQ0KPiA+ID4gPiA+IChsb29wKSk7DQo+ID4gPiA+ID4gPiArCSAgdHJlZSBzdHlwZSA9 IFRSRUVfVFlQRSAoc3RlcF9leHByKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJICBp ZiAodmYuaXNfY29uc3RhbnQgKCkpDQo+ID4gPiA+ID4gPiArCSAgICB7DQo+ID4gPiA+ID4gPiAr CSAgICAgIG5pID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgc3R5cGUsDQo+ID4gPiA+ID4gPiAr CQkJCWZvbGRfY29udmVydCAoc3R5cGUsDQo+ID4gPiA+ID4gPiArCQkJCQkgICAgICBuaXRlcnNf dmVjdG9yKSwNCj4gPiA+ID4gPiA+ICsJCQkJYnVpbGRfaW50X2NzdCAoc3R5cGUsIHZmKSk7DQo+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCSAgICAgIG5pID0gZm9sZF9idWlsZDIgKE1JTlVT X0VYUFIsIHN0eXBlLA0KPiA+ID4gPiA+ID4gKwkJCQlmb2xkX2NvbnZlcnQgKHN0eXBlLA0KPiA+ ID4gPiA+ID4gKwkJCQkJICAgICAgbml0ZXJzX29yaWcpLA0KPiA+ID4gPiA+ID4gKwkJCQlmb2xk X2NvbnZlcnQgKHN0eXBlLCBuaSkpOw0KPiA+ID4gPiA+ID4gKwkgICAgfQ0KPiA+ID4gPiA+ID4g KwkgIGVsc2UNCj4gPiA+ID4gPiA+ICsJICAgIC8qIElmIHRoZSBsb29wJ3MgVkYgaXNuJ3QgY29u c3RhbnQgdGhlbiB0aGUgbG9vcCBtdXN0IGhhdmUNCj4gYmVlbg0KPiA+ID4gPiA+ID4gKwkgICAg ICAgbWFza2VkLCBzbyBhdCB0aGUgZW5kIG9mIHRoZSBsb29wIHdlIGtub3cgd2UgaGF2ZQ0KPiBm aW5pc2hlZA0KPiA+ID4gPiA+ID4gKwkgICAgICAgdGhlIGVudGlyZSBsb29wIGFuZCBmb3VuZCBu b3RoaW5nLiAgKi8NCj4gPiA+ID4gPiA+ICsJICAgIG5pID0gYnVpbGRfemVyb19jc3QgKHN0eXBl KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJICBuaSA9IGZvbGRfY29udmVydCAodHlw ZSwgbmkpOw0KPiA+ID4gPiA+ID4gKwkgIC8qIFdlIGRvbid0IHN1cHBvcnQgdmFyaWFibGUgbiBp biB0aGlzIHZlcnNpb24geWV0LiAgKi8NCj4gPiA+ID4gPiA+ICsJICBnY2NfYXNzZXJ0IChUUkVF X0NPREUgKG5pKSA9PSBJTlRFR0VSX0NTVCk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAr CSAgdmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUsICJ0bXAiKTsNCj4gPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiA+ICsJICBsYXN0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2JiKTsNCj4gPiA+ID4g PiA+ICsJICBnaW1wbGVfc2VxIG5ld19zdG10cyA9IE5VTEw7DQo+ID4gPiA+ID4gPiArCSAgbmlf bmFtZSA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChuaSwgJm5ld19zdG10cywgZmFsc2UsDQo+IHZh cik7DQo+ID4gPiA+ID4gPiArCSAgLyogRXhpdF9iYiBzaG91bGRuJ3QgYmUgZW1wdHkuICAqLw0K PiA+ID4gPiA+ID4gKwkgIGlmICghZ3NpX2VuZF9wIChsYXN0X2dzaSkpDQo+ID4gPiA+ID4gPiAr CSAgICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsDQo+IEdTSV9T QU1FX1NUTVQpOw0KPiA+ID4gPiA+ID4gKwkgIGVsc2UNCj4gPiA+ID4gPiA+ICsJICAgIGdzaV9p bnNlcnRfc2VxX2JlZm9yZSAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsDQo+IEdTSV9TQU1FX1NUTVQp Ow0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0 bXRzIChwaGkxLCBsb29wX2l2LCBuaV9uYW1lKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ ICsJICBmb3IgKGVkZ2UgZXhpdCA6IGFsdF9leGl0cykNCj4gPiA+ID4gPiA+ICsJICAgIGFkanVz dF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCBleGl0LA0KPiA+ID4gPiA+ID4gKwkJCQkJYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFDQo+IChzdGVwX2V4cHIpLA0KPiA+ID4gPiA+ID4gKwkJCQkJ CSAgICAgICB2ZikpOw0KPiA+ID4gPiA+ID4gKwkgIGl2dG1wID0gZ2ltcGxlX3BoaV9yZXN1bHQg KHBoaTEpOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsgIHJldHVybiBpdnRtcDsNCj4gPiA+ID4gPiA+ICB9DQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gIC8qIFJldHVybiBhIGdpbXBsZSB2YWx1ZSBjb250YWluaW5nIHRo ZSBtaXNhbGlnbm1lbnQgKG1lYXN1cmVkIGluDQo+ID4gPiB2ZWN0b3INCj4gPiA+ID4gPiA+IEBA IC0yNjMyLDEzNyArMjk4OSwzNCBAQCB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnNfbXVsdF92 Zg0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gIC8qIExDU1NBX1BISSBpcyBhIGxjc3NhIHBoaSBvZiBFUElMT0cgbG9vcCB3aGlj aCBpcyBjb3BpZWQgZnJvbSBMT09QLA0KPiA+ID4gPiA+ID4gICAgIHRoaXMgZnVuY3Rpb24gc2Vh cmNoZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGxjc3NhIHBoaSBub2RlIGluIGV4aXQNCj4gPiA+ ID4gPiA+IC0gICBiYiBvZiBMT09QLiAgSWYgaXQgaXMgZm91bmQsIHJldHVybiB0aGUgcGhpIHJl c3VsdDsgb3RoZXJ3aXNlIHJldHVybg0KPiA+ID4gPiA+ID4gLSAgIE5VTEwuICAqLw0KPiA+ID4g PiA+ID4gKyAgIGJiIG9mIExPT1AgZm9sbG93aW5nIHRoZSBMQ1NTQV9FREdFIHRvIHRoZSBleGl0 IG5vZGUuICBJZiBpdCBpcw0KPiBmb3VuZCwNCj4gPiA+ID4gPiA+ICsgICByZXR1cm4gdGhlIHBo aSByZXN1bHQ7IG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovDQo+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gIHN0YXRpYyB0cmVlDQo+ID4gPiA+ID4gPiAgZmluZF9ndWFyZF9hcmcgKGNsYXNzIGxv b3AgKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxvZw0KPiA+ID4gQVRUUklCVVRFX1VOVVNFRCwNCj4g PiA+ID4gPiA+IC0JCWdwaGkgKmxjc3NhX3BoaSkNCj4gPiA+ID4gPiA+ICsJCWdwaGkgKmxjc3Nh X3BoaSwgaW50IGxjc3NhX2VkZ2UgPSAwKQ0KPiA+ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiA+ICAg IGdwaGlfaXRlcmF0b3IgZ3NpOw0KPiA+ID4gPiA+ID4gICAgZWRnZSBlID0gbG9vcC0+dmVjX2xv b3BfaXY7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3By ZWRfcCAoZS0+ZGVzdCkpOw0KPiA+ID4gPiA+ID4gICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhp cyAoZS0+ZGVzdCk7ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiA+ID4g PiA+ICAgICAgew0KPiA+ID4gPiA+ID4gICAgICAgIGdwaGkgKnBoaSA9IGdzaS5waGkgKCk7DQo+ ID4gPiA+ID4gPiAtICAgICAgaWYgKG9wZXJhbmRfZXF1YWxfcCAoUEhJX0FSR19ERUYgKHBoaSwg MCksDQo+ID4gPiA+ID4gPiAtCQkJICAgUEhJX0FSR19ERUYgKGxjc3NhX3BoaSwgMCksIDApKQ0K PiA+ID4gPiA+ID4gLQlyZXR1cm4gUEhJX1JFU1VMVCAocGhpKTsNCj4gPiA+ID4gPiA+IC0gICAg fQ0KPiA+ID4gPiA+ID4gLSAgcmV0dXJuIE5VTExfVFJFRTsNCj4gPiA+ID4gPiA+IC19DQo+ID4g PiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtLyogRnVuY3Rpb24gc2xwZWVsX3RyZWVfZHVwbGljYXRl X2xvb3BfdG9fZWRnZV9jZmcgZHVwbGNpYXRlcw0KPiA+ID4gPiA+IEZJUlNUL1NFQ09ORA0KPiA+ ID4gPiA+ID4gLSAgIGZyb20gU0VDT05EL0ZJUlNUIGFuZCBwdXRzIGl0IGF0IHRoZSBvcmlnaW5h bCBsb29wJ3MgcHJlaGVhZGVyL2V4aXQNCj4gPiA+ID4gPiA+IC0gICBlZGdlLCB0aGUgdHdvIGxv b3BzIGFyZSBhcnJhbmdlZCBhcyBiZWxvdzoNCj4gPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiA+IC0g ICAgICAgcHJlaGVhZGVyX2E6DQo+ID4gPiA+ID4gPiAtICAgICBmaXJzdF9sb29wOg0KPiA+ID4g PiA+ID4gLSAgICAgICBoZWFkZXJfYToNCj4gPiA+ID4gPiA+IC0JIGlfMSA9IFBISTxpXzAsIGlf Mj47DQo+ID4gPiA+ID4gPiAtCSAuLi4NCj4gPiA+ID4gPiA+IC0JIGlfMiA9IGlfMSArIDE7DQo+ ID4gPiA+ID4gPiAtCSBpZiAoY29uZF9hKQ0KPiA+ID4gPiA+ID4gLQkgICBnb3RvIGxhdGNoX2E7 DQo+ID4gPiA+ID4gPiAtCSBlbHNlDQo+ID4gPiA+ID4gPiAtCSAgIGdvdG8gYmV0d2Vlbl9iYjsN Cj4gPiA+ID4gPiA+IC0gICAgICAgbGF0Y2hfYToNCj4gPiA+ID4gPiA+IC0JIGdvdG8gaGVhZGVy X2E7DQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtICAgICAgIGJldHdlZW5fYmI6DQo+ID4g PiA+ID4gPiAtCSA7OyBpX3ggPSBQSEk8aV8yPjsgICA7OyBMQ1NTQSBwaGkgbm9kZSB0byBiZSBj cmVhdGVkIGZvciBGSVJTVCwNCj4gPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiA+IC0gICAgIHNlY29u ZF9sb29wOg0KPiA+ID4gPiA+ID4gLSAgICAgICBoZWFkZXJfYjoNCj4gPiA+ID4gPiA+IC0JIGlf MyA9IFBISTxpXzAsIGlfND47IDs7IFVzZSBvZiBpXzAgdG8gYmUgcmVwbGFjZWQgd2l0aCBpX3gs DQo+ID4gPiA+ID4gPiAtCQkJCSBvciB3aXRoIGlfMiBpZiBubyBMQ1NTQSBwaGkgaXMgY3JlYXRl ZA0KPiA+ID4gPiA+ID4gLQkJCQkgdW5kZXIgY29uZGl0aW9uIG9mDQo+ID4gPiA+ID4gQ1JFQVRF X0xDU1NBX0ZPUl9JVl9QSElTLg0KPiA+ID4gPiA+ID4gLQkgLi4uDQo+ID4gPiA+ID4gPiAtCSBp XzQgPSBpXzMgKyAxOw0KPiA+ID4gPiA+ID4gLQkgaWYgKGNvbmRfYikNCj4gPiA+ID4gPiA+IC0J ICAgZ290byBsYXRjaF9iOw0KPiA+ID4gPiA+ID4gLQkgZWxzZQ0KPiA+ID4gPiA+ID4gLQkgICBn b3RvIGV4aXRfYmI7DQo+ID4gPiA+ID4gPiAtICAgICAgIGxhdGNoX2I6DQo+ID4gPiA+ID4gPiAt CSBnb3RvIGhlYWRlcl9iOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLSAgICAgICBleGl0 X2JiOg0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLSAgIFRoaXMgZnVuY3Rpb24gY3JlYXRl cyBsb29wIGNsb3NlZCBTU0EgZm9yIHRoZSBmaXJzdCBsb29wOyB1cGRhdGUgdGhlDQo+ID4gPiA+ ID4gPiAtICAgc2Vjb25kIGxvb3AncyBQSEkgbm9kZXMgYnkgcmVwbGFjaW5nIGFyZ3VtZW50IG9u IGluY29taW5nIGVkZ2UNCj4gd2l0aA0KPiA+ID4gdGhlDQo+ID4gPiA+ID4gPiAtICAgcmVzdWx0 IG9mIG5ld2x5IGNyZWF0ZWQgbGNzc2EgUEhJIG5vZGVzLiAgSUYNCj4gPiA+IENSRUFURV9MQ1NT QV9GT1JfSVZfUEhJUw0KPiA+ID4gPiA+ID4gLSAgIGlzIGZhbHNlLCBMb29wIGNsb3NlZCBzc2Eg cGhpcyB3aWxsIG9ubHkgYmUgY3JlYXRlZCBmb3Igbm9uLWl2IHBoaXMgZm9yDQo+ID4gPiA+ID4g PiAtICAgdGhlIGZpcnN0IGxvb3AuDQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtICAgVGhp cyBmdW5jdGlvbiBhc3N1bWVzIGV4aXQgYmIgb2YgdGhlIGZpcnN0IGxvb3AgaXMgcHJlaGVhZGVy IGJiIG9mDQo+IHRoZQ0KPiA+ID4gPiA+ID4gLSAgIHNlY29uZCBsb29wLCBpLmUsIGJldHdlZW5f YmIgaW4gdGhlIGV4YW1wbGUgY29kZS4gIFdpdGggUEhJcw0KPiB1cGRhdGVkLA0KPiA+ID4gPiA+ ID4gLSAgIHRoZSBzZWNvbmQgbG9vcCB3aWxsIGV4ZWN1dGUgcmVzdCBpdGVyYXRpb25zIG9mIHRo ZSBmaXJzdC4gICovDQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtc3RhdGljIHZvaWQNCj4g PiA+ID4gPiA+IC1zbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbywNCj4gPiA+ID4gPiA+IC0JCQkJICAgY2xhc3MgbG9vcCAqZmlyc3QsIGNs YXNzIGxvb3AgKnNlY29uZCwNCj4gPiA+ID4gPiA+IC0JCQkJICAgYm9vbCBjcmVhdGVfbGNzc2Ff Zm9yX2l2X3BoaXMpDQo+ID4gPiA+ID4gPiAtew0KPiA+ID4gPiA+ID4gLSAgZ3BoaV9pdGVyYXRv ciBnc2lfdXBkYXRlLCBnc2lfb3JpZzsNCj4gPiA+ID4gPiA+IC0gIGNsYXNzIGxvb3AgKmxvb3Ag PSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ ID4gLSAgZWRnZSBmaXJzdF9sYXRjaF9lID0gRURHRV9TVUNDIChmaXJzdC0+bGF0Y2gsIDApOw0K PiA+ID4gPiA+ID4gLSAgZWRnZSBzZWNvbmRfcHJlaGVhZGVyX2UgPSBsb29wX3ByZWhlYWRlcl9l ZGdlIChzZWNvbmQpOw0KPiA+ID4gPiA+ID4gLSAgYmFzaWNfYmxvY2sgYmV0d2Vlbl9iYiA9IHNp bmdsZV9leGl0IChmaXJzdCktPmRlc3Q7DQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtICBn Y2NfYXNzZXJ0IChiZXR3ZWVuX2JiID09IHNlY29uZF9wcmVoZWFkZXJfZS0+c3JjKTsNCj4gPiA+ ID4gPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGJldHdlZW5fYmIpICYmIHNpbmds ZV9zdWNjX3ANCj4gPiA+IChiZXR3ZWVuX2JiKSk7DQo+ID4gPiA+ID4gPiAtICAvKiBFaXRoZXIg dGhlIGZpcnN0IGxvb3Agb3IgdGhlIHNlY29uZCBpcyB0aGUgbG9vcCB0byBiZSB2ZWN0b3JpemVk LiAgKi8NCj4gPiA+ID4gPiA+IC0gIGdjY19hc3NlcnQgKGxvb3AgPT0gZmlyc3QgfHwgbG9vcCA9 PSBzZWNvbmQpOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLSAgZm9yIChnc2lfb3JpZyA9 IGdzaV9zdGFydF9waGlzIChmaXJzdC0+aGVhZGVyKSwNCj4gPiA+ID4gPiA+IC0gICAgICAgZ3Np X3VwZGF0ZSA9IGdzaV9zdGFydF9waGlzIChzZWNvbmQtPmhlYWRlcik7DQo+ID4gPiA+ID4gPiAt ICAgICAgICFnc2lfZW5kX3AgKGdzaV9vcmlnKSAmJiAhZ3NpX2VuZF9wIChnc2lfdXBkYXRlKTsN Cj4gPiA+ID4gPiA+IC0gICAgICAgZ3NpX25leHQgKCZnc2lfb3JpZyksIGdzaV9uZXh0ICgmZ3Np X3VwZGF0ZSkpDQo+ID4gPiA+ID4gPiAtICAgIHsNCj4gPiA+ID4gPiA+IC0gICAgICBncGhpICpv cmlnX3BoaSA9IGdzaV9vcmlnLnBoaSAoKTsNCj4gPiA+ID4gPiA+IC0gICAgICBncGhpICp1cGRh dGVfcGhpID0gZ3NpX3VwZGF0ZS5waGkgKCk7DQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAt ICAgICAgdHJlZSBhcmcgPSBQSElfQVJHX0RFRl9GUk9NX0VER0UgKG9yaWdfcGhpLCBmaXJzdF9s YXRjaF9lKTsNCj4gPiA+ID4gPiA+IC0gICAgICAvKiBHZW5lcmF0ZSBsY3NzYSBQSEkgbm9kZSBm b3IgdGhlIGZpcnN0IGxvb3AuICAqLw0KPiA+ID4gPiA+ID4gLSAgICAgIGdwaGkgKnZlY3RfcGhp ID0gKGxvb3AgPT0gZmlyc3QpID8gb3JpZ19waGkgOiB1cGRhdGVfcGhpOw0KPiA+ID4gPiA+ID4g LSAgICAgIHN0bXRfdmVjX2luZm8gdmVjdF9waGlfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9z dG10DQo+ICh2ZWN0X3BoaSk7DQo+ID4gPiA+ID4gPiAtICAgICAgaWYgKGNyZWF0ZV9sY3NzYV9m b3JfaXZfcGhpcyB8fCAhaXZfcGhpX3AgKHZlY3RfcGhpX2luZm8pKQ0KPiA+ID4gPiA+ID4gKyAg ICAgIC8qIE5lc3RlZCBsb29wcyB3aXRoIG11bHRpcGxlIGV4aXRzIGNhbiBoYXZlIGRpZmZlcmVu dCBubyMgcGhpDQo+IG5vZGUNCj4gPiA+ID4gPiA+ICsJIGFyZ3VtZW50cyBiZXR3ZWVuIHRoZSBt YWluIGxvb3AgYW5kIGVwaWxvZyBhcyBlcGlsb2cgZmFsbHMgdG8NCj4gdGhlDQo+ID4gPiA+ID4g PiArCSBzZWNvbmQgbG9vcC4gICovDQo+ID4gPiA+ID4gPiArICAgICAgaWYgKGdpbXBsZV9waGlf bnVtX2FyZ3MgKHBoaSkgPiBlLT5kZXN0X2lkeCkNCj4gPiA+ID4gPiA+ICAJew0KPiA+ID4gPiA+ ID4gLQkgIHRyZWUgbmV3X3JlcyA9IGNvcHlfc3NhX25hbWUgKFBISV9SRVNVTFQgKG9yaWdfcGhp KSk7DQo+ID4gPiA+ID4gPiAtCSAgZ3BoaSAqbGNzc2FfcGhpID0gY3JlYXRlX3BoaV9ub2RlIChu ZXdfcmVzLCBiZXR3ZWVuX2JiKTsNCj4gPiA+ID4gPiA+IC0JICBhZGRfcGhpX2FyZyAobGNzc2Ff cGhpLCBhcmcsIHNpbmdsZV9leGl0IChmaXJzdCksDQo+ID4gPiA+ID4gVU5LTk9XTl9MT0NBVElP Tik7DQo+ID4gPiA+ID4gPiAtCSAgYXJnID0gbmV3X3JlczsNCj4gPiA+ID4gPiA+IC0JfQ0KPiA+ ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLSAgICAgIC8qIFVwZGF0ZSBQSEkgbm9kZSBpbiB0aGUg c2Vjb25kIGxvb3AgYnkgcmVwbGFjaW5nIGFyZyBvbiB0aGUNCj4gbG9vcCdzDQo+ID4gPiA+ID4g PiAtCSBpbmNvbWluZyBlZGdlLiAgKi8NCj4gPiA+ID4gPiA+IC0gICAgICBhZGp1c3RfcGhpX2Fu ZF9kZWJ1Z19zdG10cyAodXBkYXRlX3BoaSwgc2Vjb25kX3ByZWhlYWRlcl9lLA0KPiA+ID4gYXJn KTsNCj4gPiA+ID4gPiA+IC0gICAgfQ0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLSAgLyog Rm9yIGVwaWxvZ3VlIHBlZWxpbmcgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8gY29weSBhbGwgTEMg UEhJcw0KPiA+ID4gPiA+ID4gLSAgICAgZm9yIGNvcnJlY3QgdmVjdG9yaXphdGlvbiBvZiBsaXZl IHN0bXRzLiAgKi8NCj4gPiA+ID4gPiA+IC0gIGlmIChsb29wID09IGZpcnN0KQ0KPiA+ID4gPiA+ ID4gLSAgICB7DQo+ID4gPiA+ID4gPiAtICAgICAgYmFzaWNfYmxvY2sgb3JpZ19leGl0ID0gc2lu Z2xlX2V4aXQgKHNlY29uZCktPmRlc3Q7DQo+ID4gPiA+ID4gPiAtICAgICAgZm9yIChnc2lfb3Jp ZyA9IGdzaV9zdGFydF9waGlzIChvcmlnX2V4aXQpOw0KPiA+ID4gPiA+ID4gLQkgICAhZ3NpX2Vu ZF9wIChnc2lfb3JpZyk7IGdzaV9uZXh0ICgmZ3NpX29yaWcpKQ0KPiA+ID4gPiA+ID4gLQl7DQo+ ID4gPiA+ID4gPiAtCSAgZ3BoaSAqb3JpZ19waGkgPSBnc2lfb3JpZy5waGkgKCk7DQo+ID4gPiA+ ID4gPiAtCSAgdHJlZSBvcmlnX2FyZyA9IFBISV9BUkdfREVGIChvcmlnX3BoaSwgMCk7DQo+ID4g PiA+ID4gPiAtCSAgaWYgKFRSRUVfQ09ERSAob3JpZ19hcmcpICE9IFNTQV9OQU1FIHx8IHZpcnR1 YWxfb3BlcmFuZF9wDQo+ID4gPiA+ID4gKG9yaWdfYXJnKSkNCj4gPiA+ID4gPiA+IC0JICAgIGNv bnRpbnVlOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLQkgIC8qIEFscmVhZHkgY3JlYXRl ZCBpbiB0aGUgYWJvdmUgbG9vcC4gICAqLw0KPiA+ID4gPiA+ID4gLQkgIGlmIChmaW5kX2d1YXJk X2FyZyAoZmlyc3QsIHNlY29uZCwgb3JpZ19waGkpKQ0KPiA+ID4gPiA+ID4gKwkgIHRyZWUgdmFy ID0gUEhJX0FSR19ERUYgKHBoaSwgZS0+ZGVzdF9pZHgpOw0KPiA+ID4gPiA+ID4gKwkgIGlmIChU UkVFX0NPREUgKHZhcikgIT0gU1NBX05BTUUpDQo+ID4gPiA+ID4gPiAgCSAgICBjb250aW51ZTsN Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAtCSAgdHJlZSBuZXdfcmVzID0gY29weV9zc2FfbmFt ZSAob3JpZ19hcmcpOw0KPiA+ID4gPiA+ID4gLQkgIGdwaGkgKmxjcGhpID0gY3JlYXRlX3BoaV9u b2RlIChuZXdfcmVzLCBiZXR3ZWVuX2JiKTsNCj4gPiA+ID4gPiA+IC0JICBhZGRfcGhpX2FyZyAo bGNwaGksIG9yaWdfYXJnLCBzaW5nbGVfZXhpdCAoZmlyc3QpLA0KPiA+ID4gPiA+IFVOS05PV05f TE9DQVRJT04pOw0KPiA+ID4gPiA+ID4gKwkgIGlmIChvcGVyYW5kX2VxdWFsX3AgKGdldF9jdXJy ZW50X2RlZiAodmFyKSwNCj4gPiA+ID4gPiA+ICsJCQkgICAgICAgUEhJX0FSR19ERUYgKGxjc3Nh X3BoaSwgbGNzc2FfZWRnZSksIDApKQ0KPiA+ID4gPiA+ID4gKwkgICAgcmV0dXJuIFBISV9SRVNV TFQgKHBoaSk7DQo+ID4gPiA+ID4gPiAgCX0NCj4gPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+ ID4gKyAgcmV0dXJuIE5VTExfVFJFRTsNCj4gPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gIC8qIEZ1bmN0aW9uIHNscGVlbF9hZGRfbG9vcF9ndWFyZCBhZGRzIGd1YXJkIHNr aXBwaW5nIGZyb20gdGhlDQo+ID4gPiBiZWdpbm5pbmcNCj4gPiA+ID4gPiA+IEBAIC0yOTEwLDEz ICszMTY0LDExIEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDINCj4gPiA+IChj bGFzcw0KPiA+ID4gPiA+IGxvb3AgKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxvZywNCj4gPiA+ID4g PiA+ICAgIGdjY19hc3NlcnQgKHNpbmdsZV9zdWNjX3AgKG1lcmdlX2JiKSk7DQo+ID4gPiA+ID4g PiAgICBlZGdlIGUgPSBzaW5nbGVfc3VjY19lZGdlIChtZXJnZV9iYik7DQo+ID4gPiA+ID4gPiAg ICBiYXNpY19ibG9jayBleGl0X2JiID0gZS0+ZGVzdDsNCj4gPiA+ID4gPiA+IC0gIGdjY19hc3Nl cnQgKHNpbmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gPiA+ID4gPiA+IC0gIGdjY19hc3NlcnQg KHNpbmdsZV9wcmVkIChleGl0X2JiKSA9PSBzaW5nbGVfZXhpdCAoZXBpbG9nKS0+ZGVzdCk7DQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoZXhp dF9iYik7ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiA+ID4gPiA+ICAg ICAgew0KPiA+ID4gPiA+ID4gICAgICAgIGdwaGkgKnVwZGF0ZV9waGkgPSBnc2kucGhpICgpOw0K PiA+ID4gPiA+ID4gLSAgICAgIHRyZWUgb2xkX2FyZyA9IFBISV9BUkdfREVGICh1cGRhdGVfcGhp LCAwKTsNCj4gPiA+ID4gPiA+ICsgICAgICB0cmVlIG9sZF9hcmcgPSBQSElfQVJHX0RFRiAodXBk YXRlX3BoaSwgZS0+ZGVzdF9pZHgpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICB0 cmVlIG1lcmdlX2FyZyA9IE5VTExfVFJFRTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBAQCAt MjkyOCw3ICszMTgwLDcgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMg0KPiAo Y2xhc3MNCj4gPiA+IGxvb3ANCj4gPiA+ID4gPiAqbG9vcCwgY2xhc3MgbG9vcCAqZXBpbG9nLA0K PiA+ID4gPiA+ID4gICAgICAgIGlmICghbWVyZ2VfYXJnKQ0KPiA+ID4gPiA+ID4gIAltZXJnZV9h cmcgPSBvbGRfYXJnOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC0gICAgICB0cmVlIGd1YXJk X2FyZyA9IGZpbmRfZ3VhcmRfYXJnIChsb29wLCBlcGlsb2csIHVwZGF0ZV9waGkpOw0KPiA+ID4g PiA+ID4gKyAgICAgIHRyZWUgZ3VhcmRfYXJnID0gZmluZF9ndWFyZF9hcmcgKGxvb3AsIGVwaWxv ZywgdXBkYXRlX3BoaSwgZS0NCj4gPiA+ID5kZXN0X2lkeCk7DQo+ID4gPiA+ID4gPiAgICAgICAg LyogSWYgdGhlIHZhciBpcyBsaXZlIGFmdGVyIGxvb3AgYnV0IG5vdCBhIHJlZHVjdGlvbiwgd2Ug c2ltcGx5DQo+ID4gPiA+ID4gPiAgCSB1c2UgdGhlIG9sZCBhcmcuICAqLw0KPiA+ID4gPiA+ID4g ICAgICAgIGlmICghZ3VhcmRfYXJnKQ0KPiA+ID4gPiA+ID4gQEAgLTI5NDgsMjEgKzMyMDAsNiBA QCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyDQo+IChjbGFzcw0KPiA+ID4gPiA+ IGxvb3AgKmxvb3AsIGNsYXNzIGxvb3AgKmVwaWxvZywNCj4gPiA+ID4gPiA+ICAgICAgfQ0KPiA+ ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAtLyogRVBJTE9HIGxvb3AgaXMg ZHVwbGljYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBsb29wIGZvciB2ZWN0b3JpemluZywNCj4gPiA+ ID4gPiA+IC0gICB0aGUgYXJnIG9mIGl0cyBsb29wIGNsb3NlZCBzc2EgUEhJIG5lZWRzIHRvIGJl IHVwZGF0ZWQuICAqLw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gLXN0YXRpYyB2b2lkDQo+ ID4gPiA+ID4gPiAtc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChjbGFzcyBsb29w ICplcGlsb2cpDQo+ID4gPiA+ID4gPiAtew0KPiA+ID4gPiA+ID4gLSAgZ3BoaV9pdGVyYXRvciBn c2k7DQo+ID4gPiA+ID4gPiAtICBiYXNpY19ibG9jayBleGl0X2JiID0gc2luZ2xlX2V4aXQgKGVw aWxvZyktPmRlc3Q7DQo+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiAtICBnY2NfYXNzZXJ0IChz aW5nbGVfcHJlZF9wIChleGl0X2JiKSk7DQo+ID4gPiA+ID4gPiAtICBlZGdlIGUgPSBFREdFX1BS RUQgKGV4aXRfYmIsIDApOw0KPiA+ID4gPiA+ID4gLSAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhp cyAoZXhpdF9iYik7ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiA+ID4g PiA+IC0gICAgcmVuYW1lX3VzZV9vcCAoUEhJX0FSR19ERUZfUFRSX0ZST01fRURHRSAoZ3NpLnBo aSAoKSwgZSkpOw0KPiA+ID4gPiA+ID4gLX0NCj4gPiA+ID4gPiA+IC0NCj4gPiA+DQo+ID4gPiBJ IHdvbmRlciBpZiB3ZSBjYW4gc3RpbGwgc3BsaXQgdGhlc2UgY2hhbmdlcyBvdXQgdG8gYmVmb3Jl IGVhcmx5IGJyZWFrDQo+ID4gPiB2ZWN0Pw0KPiA+ID4NCj4gPiA+ID4gPiA+ICAvKiBFUElMT0dV RV9WSU5GTyBpcyBhbiBlcGlsb2d1ZSBsb29wIHRoYXQgd2Ugbm93IGtub3cgd291bGQNCj4gbmVl ZA0KPiA+ID4gdG8NCj4gPiA+ID4gPiA+ICAgICBpdGVyYXRlIGV4YWN0bHkgQ09OU1RfTklURVJT IHRpbWVzLiAgTWFrZSBhIGZpbmFsIGRlY2lzaW9uIGFib3V0DQo+ID4gPiA+ID4gPiAgICAgd2hl dGhlciB0aGUgZXBpbG9ndWUgbG9vcCBzaG91bGQgYmUgdXNlZCwgcmV0dXJuaW5nIHRydWUgaWYg c28uICAqLw0KPiA+ID4gPiA+ID4gQEAgLTMxMzgsNiArMzM3NSwxNCBAQCB2ZWN0X2RvX3BlZWxp bmcgKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5mbywNCj4gPiA+IHRyZWUNCj4gPiA+ID4gPiBu aXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiA+ID4gPiAgICAgIGJvdW5kX2VwaWxvZyArPSB2 ZiAtIDE7DQo+ID4gPiA+ID4gPiAgICBpZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChs b29wX3ZpbmZvKSkNCj4gPiA+ID4gPiA+ICAgICAgYm91bmRfZXBpbG9nICs9IDE7DQo+ID4gPiA+ ID4gPiArICAvKiBGb3IgZWFybHkgYnJlYWtzIHRoZSBzY2FsYXIgbG9vcCBuZWVkcyB0byBleGVj dXRlIGF0IG1vc3QgVkYNCj4gdGltZXMNCj4gPiA+ID4gPiA+ICsgICAgIHRvIGZpbmQgdGhlIGVs ZW1lbnQgdGhhdCBjYXVzZWQgdGhlIGJyZWFrLiAgKi8NCj4gPiA+ID4gPiA+ICsgIGlmIChMT09Q X1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gPiA+ID4gPiArICAgIHsNCj4g PiA+ID4gPiA+ICsgICAgICBib3VuZF9lcGlsb2cgPSB2ZjsNCj4gPiA+ID4gPiA+ICsgICAgICAv KiBGb3JjZSBhIHNjYWxhciBlcGlsb2d1ZSBhcyB3ZSBjYW4ndCB2ZWN0b3JpemUgdGhlIGluZGV4 IGZpbmRpbmcuDQo+ICovDQo+ID4gPiA+ID4gPiArICAgICAgdmVjdF9lcGlsb2d1ZXMgPSBmYWxz ZTsNCj4gPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ID4gICAgYm9vbCBlcGlsb2dfcGVlbGlu ZyA9IG1heWJlX25lIChib3VuZF9lcGlsb2csIDBVKTsNCj4gPiA+ID4gPiA+ICAgIHBvbHlfdWlu dDY0IGJvdW5kX3NjYWxhciA9IGJvdW5kX2VwaWxvZzsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiBAQCAtMzI5NywxNiArMzU0MiwyNCBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8N Cj4gPiA+IGxvb3BfdmluZm8sDQo+ID4gPiA+ID4gdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEs DQo+ID4gPiA+ID4gPiAgCQkJCSAgYm91bmRfcHJvbG9nICsgYm91bmRfZXBpbG9nKQ0KPiA+ID4g PiA+ID4gIAkJICAgICAgOiAoIUxPT1BfUkVRVUlSRVNfVkVSU0lPTklORyAobG9vcF92aW5mbykN Cj4gPiA+ID4gPiA+ICAJCQkgfHwgdmVjdF9lcGlsb2d1ZXMpKTsNCj4gPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiA+ICsgIC8qIFdlIG9ubHkgc3VwcG9ydCBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9u IG9uIGtub3duIGJvdW5kcyBhdA0KPiB0aGlzDQo+ID4gPiA+ID4gdGltZS4NCj4gPiA+ID4gPiA+ ICsgICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgdmVjdG9yIGxvb3AgY2FuJ3QgYmUgZW50ZXJl ZCB0aGVuIHdlIHdvbid0DQo+ID4gPiA+ID4gZ2VuZXJhdGUNCj4gPiA+ID4gPiA+ICsgICAgIGl0 IGF0IGFsbC4gIFNvIGZvciBub3cgZm9yY2Ugc2tpcF92ZWN0b3Igb2ZmIGJlY2F1c2UgdGhlIGFk ZGl0aW9uYWwNCj4gPiA+IGNvbnRyb2wNCj4gPiA+ID4gPiA+ICsgICAgIGZsb3cgbWVzc2VzIHdp dGggdGhlIEJCIGV4aXRzIGFuZCB3ZSd2ZSBhbHJlYWR5IGFuYWx5emVkIHRoZW0uDQo+ICovDQo+ ID4gPiA+ID4gPiArIHNraXBfdmVjdG9yID0gc2tpcF92ZWN0b3IgJiYgIUxPT1BfVklORk9fRUFS TFlfQlJFQUtTDQo+ID4gPiAobG9vcF92aW5mbyk7DQo+ID4gPiA+ID4gPiArDQo+ID4gPg0KPiA+ ID4gSSB0aGluayBpdCBzaG91bGQgYmUgYXMgImVhc3kiIGFzIGVudGVyaW5nIHRoZSBlcGlsb2cg dmlhIHRoZSBibG9jayB0YWtpbmcNCj4gPiA+IHRoZSByZWd1bGFyIGV4aXQ/DQo+ID4gPg0KPiA+ ID4gPiA+ID4gICAgLyogRXBpbG9nIGxvb3AgbXVzdCBiZSBleGVjdXRlZCBpZiB0aGUgbnVtYmVy IG9mIGl0ZXJhdGlvbnMgZm9yIGVwaWxvZw0KPiA+ID4gPiA+ID4gICAgICAgbG9vcCBpcyBrbm93 biBhdCBjb21waWxlIHRpbWUsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGFkZCBhIGNoZWNrDQo+IGF0 DQo+ID4gPiA+ID4gPiAgICAgICB0aGUgZW5kIG9mIHZlY3RvciBsb29wIGFuZCBza2lwIHRvIHRo ZSBlbmQgb2YgZXBpbG9nIGxvb3AuICAqLw0KPiA+ID4gPiA+ID4gICAgYm9vbCBza2lwX2VwaWxv ZyA9IChwcm9sb2dfcGVlbGluZyA8IDANCj4gPiA+ID4gPiA+ICAJCSAgICAgIHx8ICFMT09QX1ZJ TkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0KPiA+ID4gPiA+ID4gIAkJICAgICAgfHwg IXZmLmlzX2NvbnN0YW50ICgpKTsNCj4gPiA+ID4gPiA+IC0gIC8qIFBFRUxJTkdfRk9SX0dBUFMg aXMgc3BlY2lhbCBiZWNhdXNlIGVwaWxvZyBsb29wIG11c3QgYmUNCj4gZXhlY3V0ZWQuDQo+ID4g PiAqLw0KPiA+ID4gPiA+ID4gLSAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9v cF92aW5mbykpDQo+ID4gPiA+ID4gPiArICAvKiBQRUVMSU5HX0ZPUl9HQVBTIGFuZCBwZWVsaW5n IGZvciBlYXJseSBicmVha3MgYXJlIHNwZWNpYWwNCj4gYmVjYXVzZQ0KPiA+ID4gPiA+IGVwaWxv Zw0KPiA+ID4gPiA+ID4gKyAgICAgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkLiAgKi8NCj4gPiA+ID4g PiA+ICsgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pDQo+ID4g PiA+ID4gPiArICAgICAgfHwgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0K PiA+ID4gPiA+ID4gICAgICBza2lwX2VwaWxvZyA9IGZhbHNlOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ ID4gPiA+ID4gICAgY2xhc3MgbG9vcCAqc2NhbGFyX2xvb3AgPSBMT09QX1ZJTkZPX1NDQUxBUl9M T09QIChsb29wX3ZpbmZvKTsNCj4gPiA+ID4gPiA+ICAgIGF1dG9fdmVjPHByb2ZpbGVfY291bnQ+ IG9yaWdpbmFsX2NvdW50czsNCj4gPiA+ID4gPiA+ICAgIGJhc2ljX2Jsb2NrICpvcmlnaW5hbF9i YnMgPSBOVUxMOw0KPiA+ID4gPiA+ID4gQEAgLTMzNDQsMTMgKzM1OTcsMTMgQEAgdmVjdF9kb19w ZWVsaW5nIChsb29wX3ZlY19pbmZvDQo+ID4gPiBsb29wX3ZpbmZvLA0KPiA+ID4gPiA+IHRyZWUg bml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ID4gPiA+ID4gICAgaWYgKHByb2xvZ19wZWVsaW5n KQ0KPiA+ID4gPiA+ID4gICAgICB7DQo+ID4gPiA+ID4gPiAgICAgICAgZSA9IGxvb3BfcHJlaGVh ZGVyX2VkZ2UgKGxvb3ApOw0KPiA+ID4gPiA+ID4gLSAgICAgIGdjY19jaGVja2luZ19hc3NlcnQg KHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgZSkpOw0KPiA+ID4gPiA+ID4gLQ0K PiA+ID4gPiA+ID4gKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHNscGVlbF9jYW5fZHVwbGlj YXRlX2xvb3BfcCAobG9vcF92aW5mbywNCj4gZSkpOw0KPiA+ID4gPiA+ID4gICAgICAgIC8qIFBl ZWwgcHJvbG9nIGFuZCBwdXQgaXQgb24gcHJlaGVhZGVyIGVkZ2Ugb2YgbG9vcC4gICovDQo+ID4g PiA+ID4gPiAtICAgICAgcHJvbG9nID0gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRn ZV9jZmcgKGxvb3AsDQo+IHNjYWxhcl9sb29wLA0KPiA+ID4gZSk7DQo+ID4gPiA+ID4gPiArICAg ICAgcHJvbG9nID0gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGxvb3As DQo+IHNjYWxhcl9sb29wLA0KPiA+ID4gZSwNCj4gPiA+ID4gPiA+ICsJCQkJCQkgICAgICAgdHJ1 ZSk7DQo+ID4gPiA+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAocHJvbG9nKTsNCj4gPiA+ID4gPiA+ ICAgICAgICBwcm9sb2ctPmZvcmNlX3ZlY3Rvcml6ZSA9IGZhbHNlOw0KPiA+ID4gPiA+ID4gLSAg ICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5mbywgcHJvbG9n LCBsb29wLA0KPiB0cnVlKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICAgICAgICBmaXJz dF9sb29wID0gcHJvbG9nOw0KPiA+ID4gPiA+ID4gICAgICAgIHJlc2V0X29yaWdpbmFsX2NvcHlf dGFibGVzICgpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBAIC0zNDIwLDExICszNjczLDEy IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbw0KPiA+ID4gbG9vcF92aW5mbywNCj4g PiA+ID4gPiB0cmVlIG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gPiA+ID4gPiA+ICAJIGFzIHRo ZSB0cmFuc2Zvcm1hdGlvbnMgbWVudGlvbmVkIGFib3ZlIG1ha2UgbGVzcyBvciBubw0KPiBzZW5z ZSB3aGVuDQo+ID4gPiA+ID4gbm90DQo+ID4gPiA+ID4gPiAgCSB2ZWN0b3JpemluZy4gICovDQo+ ID4gPiA+ID4gPiAgICAgICAgZXBpbG9nID0gdmVjdF9lcGlsb2d1ZXMgPyBnZXRfbG9vcF9jb3B5 IChsb29wKSA6IHNjYWxhcl9sb29wOw0KPiA+ID4gPiA+ID4gLSAgICAgIGVwaWxvZyA9IHNscGVl bF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChsb29wLCBlcGlsb2csIGUpOw0KPiA+ ID4gPiA+ID4gKyAgICAgIGF1dG9fdmVjPGJhc2ljX2Jsb2NrPiBkb21zOw0KPiA+ID4gPiA+ID4g KyAgICAgIGVwaWxvZyA9IHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChs b29wLCBlcGlsb2csIGUsDQo+ID4gPiB0cnVlLA0KPiA+ID4gPiA+ID4gKwkJCQkJCSAgICAgICAm ZG9tcyk7DQo+ID4gPiA+ID4gPiAgICAgICAgZ2NjX2Fzc2VydCAoZXBpbG9nKTsNCj4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiAgICAgICAgZXBpbG9nLT5mb3JjZV92ZWN0b3JpemUgPSBmYWxzZTsN Cj4gPiA+ID4gPiA+IC0gICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxv b3BfdmluZm8sIGxvb3AsIGVwaWxvZywNCj4gZmFsc2UpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ICAgICAgICAvKiBTY2FsYXIgdmVyc2lvbiBsb29wIG1heSBiZSBwcmVmZXJyZWQuICBJbiB0 aGlzIGNhc2UsIGFkZCBndWFyZA0KPiA+ID4gPiA+ID4gIAkgYW5kIHNraXAgdG8gZXBpbG9nLiAg Tm90ZSB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBudW1iZXINCj4gb2YNCj4gPiA+ID4gPiA+ IEBAIC0zNDk2LDYgKzM3NTAsNTQgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvDQo+ IGxvb3BfdmluZm8sDQo+ID4gPiB0cmVlDQo+ID4gPiA+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20x LA0KPiA+ID4gPiA+ID4gICAgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChs b29wX3ZpbmZvLA0KPiBuaXRlcnNfdmVjdG9yX211bHRfdmYsDQo+ID4gPiA+ID4gPiAgCQkJCQl1 cGRhdGVfZSk7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgIC8qIEZvciBlYXJseSBi cmVha3Mgd2UgbXVzdCBjcmVhdGUgYSBndWFyZCB0byBjaGVjayBob3cgbWFueQ0KPiA+ID4gaXRl cmF0aW9ucw0KPiA+ID4gPiA+ID4gKwkgb2YgdGhlIHNjYWxhciBsb29wIGFyZSB5ZXQgdG8gYmUg cGVyZm9ybWVkLiAgKi8NCj4gPiA+DQo+ID4gPiBXZSBoYXZlIHRoaXMgY2hlY2sgYW55d2F5LCBu bz8gIEluIGZhY3QgZG9uJ3Qgd2Uga25vdyB0aGF0IHdlIGFsd2F5cw0KPiBlbnRlcg0KPiA+ID4g dGhlIGVwaWxvZyAoc2VlIGFib3ZlKT8NCj4gPiA+DQo+ID4gPiA+ID4gPiArICAgICAgaWYgKExP T1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gPiA+ICsJew0KPiA+ ID4gPiA+ID4gKwkgIHRyZWUgaXZ0bXAgPQ0KPiA+ID4gPiA+ID4gKwkgICAgdmVjdF91cGRhdGVf aXZzX2FmdGVyX2Vhcmx5X2JyZWFrIChsb29wX3ZpbmZvLCBlcGlsb2csIHZmLA0KPiBuaXRlcnMs DQo+ID4gPiA+ID4gPiArCQkJCQkgICAgICAgKm5pdGVyc192ZWN0b3IsIHVwZGF0ZV9lKTsNCj4g PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJICBnY2NfYXNzZXJ0IChpdnRtcCk7DQo+ID4gPiA+ ID4gPiArCSAgdHJlZSBndWFyZF9jb25kID0gZm9sZF9idWlsZDIgKEVRX0VYUFIsDQo+IGJvb2xl YW5fdHlwZV9ub2RlLA0KPiA+ID4gPiA+ID4gKwkJCQkJIGZvbGRfY29udmVydCAoVFJFRV9UWVBF DQo+IChuaXRlcnMpLA0KPiA+ID4gPiA+ID4gKwkJCQkJCSAgICAgICBpdnRtcCksDQo+ID4gPiA+ ID4gPiArCQkJCQkgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRQ0KPiAobml0ZXJzKSkpOw0KPiA+ ID4gPiA+ID4gKwkgIGJhc2ljX2Jsb2NrIGd1YXJkX2JiID0gTE9PUF9WSU5GT19JVl9FWElUIChs b29wX3ZpbmZvKS0NCj4gPmRlc3Q7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCSAgLyog SWYgd2UgaGFkIGEgZmFsbHRocm91Z2ggZWRnZSwgdGhlIGd1YXJkIHdpbGwgdGhlIHRocmVhZGVk DQo+IHRocm91Z2gNCj4gPiA+ID4gPiA+ICsJICAgICBhbmQgc28gd2UgbWF5IG5lZWQgdG8gZmlu ZCB0aGUgYWN0dWFsIGZpbmFsIGVkZ2UuICAqLw0KPiA+ID4gPiA+ID4gKwkgIGVkZ2UgZmluYWxf ZWRnZSA9IGVwaWxvZy0+dmVjX2xvb3BfaXY7DQo+ID4gPiA+ID4gPiArCSAgLyogc2xwZWVsX3Vw ZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiBleHBlY3RzIGFuIGVtcHR5DQo+IGJsb2NrIGluDQo+ ID4gPiA+ID4gPiArCSAgICAgYmV0d2VlbiB0aGUgZ3VhcmQgYW5kIHRoZSBleGl0IGVkZ2UuICBJ dCBvbmx5IGFkZHMgbmV3DQo+IG5vZGVzIGFuZA0KPiA+ID4gPiA+ID4gKwkgICAgIGRvZXNuJ3Qg dXBkYXRlIGV4aXN0aW5nIG9uZSBpbiB0aGUgY3VycmVudCBzY2hlbWUuICAqLw0KPiA+ID4gPiA+ ID4gKwkgIGJhc2ljX2Jsb2NrIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAoZmluYWxfZWRnZSk7DQo+ ID4gPiA+ID4gPiArCSAgZWRnZSBndWFyZF9lID0gc2xwZWVsX2FkZF9sb29wX2d1YXJkIChndWFy ZF9iYiwNCj4gZ3VhcmRfY29uZCwNCj4gPiA+ID4gPiBndWFyZF90bywNCj4gPiA+ID4gPiA+ICsJ CQkJCQlndWFyZF9iYiwNCj4gcHJvYl9lcGlsb2cuaW52ZXJ0DQo+ID4gPiA+ID4gKCksDQo+ID4g PiA+ID4gPiArCQkJCQkJaXJyZWRfZmxhZyk7DQo+ID4gPiA+ID4gPiArCSAgZG9tcy5zYWZlX3B1 c2ggKGd1YXJkX2JiKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJICBpdGVyYXRlX2Zp eF9kb21pbmF0b3JzIChDRElfRE9NSU5BVE9SUywgZG9tcywgZmFsc2UpOw0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKwkgIC8qIFdlIG11c3QgdXBkYXRlIGFsbCB0aGUgZWRnZXMgZnJvbSB0 aGUgbmV3IGd1YXJkX2JiLiAgKi8NCj4gPiA+ID4gPiA+ICsJICBzbHBlZWxfdXBkYXRlX3BoaV9u b2Rlc19mb3JfZ3VhcmQyIChsb29wLCBlcGlsb2csIGd1YXJkX2UsDQo+ID4gPiA+ID4gPiArCQkJ CQkgICAgICBmaW5hbF9lZGdlKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJICAvKiBJ ZiB0aGUgbG9vcCB3YXMgdmVyc2lvbmVkIHdlJ2xsIGhhdmUgYW4gaW50ZXJtZWRpYXRlIEJCDQo+ IGJldHdlZW4NCj4gPiA+ID4gPiA+ICsJICAgICB0aGUgZ3VhcmQgYW5kIHRoZSBleGl0LiAgVGhp cyBpbnRlcm1lZGlhdGUgYmxvY2sgaXMgcmVxdWlyZWQNCj4gPiA+ID4gPiA+ICsJICAgICBiZWNh dXNlIGluIHRoZSBjdXJyZW50IHNjaGVtZSBvZiB0aGluZ3MgdGhlIGd1YXJkIGJsb2NrIHBoaQ0K PiA+ID4gPiA+ID4gKwkgICAgIHVwZGF0aW5nIGNhbiBvbmx5IG1haW50YWluIExDU1NBIGJ5IGNy ZWF0aW5nIG5ldyBibG9ja3MuDQo+IEluIHRoaXMNCj4gPiA+ID4gPiA+ICsJICAgICBjYXNlIHdl IGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXMgaW4gdGhpcyBibG9jayBhcyB3ZWxsLg0KPiAq Lw0KPiA+ID4gPiA+ID4gKwkgIGlmIChsb29wICE9IHNjYWxhcl9sb29wKQ0KPiA+ID4gPiA+ID4g KwkgICAgew0KPiA+ID4gPiA+ID4gKwkgICAgICBmb3IgKGdwaGlfaXRlcmF0b3IgZ3NpID0gZ3Np X3N0YXJ0X3BoaXMgKGd1YXJkX3RvKTsNCj4gPiA+ID4gPiA+ICsJCSAgICFnc2lfZW5kX3AgKGdz aSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiA+ID4gPiA+ICsJCXJlbmFtZV91c2Vfb3AgKFBISV9B UkdfREVGX1BUUl9GUk9NX0VER0UNCj4gKGdzaS5waGkgKCksDQo+ID4gPiA+ID4gZ3VhcmRfZSkp Ow0KPiA+ID4gPiA+ID4gKwkgICAgfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkgIGZs dXNoX3BlbmRpbmdfc3RtdHMgKGd1YXJkX2UpOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiAgICAgICAgaWYgKHNraXBfZXBpbG9nKQ0KPiA+ID4gPiA+ID4gIAl7 DQo+ID4gPiA+ID4gPiAgCSAgZ3VhcmRfY29uZCA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBib29s ZWFuX3R5cGVfbm9kZSwNCj4gPiA+ID4gPiA+IEBAIC0zNTIwLDggKzM4MjIsNiBAQCB2ZWN0X2Rv X3BlZWxpbmcgKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5mbywNCj4gPiA+IHRyZWUNCj4gPiA+ ID4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gPiA+ID4gPiAgCSAgICB9DQo+ID4gPiA+ ID4gPiAgCSAgc2NhbGVfbG9vcF9wcm9maWxlIChlcGlsb2csIHByb2JfZXBpbG9nLCAwKTsNCj4g PiA+ID4gPiA+ICAJfQ0KPiA+ID4gPiA+ID4gLSAgICAgIGVsc2UNCj4gPiA+ID4gPiA+IC0Jc2xw ZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xjc3NhIChlcGlsb2cpOw0KPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ICAgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGJvdW5kOw0KPiA+ID4gPiA+ ID4gICAgICAgIGlmIChib3VuZF9zY2FsYXIuaXNfY29uc3RhbnQgKCZib3VuZCkpDQo+ID4gPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLmNjIGIvZ2NjL3RyZWUtdmVjdC1s b29wLmNjDQo+ID4gPiA+ID4gPiBpbmRleA0KPiA+ID4gPiA+DQo+ID4gPg0KPiBiNGE5OGRlODBh YTM5MDU3ZmM5YjE3OTc3ZGQwZTM0N2I0ZjBmYjVkLi5hYjlhMjA0ODE4NmY0NjFmNWVjNDkNCj4g PiA+ID4gPiBmMjE0MjE5NThlN2VlMjVlYWRhIDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0tIGEvZ2Nj L3RyZWUtdmVjdC1sb29wLmNjDQo+ID4gPiA+ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3Au Y2MNCj4gPiA+ID4gPiA+IEBAIC0xMDA3LDYgKzEwMDcsOCBAQCBfbG9vcF92ZWNfaW5mbzo6X2xv b3BfdmVjX2luZm8gKGNsYXNzIGxvb3ANCj4gPiA+ID4gPiAqbG9vcF9pbiwgdmVjX2luZm9fc2hh cmVkICpzaGFyZWQpDQo+ID4gPiA+ID4gPiAgICAgIHBhcnRpYWxfbG9hZF9zdG9yZV9iaWFzICgw KSwNCj4gPiA+ID4gPiA+ICAgICAgcGVlbGluZ19mb3JfZ2FwcyAoZmFsc2UpLA0KPiA+ID4gPiA+ ID4gICAgICBwZWVsaW5nX2Zvcl9uaXRlciAoZmFsc2UpLA0KPiA+ID4gPiA+ID4gKyAgICBlYXJs eV9icmVha3MgKGZhbHNlKSwNCj4gPiA+ID4gPiA+ICsgICAgbm9uX2JyZWFrX2NvbnRyb2xfZmxv dyAoZmFsc2UpLA0KPiA+ID4gPiA+ID4gICAgICBub19kYXRhX2RlcGVuZGVuY2llcyAoZmFsc2Up LA0KPiA+ID4gPiA+ID4gICAgICBoYXNfbWFza19zdG9yZSAoZmFsc2UpLA0KPiA+ID4gPiA+ID4g ICAgICBzY2FsYXJfbG9vcF9zY2FsaW5nIChwcm9maWxlX3Byb2JhYmlsaXR5Ojp1bmluaXRpYWxp emVkICgpKSwNCj4gPiA+ID4gPiA+IEBAIC0xMTk5LDYgKzEyMDEsMTQgQEAgdmVjdF9uZWVkX3Bl ZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3ANCj4gPiA+ID4gPiAobG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvKQ0KPiA+ID4gPiA+ID4gICAgICB0aCA9IExPT1BfVklORk9fQ09TVF9NT0RFTF9USFJF U0hPTEQNCj4gPiA+ID4gPiAoTE9PUF9WSU5GT19PUklHX0xPT1BfSU5GTw0KPiA+ID4gPiA+ID4g IAkJCQkJICAobG9vcF92aW5mbykpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgIC8qIFdo ZW4gd2UgaGF2ZSBtdWx0aXBsZSBleGl0cyBhbmQgVkYgaXMgdW5rbm93biwgd2UgbXVzdA0KPiBy ZXF1aXJlDQo+ID4gPiA+ID4gcGFydGlhbA0KPiA+ID4gPiA+ID4gKyAgICAgdmVjdG9ycyBiZWNh dXNlIHRoZSBsb29wIGJvdW5kcyBpcyBub3QgYSBtaW5pbXVtIGJ1dCBhDQo+IG1heGltdW0uDQo+ ID4gPiA+ID4gVGhhdCBpcyB0bw0KPiA+ID4gPiA+ID4gKyAgICAgc2F5IHdlIGNhbm5vdCB1bnBy ZWRpY2F0ZSB0aGUgbWFpbiBsb29wIHVubGVzcyB3ZSBwZWVsIG9yIHVzZQ0KPiBwYXJ0aWFsDQo+ ID4gPiA+ID4gPiArICAgICB2ZWN0b3JzIGluIHRoZSBlcGlsb2d1ZS4gICovDQo+ID4gPiA+ID4g PiArICBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pDQo+ID4gPiA+ID4g PiArICAgICAgJiYgIUxPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3BfdmluZm8pLmlzX2NvbnN0 YW50ICgpKQ0KPiA+ID4gPiA+ID4gKyAgICByZXR1cm4gdHJ1ZTsNCj4gPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiA+ICAgIGlmIChMT09QX1ZJTkZPX05JVEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0K PiA+ID4gPiA+ID4gICAgICAgICYmIExPT1BfVklORk9fUEVFTElOR19GT1JfQUxJR05NRU5UIChs b29wX3ZpbmZvKSA+PSAwKQ0KPiA+ID4gPiA+ID4gICAgICB7DQo+ID4gPiA+ID4gPiBAQCAtMTY1 MiwxMiArMTY2MiwxMiBAQA0KPiB2ZWN0X2NvbXB1dGVfc2luZ2xlX3NjYWxhcl9pdGVyYXRpb25f Y29zdA0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pDQo+ID4gPiA+ID4gPiAg ICBsb29wX3ZpbmZvLT5zY2FsYXJfY29zdHMtPmZpbmlzaF9jb3N0IChudWxscHRyKTsNCj4gPiA+ ID4gPiA+ICB9DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gIC8qIEZ1 bmN0aW9uIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0uDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g ICAgIFZlcmlmeSB0aGF0IGNlcnRhaW4gQ0ZHIHJlc3RyaWN0aW9ucyBob2xkLCBpbmNsdWRpbmc6 DQo+ID4gPiA+ID4gPiAgICAgLSB0aGUgbG9vcCBoYXMgYSBwcmUtaGVhZGVyDQo+ID4gPiA+ID4g PiAtICAgLSB0aGUgbG9vcCBoYXMgYSBzaW5nbGUgZW50cnkgYW5kIGV4aXQNCj4gPiA+ID4gPiA+ ICsgICAtIHRoZSBsb29wIGhhcyBhIHNpbmdsZSBlbnRyeQ0KPiA+ID4gPiA+ID4gKyAgIC0gbmVz dGVkIGxvb3BzIGNhbiBoYXZlIG9ubHkgYSBzaW5nbGUgZXhpdC4NCj4gPiA+ID4gPiA+ICAgICAt IHRoZSBsb29wIGV4aXQgY29uZGl0aW9uIGlzIHNpbXBsZSBlbm91Z2gNCj4gPiA+ID4gPiA+ICAg ICAtIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBjYW4gYmUgYW5hbHl6ZWQsIGkuZSwgYSBjb3Vu dGFibGUgbG9vcC4NCj4gVGhlDQo+ID4gPiA+ID4gPiAgICAgICBuaXRlciBjb3VsZCBiZSBhbmFs eXplZCB1bmRlciBzb21lIGFzc3VtcHRpb25zLiAgKi8NCj4gPiA+ID4gPiA+IEBAIC0xNjkzLDEx ICsxNzAzLDYgQEAgdmVjdF9hbmFseXplX2xvb3BfZm9ybSAoY2xhc3MgbG9vcA0KPiAqbG9vcCwN Cj4gPiA+ID4gPiB2ZWN0X2xvb3BfZm9ybV9pbmZvICppbmZvKQ0KPiA+ID4gPiA+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAoZXhpdC1iYikgICovDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLSAgICAgIGlmIChs b29wLT5udW1fbm9kZXMgIT0gMikNCj4gPiA+ID4gPiA+IC0JcmV0dXJuIG9wdF9yZXN1bHQ6OmZh aWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ID4gPiAtCQkJCSAgICAgICAibm90IHZl Y3Rvcml6ZWQ6Ig0KPiA+ID4gPiA+ID4gLQkJCQkgICAgICAgIiBjb250cm9sIGZsb3cgaW4gbG9v cC5cbiIpOw0KPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gICAgICAgIGlmIChlbXB0eV9ibG9j a19wIChsb29wLT5oZWFkZXIpKQ0KPiA+ID4gPiA+ID4gIAlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFp bHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiA+ID4gPiA+ICAJCQkJICAgICAgICJub3QgdmVj dG9yaXplZDogZW1wdHkgbG9vcC5cbiIpOw0KPiA+ID4gPiA+ID4gQEAgLTE3NjgsMTEgKzE3NzMs MTMgQEAgdmVjdF9hbmFseXplX2xvb3BfZm9ybSAoY2xhc3MgbG9vcA0KPiAqbG9vcCwNCj4gPiA+ ID4gPiB2ZWN0X2xvb3BfZm9ybV9pbmZvICppbmZvKQ0KPiA+ID4gPiA+ID4gICAgICAgICAgZHVt cF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gPiA+ID4gPiA+ICAJCQkg IkNvbnNpZGVyaW5nIG91dGVyLWxvb3AgdmVjdG9yaXphdGlvbi5cbiIpOw0KPiA+ID4gPiA+ID4g ICAgICAgIGluZm8tPmlubmVyX2xvb3BfY29uZCA9IGlubmVyLmxvb3BfY29uZDsNCj4gPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiA+ICsgICAgICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkNCj4gPiA+ ID4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ ID4gPiA+ID4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IG11bHRpcGxlDQo+IGV4aXRz LlxuIik7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiAtICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkNCj4gPiA+ID4gPiA+IC0gICAg cmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ID4g PiAtCQkJCSAgICJub3QgdmVjdG9yaXplZDogbXVsdGlwbGUgZXhpdHMuXG4iKTsNCj4gPiA+ID4g PiA+ICAgIGlmIChFREdFX0NPVU5UIChsb29wLT5oZWFkZXItPnByZWRzKSAhPSAyKQ0KPiA+ID4g PiA+ID4gICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwN Cj4gPiA+ID4gPiA+ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiA+ID4gPiA+IEBAIC0x Nzg4LDExICsxNzk1LDM2IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxvb3ANCj4g Kmxvb3AsDQo+ID4gPiA+ID4gdmVjdF9sb29wX2Zvcm1faW5mbyAqaW5mbykNCj4gPiA+ID4gPiA+ ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiBsYXRjaCBibG9jayBub3QNCj4gZW1wdHkuXG4iKTsN Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAvKiBNYWtlIHN1cmUgdGhlIGV4aXQgaXMgbm90 IGFibm9ybWFsLiAgKi8NCj4gPiA+ID4gPiA+IC0gIGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29w KTsNCj4gPiA+ID4gPiA+IC0gIGlmIChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwpDQo+ID4gPiA+ ID4gPiAtICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0K PiA+ID4gPiA+ID4gLQkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ID4gPiA+ID4gLQkJCQkg ICAiIGFibm9ybWFsIGxvb3AgZXhpdCBlZGdlLlxuIik7DQo+ID4gPiA+ID4gPiArICBhdXRvX3Zl YzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KPiA+ID4gPiA+ID4g KyAgZWRnZSBuZXhpdCA9IGxvb3AtPnZlY19sb29wX2l2Ow0KPiA+ID4gPiA+ID4gKyAgZm9yIChl ZGdlIGUgOiBleGl0cykNCj4gPiA+ID4gPiA+ICsgICAgew0KPiA+ID4gPiA+ID4gKyAgICAgIGlm IChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwpDQo+ID4gPiA+ID4gPiArCXJldHVybiBvcHRfcmVz dWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gPiA+ID4gKwkJCQkgICAgICAg Im5vdCB2ZWN0b3JpemVkOiINCj4gPiA+ID4gPiA+ICsJCQkJICAgICAgICIgYWJub3JtYWwgbG9v cCBleGl0IGVkZ2UuXG4iKTsNCj4gPiA+ID4gPiA+ICsgICAgICAvKiBFYXJseSBicmVhayBCQiBt dXN0IGJlIGFmdGVyIHRoZSBtYWluIGV4aXQgQkIuICBJbiB0aGVvcnkgd2UNCj4gc2hvdWxkDQo+ ID4gPiA+ID4gPiArCSBiZSBhYmxlIHRvIHZlY3Rvcml6ZSB0aGUgaW52ZXJzZSBvcmRlciwgYnV0 IHRoZSBjdXJyZW50IGZsb3cgaW4NCj4gdGhlDQo+ID4gPiA+ID4gPiArCSB0aGUgdmVjdG9yaXpl ciBhbHdheXMgYXNzdW1lcyB5b3UgdXBkYXRlIHN1Y2Nlc3NvciBQSEkNCj4gbm9kZXMsIG5vdA0K PiA+ID4gPiA+ID4gKwkgcHJlZHMuICAqLw0KPiA+ID4gPiA+ID4gKyAgICAgIGlmIChlICE9IG5l eGl0ICYmICFkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMsIG5leGl0LT5zcmMsDQo+IGUt DQo+ID4gPiA+ID4gPnNyYykpDQo+ID4gPiA+ID4gPiArCXJldHVybiBvcHRfcmVzdWx0OjpmYWls dXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ID4gPiA+ID4gKwkJCQkgICAgICAgIm5vdCB2ZWN0 b3JpemVkOiINCj4gPiA+ID4gPiA+ICsJCQkJICAgICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVk Z2UNCj4gb3JkZXIuXG4iKTsNCj4gPiA+DQo+ID4gPiAidW5zdXBwb3J0ZWQgbG9vcCBleGl0IG9y ZGVyIiwgYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgY29tbWVudC4NCj4gPiA+DQo+ID4gPiA+ ID4gPiArICAgIH0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgIC8qIFdlIGN1cnJlbnRs eSBvbmx5IHN1cHBvcnQgZWFybHkgZXhpdCBsb29wcyB3aXRoIGtub3duIGJvdW5kcy4NCj4gKi8N Cj4gPiA+DQo+ID4gPiBCdHcsIHdoeSdzIHRoYXQ/ICBJcyB0aGF0IGJlY2F1c2Ugd2UgZG9uJ3Qg c3VwcG9ydCB0aGUgbG9vcC1hcm91bmQgZWRnZT8NCj4gPiA+IElNSE8gdGhpcyBpcyB0aGUgbW9z dCBzZXJpb3VzIGxpbWl0YXRpb24gKGFuZCBhcyBzYWlkIGFib3ZlIGl0IHNob3VsZCBiZQ0KPiA+ ID4gdHJpdmlhbCB0byBmaXgpLg0KPiA+ID4NCj4gPiA+ID4gPiA+ICsgIGlmIChleGl0cy5sZW5n dGggKCkgPiAxKQ0KPiA+ID4gPiA+ID4gKyAgICB7DQo+ID4gPiA+ID4gPiArICAgICAgY2xhc3Mg dHJlZV9uaXRlcl9kZXNjIG5pdGVyOw0KPiA+ID4gPiA+ID4gKyAgICAgIGlmICghbnVtYmVyX29m X2l0ZXJhdGlvbnNfZXhpdF9hc3N1bXB0aW9ucyAobG9vcCwgbmV4aXQsICZuaXRlciwNCj4gPiA+ IE5VTEwpDQo+ID4gPiA+ID4gPiArCSAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChu aXRlci5uaXRlcikNCj4gPiA+ID4gPiA+ICsJICB8fCAhZXZvbHV0aW9uX2Z1bmN0aW9uX2lzX2Nv bnN0YW50X3AgKG5pdGVyLm5pdGVyKSkNCj4gPiA+ID4gPiA+ICsJcmV0dXJuIG9wdF9yZXN1bHQ6 OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gPiA+ID4gPiArCQkJCSAgICAgICAibm90 IHZlY3Rvcml6ZWQ6Ig0KPiA+ID4gPiA+ID4gKwkJCQkgICAgICAgIiBlYXJseSBicmVha3Mgb25s eSBzdXBwb3J0ZWQgb24NCj4gbG9vcHMiDQo+ID4gPiA+ID4gPiArCQkJCSAgICAgICAiIHdpdGgg a25vd24gaXRlcmF0aW9uDQo+IGJvdW5kcy5cbiIpOw0KPiA+ID4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gICAgaW5mby0+Y29uZHMNCj4gPiA+ID4gPiA+ICAgICAgPSB2 ZWN0X2dldF9sb29wX25pdGVycyAobG9vcCwgJmluZm8tPmFzc3VtcHRpb25zLA0KPiA+ID4gPiA+ ID4gQEAgLTE4NjYsNiArMTg5OCwxMCBAQCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvIChjbGFzcyBs b29wICpsb29wLA0KPiA+ID4gPiA+IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkLA0KPiA+ID4gPiA+ ID4gICAgTE9PUF9WSU5GT19MT09QX0NPTkRTIChsb29wX3ZpbmZvKS5zYWZlX3NwbGljZSAoaW5m by0NCj4gPiA+ID4gPiA+YWx0X2xvb3BfY29uZHMpOw0KPiA+ID4gPiA+ID4gICAgTE9PUF9WSU5G T19MT09QX0lWX0NPTkQgKGxvb3BfdmluZm8pID0gaW5mby0+bG9vcF9jb25kOw0KPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ICsgIC8qIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSB2ZWN0b3JpemluZyBt dWx0aXBsZSBleGl0cy4gICovDQo+ID4gPiA+ID4gPiArICBMT09QX1ZJTkZPX0VBUkxZX0JSRUFL UyAobG9vcF92aW5mbykNCj4gPiA+ID4gPiA+ICsgICAgPSAhTE9PUF9WSU5GT19MT09QX0NPTkRT IChsb29wX3ZpbmZvKS5pc19lbXB0eSAoKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICAg IGlmIChpbmZvLT5pbm5lcl9sb29wX2NvbmQpDQo+ID4gPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4g PiA+ICAgICAgICBzdG10X3ZlY19pbmZvIGlubmVyX2xvb3BfY29uZF9pbmZvDQo+ID4gPiA+ID4g PiBAQCAtMzA3MCw3ICszMTA2LDggQEAgc3RhcnRfb3ZlcjoNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiAgICAvKiBJZiBhbiBlcGlsb2d1ZSBsb29wIGlzIHJlcXVpcmVkIG1ha2Ugc3VyZSB3ZSBj YW4gY3JlYXRlIG9uZS4gICovDQo+ID4gPiA+ID4gPiAgICBpZiAoTE9PUF9WSU5GT19QRUVMSU5H X0ZPUl9HQVBTIChsb29wX3ZpbmZvKQ0KPiA+ID4gPiA+ID4gLSAgICAgIHx8IExPT1BfVklORk9f UEVFTElOR19GT1JfTklURVIgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiA+ID4gKyAgICAgIHx8IExP T1BfVklORk9fUEVFTElOR19GT1JfTklURVIgKGxvb3BfdmluZm8pDQo+ID4gPiA+ID4gPiArICAg ICAgfHwgTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiA+ID4g ICAgICB7DQo+ID4gPiA+ID4gPiAgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ID4g PiA+ID4gICAgICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwg ImVwaWxvZyBsb29wDQo+ID4gPiByZXF1aXJlZFxuIik7DQo+ID4gPiA+ID4gPiBAQCAtNTc5Nyw3 ICs1ODM0LDcgQEAgdmVjdF9jcmVhdGVfZXBpbG9nX2Zvcl9yZWR1Y3Rpb24NCj4gPiA+IChsb29w X3ZlY19pbmZvDQo+ID4gPiA+ID4gbG9vcF92aW5mbywNCj4gPiA+ID4gPiA+ICAgIGJhc2ljX2Js b2NrIGV4aXRfYmI7DQo+ID4gPiA+ID4gPiAgICB0cmVlIHNjYWxhcl9kZXN0Ow0KPiA+ID4gPiA+ ID4gICAgdHJlZSBzY2FsYXJfdHlwZTsNCj4gPiA+ID4gPiA+IC0gIGdpbXBsZSAqbmV3X3BoaSA9 IE5VTEwsICpwaGk7DQo+ID4gPiA+ID4gPiArICBnaW1wbGUgKm5ld19waGkgPSBOVUxMLCAqcGhp ID0gTlVMTDsNCj4gPiA+ID4gPiA+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGV4aXRfZ3NpOw0K PiA+ID4gPiA+ID4gICAgdHJlZSBuZXdfdGVtcCA9IE5VTExfVFJFRSwgbmV3X25hbWUsIG5ld19z Y2FsYXJfZGVzdDsNCj4gPiA+ID4gPiA+ICAgIGdpbXBsZSAqZXBpbG9nX3N0bXQgPSBOVUxMOw0K PiA+ID4gPiA+ID4gQEAgLTYwMzksNiArNjA3NiwzMyBAQCB2ZWN0X2NyZWF0ZV9lcGlsb2dfZm9y X3JlZHVjdGlvbg0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gPiA+ ID4gPiAgCSAgbmV3X2RlZiA9IGdpbXBsZV9jb252ZXJ0ICgmc3RtdHMsIHZlY3R5cGUsIG5ld19k ZWYpOw0KPiA+ID4gPiA+ID4gIAkgIHJlZHVjX2lucHV0cy5xdWlja19wdXNoIChuZXdfZGVmKTsN Cj4gPiA+ID4gPiA+ICAJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkvKiBVcGRhdGUg dGhlIG90aGVyIGV4aXRzLiAgKi8NCj4gPiA+ID4gPiA+ICsJaWYgKExPT1BfVklORk9fRUFSTFlf QlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiA+ID4gPiA+ICsJICB7DQo+ID4gPiA+ID4gPiArCSAg ICB2ZWM8ZWRnZT4gYWx0X2V4aXRzID0gTE9PUF9WSU5GT19BTFRfRVhJVFMgKGxvb3BfdmluZm8p Ow0KPiA+ID4gPiA+ID4gKwkgICAgZ3BoaV9pdGVyYXRvciBnc2ksIGdzaTE7DQo+ID4gPiA+ID4g PiArCSAgICBmb3IgKGVkZ2UgZXhpdCA6IGFsdF9leGl0cykNCj4gPiA+ID4gPiA+ICsJICAgICAg ew0KPiA+ID4gPiA+ID4gKwkJLyogRmluZCB0aGUgcGhpIG5vZGUgdG8gcHJvcGFnZXQgaW50byB0 aGUgZXhpdCBibG9jayBmb3INCj4gZWFjaA0KPiA+ID4gPiA+ID4gKwkJICAgZXhpdCBlZGdlLiAg Ki8NCj4gPiA+ID4gPiA+ICsJCWZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpLA0K PiA+ID4gPiA+ID4gKwkJICAgICBnc2kxID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXQtPnNyYyk7DQo+ ID4gPg0KPiA+ID4gZXhpdC0+c3JjID09IGxvb3AtPmhlYWRlciwgcmlnaHQ/ICBJIHRoaW5rIHRo aXMgd29uJ3Qgd29yayBmb3IgbXVsdGlwbGUNCj4gPiA+IGFsdGVybmF0ZSBleGl0cy4gIEl0J3Mg cHJvYmFibHkgZWFzaWVyIHRvIGRvIHRoaXMgd2hlcmUgd2UgY3JlYXRlIHRoZQ0KPiA+ID4gTEMg UEhJIG5vZGUgZm9yIHRoZSByZWR1Y3Rpb24gcmVzdWx0Pw0KPiA+ID4NCj4gPiA+ID4gPiA+ICsJ CSAgICAgIWdzaV9lbmRfcCAoZ3NpKSAmJiAhZ3NpX2VuZF9wIChnc2kxKTsNCj4gPiA+ID4gPiA+ ICsJCSAgICAgZ3NpX25leHQgKCZnc2kpLCBnc2lfbmV4dCAoJmdzaTEpKQ0KPiA+ID4gPiA+ID4g KwkJICB7DQo+ID4gPiA+ID4gPiArCQkgICAgLyogVGhlcmUgcmVhbGx5IHNob3VsZCBiZSBhIGZ1 bmN0aW9uIHRvIGp1c3QgZ2V0IHRoZQ0KPiBudW1iZXINCj4gPiA+ID4gPiA+ICsJCSAgICAgICBv ZiBwaGlzIGluc2lkZSBhIGJiLiAgKi8NCj4gPiA+ID4gPiA+ICsJCSAgICBpZiAocGhpICYmIHBo aSA9PSBnc2kucGhpICgpKQ0KPiA+ID4gPiA+ID4gKwkJICAgICAgew0KPiA+ID4gPiA+ID4gKwkJ CWdwaGkgKnBoaTEgPSBnc2kxLnBoaSAoKTsNCj4gPiA+ID4gPiA+ICsJCQlTRVRfUEhJX0FSR19E RUYgKHBoaSwgZXhpdC0+ZGVzdF9pZHgsDQo+ID4gPiA+ID4gPiArCQkJCQkgUEhJX1JFU1VMVCAo cGhpMSkpOw0KPiA+ID4NCj4gPiA+IEkgdGhpbmsgd2Uga25vdyB0aGUgaGVhZGVyIFBISSBvZiBh IHJlZHVjdGlvbiBwZXJmZWN0bHkgd2VsbCwgdGhlcmUNCj4gPiA+IHNob3VsZG4ndCBiZSB0aGUg bmVlZCB0byAic2VhcmNoIiBmb3IgaXQuDQo+ID4gPg0KPiA+ID4gPiA+ID4gKwkJCWJyZWFrOw0K PiA+ID4gPiA+ID4gKwkJICAgICAgfQ0KPiA+ID4gPiA+ID4gKwkJICB9DQo+ID4gPiA+ID4gPiAr CSAgICAgIH0NCj4gPiA+ID4gPiA+ICsJICB9DQo+ID4gPiA+ID4gPiAgICAgICAgZ3NpX2luc2Vy dF9zZXFfYmVmb3JlICgmZXhpdF9nc2ksIHN0bXRzLCBHU0lfU0FNRV9TVE1UKTsNCj4gPiA+ID4g PiA+ICAgICAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBAIC0xMDM1NSw2ICsxMDQxOSwx MyBAQCB2ZWN0b3JpemFibGVfbGl2ZV9vcGVyYXRpb24gKHZlY19pbmZvDQo+ID4gPiAqdmluZm8s DQo+ID4gPiA+ID4gPiAgCSAgIG5ld190cmVlID0gbGFuZV9leHRyYWN0IDx2ZWNfbGhzJywgLi4u PjsNCj4gPiA+ID4gPiA+ICAJICAgbGhzJyA9IG5ld190cmVlOyAgKi8NCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiArICAgICAgLyogV2hlbiB2ZWN0b3JpemluZyBhbiBlYXJseSBicmVhaywgYW55 IGxpdmUgc3RhdGVtZW50IHRoYXQgaXMNCj4gdXNlZA0KPiA+ID4gPiA+ID4gKwkgb3V0c2lkZSBv ZiB0aGUgbG9vcCBhcmUgZGVhZC4gIFRoZSBsb29wIHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZW0uDQo+ ID4gPiA+ID4gPiArCSBXZSBjb3VsZCBjaGFuZ2UgdGhlIGxpdmVuZXNzIHZhbHVlIGR1cmluZyBh bmFseXNpcyBpbnN0ZWFkDQo+IGJ1dCBzaW5jZQ0KPiA+ID4gPiA+ID4gKwkgdGhlIGJlbG93IGNv ZGUgaXMgaW52YWxpZCBhbnl3YXkganVzdCBpZ25vcmUgaXQgZHVyaW5nDQo+IGNvZGVnZW4uICAq Lw0KPiA+ID4gPiA+ID4gKyAgICAgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92 aW5mbykpDQo+ID4gPiA+ID4gPiArCXJldHVybiB0cnVlOw0KPiA+ID4NCj4gPiA+IEJ1dCB3aGF0 IGFib3V0IHRoZSB2YWx1ZSB0aGF0J3MgbGl2ZSBhY3Jvc3MgdGhlIG1haW4gZXhpdCB3aGVuIHRo ZQ0KPiA+ID4gZXBpbG9ndWUgaXMgbm90IGVudGVyZWQ/DQo+ID4gPg0KPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gICAgICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxv b3BfdmluZm8pOw0KPiA+ID4gPiA+ID4gICAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBMT09Q X1ZJTkZPX0lWX0VYSVQgKGxvb3BfdmluZm8pLT5kZXN0Ow0KPiA+ID4gPiA+ID4gICAgICAgIGdj Y19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gPiA+ID4gPiA+IEBAIC0xMTI3 Nyw3ICsxMTM0OCw3IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8NCj4gPiA+ ID4gPiBsb29wX3ZpbmZvLCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiA+ID4gPiA+ ID4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGV4aXN0cyBhIHNpbmdsZS1wcmVkZWNlc3NvciBleGl0 IGJiLiAgRG8gdGhpcyBiZWZvcmUNCj4gPiA+ID4gPiA+ICAgICAgIHZlcnNpb25pbmcuICAgKi8N Cj4gPiA+ID4gPiA+ICAgIGVkZ2UgZSA9IExPT1BfVklORk9fSVZfRVhJVCAobG9vcF92aW5mbyk7 DQo+ID4gPiA+ID4gPiAtICBpZiAoISBzaW5nbGVfcHJlZF9wIChlLT5kZXN0KSkNCj4gPiA+ID4g PiA+ICsgIGlmIChlICYmICEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkgJiYNCj4gIUxPT1BfVklO Rk9fRUFSTFlfQlJFQUtTDQo+ID4gPiA+ID4gKGxvb3BfdmluZm8pKQ0KPiA+ID4NCj4gPiA+IGUg Y2FuIGJlIE5VTEwgaGVyZT8gIEkgdGhpbmsgd2Ugc2hvdWxkIHJlamVjdCBzdWNoIGxvb3BzIGVh cmxpZXIuDQo+ID4gPg0KPiA+ID4gPiA+ID4gICAgICB7DQo+ID4gPiA+ID4gPiAgICAgICAgc3Bs aXRfbG9vcF9leGl0X2VkZ2UgKGUsIHRydWUpOw0KPiA+ID4gPiA+ID4gICAgICAgIGlmIChkdW1w X2VuYWJsZWRfcCAoKSkNCj4gPiA+ID4gPiA+IEBAIC0xMTMwMyw3ICsxMTM3NCw3IEBAIHZlY3Rf dHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8NCj4gPiA+ID4gPiBsb29wX3ZpbmZvLCBnaW1w bGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiA+ID4gPiA+ID4gICAgaWYgKExPT1BfVklORk9f U0NBTEFSX0xPT1AgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiA+ID4gICAgICB7DQo+ID4gPiA+ID4g PiAgICAgICAgZSA9IHNpbmdsZV9leGl0IChMT09QX1ZJTkZPX1NDQUxBUl9MT09QIChsb29wX3Zp bmZvKSk7DQo+ID4gPiA+ID4gPiAtICAgICAgaWYgKCEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkp DQo+ID4gPiA+ID4gPiArICAgICAgaWYgKGUgJiYgISBzaW5nbGVfcHJlZF9wIChlLT5kZXN0KSkN Cj4gPiA+ID4gPiA+ICAJew0KPiA+ID4gPiA+ID4gIAkgIHNwbGl0X2xvb3BfZXhpdF9lZGdlIChl LCB0cnVlKTsNCj4gPiA+ID4gPiA+ICAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gPiA+ ID4gPiBAQCAtMTE2NDEsNyArMTE3MTIsOCBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29wX3Zl Y19pbmZvDQo+ID4gPiA+ID4gbG9vcF92aW5mbywgZ2ltcGxlICpsb29wX3ZlY3Rvcml6ZWRfY2Fs bCkNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICAvKiBMb29wcyB2ZWN0b3JpemVkIHdpdGgg YSB2YXJpYWJsZSBmYWN0b3Igd29uJ3QgYmVuZWZpdCBmcm9tDQo+ID4gPiA+ID4gPiAgICAgICB1 bnJvbGxpbmcvcGVlbGluZy4gICovDQo+ID4gPg0KPiA+ID4gdXBkYXRlIHRoZSBjb21tZW50PyAg V2h5IHdvdWxkIHdlIHVucm9sbCBhIFZMQSBsb29wIHdpdGggZWFybHkgYnJlYWtzPw0KPiA+ID4g T3IgZGlkIHlvdSBtZWFuIHRvIHVzZSB8fCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92 aW5mbyk/DQo+ID4gPg0KPiA+ID4gPiA+ID4gLSAgaWYgKCF2Zi5pc19jb25zdGFudCAoKSkNCj4g PiA+ID4gPiA+ICsgIGlmICghdmYuaXNfY29uc3RhbnQgKCkNCj4gPiA+ID4gPiA+ICsgICAgICAm JiAhTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ID4gPiA+ID4gICAg ICB7DQo+ID4gPiA+ID4gPiAgICAgICAgbG9vcC0+dW5yb2xsID0gMTsNCj4gPiA+ID4gPiA+ICAg ICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtdmVjdC1zdG10cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiA+ID4gPiA+ IGluZGV4DQo+ID4gPiA+ID4NCj4gPiA+DQo+IDg3YzQzNTNmYTUxODBmY2I3ZjYwYjE5Mjg5NzQ1 NmNmMjRmM2ZkYmUuLjAzNTI0ZTg1MDBlZTA2ZGY0MmY4MmFmDQo+ID4gPiA+ID4gZTc4ZWUyYTdj NjI3YmU0NWIgMTAwNjQ0DQo+ID4gPiA+ID4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNj DQo+ID4gPiA+ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjDQo+ID4gPiA+ID4gPiBA QCAtMzQ0LDkgKzM0NCwzNCBAQCB2ZWN0X3N0bXRfcmVsZXZhbnRfcCAoc3RtdF92ZWNfaW5mbw0K PiA+ID4gc3RtdF9pbmZvLA0KPiA+ID4gPiA+IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4g PiA+ID4gPiA+ICAgICpsaXZlX3AgPSBmYWxzZTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAg ICAvKiBjb25kIHN0bXQgb3RoZXIgdGhhbiBsb29wIGV4aXQgY29uZC4gICovDQo+ID4gPiA+ID4g PiAtICBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpDQo+ID4gPiA+ID4gPiAtICAg ICAgJiYgU1RNVF9WSU5GT19UWVBFIChzdG10X2luZm8pICE9DQo+IGxvb3BfZXhpdF9jdHJsX3Zl Y19pbmZvX3R5cGUpDQo+ID4gPiA+ID4gPiAtICAgICpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9z Y29wZTsNCj4gPiA+DQo+ID4gPiBob3cgd2FzIHRoYXQgZXZlciBoaXQgYmVmb3JlPyAgRm9yIG91 dGVyIGxvb3AgcHJvY2Vzc2luZyB3aXRoIG91dGVyIGxvb3ANCj4gPiA+IHZlY3Rvcml6YXRpb24/ DQo+ID4gPg0KPiA+ID4gPiA+ID4gKyAgaWYgKGlzX2N0cmxfc3RtdCAoc3RtdF9pbmZvLT5zdG10 KSkNCj4gPiA+ID4gPiA+ICsgICAgew0KPiA+ID4gPiA+ID4gKyAgICAgIC8qIElkZWFsbHkgRURH RV9MT09QX0VYSVQgd291bGQgaGF2ZSBiZWVuIHNldCBvbiB0aGUgZXhpdCBlZGdlLA0KPiA+ID4g YnV0DQo+ID4gPiA+ID4gPiArCSBpdCBsb29rcyBsaWtlIGxvb3BfbWFuaXAgZG9lc24ndCBkbyB0 aGF0Li4gIFNvIHdlIGhhdmUgdG8gZG8gaXQNCj4gPiA+ID4gPiA+ICsJIHRoZSBoYXJkIHdheS4g ICovDQo+ID4gPiA+ID4gPiArICAgICAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIgKHN0bXRf aW5mby0+c3RtdCk7DQo+ID4gPiA+ID4gPiArICAgICAgYm9vbCBleGl0X2JiID0gZmFsc2UsIGVh cmx5X2V4aXQgPSBmYWxzZTsNCj4gPiA+ID4gPiA+ICsgICAgICBlZGdlX2l0ZXJhdG9yIGVpOw0K PiA+ID4gPiA+ID4gKyAgICAgIGVkZ2UgZTsNCj4gPiA+ID4gPiA+ICsgICAgICBGT1JfRUFDSF9F REdFIChlLCBlaSwgYmItPnN1Y2NzKQ0KPiA+ID4gPiA+ID4gKyAgICAgICAgaWYgKCFmbG93X2Ji X2luc2lkZV9sb29wX3AgKGxvb3AsIGUtPmRlc3QpKQ0KPiA+ID4gPiA+ID4gKwkgIHsNCj4gPiA+ ID4gPiA+ICsJICAgIGV4aXRfYmIgPSB0cnVlOw0KPiA+ID4gPiA+ID4gKwkgICAgZWFybHlfZXhp dCA9IGxvb3AtPnZlY19sb29wX2l2LT5zcmMgIT0gYmI7DQo+ID4gPiA+ID4gPiArCSAgICBicmVh azsNCj4gPiA+ID4gPiA+ICsJICB9DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICAgICAg LyogV2Ugc2hvdWxkIGhhdmUgcHJvY2Vzc2VkIGFueSBleGl0IGVkZ2UsIHNvIGFuIGVkZ2Ugbm90 IGFuDQo+IGVhcmx5DQo+ID4gPiA+ID4gPiArCSBicmVhayBtdXN0IGJlIGEgbG9vcCBJViBlZGdl LiAgV2UgbmVlZCB0byBkaXN0aW5ndWlzaA0KPiBiZXR3ZWVuIHRoZQ0KPiA+ID4gPiA+ID4gKwkg dHdvIGFzIHdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIG1haW4gbG9vcCBJ Vi4NCj4gKi8NCj4gPiA+ID4gPiA+ICsgICAgICBpZiAoZXhpdF9iYikNCj4gPiA+ID4gPiA+ICsJ ew0KPiA+ID4gPiA+ID4gKwkgIGlmIChlYXJseV9leGl0KQ0KPiA+ID4gPiA+ID4gKwkgICAgKnJl bGV2YW50ID0gdmVjdF91c2VkX2luX3Njb3BlOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPg0KPiA+ ID4gSSB3b25kZXIgd2h5IHlvdSBjYW4ndCBzaW1wbHkgZG8NCj4gPiA+DQo+ID4gPiAgICAgICAg ICBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpDQo+ID4gPiAgICAgICAgICAgICAg JiYgc3RtdF9pbmZvLT5zdG10ICE9IExPT1BfVklORk9fQ09ORCAobG9vcF9pbmZvKSkNCj4gPiA+ DQo+ID4gPiA/DQo+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgIGVsc2UgaWYgKGJiLT5sb29wX2Zh dGhlciA9PSBsb29wKQ0KPiA+ID4gPiA+ID4gKwlMT09QX1ZJTkZPX0dFTkVSQUxfQ1RSX0ZMT1cg KGxvb3BfdmluZm8pID0gdHJ1ZTsNCj4gPiA+DQo+ID4gPiBzbyBmb3IgY29udHJvbCBmbG93IG5v dCBleGl0aW5nIHRoZSBsb29wIHlvdSBjYW4gY2hlY2sNCj4gPiA+IGxvb3BfZXhpdHNfZnJvbV9i Yl9wICgpLg0KPiA+ID4NCj4gPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ICAgIC8qIGNoYW5naW5nIG1lbW9yeS4gICovDQo+ID4gPiA+ID4gPiAgICBpZiAoZ2ltcGxl X2NvZGUgKHN0bXRfaW5mby0+c3RtdCkgIT0gR0lNUExFX1BISSkNCj4gPiA+ID4gPiA+IEBAIC0z NTksNiArMzg0LDExIEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChzdG10X3ZlY19pbmZvDQo+ID4g PiBzdG10X2luZm8sDQo+ID4gPiA+ID4gbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ID4g PiA+ID4gIAkqcmVsZXZhbnQgPSB2ZWN0X3VzZWRfaW5fc2NvcGU7DQo+ID4gPiA+ID4gPiAgICAg ICAgfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0g Z2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gPiA+ID4gPiArICBhdXRvX2JpdG1hcCBl eGl0X2JiczsNCj4gPiA+ID4gPiA+ICsgIGZvciAoZWRnZSBleGl0IDogZXhpdHMpDQo+ID4gPiA+ ID4gPiArICAgIGJpdG1hcF9zZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+aW5kZXgpOw0K PiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gICAgLyogdXNlcyBvdXRzaWRlIHRoZSBsb29wLiAg Ki8NCj4gPiA+ID4gPiA+ICAgIEZPUl9FQUNIX1BISV9PUl9TVE1UX0RFRiAoZGVmX3AsIHN0bXRf aW5mby0+c3RtdCwgb3BfaXRlciwNCj4gPiA+ID4gPiBTU0FfT1BfREVGKQ0KPiA+ID4gPiA+ID4g ICAgICB7DQo+ID4gPiA+ID4gPiBAQCAtMzc3LDcgKzQwNyw3IEBAIHZlY3Rfc3RtdF9yZWxldmFu dF9wIChzdG10X3ZlY19pbmZvDQo+IHN0bXRfaW5mbywNCj4gPiA+ID4gPiBsb29wX3ZlY19pbmZv IGxvb3BfdmluZm8sDQo+ID4gPiA+ID4gPiAgCSAgICAgIC8qIFdlIGV4cGVjdCBhbGwgc3VjaCB1 c2VzIHRvIGJlIGluIHRoZSBsb29wIGV4aXQgcGhpcw0KPiA+ID4gPiA+ID4gIAkJIChiZWNhdXNl IG9mIGxvb3AgY2xvc2VkIGZvcm0pICAgKi8NCj4gPiA+ID4gPiA+ICAJICAgICAgZ2NjX2Fzc2Vy dCAoZ2ltcGxlX2NvZGUgKFVTRV9TVE1UICh1c2VfcCkpID09DQo+IEdJTVBMRV9QSEkpOw0KPiA+ ID4gPiA+ID4gLQkgICAgICBnY2NfYXNzZXJ0IChiYiA9PSBzaW5nbGVfZXhpdCAobG9vcCktPmRl c3QpOw0KPiA+ID4gPiA+ID4gKwkgICAgICBnY2NfYXNzZXJ0IChiaXRtYXBfYml0X3AgKGV4aXRf YmJzLCBiYi0+aW5kZXgpKTsNCj4gPiA+DQo+ID4gPiBUaGF0IG5vdyBiZWNvbWVzIHF1aXRlIGV4 cGVuc2l2ZSBjaGVja2luZyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIExDIFNTQQ0KPiA+ID4gdmVy aWZpZXIgc28gSSBzdWdnZXN0IHRvIHNpbXBseSBkcm9wIHRoaXMgYXNzZXJ0IGluc3RlYWQuDQo+ ID4gPg0KPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgKmxpdmVfcCA9IHRydWU7DQo+ID4gPiA+ ID4gPiAgCSAgICB9DQo+ID4gPiA+ID4gPiBAQCAtNjgzLDYgKzcxMywxMyBAQCB2ZWN0X21hcmtf c3RtdHNfdG9fYmVfdmVjdG9yaXplZA0KPiA+ID4gPiA+IChsb29wX3ZlY19pbmZvIGxvb3Bfdmlu Zm8sIGJvb2wgKmZhdGFsKQ0KPiA+ID4gPiA+ID4gIAl9DQo+ID4gPiA+ID4gPiAgICAgIH0NCj4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiArICAvKiBJZGVhbGx5IHRoaXMgc2hvdWxkIGJlIGluIHZl Y3RfYW5hbHl6ZV9sb29wX2Zvcm0gYnV0IHdlIGhhdmVuJ3QNCj4gPiA+IHNlZW4gYWxsDQo+ID4g PiA+ID4gPiArICAgICB0aGUgY29uZHMgeWV0IGF0IHRoYXQgcG9pbnQgYW5kIHRoZXJlJ3Mgbm8g cXVpY2sgd2F5IHRvIHJldHJpZXZlDQo+IHRoZW0uDQo+ID4gPiAqLw0KPiA+ID4gPiA+ID4gKyAg aWYgKExPT1BfVklORk9fR0VORVJBTF9DVFJfRkxPVyAobG9vcF92aW5mbykpDQo+ID4gPiA+ID4g PiArICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ ID4gPiA+ID4gKwkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ID4gPiA+ID4gKwkJCQkgICAi IHVuc3VwcG9ydGVkIGNvbnRyb2wgZmxvdyBpbg0KPiBsb29wLlxuIik7DQo+ID4gPg0KPiA+ID4g c28gd2UgZGlkbid0IGRvIHRoaXMgYmVmb3JlPyAgQnV0IHNlZSBhYm92ZSB3aGVyZSBJIHdvbmRl cmVkLiAgU28gd2hlbg0KPiA+ID4gZG9lcyB0aGlzIGhpdCB3aXRoIGVhcmx5IGV4aXRzIGFuZCB3 aHkgY2FuJ3Qgd2UgY2hlY2sgZm9yIHRoaXMgaW4NCj4gPiA+IHZlY3RfdmVyaWZ5X2xvb3BfZm9y bT8NCj4gPiA+DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAgICAvKiAyLiBQcm9jZXNzX3dv cmtsaXN0ICovDQo+ID4gPiA+ID4gPiAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoICgpID4gMCkN Cj4gPiA+ID4gPiA+ICAgICAgew0KPiA+ID4gPiA+ID4gQEAgLTc3OCw2ICs4MTUsMjAgQEAgdmVj dF9tYXJrX3N0bXRzX3RvX2JlX3ZlY3Rvcml6ZWQNCj4gPiA+ID4gPiAobG9vcF92ZWNfaW5mbyBs b29wX3ZpbmZvLCBib29sICpmYXRhbCkNCj4gPiA+ID4gPiA+ICAJCQlyZXR1cm4gcmVzOw0KPiA+ ID4gPiA+ID4gIAkJICAgIH0NCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgIH0NCj4gPiA+ ID4gPiA+ICsJICAgIH0NCj4gPiA+ID4gPiA+ICsJICBlbHNlIGlmIChnY29uZCAqY29uZCA9IGR5 bl9jYXN0IDxnY29uZCAqPiAoc3RtdF92aW5mby0NCj4gPnN0bXQpKQ0KPiA+ID4gPiA+ID4gKwkg ICAgew0KPiA+ID4gPiA+ID4gKwkgICAgICBlbnVtIHRyZWVfY29kZSByaHNfY29kZSA9IGdpbXBs ZV9jb25kX2NvZGUgKGNvbmQpOw0KPiA+ID4gPiA+ID4gKwkgICAgICBnY2NfYXNzZXJ0IChUUkVF X0NPREVfQ0xBU1MgKHJoc19jb2RlKSA9PQ0KPiB0Y2NfY29tcGFyaXNvbik7DQo+ID4gPiA+ID4g PiArCSAgICAgIG9wdF9yZXN1bHQgcmVzDQo+ID4gPiA+ID4gPiArCQk9IHByb2Nlc3NfdXNlIChz dG10X3ZpbmZvLCBnaW1wbGVfY29uZF9saHMgKGNvbmQpLA0KPiA+ID4gPiA+ID4gKwkJCSAgICAg ICBsb29wX3ZpbmZvLCByZWxldmFudCwgJndvcmtsaXN0LCBmYWxzZSk7DQo+ID4gPiA+ID4gPiAr CSAgICAgIGlmICghcmVzKQ0KPiA+ID4gPiA+ID4gKwkJcmV0dXJuIHJlczsNCj4gPiA+ID4gPiA+ ICsJICAgICAgcmVzID0gcHJvY2Vzc191c2UgKHN0bXRfdmluZm8sIGdpbXBsZV9jb25kX3JocyAo Y29uZCksDQo+ID4gPiA+ID4gPiArCQkJCWxvb3BfdmluZm8sIHJlbGV2YW50LCAmd29ya2xpc3Qs IGZhbHNlKTsNCj4gPiA+ID4gPiA+ICsJICAgICAgaWYgKCFyZXMpDQo+ID4gPiA+ID4gPiArCQly ZXR1cm4gcmVzOw0KPiA+ID4gPiA+ID4gICAgICAgICAgICAgIH0NCj4gPiA+ID4gPiA+ICAJICBl bHNlIGlmIChnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxnY2FsbCAqPiAoc3RtdF92aW5mby0+c3Rt dCkpDQo+ID4gPiA+ID4gPiAgCSAgICB7DQo+ID4gPiA+ID4gPiBAQCAtMTE5MTksMTEgKzExOTcw LDE1IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gPiA+ID4gPiAg CQkJICAgICBub2RlX2luc3RhbmNlLCBjb3N0X3ZlYyk7DQo+ID4gPiA+ID4gPiAgICAgICAgaWYg KCFyZXMpDQo+ID4gPiA+ID4gPiAgCXJldHVybiByZXM7DQo+ID4gPiA+ID4gPiAtICAgfQ0KPiA+ ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArICBpZiAoaXNfY3Ry bF9zdG10IChzdG10X2luZm8tPnN0bXQpKQ0KPiA+ID4gPiA+ID4gKyAgICBTVE1UX1ZJTkZPX0RF Rl9UWVBFIChzdG10X2luZm8pID0gdmVjdF9lYXJseV9leGl0X2RlZjsNCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiAgICBzd2l0Y2ggKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykpDQo+ ID4gPiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gPiA+ICAgICAgICBjYXNlIHZlY3RfaW50ZXJuYWxf ZGVmOg0KPiA+ID4gPiA+ID4gKyAgICAgIGNhc2UgdmVjdF9lYXJseV9leGl0X2RlZjoNCj4gPiA+ ID4gPiA+ICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICBj YXNlIHZlY3RfcmVkdWN0aW9uX2RlZjoNCj4gPiA+ID4gPiA+IEBAIC0xMTk1Niw2ICsxMjAxMSw3 IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gPiA+ID4gPiAgICAg IHsNCj4gPiA+ID4gPiA+ICAgICAgICBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxnY2FsbCAqPiAo c3RtdF9pbmZvLT5zdG10KTsNCj4gPiA+ID4gPiA+ICAgICAgICBnY2NfYXNzZXJ0IChTVE1UX1ZJ TkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykNCj4gPiA+ID4gPiA+ICsJCSAgfHwgZ2ltcGxlX2NvZGUg KHN0bXRfaW5mby0+c3RtdCkgPT0gR0lNUExFX0NPTkQNCj4gPiA+ID4gPiA+ICAJCSAgfHwgKGNh bGwgJiYgZ2ltcGxlX2NhbGxfbGhzIChjYWxsKSA9PSBOVUxMX1RSRUUpKTsNCj4gPiA+ID4gPiA+ ICAgICAgICAqbmVlZF90b192ZWN0b3JpemUgPSB0cnVlOw0KPiA+ID4gPiA+ID4gICAgICB9DQo+ ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUt dmVjdG9yaXplci5oDQo+ID4gPiA+ID4gPiBpbmRleA0KPiA+ID4gPiA+DQo+ID4gPg0KPiBlYzY1 YjY1YjU5MTBlOWNiYWQwYThjN2U4M2M5NTBiNjE2OGI5OGJmLi4yNGEwNTY3YTJmMjNmMWIzZDhi Mw0KPiA+ID4gPiA+IDQwYmFmZjYxZDE4ZGE4ZTI0MmRkIDEwMDY0NA0KPiA+ID4gPiA+ID4gLS0t IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oDQo+ID4gPiA+ID4gPiArKysgYi9nY2MvdHJlZS12ZWN0 b3JpemVyLmgNCj4gPiA+ID4gPiA+IEBAIC02Myw2ICs2Myw3IEBAIGVudW0gdmVjdF9kZWZfdHlw ZSB7DQo+ID4gPiA+ID4gPiAgICB2ZWN0X2ludGVybmFsX2RlZiwNCj4gPiA+ID4gPiA+ICAgIHZl Y3RfaW5kdWN0aW9uX2RlZiwNCj4gPiA+ID4gPiA+ICAgIHZlY3RfcmVkdWN0aW9uX2RlZiwNCj4g PiA+ID4gPiA+ICsgIHZlY3RfZWFybHlfZXhpdF9kZWYsDQo+ID4gPg0KPiA+ID4gY2FuIHlvdSBh dm9pZCBwdXR0aW5nIHRoaXMgaW5iZXR3ZWVuIHJlZHVjdGlvbiBhbmQgZG91YmxlIHJlZHVjdGlv bg0KPiA+ID4gcGxlYXNlPyAgSnVzdCBwdXQgaXQgYmVmb3JlIHZlY3RfdW5rbm93bl9kZWZfdHlw ZS4gIEluIGZhY3QgdGhlIENPTkQNCj4gPiA+IGlzbid0IGEgZGVmIC4uLiBtYXliZSB3ZSBzaG91 bGQgaGF2ZSBwYXR0ZXJuIHJlY29naXplZA0KPiA+ID4NCj4gPiA+ICBpZiAoYSA8IGIpIGV4aXQ7 DQo+ID4gPg0KPiA+ID4gYXMNCj4gPiA+DQo+ID4gPiAgY29uZCA9IGEgPCBiOw0KPiA+ID4gIGlm IChjb25kICE9IDApIGV4aXQ7DQo+ID4gPg0KPiA+ID4gc28gdGhlIHBhcnQgdGhhdCB3ZSBuZWVk IHRvIHZlY3Rvcml6ZSBpcyBtb3JlIGNsZWFyLg0KPiA+ID4NCj4gPiA+ID4gPiA+ICAgIHZlY3Rf ZG91YmxlX3JlZHVjdGlvbl9kZWYsDQo+ID4gPiA+ID4gPiAgICB2ZWN0X25lc3RlZF9jeWNsZSwN Cj4gPiA+ID4gPiA+ICAgIHZlY3RfZmlyc3Rfb3JkZXJfcmVjdXJyZW5jZSwNCj4gPiA+ID4gPiA+ IEBAIC04NzYsNiArODc3LDEzIEBAIHB1YmxpYzoNCj4gPiA+ID4gPiA+ICAgICAgIHdlIG5lZWQg dG8gcGVlbCBvZmYgaXRlcmF0aW9ucyBhdCB0aGUgZW5kIHRvIGZvcm0gYW4gZXBpbG9ndWUgbG9v cC4NCj4gKi8NCj4gPiA+ID4gPiA+ICAgIGJvb2wgcGVlbGluZ19mb3Jfbml0ZXI7DQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gKyAgLyogV2hlbiB0aGUgbG9vcCBoYXMgZWFybHkgYnJlYWtzIHRo YXQgd2UgY2FuIHZlY3Rvcml6ZSB3ZSBuZWVkIHRvDQo+ID4gPiBwZWVsDQo+ID4gPiA+ID4gPiAr ICAgICB0aGUgbG9vcCBmb3IgdGhlIGJyZWFrIGZpbmRpbmcgbG9vcC4gICovDQo+ID4gPiA+ID4g PiArICBib29sIGVhcmx5X2JyZWFrczsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgIC8q IFdoZW4gdGhlIGxvb3AgaGFzIGEgbm9uLWVhcmx5IGJyZWFrIGNvbnRyb2wgZmxvdyBpbnNpZGUu ICAqLw0KPiA+ID4gPiA+ID4gKyAgYm9vbCBub25fYnJlYWtfY29udHJvbF9mbG93Ow0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gICAgLyogTGlzdCBvZiBsb29wIGFkZGl0aW9uYWwgSVYgY29u ZGl0aW9uYWxzIGZvdW5kIGluIHRoZSBsb29wLiAgKi8NCj4gPiA+ID4gPiA+ICAgIGF1dG9fdmVj PGdjb25kICo+IGNvbmRzOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEBAIC05ODUsOSArOTkz LDExIEBAIHB1YmxpYzoNCj4gPiA+ID4gPiA+ICAjZGVmaW5lIExPT1BfVklORk9fUkVEVUNUSU9O X0NIQUlOUyhMKSAgICAgKEwpLQ0KPiA+cmVkdWN0aW9uX2NoYWlucw0KPiA+ID4gPiA+ID4gICNk ZWZpbmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTKEwpICAgICAoTCktDQo+ID5wZWVsaW5n X2Zvcl9nYXBzDQo+ID4gPiA+ID4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX05J VEVSKEwpICAgIChMKS0NCj4gPnBlZWxpbmdfZm9yX25pdGVyDQo+ID4gPiA+ID4gPiArI2RlZmlu ZSBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyhMKSAgICAgICAgIChMKS0+ZWFybHlfYnJlYWtzDQo+ ID4gPiA+ID4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX0VBUkxZX0JSS19DT05GTElDVF9TVE1UUyhM KSAoTCktDQo+ID4gPiA+ID4gPmVhcmx5X2JyZWFrX2NvbmZsaWN0DQo+ID4gPiA+ID4gPiAgI2Rl ZmluZSBMT09QX1ZJTkZPX0VBUkxZX0JSS19ERVNUX0JCKEwpICAgIChMKS0NCj4gPiA+ID5lYXJs eV9icmVha19kZXN0X2JiDQo+ID4gPiA+ID4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX0VBUkxZX0JS S19WVVNFUyhMKSAgICAgIChMKS0NCj4gPmVhcmx5X2JyZWFrX3Z1c2VzDQo+ID4gPiA+ID4gPiAr I2RlZmluZSBMT09QX1ZJTkZPX0dFTkVSQUxfQ1RSX0ZMT1coTCkgICAgIChMKS0NCj4gPiA+ID4g PiA+bm9uX2JyZWFrX2NvbnRyb2xfZmxvdw0KPiA+ID4gPiA+ID4gICNkZWZpbmUgTE9PUF9WSU5G T19MT09QX0NPTkRTKEwpICAgICAgICAgICAoTCktPmNvbmRzDQo+ID4gPiA+ID4gPiAgI2RlZmlu ZSBMT09QX1ZJTkZPX0xPT1BfSVZfQ09ORChMKSAgICAgICAgIChMKS0+bG9vcF9pdl9jb25kDQo+ ID4gPiA+ID4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX05PX0RBVEFfREVQRU5ERU5DSUVTKEwpIChM KS0NCj4gPiA+ID4gPiA+bm9fZGF0YV9kZXBlbmRlbmNpZXMNCj4gPiA+ID4gPiA+IEBAIC0xMDM4 LDggKzEwNDgsOCBAQCBwdWJsaWM6DQo+ID4gPiA+ID4gPiAgICAgc3RhY2suICAqLw0KPiA+ID4g PiA+ID4gIHR5cGVkZWYgb3B0X3BvaW50ZXJfd3JhcHBlciA8bG9vcF92ZWNfaW5mbz4gb3B0X2xv b3BfdmVjX2luZm87DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLWlubGluZSBsb29wX3ZlY19p bmZvDQo+ID4gPiA+ID4gPiAtbG9vcF92ZWNfaW5mb19mb3JfbG9vcCAoY2xhc3MgbG9vcCAqbG9v cCkNCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIGxvb3BfdmVjX2luZm8NCj4gPiA+ID4gPiA+ ICtsb29wX3ZlY19pbmZvX2Zvcl9sb29wIChjb25zdCBjbGFzcyBsb29wICpsb29wKQ0KPiA+ID4g PiA+ID4gIHsNCj4gPiA+ID4gPiA+ICAgIHJldHVybiAobG9vcF92ZWNfaW5mbykgbG9vcC0+YXV4 Ow0KPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+IEBAIC0xNzg5LDcgKzE3OTksNyBAQCBpc19s b29wX2hlYWRlcl9iYl9wIChiYXNpY19ibG9jayBiYikNCj4gPiA+ID4gPiA+ICB7DQo+ID4gPiA+ ID4gPiAgICBpZiAoYmIgPT0gKGJiLT5sb29wX2ZhdGhlciktPmhlYWRlcikNCj4gPiA+ID4gPiA+ ICAgICAgcmV0dXJuIHRydWU7DQo+ID4gPiA+ID4gPiAtICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChF REdFX0NPVU5UIChiYi0+cHJlZHMpID09IDEpOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g ICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4gPiA+ID4gIH0NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiBAQCAtMjE3Niw5ICsyMTg2LDEwIEBAIGNsYXNzIGF1dG9fcHVyZ2VfdmVjdF9sb2NhdGlvbg0K PiA+ID4gPiA+ID4gICAgIGluIHRyZWUtdmVjdC1sb29wLW1hbmlwLmNjLiAgKi8NCj4gPiA+ID4g PiA+ICBleHRlcm4gdm9pZCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBs b29wX3ZlY19pbmZvLA0KPiA+ID4gPiA+ID4gIAkJCQkgICAgIHRyZWUsIHRyZWUsIHRyZWUsIGJv b2wpOw0KPiA+ID4gPiA+ID4gLWV4dGVybiBib29sIHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3Bf cCAoY29uc3QgY2xhc3MgbG9vcCAqLA0KPiA+ID4gY29uc3RfZWRnZSk7DQo+ID4gPiA+ID4gPiAr ZXh0ZXJuIGJvb2wgc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBsb29wX3ZlY19p bmZvLA0KPiA+ID4gPiA+IGNvbnN0X2VkZ2UpOw0KPiA+ID4gPiA+ID4gIGNsYXNzIGxvb3AgKnNs cGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChjbGFzcyBsb29wICosDQo+ID4g PiA+ID4gPiAtCQkJCQkJICAgICBjbGFzcyBsb29wICosIGVkZ2UpOw0KPiA+ID4gPiA+ID4gKwkJ CQkJCSAgICBjbGFzcyBsb29wICosIGVkZ2UsDQo+IGJvb2wsDQo+ID4gPiA+ID4gPiArCQkJCQkJ ICAgIHZlYzxiYXNpY19ibG9jaz4gKg0KPiA9IE5VTEwpOw0KPiA+ID4gPiA+ID4gIGNsYXNzIGxv b3AgKnZlY3RfbG9vcF92ZXJzaW9uaW5nIChsb29wX3ZlY19pbmZvLCBnaW1wbGUgKik7DQo+ID4g PiA+ID4gPiAgZXh0ZXJuIGNsYXNzIGxvb3AgKnZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5m bywgdHJlZSwgdHJlZSwNCj4gPiA+ID4gPiA+ICAJCQkJICAgIHRyZWUgKiwgdHJlZSAqLCB0cmVl ICosIGludCwgYm9vbCwgYm9vbCwNCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12 ZWN0b3JpemVyLmNjIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jYw0KPiA+ID4gPiA+ID4gaW5kZXgN Cj4gPiA+ID4gPg0KPiA+ID4NCj4gYTA0OGU5ZDg5MTc4YTM3NDU1YmQ3YjgzYWIwZjJhMjM4YTRj ZTY5ZS4uMGRjNTQ3OWRjOTIwNThiNmM3MGMNCj4gPiA+ID4gPiA2N2YyOWY1ZGM5YThkNzIyMzVm NCAxMDA2NDQNCj4gPiA+ID4gPiA+IC0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gPiA+ ID4gPiA+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuY2MNCj4gPiA+ID4gPiA+IEBAIC0xMzc5 LDcgKzEzNzksOSBAQCBwYXNzX3ZlY3Rvcml6ZTo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikNCj4g PiA+ID4gPiA+ICAJIHByZWRpY2F0ZXMgdGhhdCBuZWVkIHRvIGJlIHNoYXJlZCBmb3Igb3B0aW1h bCBwcmVkaWNhdGUgdXNhZ2UuDQo+ID4gPiA+ID4gPiAgCSBIb3dldmVyIHJlYXNzb2Mgd2lsbCBy ZS1vcmRlciB0aGVtIGFuZCBwcmV2ZW50IENTRSBmcm9tDQo+IHdvcmtpbmcNCj4gPiA+ID4gPiA+ ICAJIGFzIGl0IHNob3VsZC4gIENTRSBvbmx5IHRoZSBsb29wIGJvZHksIG5vdCB0aGUgZW50cnku ICAqLw0KPiA+ID4gPiA+ID4gLSAgICAgIGJpdG1hcF9zZXRfYml0IChleGl0X2Jicywgc2luZ2xl X2V4aXQgKGxvb3ApLT5kZXN0LT5pbmRleCk7DQo+ID4gPiA+ID4gPiArICAgICAgYXV0b192ZWM8 ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiA+DQo+ID4gPiBz ZWVpbmcgdGhpcyBtb3JlIGFuZCBtb3JlIEkgdGhpbmsgd2Ugd2FudCBhIHNpbXBsZSB3YXkgdG8g aXRlcmF0ZSBvdmVyDQo+ID4gPiBhbGwgZXhpdHMgd2l0aG91dCBjb3B5aW5nIHRvIGEgdmVjdG9y IHdoZW4gd2UgaGF2ZSB0aGVtIHJlY29yZGVkLiAgTXkNCj4gPiA+IEMrKyBmdSBpcyB0b28gbGlt aXRlZCB0byBzdXBwb3J0DQo+ID4gPg0KPiA+ID4gICBmb3IgKGF1dG8gZXhpdCA6IHJlY29yZGVk X2V4aXRzIChsb29wKSkNCj4gPiA+ICAgICAuLi4NCj4gPiA+DQo+ID4gPiAobWF5YmUgdGhhdCdz IGVub3VnaCBmb3Igc29tZWJvZHkgdG8ganVtcCBvbnRvIHRoaXMgOykpDQo+ID4gPg0KPiA+ID4g RG9uJ3QgdHJlYXQgYWxsIHJldmlldyBjb21tZW50cyBhcyBjaGFuZ2Ugb3JkZXJzLCBidXQgaXQg c2hvdWxkIGJlIGNsZWFyDQo+ID4gPiB0aGUgY29kZSBpc24ndCAxMDAlIG9idmlvdXMuICBNYXli ZSB0aGUgcGF0Y2ggY2FuIGJlIHNpbXBsaWZpZWQgYnkNCj4gPiA+IHNwbGl0dGluZyBvdXQgdGhl IExDIFNTQSBjbGVhbnVwIHBhcnRzLg0KPiA+ID4NCj4gPiA+IFRoYW5rcywNCj4gPiA+IFJpY2hh cmQuDQo+ID4gPg0KPiA+ID4gPiA+ID4gKyAgICAgIGZvciAoZWRnZSBleGl0IDogZXhpdHMpDQo+ ID4gPiA+ID4gPiArCWJpdG1hcF9zZXRfYml0IChleGl0X2JicywgZXhpdC0+ZGVzdC0+aW5kZXgp Ow0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ICAgICAgICBlZGdlIGVudHJ5ID0gRURHRV9QUkVE IChsb29wX3ByZWhlYWRlcl9lZGdlIChsb29wKS0+c3JjLCAwKTsNCj4gPiA+ID4gPiA+ICAgICAg ICBkb19ycG9fdm4gKGZ1biwgZW50cnksIGV4aXRfYmJzKTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gLS0NCj4gPiA+ID4gPiBSaWNoYXJkIEJpZW5lciA8cmd1ZW50aGVyQHN1c2UuZGU+ DQo+ID4gPiA+ID4gU1VTRSBTb2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFueSBHbWJILCBGcmFua2Vu c3RyYXNzZSAxNDYsIDkwNDYxDQo+ID4gPiA+ID4gTnVlcm5iZXJnLA0KPiA+ID4gPiA+IEdlcm1h bnk7IEdGOiBJdm8gVG90ZXYsIEFuZHJldyBNeWVycywgQW5kcmV3IE1jRG9uYWxkLCBCb3VkaWVu DQo+ID4gPiA+ID4gTW9lcm1hbjsNCj4gPiA+ID4gPiBIUkIgMzY4MDkgKEFHIE51ZXJuYmVyZykN Cj4gPiA+ID4NCj4gPg0KPiANCj4gLS0NCj4gUmljaGFyZCBCaWVuZXIgPHJndWVudGhlckBzdXNl LmRlPg0KPiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHZXJtYW55IEdtYkgsDQo+IEZyYW5rZW5z dHJhc3NlIDE0NiwgOTA0NjEgTnVlcm5iZXJnLCBHZXJtYW55Ow0KPiBHRjogSXZvIFRvdGV2LCBB bmRyZXcgTWNEb25hbGQsIFdlcm5lciBLbm9ibGljaDsgKEhSQiAzNjgwOSwgQUcNCj4gTnVlcm5i ZXJnKQ0K