From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80045.outbound.protection.outlook.com [40.107.8.45]) by sourceware.org (Postfix) with ESMTPS id 1A296385841C for ; Fri, 18 Nov 2022 18:23:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1A296385841C 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=fumq0b0VNkiCiNTwhp6uPZajO7GAvnR/JmTcL0nVwpY=; b=iDPJldg/aTzKPc52wJqq8nlkBh6r+NUmx0QKDTht+TMEpHRcWzDJ5WsskWP9nx1Eiz9waQUISpKQj/TiERWUjUZm8O5OTF1fSlfO1P2IPI9Lr+IMKfU0Qv/cvEP9mMta7fBD6OE2UM11uv74tJxtzCb/t/nh3oBfPNW5uGQpemM= Received: from AM7PR02CA0012.eurprd02.prod.outlook.com (2603:10a6:20b:100::22) by GV2PR08MB8581.eurprd08.prod.outlook.com (2603:10a6:150:ba::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.6; Fri, 18 Nov 2022 18:23:33 +0000 Received: from AM7EUR03FT028.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:100:cafe::90) by AM7PR02CA0012.outlook.office365.com (2603:10a6:20b:100::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.9 via Frontend Transport; Fri, 18 Nov 2022 18:23:33 +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 AM7EUR03FT028.mail.protection.outlook.com (100.127.140.192) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Fri, 18 Nov 2022 18:23:33 +0000 Received: ("Tessian outbound 58faf9791229:v130"); Fri, 18 Nov 2022 18:23:33 +0000 X-CR-MTA-TID: 64aa7808 Received: from 09a2e0b6e082.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F2F5D3DC-AD10-4050-9A31-691BECB353DF.1; Fri, 18 Nov 2022 18:23:24 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 09a2e0b6e082.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 18 Nov 2022 18:23:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fWOHK8qAbnmfMZ5Uk94ctNf2bs3/Jc3MBTxTAqMZG/Htttc8KfD2g0B8KultRZEUG64Wd++i+Zqs/k+DdsIAbuI9qdKwAPn59VktAPYUYZaoNhK/W7/QrmEWc4NRCsZqOzjuEFgtDNSbS7elAGHoxjW6FSCNa3YubPiD0535a0z+IMyWP4ZvD7FYlN0VsR4QopM/Lcf5X3PxX2L9AwcUh+Y4PqEI5w8IB+Cr0w+C4j7ngM3Zr9yEaMjWiH2iFxelJDFns0x1qQbDH2LwJfJZG+VFBeHry87PqX7DAZKcMesTCWztK6dAEG/kXJBZy3mFE/ZayFdb0C7HfDEwhvXpaw== 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=fumq0b0VNkiCiNTwhp6uPZajO7GAvnR/JmTcL0nVwpY=; b=kjj8c+vrJdqY6IcJYQ57wFIbas4+XnE3w5w5o/w4s7KIOO1yqY1t5L5tL+rs3lVu5kkI0uSH+CP/3RvPNAxjCMVYajVFF+ePGblt4RFlrlLqcKjbuPpu/8TZynhaasig8/7Hi3fC+k3kLjjR0jZgMc+C0YgnWWtQcfT7QOtmVO8ClerWPnh8q2ybK08LWidTbATYrBp4/J8kE58HB1UWIfwYR5H9DS58qt+ZMRgNjUwidE2q2uFcqAOLdCMASTZyu2W0ZQUJcKnmBRpYk5aYYHXbv4lXP3rCJ7Mw4P15JjWUS78rT+9C69X3OI41Z7kovPWgeRu0eB/vyK30u4kUxA== 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=fumq0b0VNkiCiNTwhp6uPZajO7GAvnR/JmTcL0nVwpY=; b=iDPJldg/aTzKPc52wJqq8nlkBh6r+NUmx0QKDTht+TMEpHRcWzDJ5WsskWP9nx1Eiz9waQUISpKQj/TiERWUjUZm8O5OTF1fSlfO1P2IPI9Lr+IMKfU0Qv/cvEP9mMta7fBD6OE2UM11uv74tJxtzCb/t/nh3oBfPNW5uGQpemM= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by VI1PR08MB10244.eurprd08.prod.outlook.com (2603:10a6:800:1bd::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.8; Fri, 18 Nov 2022 18:23:19 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%5]) with mapi id 15.20.5834.009; Fri, 18 Nov 2022 18:23:18 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , Richard Sandiford Subject: RE: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Topic: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Index: AQHY7snIAwho+tAVIES+mK7MOEeJC65E4G+AgAAFtPA= Date: Fri, 18 Nov 2022 18:23:18 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 2BA598DF9F821943992AA0065B941BA4.0 x-checkrecipientchecked: true Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|VI1PR08MB10244:EE_|AM7EUR03FT028:EE_|GV2PR08MB8581:EE_ X-MS-Office365-Filtering-Correlation-Id: 82d3bece-53cd-4c43-69cd-08dac992005f 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: ImIrQMkuqUBG37v9IQyC2futh7AY9Pe442ND6IYF2uZfssG+GvUL23zy7PiDZR9pIiRatoE4Yi5P/qUm73WZojle5NOiKQ0f301xi5T4ROnRcDgf4IncAhzkrktlb41YNHGhua8NVvyZN912L4atL5dRi1+6Yo48b5toitj35B8KlKNx9P2oLOZPJQ6fSg1XvfAskkFY3slQ1fpz27MVKCchmcF/elyMzHIOhfusXIJE2+3E0c0CSdjy91NcFq6Cca71GkJQe3cvtUMOdvQ8ud3QQ05Tsi0aWNIIYOQRNCS9n7NDMvMfCwcMBnryJt2DAEaz6Gkuv4OrIV/hjyQR+VEpKLt8Bx0X5Eol6gJXEQQmJ+JoPSf2RwDuR4iLaoEmUDixHqQ++mq/gH8S9Y6GlN1KarPV83ms9e528iN3fQ0mHCYQ7Kg8HIwQOuyJS6SwE0vQss9nODVYDfYFIX8+GGzLGjGd1sQ5sdgytakDpX+C8ZvPWrFOU9I36HhMjg1ROVUdC9ZLnkjVNmFhDZfWGlS2pnoASFMNVZ/Oa846NzblKJ+iO1ZYbUc/JJjdZ5YIF0BxgwgZgc21vL4Xnob60d63Ti1ut0sWTME7qO+NXeWBszr7SvW2pE3dL+Ju8BXl7BrxndlCqDebBKYrIcLcq2hfbqRcg1Z8L9bLBBwBWHd/GO87Nf4mx6/j32W6ntsGUF7N8dqZKQrbCNWl9WRE1lxFqxHHlDvUvZ0CTVYg9C+4fdDVpbDHMhK7CPM3+7s/XdFIbUUQbIdojL9VuNv0IobMl3tXGPWeVqtg1e3STPA= 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:(13230022)(4636009)(366004)(39860400002)(376002)(396003)(136003)(346002)(451199015)(84970400001)(66899015)(53546011)(33656002)(8936002)(30864003)(52536014)(86362001)(122000001)(66446008)(5660300002)(41300700001)(4326008)(8676002)(76116006)(66476007)(38070700005)(64756008)(66556008)(66946007)(316002)(6916009)(54906003)(26005)(9686003)(6506007)(478600001)(38100700002)(83380400001)(7696005)(55016003)(71200400001)(186003)(2906002)(579004)(559001)(357404004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB10244 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: AM7EUR03FT028.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 51489e07-114e-4964-32a3-08dac991f7a1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aiUwaUsVh7jqvXFnq5OekDjLTABTWJJB3dqJdroSm+bASwQgW88ejsXUHYUyATgX7U9p4dl8yUd0Fb6JPXUJJrEC6H7hUV8O80fY/Lc9atgM4bTJXG42edAd5fyKu/WKXXI0IRCyvoTSq65cMFRwB8Ludvha/PguzBo60v4DIN9RkIo5aL2W3aHeEtMg/zMCro+ZvM6jZpQhk9dUJ8tVcDwe9/oQtkf64ezkwbWh7Liu8QdXzp0V85jC+yD18X6tbojuSFZLVkt7ae2iPuWtsLpfU+/VrJ90Zg8ZtO/GCue40J0Z3O0kX3PeC9mnFaJZMnKEshK1OMX6SLoeyhU4E20Vsh49FQZpyCE+XQgoD5vZInv6M9DLwYI8AMFhQWEPsjm3p6r0+mhpOAtGRN5gN8YNwsL4zxLPQQFLmB4qcti4WN9WgrAP8gee7GqIANp5UYdJxccJUU5k1KXl0CFm0iEEuQ8CZUitODW6O6Nt9k7Mohjp4mp/GjSgKaygUVuMOU2+dqBhl3Vlq5W6+SgirzomhtKkuxuFZHhFiRCbcEXpOAHx7zYeZXADO+u4JWCjB3E1iNoxfDERVqtpXLLAsa5gkbWxe3xG28syU+B3BE1kJsOj1S8DJmgaRr8Q+93fLFRfOugRUH8sihG3+3nk8wNH41Y4cZ88OhyoIcheaugvwjukzRV5iq76V1cUOThfddeiygBF4f+hyRGhoJrS4LJumFPeO7hkTKp7UGNAE/xN2WkYdSPm8xCriwgCqQZI+2Y9tPlDgYuOR7NqHpONPw2zdWbKUjMamDt7THH6CEs= 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:(13230022)(4636009)(136003)(39860400002)(396003)(376002)(346002)(451199015)(40470700004)(36840700001)(46966006)(53546011)(9686003)(316002)(26005)(7696005)(6506007)(82740400003)(6862004)(8676002)(4326008)(30864003)(47076005)(2906002)(41300700001)(186003)(70586007)(336012)(8936002)(52536014)(82310400005)(5660300002)(86362001)(81166007)(356005)(70206006)(33656002)(40460700003)(83380400001)(36860700001)(66899015)(55016003)(84970400001)(478600001)(40480700001)(54906003)(559001)(579004)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2022 18:23:33.4226 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 82d3bece-53cd-4c43-69cd-08dac992005f 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: AM7EUR03FT028.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR08MB8581 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,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+IFNlbnQ6IEZyaWRheSwgTm92ZW1iZXIgMTgsIDIwMjIgMzowNCBQ TQ0KPiBUbzogVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJtLmNvbT4NCj4gQ2M6 IGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnOyBuZCA8bmRAYXJtLmNvbT47IFJpY2hhcmQgU2FuZGlm b3JkDQo+IDxSaWNoYXJkLlNhbmRpZm9yZEBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENI IDEvMl1taWRkbGUtZW5kOiBTdXBwb3J0IGVhcmx5IGJyZWFrL3JldHVybiBhdXRvLQ0KPiB2ZWN0 b3JpemF0aW9uLg0KPiANCj4gT24gV2VkLCAyIE5vdiAyMDIyLCBUYW1hciBDaHJpc3RpbmEgd3Jv dGU6DQo+IA0KPiA+IEhpIEFsbCwNCj4gPg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyBpbml0aWFsIHN1 cHBvcnQgZm9yIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gaW4gR0NDLg0KPiA+IFRoZSBzdXBw b3J0IGlzIGFkZGVkIGZvciBhbnkgdGFyZ2V0IHRoYXQgaW1wbGVtZW50cyBhIHZlY3RvciBjYnJh bmNoDQo+IG9wdGFiLg0KPiANCj4gSSdtIGxvb2tpbmcgYXQgdGhpcyBub3csIGZpcnN0IHNvbWUg aGlnaC1sZXZlbCBxdWVzdGlvbnMuDQo+IA0KPiBXaHkgZG8gd2UgbmVlZCBhIG5ldyBjYnJhbmNo IG9wdGFiPyAgSXQgc2VlbXMgaW1wbGVtZW50aW5nDQo+IGEgdmVjdG9yIGNvbXBhcmlzb24gYW5k IG1hc2sgdGVzdCBhZ2FpbnN0IHplcm8gc3VmZmljaWVzPw0KDQogSXQgZG9lc24ndCBkZWZpbmUg YSBuZXcgb3B0YWIsIEl0J3MganVzdCB1c2luZyB0aGUgZXhpc3RpbmcgY2JyYW5jaCBvcHRhYiB0 byBjaGVjaw0KdGhhdCB0aGUgdGFyZ2V0IGNhbiBoYW5kbGUgYSB2ZWN0b3IgY29tcGFyaXNvbiB3 aXRoIDAgaW4gYSBicmFuY2ggc3RhdGVtZW50Lg0KDQpOb3RlIHRoYXQgaXQgZG9lc24ndCBnZW5l cmF0ZSBhIGNhbGwgdG8gdGhpcyBvcHRhYiwgR0lNUExFIGV4cGFuc2lvbiBhbHJlYWR5IHdpbGwu DQoNClRoZSByZWFzb24gSSBkb24ndCBjaGVjayBhZ2FpbnN0IGp1c3QgY29tcGFyaXNvbiB3aXRo IDAgYW5kIGVxdWFsaXR5IGlzIHRoYXQNClR5cGljYWxseSBzcGVha2luZyBhIHZlY3RvciBjb21w YXJpc29uIHdpdGggMCBpcyBub3QgZXhwZWN0ZWQgdG8gc2V0IGEgZmxhZy4NCiBpLmUuIHR5cGlj YWxseSBpdCByZXN1bHRzIGluIGp1c3QgYSB2ZWN0b3Igb2YgQm9vbGVhbnMuDQoNCkEgdmVjdG9y IGNvbXBhcmUgd2l0aCAwIGluIGEgYnJhbmNoIHdpbGwgYmUgbG93ZXJlZCB0byBjYnJhbmNoIHRv ZGF5IHNvIEkganVzdA0KdXNlIHRoZSBvcHRhYiB0byBzZWUgdGhhdCB0aGUgdGFyZ2V0IGNhbiBo YW5kbGUgdGhpcyBicmFuY2hpbmcgYW5kIGxlYXZlDQppdCB1cCB0byB0aGUgdGFyZ2V0IHRvIGRv IGhvd2V2ZXIgaXQgZGVjaWRlcy4NCg0KVGhlIGFsdGVybmF0aXZlIHdvdWxkIHJlcXVpcmUgbWUg KEkgdGhpbmspIHRvIHJlZHVjZSB0byBhIHNjYWxhciBmb3IgdGhlIGVxdWFsaXR5DQpjaGVjayBh cyB5b3UgbWVudGlvbmVkLCBidXQgc3VjaCBjb2RlZ2VuIHdvdWxkIGJlIHdvcnNlIGZvciB0YXJn ZXRzIGxpa2UgU1ZFDQp3aGljaCBoYXMgbmF0aXZlIHN1cHBvcnQgZm9yIHRoaXMgb3BlcmF0aW9u LiAgV2UnZCBoYXZlIHRvIHVuZG8gdGhlIHJlZHVjdGlvbiBkdXJpbmcgUlRMLg0KDQpFdmVuIGZv ciB0YXJnZXRzIGxpa2UgTkVPTiwgd2UnZCBoYXZlIHRvIHJlcGxhY2UgdGhlIHJlZHVjdGlvbiBj b2RlLCBiZWNhdXNlIHdlDQpjYW4gZ2VuZXJhdGUgYmV0dGVyIGNvZGUgYnkgZG9pbmcgdGhlIHJl ZHVjdGlvbiB1c2luZyBwYWlyd2lzZSBpbnN0cnVjdGlvbnMuDQoNClRoZXNlIGtpbmRzIG9mIGRp ZmZlcmVuY2VzIHRvZGF5IGFyZSBoYW5kbGVkIGJ5IGNicmFuY2hfb3B0YWIgYWxyZWFkeSBzbyBp dCBzZWVtZWQNCmJldHRlciB0byBqdXN0IHJlLXVzZSBpdC4NCg0KPiANCj4gWW91IGhhdmUgc29t ZSBlbGFib3JhdGUgZXhwbGFuYXRpb24gb24gaG93IHBlZWxpbmcgd29ya3MgYnV0IEkNCj4gc29t ZXdoYXQgbWlzcyB0aGUgaGlnaC1sZXZlbCBpZGVhIGhvdyB0byB2ZWN0b3JpemUgdGhlIGVhcmx5 DQo+IGV4aXQuICBJJ3ZlIGFwcGxpZWQgdGhlIHBhdGNoZXMgYW5kIGZyb20gbG9va2luZyBhdCBo b3cNCj4gdmVjdC1lYXJseS1icmVha18xLmMgZ2V0cyB0cmFuc2Zvcm1lZCBvbiBhYXJjaDY0IGl0 IHNlZW1zIHlvdQ0KPiB2ZWN0b3JpemUNCj4gDQo+ICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkr KykNCj4gIHsNCj4gICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICAgIGlmICh2ZWN0X2FbaV0gPiB4 KQ0KPiAgICAgIGJyZWFrOw0KPiAgICB2ZWN0X2FbaV0gPSB4Ow0KPiAgfQ0KPiANCj4gYXMNCj4g DQo+ICBmb3IgKGludCBpID0gMDsgaSA8IE47KQ0KPiAgew0KPiAgICBpZiAoYW55ICh2ZWN0X2Fb aV0gPiB4KSkNCj4gICAgICBicmVhazsNCj4gICAgaSArPSBWRjsNCj4gICAgdmVjdF9iW2ldID0g eCArIGk7DQo+ICAgIHZlY3RfYVtpXSA9IHg7DQo+ICB9DQo+ICBmb3IgKDsgaSA8IE47IGkrKykN Cj4gIHsNCj4gICAgdmVjdF9iW2ldID0geCArIGk7DQo+ICAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0K PiAgICAgIGJyZWFrOw0KPiAgICB2ZWN0X2FbaV0gPSB4Ow0KPiAgfQ0KPiANCj4gQXMgeW91IG91 dGxpbmUgYmVsb3cgdGhpcyByZXF1aXJlcyB0aGF0IHRoZSBzaWRlLWVmZmVjdHMgZG9uZSBhcyBw YXJ0DQo+IG9mIDxzdGF0ZW1lbnRzMT4gYW5kIDxjb25kaXRpb24+IGJlZm9yZSBleGl0aW5nIGNh biBiZSBtb3ZlZCBhZnRlciB0aGUNCj4gZXhpdCwgYmFzaWNhbGx5IHlvdSBuZWVkIHRvIGJlIGFi bGUgdG8gY29tcHV0ZSB3aGV0aGVyIGFueSBzY2FsYXINCj4gaXRlcmF0aW9uIGNvdmVyZWQgYnkg YSB2ZWN0b3IgaXRlcmF0aW9uIHdpbGwgZXhpdCB0aGUgbG9vcCBlYXJseS4NCj4gQ29kZSBnZW5l cmF0aW9uIHdpc2UgeW91J2Qgc2ltcGx5ICJpZ25vcmUiIGNvZGUgZ2VuZXJhdGluZyBlYXJseSBl eGl0cw0KPiBhdCB0aGUgcGxhY2UgdGhleSBhcHBlYXIgaW4gdGhlIHNjYWxhciBjb2RlIGFuZCBp bnN0ZWFkIGVtaXQgdGhlbQ0KPiB2ZWN0b3JpemVkIGluIHRoZSBsb29wIGhlYWRlci4NCg0KSW5k ZWVkLCBUaGlzIGlzIGhvdyBpdCdzIGhhbmRsZWQgdG9kYXkuICBGb3IgZnVsbHkgbWFza2VkIGxv b3BzIHdlIGNhbiBkbyBiZXR0ZXINCmFuZCB3b3VsZCBiZSBhIGZ1dHVyZSBleHBhbnNpb24sIGJ1 dCB0aGlzIGNvZGVnZW4gaXMgc2ltcGxlciB0byBzdXBwb3J0IHRvZGF5DQphbmQgaXMgYmVuZWZp Y2lhbCB0byBhbGwgdGFyZ2V0cy4NCg0KSXQgYWxzbyBoYXMgdGhlIGJlbmVmaXQgdGhhdCBjb21w bGljYXRlZCByZWR1Y3Rpb24gd2UgZG9uJ3Qgc3VwcG9ydCB0b2RheSBkb24ndA0KYWJvcnQgdmVj dG9yaXphdGlvbiBiZWNhdXNlIHdlIGp1c3QgcHVudCB0byBzY2FsYXIuIEUuZy4gdG9kYXkgd2Ug YmFpbCBvdXQgb246DQoNCmlmIChhW2ldID4geCkNCnsNCiBiID0gYVtpXTsNCiBjID0gaTsNCn0N Cg0KQnV0IA0KDQppZiAoYVtpXSA+IHgpDQp7DQogYiA9IGFbaV07DQogYyA9IGk7DQogYnJlYWs7 DQp9DQoNCldvcmtzIGZpbmUuICBGb3IgZnVsbHkgbWFza2VkIGxvb3BzLCBSaWNoYXJkJ3MgZGVz aWduIHdpdGggbXVsdGlwbGUgcmdyb3VwcyB3b3VsZA0KQWxsb3cgdXMgdG8gaGFuZGxlIHRoZXNl IHRoaW5ncyBiZXR0ZXIgd2l0aG91dCB0aGUgc2NhbGFyIGxvb3Agc2hvdWxkIHdlIHdhbnQgdG8N CkluIHRoZSBmdXR1cmUuIFRoZSBjdXJyZW50IGRlc2lnbiBkb2Vzbid0IHByb2hpYml0IHRoaXMg Y2hvaWNlIGluIHRoZSBmdXR1cmUuDQoNCj4gDQo+ID4gQ29uY3JldGVseSB0aGUga2luZCBvZiBs b29wcyBzdXBwb3J0ZWQgYXJlIG9mIHRoZSBmb3JtczoNCj4gPg0KPiA+ICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykNCj4gPiAgew0KPiA+ICAgIDxzdGF0ZW1lbnRzMT4NCj4gPiAgICBpZiAo PGNvbmRpdGlvbj4pDQo+ID4gICAgICA8YWN0aW9uPjsNCj4gPiAgICA8c3RhdGVtZW50czI+DQo+ ID4gIH0NCj4gPg0KPiA+IHdoZXJlIDxhY3Rpb24+IGNhbiBiZToNCj4gPiAgLSBicmVhaw0KPiA+ ICAtIHJldHVybg0KPiA+DQo+ID4gQW55IG51bWJlciBvZiBzdGF0ZW1lbnRzIGNhbiBiZSB1c2Vk IGJlZm9yZSB0aGUgPGFjdGlvbj4gb2NjdXJzLg0KPiA+DQo+ID4gU2luY2UgdGhpcyBpcyBhbiBp bml0aWFsIHZlcnNpb24gZm9yIEdDQyAxMyBpdCBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9u czoNCj4gPg0KPiA+IC0gT25seSBmaXhlZCBzaXplZCBpdGVyYXRpb25zIGFuZCBidWZmZXJzIGFy ZSBzdXBwb3J0ZWQuICBUaGF0IGlzIHRvIHNheSBhbnkNCj4gPiAgIHZlY3RvcnMgbG9hZGVkIG9y IHN0b3JlZCBtdXN0IGJlIHRvIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cyB3aXRoIGtub3du DQo+ID4gICBzaXplcy4gTiBtdXN0IGFsc28gYmUga25vd24uDQo+IA0KPiBXaHk/DQoNCk5vdCBh biBpbnRyaW5zaWMgbGltaXRhdGlvbiwganVzdCBvbmUgZG9uZSBmb3IgcHJhY3RpY2FsaXR5IGFu ZCB0byBrZWVwIHRoZSBwYXRjaA0Kc2ltcGxlci4gIFRoZXNlIGNhc2VzIHdlcmUgbW9zdCBvZiB0 aGUgY2FzZXMgdGhhdCB3ZSB3YW50ZWQuDQoNClN1cHBvcnRpbmcgdGhpcyByZXF1aXJlcyBhZGRp bmcgc3VwcG9ydCBmb3IgbXVsdGlwbGUtZXhpdHMgdG8gYWxsIHRoZSBkaWZmZXJlbnQgcGVlbGlu Zw0KYW5kIHZlcnNpb25pbmcgY29kZSBhdCBvbmNlLCB3aGljaCB3b3VsZCBiZSBhIG11Y2ggYmln Z2VyIHBhdGNoLg0KDQpBZGRpdGlvbmFsbHkgZm9yIFNWRSAodGhlIG1haW4gdGFyZ2V0IG9mIHRo ZSBjb2RlZ2VuIGNoYW5nZSkgd2UnZCB3YW50IHRvIGRvIHRoaXMNCnVzaW5nIGZpcnN0IGZhdWx0 aW5nIGxvYWRzLCAgYnV0IHRoZXJlJ3MgYSBkZXBlbmRlbmN5IHRvIG90aGVyIHRoaW5ncyB3ZSBt dXN0DQpzdXBwb3J0IGJvdGggaW4gR0lNUExFIGl0c2VsZiBhbmQgdGhlIHZlY3Rvcml6ZXIgYmVm b3JlIHdlIGNhbiBkbyB0aGlzLg0KDQo+IA0KPiA+IC0gYW55IHN0b3JlcyBpbiA8c3RhdGVtZW50 czE+IHNob3VsZCBub3QgYmUgdG8gdGhlIHNhbWUgb2JqZWN0cyBhcyBpbg0KPiA+ICAgPGNvbmRp dGlvbj4uICBMb2FkcyBhcmUgZmluZSBhcyBsb25nIGFzIHRoZXkgZG9uJ3QgaGF2ZSB0aGUgcG9z c2liaWxpdHkgdG8NCj4gPiAgIGFsaWFzLg0KPiANCj4gSSB0aGluayB0aGF0J3MgYSBmdW5kYW1l bnRhbCBsaW1pdGF0aW9uIC0geW91IGhhdmUgdG8gYmUgYWJsZSB0byBjb21wdXRlDQo+IHRoZSBl YXJseSBleGl0IGNvbmRpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2ZWN0b3JpemVkIGxv b3AuICBGb3INCj4gYSBzaW5nbGUgYWx0ZXJuYXRlIGV4aXQgaXQgbWlnaHQgYmUgcG9zc2libGUg dG8gYXBwbHkgbG9vcCByb3RhdGlvbiB0bw0KPiBtb3ZlIHRoaW5ncyBidXQgdGhhdCBjYW4gaW50 cm9kdWNlICJiYWQiIGNyb3NzLWl0ZXJhdGlvbiBkZXBlbmRlbmNlcyg/KQ0KPiANCg0KVGhhdCdz IGFuIGludGVyZXN0aW5nIGlkZWEsIEknZCBoYXZlIHRvIHdvcmsgaXQgb3V0IG9uIHBhcGVyLiAg SSBndWVzcyB0aGUgbWFpbg0KZGlmZmljdWx0eSBjb21wYXJlZCB0byBzYXkgY2xhc3NpY2FsIGxv b3Agcm90YXRpb24gaXMgdGhhdCB0aGUgY29uZGl0aW9uIGluc2lkZQ0KdGhlIGVhcmx5IGJyZWFr IHN0YXRlbWVudCBjYW4gaXRzZWxmIGJlIGRlcGVuZGVudCBvbiBvdGhlciBzdGF0ZW1lbnQuICBT bw0KeW91IHN0aWxsIGhhdmUgdG8gbW92ZSBhICJjaGFpbiIgb2Ygc3RhdGVtZW50cyB3aGljaCB0 aGVtc2VsdmVzIHN0aWxsIG5lZWQgdG8NCmJlIHZlY3Rvcml6ZWQuDQoNCldoZXJlIGl0IGdldHMg ZGlmZmljdWx0LCBhbmQgcGFydGlhbGx5IHdoeSBJIGFsc28gb25seSBzdXBwb3J0IDEgZWFybHkg ZXhpdCBpbiB0aGlzIGZpcnN0DQp2ZXJzaW9uIGlzIHRoYXQgYSBzZWNvbmQgZXhpdCBoYXMgYSBk ZXBlbmRlbmN5IG9uIHRoZSAxc3Qgb25lLiBBbmQgdGhlcmUgbWF5DQpiZSBvdGhlciBzdGF0ZW1l bnRzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgZXhpdC4gIFRoaXMgaXMgd2hlcmUgSSB0 aGluaw0KbG9vcCByb3RhdGlvbiB3b3VsZCBmYWxsIGFwYXJ0IHZzIHRoZSBjb2RlIG1vdGlvbiBJ J20gZG9pbmcgbm93Lg0KDQo+ID4gLSBObyBzdXBwb3J0IGZvciBwcm9sb2d1ZSBwZWVsaW5nLiAg U2luY2Ugd2Ugb25seSBzdXBwb3J0IGZpeGVkIGJ1ZmZlcnMgdGhpcw0KPiA+ICAgd291bGRuJ3Qg YmUgYW4gaXNzdWUgYXMgd2UgYXNzdW1lIHRoZSBhcnJheXMgYXJlIGNvcnJlY3RseSBhbGlnbmVk Lg0KPiANCj4gSHVoLCBJIGRvbid0IHVuZGVyc3RhbmQgaG93IHByb2xvZ3VlIG9yIGVwaWxvZ3Vl IHBlZWxpbmcgaXMgYW4gaXNzdWU/ICBJcw0KPiB0aGF0IGp1c3QgYmVjYXVzZSB5b3UgZGlkbid0 IGhhbmRsZSB0aGUgZWFybHkgZXhpdCB0cmlnZ2VyaW5nPw0KDQpZZWFoLCBpdCdzIG5vdCBhbiBp bnRyaW5zaWMgbGltaXRhdGlvbiwgYW5kIHRoZSBjb2RlIGltcGxlbWVudGVkIGRvZXNuJ3QgaGF2 ZQ0KYW55dGhpbmcgdGhhdCB3b3VsZCBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgaW4gdGhl IGZ1dHVyZS4gIEl0J3MganVzdCBzb21ldGhpbmcNCndlIGRpZG4ndCByZXF1aXJlIGZvciB0aGUg Y3VycmVudCB1c2UtY2FzZXMuDQoNClRvIHN1cHBvcnQgdGhpcyB3ZSdkICJqdXN0IiBuZWVkIHRv IHN1cHBvcnQgcHJvbG9ndWUgcGVlbGluZyBieSBicmFuY2hpbmcgdG8NCnRoZSBleGl0IGJsb2Nr LCBidXQgd2UnZCBoYXZlIHRvIHNwbGl0IHRoZSBleGl0IGJsb2NrIHNvIHdlIGtlZXAgc2ltcGxl IHR3bw0KYXJndW1lbnQgcGhpIG5vZGVzIGZvciBlYWNoIHBlZWxlZCBpdGVyYXRpb24uIGkuZS4g SSBkb24ndCB0aGluayB0aGV5IGNhbiBhbGwgZXhpdA0KdG8gdGhlIHNhbWUgYmxvY2sgKGRvIHdl IHN1cHBvcnQgcGhpIG5vZGVzIHdpdGggTiBlbnRyaWVzPykgYXMgSSBkb24ndCB0aGluaw0Kd2Un ZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGF0IHJlZHVjdGlvbi4gIFNvIEkga25vdyBob3cgdG8gcG90 ZW50aWFsbHkgZG8gaXQsDQphbmQga2VwdCBpdCBpbiBtaW5kIGluIHRoZSBpbXBsZW1lbnRhdGlv biwgYnV0IGp1c3QgZm9yIHByYWN0aWNhbGl0eS90aW1lDQpkaWQgbm90IGRvIGl0IGF0IHRoaXMg dGltZS4NCg0KPiANCj4gPiAtIEZ1bGx5IG1hc2tlZCBsb29wcyBvciB1bm1hc2tlZCBsb29wcyBh cmUgc3VwcG9ydGVkLCBidXQgbm90IHBhcnRpYWxseQ0KPiBtYXNrZWQNCj4gPiAgIGxvb3BzLg0K PiA+IC0gT25seSBvbmUgYWRkaXRpb25hbCBleGl0IGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUu ICBUaGUgbWFqb3JpdHkgb2YgdGhlDQo+IGNvZGUNCj4gPiAgIHdpbGwgaGFuZGxlIG4gZXhpdHMu IEJ1dCBub3QgYWxsIHNvIGF0IHRoaXMgdGltZSB0aGlzIHJlc3RyaWN0aW9uIGlzIG5lZWRlZC4N Cj4gPiAtIFRoZSBlYXJseSBleGl0IG11c3QgYmUgYmVmb3JlIHRoZSBuYXR1cmFsIGxvb3AgZXhp dC9sYXRjaC4gIFRoZSB2ZWN0b3JpemVyIGlzDQo+ID4gICBkZXNpZ25lZCBpbiB3YXkgdG8gcHJv cGFnZSBwaGktbm9kZXMgZG93bndhcmRzLiAgQXMgc3VjaCBzdXBwb3J0aW5nDQo+IHRoaXMNCj4g PiAgIGludmVydGVkIGNvbnRyb2wgZmxvdyBpcyBoYXJkLg0KPiANCj4gSG93IGRvIHlvdSBpZGVu dGlmeSB0aGUgIm5hdHVyYWwiIGV4aXQ/ICBJdCdzIHRoZSBvbmUNCj4gbnVtYmVyX29mX2l0ZXJh dGlvbnNfZXhpdCB3b3JrcyBvbj8gIFlvdXIgbm9ybWFsX2V4aXQgcGlja3MgdGhlDQo+IGZpcnN0 IGZyb20gdGhlIGxvb3BzIHJlY29yZGVkIGV4aXQgbGlzdCBidXQgSSBkb24ndCB0aGluayB0aGF0 IGxpc3QNCj4gaXMgb3JkZXJlZCBpbiBhbnkgcGFydGljdWxhciB3YXkuDQoNCkFoIHRob3VnaHQg aXQgd2FzIHNpbmNlIGR1cmluZyB0aGUgbG9vcCBhbmFseXNpcyBpdCdzIGFsd2F5cyB0aGUgZmly c3QgZXhpdC4NCkJ1dCBjYW4gZWFzaWx5IHVwZGF0ZSB0aGUgcGF0Y2ggdG8gZGV0ZXJtaW5lIHRo YXQgaW4gYSBzbWFydGVyIHdheS4NCg0KPiANCj4gIm5vcm1hbF9leGl0IiB3b3VsZCByYXRoZXIg YmUgc2luZ2xlX2NvdW50YWJsZV9leGl0ICgpIG9yIHNvPyAgQSBsb29wDQo+IGFscmVhZHkgaGFz IGEgbGlzdCBvZiBjb250cm9sX2l2cyAobm90IHN1cmUgaWYgd2UgZXZlciBoYXZlIG1vcmUgdGhh bg0KPiBvbmUpLCBJIHdvbmRlciBpZiB0aGF0IGNhbiBiZSBhbm5vdGF0ZWQgd2l0aCB0aGUgY29y cmVzcG9uZGluZyBleGl0DQo+IGVkZ2U/DQo+IA0KPiBJIHRoaW5rIHRoYXQgdmVjdF9hbmFseXpl X2xvb3BfZm9ybSBzaG91bGQgcmVjb3JkIHRoZSBjb3VudGluZyBJVg0KPiBleGl0IGVkZ2UgYW5k IHRoYXQgcmVjb3JkZWQgZWRnZSBzaG91bGQgYmUgcGFzc2VkIHRvIHV0aWxpdGllcw0KPiBsaWtl IHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCByYXRoZXIgdGhhbiByZS1xdWVyeWluZyAnbm9y bWFsX2V4aXQnLA0KPiBmb3IgZXhhbXBsZSBpZiB3ZSdkIGhhdmUNCj4gDQo+IGZvciAoOzsgKytp LCArK2opDQo+ICAgew0KPiAgICAgaWYgKGkgPCBuKQ0KPiAgICAgICBicmVhazsNCj4gICAgIGFb aV0gPSAwOw0KPiAgICAgaWYgKGogPCBtKQ0KPiAgICAgICBicmVhazsNCj4gICB9DQo+IA0KPiB3 aGljaCBjb3VudGluZyBJViB3ZSBjaG9vc2UgYXMgIm5vcm1hbCIgc2hvdWxkIGJlIHVwIHRvIHRo ZSB2ZWN0b3JpemVyLA0KPiBub3QgdXAgdG8gdGhlIGxvb3AgaW5mcmFzdHJ1Y3R1cmUuDQoNCkFo LCBUaGF0J3MgYSBmYWlyIGVub3VnaCBwb2ludCBhbmQgZWFzeSBlbm91Z2ggdG8gZG8uDQoNCj4g DQo+IFRoZSBwYXRjaCBzaG91bGQgbGlrZWx5IGJlIHNwbGl0LCBkb2luZyBzaW5nbGVfZXhpdCAo KSByZXBsYWNlbWVudHMNCj4gd2l0aCwgc2F5LCBMT09QX1ZJTkZPX0lWX0VYSVQgKC4uKSBmaXJz dC4NCj4gDQoNCk9rLCBJJ2xsIHN0YXJ0IGRvaW5nIHRoYXQgbm93IHdoaWxlIHdhaXRpbmcgZm9y IHRoZSBmdWxsIHJldmlldy4NCg0KPiANCj4gPiAtIE5vIHN1cHBvcnQgZm9yIGVwaWxvZ3VlIHZl Y3Rvcml6YXRpb24uICBUaGUgb25seSBlcGlsb2d1ZSBzdXBwb3J0ZWQgaXMgdGhlDQo+ID4gICBz Y2FsYXIgZmluYWwgb25lLg0KPiA+DQo+ID4gV2l0aCB0aGUgaGVscCBvZiBJUEEgdGhpcyBzdGls bCBnZXRzIGhpdCBxdWl0ZSBvZnRlbi4gIER1cmluZyBib290c3RyYXAgaXQNCj4gPiBoaXQgcmF0 aGVyIGZyZXF1ZW50bHkgYXMgd2VsbC4NCj4gPg0KPiA+IFRoaXMgaW1wbGVtZW50YXRpb24gZG9l cyBub3Qgc3VwcG9ydCBjb21wbGV0ZWx5IGhhbmRsaW5nIHRoZSBlYXJseSBicmVhaw0KPiBpbnNp ZGUNCj4gPiB0aGUgdmVjdG9yIGxvb3AgaXRzZWxmIGJ1dCBpbnN0ZWFkIHN1cHBvcnRzIGFkZGlu ZyBjaGVja3Mgc3VjaCB0aGF0IGlmIHdlDQo+IGtub3cNCj4gPiB0aGF0IHdlIGhhdmUgdG8gZXhp dCBpbiB0aGUgY3VycmVudCBpdGVyYXRpb24gdGhlbiB3ZSBicmFuY2ggdG8gc2NhbGFyIGNvZGUN Cj4gdG8NCj4gPiBhY3R1YWxseSBkbyB0aGUgZmluYWwgVkYgaXRlcmF0aW9ucyB3aGljaCBoYW5k bGVzIGFsbCB0aGUgY29kZSBpbiA8YWN0aW9uPi4NCj4gPg0KPiA+IG5pdGVycyBhbmFseXNpcyBh bmQgdGhlIG1ham9yaXR5IG9mIHRoZSB2ZWN0b3JpemVyIHdpdGggaGFyZGNvZGVkDQo+IHNpbmds ZV9leGl0DQo+ID4gaGF2ZSBiZWVuIHVwZGF0ZWQgd2l0aCB0aGUgdXNlIG9mIGEgbmV3IGZ1bmN0 aW9uIG5vcm1hbF9leGl0IHdoaWNoDQo+IHJldHVybnMgdGhlDQo+ID4gbG9vcCdzIG5hdHVyYWwg ZXhpdC4NCj4gPg0KPiA+IGZvciBuaXRlcnMgdGhlIG5hdHVyYWwgZXhpdCBpcyBzdGlsbCB3aGF0 IGRldGVybWluZXMgdGhlIG92ZXJhbGwgaXRlcmF0aW9ucyBhcw0KPiA+IHRoYXQgaXMgdGhlIE8o aXRlcnMpIGZvciB0aGUgbG9vcC4NCj4gPg0KPiA+IEZvciB0aGUgc2NhbGFyIGxvb3Agd2Uga25v dyB0aGF0IHdoYXRldmVyIGV4aXQgeW91IHRha2UgeW91IGhhdmUgdG8NCj4gcGVyZm9ybSBhdA0K PiA+IG1vc3QgVkYgaXRlcmF0aW9ucy4NCj4gPg0KPiA+IFdoZW4gdGhlIGxvb3AgaXMgcGVlbGVk IGR1cmluZyB0aGUgY29weWluZyBJIGhhdmUgdG8gZ28gdGhyb3VnaCBncmVhdA0KPiBsZW5ndGhz IHRvDQo+ID4ga2VlcCB0aGUgZG9taW5hdG9ycyB1cCB0byBkYXRlLiAgQWxsIGV4aXRzIGZyb20g dGhlIGZpcnN0IGxvb3AgYXJlIHJld2lyZWQgdG8NCj4gdGhlDQo+ID4gbG9vcCBoZWFkZXIgb2Yg dGhlIHNlY29uZCBsb29wLiAgQnV0IHRoaXMgY2FuIGNoYW5nZSB0aGUgaW1tZWRpYXRlDQo+IGRv bWluYXRvci4NCj4gDQo+IE5vdCBzdXJlIGhvdyAtIGl0IHdvdWxkIHByb2JhYmx5IGhlbHAgdG8g a2VlcCB0aGUgb3JpZ2luYWwgc2NhbGFyIGxvb3ANCj4gYXMgdGhlIGVwaWxvZ3VlIGFuZCBpbnN0 ZWFkIGVtaXQgdGhlIHZlY3RvciBsb29wIGFzIGNvcHkgb24gdGhhdCBsb29wcw0KPiBlbnRyeSBl ZGdlIHNvIHdpcmluZyB0aGUgYWx0ZXJuYXRlIGV4aXRzIHRvIHRoYXQgdmVyeSBzYW1lIHBsYWNl IGlzDQo+IHRyaXZpYWw/DQoNCkhtbSB5ZXMgZmxpcHBpbmcgdGhlIGxvb3Agd2lyaW5nIHdvdWxk IHNpbXBsaWZ5IHRoZSBkb21pbmF0b3JzLiBJIGRpZCBpdCB0aGlzDQp3YXkgYmVjYXVzZSB0aGF0 J3MgdGhlIGRpcmVjdGlvbiBub3JtYWwgZXBpbG9ndWUgcGVlbGluZyBkaWQgdG9kYXkuICBCdXQg bG9va2luZw0KYXQgdGhlIGNvZGUgdGhpcyBzaG91bGQgYmUgZWFzeSB0byBkby4NCg0KSSdsbCBh bHNvIHN0YXJ0IG9uIHRoaXMgbm93Lg0KDQo+IA0KPiA+IFdlIGhhZCBzcG9rZW4gb24gSVJDIGFi b3V0IHJlbW92aW5nIHRoZSBkb21pbmF0b3JzIHZhbGlkYXRpb24gY2FsbCBhdCB0aGUNCj4gZW5k IG9mDQo+ID4gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgYW5kIGxlYXZp bmcgaXQgdXAgdG8gY2ZnIGNsZWFudXANCj4gdG8NCj4gPiByZW1vdmUgdGhlIGludGVybWVkaWF0 ZSBibG9ja3MgdGhhdCBjYXVzZSB0aGUgZG9taW5hdG9ycyB0byBmYWlsLg0KPiA+DQo+ID4gSG93 ZXZlciB0aGlzIHR1cm5lZCBvdXQgbm90IHRvIHdvcmsgYXMgY2ZnY2xlYW51cCBpdHNlbGYgcmVx dWlyZXMgdGhlDQo+IGRvbWluYXRvcnMNCj4gPiBncmFwaC4gICBTbyBpdCdzIHNvbWV3aGF0IGEg Y2hpY2tlbiBhbmQgZWdnLiAgVG8gd29yayBhcm91bmQgdGhpcyBJIGFkZGVkDQo+IHNvbWUNCj4g PiBydWxlcyBmb3Igd2hlbiBJIHVwZGF0ZSB3aGF0IGRvbWluYXRvciBhbmQgYWxzbyByZWplY3Qg dGhlIGZvcm1zIEkgZG9uJ3QNCj4gc3VwcG9ydA0KPiA+IGR1cmluZyB2ZWN0X2FuYWx5emVfbG9v cF9mb3JtLg0KPiA+DQo+ID4gSSBoYXZlIHRyaWVkIHRvIHN0cnVjdHVyZSB0aGUgdXBkYXRlcyB0 byBsb29wLW1hbmlwLmNjIGluIGEgd2F5IHRoYXQgaXQgZml0cw0KPiA+IHdpdGggdGhlIGN1cnJl bnQgZmxvdy4gIEkgdGhpbmsgSSBoYXZlIGRvbmUgYSBkZWNlbnQgam9iLCBidXQgdGhlcmUgYXJl IHRoaW5ncw0KPiBJDQo+ID4gY2FuIGFsc28gZG8gZGlmZmVyZW50bHkgaWYgcHJlZmVycmVkIGFu ZCBoYXZlIHBvaW50ZWQgdGhlbSBvdXQgaW4NCj4gY29tbWVudHMgaW4NCj4gPiB0aGUgc291cmNl Lg0KPiA+DQo+ID4gRm9yIHRoZSBsb29wIHBlZWxpbmcgd2UgcmV3cml0ZSB0aGUgbG9vcCBmb3Jt Og0KPiA+DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgICAgICBIZWFkZXINCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgLS0tDQo+ID4gICAgICAgICAgICAgICAgICAgICAgIHx4fA0KPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgMg0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgfA0KPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgdg0KPiA+ICAgICAgICAgICAgICAgICAtLS0tLS0tMzwt LS0tLS0NCj4gPiAgICAgIGVhcmx5IGV4aXQgfCAgICAgIHwgICAgICB8DQo+ID4gICAgICAgICAg ICAgICAgIHYgICAgICB2ICAgICAgfCBsYXRjaA0KPiA+ICAgICAgICAgICAgICAgICA3ICAgICAg NC0tLS0tPjYNCj4gPiAgICAgICAgICAgICAgICAgfCAgICAgIHwNCj4gPiAgICAgICAgICAgICAg ICAgfCAgICAgIHYNCj4gPiAgICAgICAgICAgICAgICAgfCAgICAgIDgNCj4gPiAgICAgICAgICAg ICAgICAgfCAgICAgIHwNCj4gPiAgICAgICAgICAgICAgICAgfCAgICAgIHYNCj4gPiAgICAgICAg ICAgICAgICAgLS0tLS0tPjUNCj4gPg0KPiA+IGludG8NCj4gPg0KPiA+ICAgICAgICAgICAgICAg ICAgICAgIEhlYWRlcg0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAtLS0NCj4gPiAgICAgICAg ICAgICAgICAgICAgICAgfHh8DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAyDQo+ID4gICAg ICAgICAgICAgICAgICAgICAgICB8DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICB2DQo+ID4g ICAgICAgICAgICAgICAgIC0tLS0tLS0zPC0tLS0tLQ0KPiA+ICAgICAgZWFybHkgZXhpdCB8ICAg ICAgfCAgICAgIHwNCj4gPiAgICAgICAgICAgICAgICAgdiAgICAgIHYgICAgICB8IGxhdGNoDQo+ ID4gICAgICAgICAgICAgICAgIDcgICAgICA0LS0tLS0+Ng0KPiA+ICAgICAgICAgICAgICAgICB8 ICAgICAgfA0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgdg0KPiA+ICAgICAgICAgICAgICAg ICB8ICAgICAgOA0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgfA0KPiA+ICAgICAgICAgICAg ICAgICB8ICAgICAgdg0KPiA+ICAgICAgICAgICAgICAgICB8ICBOZXcgSGVhZGVyDQo+ID4gICAg ICAgICAgICAgICAgIHwgICAgIC0tLQ0KPiA+ICAgICAgICAgICAgICAgICAtLS0tLT58eHwNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgIDkNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIHwN Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgIHYNCj4gPiAgICAgICAgICAgICAgICAgLS0tLS0t MTA8LS0tLS0NCj4gPiAgICAgIGVhcmx5IGV4aXQgfCAgICAgIHwgICAgICB8DQo+ID4gICAgICAg ICAgICAgICAgIHYgICAgICB2ICAgICAgfCBsYXRjaA0KPiA+ICAgICAgICAgICAgICAgICAxNCAg ICAgMTEtLS0tPjEzDQo+ID4gICAgICAgICAgICAgICAgIHwgICAgICB8DQo+ID4gICAgICAgICAg ICAgICAgIHwgICAgICB2DQo+ID4gICAgICAgICAgICAgICAgIHwgICAgICAxMg0KPiA+ICAgICAg ICAgICAgICAgICB8ICAgICAgfA0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgdg0KPiA+ICAg ICAgICAgICAgICAgICAtLS0tLS0+IDUNCj4gPg0KPiA+IFdoZW4gd2UgdmVjdG9yaXplIHdlIG1v dmUgYW55IHN0YXRlbWVudCBub3QgcmVsYXRlZCB0byB0aGUgZWFybHkgYnJlYWsNCj4gaXRzZWxm IHRvDQo+ID4gdGhlIEJCIGFmdGVyIHRoZSBlYXJseSBleGl0IGFuZCB1cGRhdGUgYWxsIHJlZmVy ZW5jZXMgYXMgYXBwcm9wcmlhdGUuDQo+ID4NCj4gPiBUaGlzIG1lYW5zIHRoYXQgd2UgY2hlY2sg YXQgdGhlIHN0YXJ0IG9mIGl0ZXJhdGlvbnMgd2hldGhlciB3ZSBhcmUgZ29pbmcgdG8NCj4gZXhp dA0KPiA+IG9yIG5vdC4gIER1cmluZyB0aGUgYW5hbHlpcyBwaGFzZSB3ZSBjaGVjayB3aGV0aGVy IHdlIGFyZSBhbGxvd2VkIHRvIGRvDQo+IHRoaXMNCj4gPiBtb3Zpbmcgb2Ygc3RhdGVtZW50cy4g IEFsc28gbm90ZSB0aGF0IHdlIG9ubHkgbW92ZSB0aGUgdmVjdG9yIHN0YXRlbWVudHMNCj4gYW5k DQo+ID4gbGVhdmUgdGhlIHNjYWxhcnMgYWxvbmUuDQo+ID4NCj4gPiBDb2RlZ2VuOg0KPiA+DQo+ ID4gZm9yIGUuZy4NCj4gPg0KPiA+ICNkZWZpbmUgTiA4MDMNCj4gPiB1bnNpZ25lZCB2ZWN0X2Fb Tl07DQo+ID4gdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+DQo+ID4gdW5zaWduZWQgdGVzdDQodW5z aWduZWQgeCkNCj4gPiB7DQo+ID4gIHVuc2lnbmVkIHJldCA9IDA7DQo+ID4gIGZvciAoaW50IGkg PSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICB7DQo+ID4gICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4g ICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gICAgICBicmVhazsNCj4gPiAgICB2ZWN0X2FbaV0g PSB4Ow0KPiA+DQo+ID4gIH0NCj4gPiAgcmV0dXJuIHJldDsNCj4gPiB9DQo+ID4NCj4gPiBXZSBn ZW5lcmF0ZSBmb3IgTkVPTjoNCj4gPg0KPiA+IHRlc3Q0Og0KPiA+ICAgICAgICAgYWRycCAgICB4 MiwgLkxDMA0KPiA+ICAgICAgICAgYWRycCAgICB4MywgLkxBTkNIT1IwDQo+ID4gICAgICAgICBk dXAgICAgIHYyLjRzLCB3MA0KPiA+ICAgICAgICAgYWRkICAgICB4MywgeDMsIDpsbzEyOi5MQU5D SE9SMA0KPiA+ICAgICAgICAgbW92aSAgICB2NC40cywgMHg0DQo+ID4gICAgICAgICBhZGQgICAg IHg0LCB4MywgMzIxNg0KPiA+ICAgICAgICAgbGRyICAgICBxMSwgW3gyLCAjOmxvMTI6LkxDMF0N Cj4gPiAgICAgICAgIG1vdiAgICAgeDEsIDANCj4gPiAgICAgICAgIG1vdiAgICAgdzIsIDANCj4g PiAgICAgICAgIC5wMmFsaWduIDMsLDcNCj4gPiAuTDM6DQo+ID4gICAgICAgICBsZHIgICAgIHEw LCBbeDMsIHgxXQ0KPiA+ICAgICAgICAgYWRkICAgICB2My40cywgdjEuNHMsIHYyLjRzDQo+ID4g ICAgICAgICBhZGQgICAgIHYxLjRzLCB2MS40cywgdjQuNHMNCj4gPiAgICAgICAgIGNtaGkgICAg djAuNHMsIHYwLjRzLCB2Mi40cw0KPiA+ICAgICAgICAgdW1heHAgICB2MC40cywgdjAuNHMsIHYw LjRzDQo+ID4gICAgICAgICBmbW92ICAgIHg1LCBkMA0KPiA+ICAgICAgICAgY2JueiAgICB4NSwg Lkw2DQo+ID4gICAgICAgICBhZGQgICAgIHcyLCB3MiwgMQ0KPiA+ICAgICAgICAgc3RyICAgICBx MywgW3gxLCB4NF0NCj4gPiAgICAgICAgIHN0ciAgICAgcTIsIFt4MywgeDFdDQo+ID4gICAgICAg ICBhZGQgICAgIHgxLCB4MSwgMTYNCj4gPiAgICAgICAgIGNtcCAgICAgdzIsIDIwMA0KPiA+ICAg ICAgICAgYm5lICAgICAuTDMNCj4gPiAgICAgICAgIG1vdiAgICAgdzcsIDMNCj4gPiAuTDI6DQo+ ID4gICAgICAgICBsc2wgICAgIHcyLCB3MiwgMg0KPiA+ICAgICAgICAgYWRkICAgICB4NSwgeDMs IDMyMTYNCj4gPiAgICAgICAgIGFkZCAgICAgdzYsIHcyLCB3MA0KPiA+ICAgICAgICAgc3h0dyAg ICB4NCwgdzINCj4gPiAgICAgICAgIGxkciAgICAgdzEsIFt4MywgeDQsIGxzbCAyXQ0KPiA+ICAg ICAgICAgc3RyICAgICB3NiwgW3g1LCB4NCwgbHNsIDJdDQo+ID4gICAgICAgICBjbXAgICAgIHcw LCB3MQ0KPiA+ICAgICAgICAgYmNjICAgICAuTDQNCj4gPiAgICAgICAgIGFkZCAgICAgdzEsIHcy LCAxDQo+ID4gICAgICAgICBzdHIgICAgIHcwLCBbeDMsIHg0LCBsc2wgMl0NCj4gPiAgICAgICAg IGFkZCAgICAgdzYsIHcxLCB3MA0KPiA+ICAgICAgICAgc3h0dyAgICB4MSwgdzENCj4gPiAgICAg ICAgIGxkciAgICAgdzQsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgc3RyICAgICB3Niwg W3g1LCB4MSwgbHNsIDJdDQo+ID4gICAgICAgICBjbXAgICAgIHcwLCB3NA0KPiA+ICAgICAgICAg YmNjICAgICAuTDQNCj4gPiAgICAgICAgIGFkZCAgICAgdzQsIHcyLCAyDQo+ID4gICAgICAgICBz dHIgICAgIHcwLCBbeDMsIHgxLCBsc2wgMl0NCj4gPiAgICAgICAgIHN4dHcgICAgeDEsIHc0DQo+ ID4gICAgICAgICBhZGQgICAgIHc2LCB3MSwgdzANCj4gPiAgICAgICAgIGxkciAgICAgdzQsIFt4 MywgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgc3RyICAgICB3NiwgW3g1LCB4MSwgbHNsIDJdDQo+ ID4gICAgICAgICBjbXAgICAgIHcwLCB3NA0KPiA+ICAgICAgICAgYmNjICAgICAuTDQNCj4gPiAg ICAgICAgIHN0ciAgICAgdzAsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgYWRkICAgICB3 MiwgdzIsIDMNCj4gPiAgICAgICAgIGNtcCAgICAgdzcsIDMNCj4gPiAgICAgICAgIGJlcSAgICAg Lkw0DQo+ID4gICAgICAgICBzeHR3ICAgIHgxLCB3Mg0KPiA+ICAgICAgICAgYWRkICAgICB3Miwg dzIsIHcwDQo+ID4gICAgICAgICBsZHIgICAgIHc0LCBbeDMsIHgxLCBsc2wgMl0NCj4gPiAgICAg ICAgIHN0ciAgICAgdzIsIFt4NSwgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgY21wICAgICB3MCwg dzQNCj4gPiAgICAgICAgIGJjYyAgICAgLkw0DQo+ID4gICAgICAgICBzdHIgICAgIHcwLCBbeDMs IHgxLCBsc2wgMl0NCj4gPiAuTDQ6DQo+ID4gICAgICAgICBtb3YgICAgIHcwLCAwDQo+ID4gICAg ICAgICByZXQNCj4gPiAgICAgICAgIC5wMmFsaWduIDIsLDMNCj4gPiAuTDY6DQo+ID4gICAgICAg ICBtb3YgICAgIHc3LCA0DQo+ID4gICAgICAgICBiICAgICAgIC5MMg0KPiA+DQo+ID4gYW5kIGZv ciBTVkU6DQo+ID4NCj4gPiB0ZXN0NDoNCj4gPiAgICAgICAgIGFkcnAgICAgeDIsIC5MQU5DSE9S MA0KPiA+ICAgICAgICAgYWRkICAgICB4MiwgeDIsIDpsbzEyOi5MQU5DSE9SMA0KPiA+ICAgICAg ICAgYWRkICAgICB4NSwgeDIsIDMyMTYNCj4gPiAgICAgICAgIG1vdiAgICAgeDMsIDANCj4gPiAg ICAgICAgIG1vdiAgICAgdzEsIDANCj4gPiAgICAgICAgIGNudHcgICAgeDQNCj4gPiAgICAgICAg IG1vdiAgICAgejEucywgdzANCj4gPiAgICAgICAgIGluZGV4ICAgejAucywgIzAsICMxDQo+ID4g ICAgICAgICBwdHJ1ZSAgIHAxLmIsIGFsbA0KPiA+ICAgICAgICAgcHRydWUgICBwMC5zLCBhbGwN Cj4gPiAgICAgICAgIC5wMmFsaWduIDMsLDcNCj4gPiAuTDM6DQo+ID4gICAgICAgICBsZDF3ICAg IHoyLnMsIHAxL3osIFt4MiwgeDMsIGxzbCAyXQ0KPiA+ICAgICAgICAgYWRkICAgICB6My5zLCB6 MC5zLCB6MS5zDQo+ID4gICAgICAgICBjbXBsbyAgIHAyLnMsIHAwL3osIHoxLnMsIHoyLnMNCj4g PiAgICAgICAgIGIuYW55ICAgLkwyDQo+ID4gICAgICAgICBzdDF3ICAgIHozLnMsIHAxLCBbeDUs IHgzLCBsc2wgMl0NCj4gPiAgICAgICAgIGFkZCAgICAgdzEsIHcxLCAxDQo+ID4gICAgICAgICBz dDF3ICAgIHoxLnMsIHAxLCBbeDIsIHgzLCBsc2wgMl0NCj4gPiAgICAgICAgIGFkZCAgICAgeDMs IHgzLCB4NA0KPiA+ICAgICAgICAgaW5jdyAgICB6MC5zDQo+ID4gICAgICAgICBjbXAgICAgIHcz LCA4MDMNCj4gPiAgICAgICAgIGJscyAgICAgLkwzDQo+ID4gLkw1Og0KPiA+ICAgICAgICAgbW92 ICAgICB3MCwgMA0KPiA+ICAgICAgICAgcmV0DQo+ID4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+ ID4gLkwyOg0KPiA+ICAgICAgICAgY250dyAgICB4NQ0KPiA+ICAgICAgICAgbXVsICAgICB3MSwg dzEsIHc1DQo+ID4gICAgICAgICBjYnogICAgIHc1LCAuTDUNCj4gPiAgICAgICAgIHN4dHcgICAg eDEsIHcxDQo+ID4gICAgICAgICBzdWIgICAgIHc1LCB3NSwgIzENCj4gPiAgICAgICAgIGFkZCAg ICAgeDUsIHg1LCB4MQ0KPiA+ICAgICAgICAgYWRkICAgICB4NiwgeDIsIDMyMTYNCj4gPiAgICAg ICAgIGIgICAgICAgLkw2DQo+ID4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+ID4gLkwxNDoNCj4g PiAgICAgICAgIHN0ciAgICAgdzAsIFt4MiwgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgY21wICAg ICB4MSwgeDUNCj4gPiAgICAgICAgIGJlcSAgICAgLkw1DQo+ID4gICAgICAgICBtb3YgICAgIHgx LCB4NA0KPiA+IC5MNjoNCj4gPiAgICAgICAgIGxkciAgICAgdzMsIFt4MiwgeDEsIGxzbCAyXQ0K PiA+ICAgICAgICAgYWRkICAgICB3NCwgdzAsIHcxDQo+ID4gICAgICAgICBzdHIgICAgIHc0LCBb eDYsIHgxLCBsc2wgMl0NCj4gPiAgICAgICAgIGFkZCAgICAgeDQsIHgxLCAxDQo+ID4gICAgICAg ICBjbXAgICAgIHcwLCB3Mw0KPiA+ICAgICAgICAgYmNzICAgICAuTDE0DQo+ID4gICAgICAgICBt b3YgICAgIHcwLCAwDQo+ID4gICAgICAgICByZXQNCj4gPg0KPiA+IE9uIHRoZSB3b3JrbG9hZHMg dGhpcyB3b3JrIGlzIGJhc2VkIG9uIHdlIHNlZSBiZXR3ZWVuIDItM3ggcGVyZm9ybWFuY2UNCj4g dXBsaWZ0DQo+ID4gdXNpbmcgdGhpcyBwYXRjaC4NCj4gPg0KPiA+IE91dHN0YW5kaW5nIGlzc3Vl czoNCj4gPiAgLSBUaGUgcGF0Y2ggaXMgZnVsbHkgZnVuY3Rpb25hbCBidXQgaGFzIHR3byB0aGlu Z3MgSSB3b25kZXIgYWJvdXQNCj4gPiAgICAqIEluIHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFr IHNob3VsZCBJIGp1c3QgcmVmYWN0b3INCj4gdmVjdG9yaXphYmxlX2NvbXBhcmlzb24NCj4gPiAg ICAgIGFuZCB1c2UgaXQgdG8gZ2VuZXJhdGUgdGhlIGNvbmRpdGlvbiBib2R5PyAgVGhhdCB3b3Vs ZCBhbHNvIGdldCB0aGUNCj4gY29zdGluZy4NCj4gDQo+IEknbSBsb29raW5nIGF0IHZlY3Rvcml6 YWJsZV9lYXJseV9leGl0IGFuZCB2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzDQo+IGFuZCBJIHRo aW5rIHRoYXQgdGhpcyBzaG91bGQgYmUgbW9zdGx5IGRvbmUgYXMgcGFydCBvZiBkZXBlbmRlbmNl DQo+IGFuYWx5c2lzIChiZWNhdXNlIHRoYXQncyB3aGF0IGl0IGlzKSB3aGljaCBzaG91bGQgYWxz byByZW1vdmUgdGhlDQo+IHJlcXVpcmVtZW50IG9mIG9ubHkgaGFuZGxpbmcgZGVjbC1iYXNlZCBh Y2Nlc3Nlcz8NCg0KVGhhdCBpcyBmYWlyIGVub3VnaCwgZG8geW91IGhhdmUgYSBzcGVjaWZpYyBz cG90IGluIG1pbmQgd2hlcmUgeW91J2QNCnByZWZlciBtZSB0byBzbG90IGl0IGludG8/DQoNCj4g DQo+IEFzIGZvciB2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhaywgc3VyZS4gIEkgZmVhciB0aGF0 IHNpbmNlIHlvdQ0KPiB0cmFuc2Zvcm0gaWYgKF8xID4gXzIpIHRvIHNvbWUgXzMgPSBfMSA+IF8y OyB1c2UoXzMpIHRoYXQgeW91IG5lZWQNCj4gdG8gZXhwb3NlIHRoaXMgdG8gdGhlIGJvb2wgcGF0 dGVybiBoYW5kbGluZyBtYWNoaW5lcnkgc29tZWhvdy4NCj4gSSBjYW4gc2VlIHRoYXQgbW92aW5n IHN0bXRzIGFyb3VuZCBhbmQgZG9pbmcgaXQgdGhlIHdheSB5b3UgZG8NCj4gY29kZS1nZW5lcmF0 aW9uIHdpc2UgaXMgZWFzaWVzdC4NCj4gDQo+IEhvdyBkb2VzIHRoaXMgd29yayB3aXRoIFNMUCBi dHc/ICBZb3UgZG9uJ3QgdG91Y2ggdHJlZS12ZWN0LXNscC5jYyBhdCBhbGwNCj4gYnV0IG5vdyB0 aGF0IHdlIGhhdmUgbXVsdGlwbGUgQkJzIHRoZXJlJ3MgdGhlIGlzc3VlIG9mIHNwbGl0dGluZw0K PiBjaGlsZHJlbiBhY3Jvc3MgZGlmZmVyZW50IEJCcyAtIHRoZXJlJ3Mgb25seQ0KPiANCj4gICAg ICAgICAgIGlmICgocGhpX3AgfHwgZ2ltcGxlX2NvdWxkX3RyYXBfcCAoc3RtdF9pbmZvLT5zdG10 KSkNCj4gICAgICAgICAgICAgICAmJiAoZ2ltcGxlX2JiIChmaXJzdF9zdG10X2luZm8tPnN0bXQp DQo+ICAgICAgICAgICAgICAgICAgICE9IGdpbXBsZV9iYiAoc3RtdF9pbmZvLT5zdG10KSkpDQo+ ICAgICAgICAgICAgIHsNCj4gICAgICAgICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ ICAgICAgICAgICAgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9O LCB2ZWN0X2xvY2F0aW9uLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVp bGQgU0xQIGZhaWxlZDogZGlmZmVyZW50IEJCIGZvciBQSEkgIg0KPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAib3IgcG9zc2libHkgdHJhcHBpbmcgb3BlcmF0aW9uIGluICVHIiwN Cj4gc3RtdCk7DQo+ICAgICAgICAgICAgICAgLyogTWlzbWF0Y2guICAqLw0KPiAgICAgICAgICAg ICAgIGNvbnRpbnVlOw0KPiAgICAgICAgICAgICB9DQo+IA0KPiByaWdodCBub3cgYW5kIHRoZSBj b2RlIG1vdGlvbiB5b3UgYXBwbHkgYWxzbyBtaWdodCBicmVhayB0aGUgYXNzdW1wdGlvbnMNCj4g b2YgdGhlIGRlcGVuZGVuY2UgYW5hbHlzaXMgY29kZS4gIEkgc3VwcG9zZSB0aGF0IFNMUGluZyB0 aGUgZWFybHkgZXhpdA0KPiBpc24ndCBzdXBwb3J0ZWQsIGFrYQ0KPiANCj4gIGZvciAoOzspDQo+ ICAgIHsNCj4gICAgICAgaWYgKGFbMippXSA+IHgpIGJyZWFrOw0KPiAgICAgICBpZiAoYVsyKmkg KyAxID4geCkgYnJlYWs7DQo+IC4uLg0KPiAgICB9DQo+IA0KPiBvcg0KPiAgICBfMSA9IGFbMipp XSA+IHggfCBhWzIqaSArIDEgPiB4Ow0KPiAgICBpZiAoXzEpIGJyZWFrOw0KPiANCj4gPw0KDQpJ bmRlZWQsIFNMUCB0cmFwcyB3aXRoIHRoZSBmYWlsdXJlIG1lc3NhZ2UgeW91IGhpZ2hsaWdodGVk IGFib3ZlLg0KQXQgdGhlIG1vbWVudCBJIGFkZGVkIGEgcmVzdHJpY3Rpb24gdG8gYSBzaW5nbGUg ZXhpdCwgdGhpcyBzdG9wcyBpdCBmcm9tDQpnZXR0aW5nIHRoYXQgZmFyLiAgKFRoaXMgbGltaXRh dGlvbiBpcyBiZWNhdXNlIHRoZSBjb2RlIG1vdGlvbiBvdmVyIG11bHRpcGxlDQpleGl0cyBiZWNv bWVzIGludGVyZXN0aW5nLCBpdCdzIG5vdCBzcGVjaWZpY2FsbHkgZm9yIFNMUCwgYW5kIGlmIFNM UCBkaWQgd29yayBJDQp3b3VsZCBtb3ZlIHRoZSBjaGVjayBkdXJpbmcgU0xQIGJ1aWxkLCBvciBh ZnRlcikuDQoNCkFzaWRlIGZyb20gdGhhdCwgZGlmZmVyZW50IHBhcnRzIG9mIHNscCBidWlsZCBm YWlsIHdpdGggZS5nLg0KDQpCdWlsZCBTTFAgZmFpbGVkOiBkaWZmZXJlbnQgb3BlcmF0aW9uIGlu IHN0bXQgXzExID0gXzQgKiB4XzE3KEQpOw0KDQooVGhpcyBpcyB0ZXN0Y2FzZSA2IGluIG15IGxp c3Qgb2YgdGVzdCkuDQoNCkh5YnJpZCBkb2VzIHdvcmsgdGhvdWdoLCBpZiB0aGUgcGFydCB3aXRo IHRoZSBjb25kaXRpb25hbCBpcyBpbiB0aGUgbm9uLVNMUCBwYXJ0Lg0KDQo+IA0KPiA+ICAgICog VGhlIHRlc3RjYXNlIHZlY3QtZWFybHktYnJlYWtfMi5jIHNob3dzIG9uZSBmb3JtIHRoYXQgY3Vy cmVudGx5DQo+IGRvZXNuJ3Qgd29yaw0KPiA+ICAgICAgYW5kIGNyYXNoZXMuICBUaGUgcmVhc29u IGlzIHRoYXQgdGhlcmUncyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIHR5cGVzDQo+IHJlcXVpcmVk DQo+ID4gICAgICB0byB2ZWN0b3JpemUgdGhpcy4gIFRoZSB2ZWN0b3IgbG9hZHMgY2F1c2UgbXVs dGlwbGUgc3RhdGVtZW50cyB0byBiZQ0KPiBnZW5lcmF0ZWQNCj4gPiAgICAgIGFuZCB0aHVzIHJl cXVpcmUgbXVsdGlwbGUgY29tcGFyaXNvbnMuICBJbiB0aGlzIGNhc2UgOCBvZiB0aGVtLiAgSG93 ZXZlcg0KPiA+ICAgICAgd2hlbiBkZXRlcm1pbmluZyBuY29waWVzIHRoZSBlYXJseSBleGl0IHVz ZXMgYSBib29sZWFuIG1vZGUgYW5kIHNvDQo+IG5jb3BpZXMNCj4gPiAgICAgIGlzIGFsd2F5cyAx LiAgSWYgSSBmb3JjZSBpdCBpbnN0ZWFkIHRvIGRldGVybWluZSBuY29waWVzIGJhc2VkIG9uIGl0 J3MNCj4gPiAgICAgIG9wZXJhbmRzIGluc3RlYWQgb2YgdGhlIGZpbmFsIHR5cGUgdGhlbiB3ZSBn ZXQgdGhlIGNvbmRpdG9uYWwgdmVjdG9yaXplZA0KPiA+ICAgICAgYnV0IHRoZSBpdCBoYXMgYSBt aXNtYXRjaCBjb21wYXJpbmcgaW50ZWdlciB2ZWN0b3JzIHdpdGggYm9vbGVhbi4NCj4gPiAgICAg IEl0IGZlZWxzIGxpa2UgSSBuZWVkIHNvbWUga2luZCBvZiBib29sZWFuIHJlZHVjdGlvbnMgaGVy ZS4uICBTaG91bGQgSSBqdXN0DQo+ID4gICAgICByZWplY3QgdGhpcyBmb3JtIGZvciBub3c/DQo+ IA0KPiBUaGF0J3MgcHJvYmFibHkgdGhlIGJvb2wgcGF0dGVybiBoYW5kbGluZyBJIGhpbnRlZCBh dCBhYm92ZS4NCj4gQm9vbHMvY29uZGl0aW9ucyBhcmUgYXdrd2FyZCwgbWF5YmUgeW91IHNob3Vs ZCBoYW5kbGUgdGhlDQo+IEdJTVBMRV9DT05EcyBhcyBwYXR0ZXJucyBjb21wdXRpbmcgdGhlIGFj dHVhbCBjb25kaXRpb24gYXMgbWFzaw0KPiBmZWQgaW50byBhIGR1bW15IC5JRk5fQ09OU1VNRV9N QVNLIHN0bXQ/DQoNCkluZGVlZCwgdGhvdWdoIG9uZSBhZGRpdGlvbmFsIGRpZmZpY3VsdHkgaGVy ZSBpcyB0aGF0IGluIHRoZSBleGFtcGxlIGZvciBpbnN0YW5jZQ0KdGhlIG51bWJlciBvZiBjb3Bp ZXMgaXMgbmVlZGVkLCBlLmcuIGlmIHlvdSBoYXZlIHRvIGRvIHdpZGVuaW5nIGJlZm9yZSB0aGUg Y29tcGFyZS4NClRoaXMgbWVhbnMgdGhhdCB5b3UgaGF2ZSBfaGksIF9sbyBzcGxpdHMuIFNvIHVu bGVzcyB5b3Ugc2hvcnQgY2lyY3VpdCB0aGlzIGNhbiBsZWFkIHRvDQpxdWl0ZSBhIG51bWJlciBv ZiBvcGVyYXRpb25zIGJlZm9yZSB5b3UgZXhpdC4NCg0KSSBjb3VsZCBhbHNvIGdlbmVyYXRlIGFu IE9SIHJlZHVjdGlvbiBpbiB0aGlzIGNhc2UgaW5zdGVhZCBvZiBuZWVkaW5nIGEgbmV3IElGTiwg YnV0DQpJJ2xsIGdvIHdpdGggd2hhdGV2ZXIgeW91IHByZWZlci9yZWNvbW1lbmQuDQoNCj4gDQo+ ID4gQm9vdHN0cmFwcGVkIFJlZ3Rlc3RlZCBvbiBhYXJjaDY0LW5vbmUtbGludXgtZ251LCB4ODZf NjQtcGMtbGludXgtZ251DQo+IGFuZCBpc3N1ZXMNCj4gPiBtZW50aW9uZWQgYWJvdmUuDQo+ID4N Cj4gPiBPSyBlbm91Z2ggZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3IgR0NDIDEzPw0KPiAN Cj4gTm90IHN1cmUsIEkgZGlkbid0IHlldCBsb29rIHRob3JvdWdobHkgYXQgdGhlIHBhdGNoIGl0 c2VsZi4NCg0KSSdsbCBsaWdodCBzb21lIGNhbmRsZXMg8J+Yig0KDQpUaGFua3MgZm9yIHRha2lu ZyBhIGxvb2ssDQpUYW1hcg0KDQo+IA0KPiBSaWNoYXJkLg0KPiANCj4gPiBUaGFua3MsDQo+ID4g VGFtYXINCj4gPg0KPiA+IGdjYy9DaGFuZ2VMb2c6DQo+ID4NCj4gPiAJKiBjZmdsb29wLmNjIChu b3JtYWxfZXhpdCk6IE5ldy4NCj4gPiAJKiBjZmdsb29wLmggKG5vcm1hbF9leGl0KTogTmV3Lg0K PiA+IAkqIGRvYy9sb29wLnRleGkgKG5vcm1hbF9leGl0KTogRG9jdW1lbnQuDQo+ID4gCSogZG9j L3NvdXJjZWJ1aWxkLnRleGkgKHZlY3RfZWFybHlfYnJlYWspOiBEb2N1bWVudC4NCj4gPiAJKiB0 cmVlLXNjYWxhci1ldm9sdXRpb24uY2MgKGdldF9sb29wX2V4aXRfY29uZGl0aW9uKTogUmVmYWN0 b3IuDQo+ID4gCShnZXRfZWRnZV9jb25kaXRpb24pOiBOZXcuDQo+ID4gCSogdHJlZS1zY2FsYXIt ZXZvbHV0aW9uLmggKGdldF9lZGdlX2NvbmRpdGlvbik6IG5ldy4NCj4gPiAJKiB0cmVlLXZlY3Qt ZGF0YS1yZWZzLmNjICh2ZWN0X2VuaGFuY2VfZGF0YV9yZWZzX2FsaWdubWVudCk6IEdldA0KPiBt YWluDQo+ID4gCWV4aXQgZHVyaW5nIHBlZWxpbmcgY2hlY2suDQo+ID4gCSogdHJlZS12ZWN0LWxv b3AtbWFuaXAuY2MNCj4gPiAJKHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2Zn KTogU3VwcG9ydCBjb3B5aW5nIENGR3MNCj4gd2l0aA0KPiA+IAltdWx0aXBsZSBleGl0cyBhbmQg cGxhY2UgYXQgdGhlIGVuZC4NCj4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVy KTogU2tpcCBvbiBlYXJseSBleGl0cy4NCj4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJs eV9icmVhayk6IE5ldy4NCj4gPiAJKGdpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSk6IE5ldy4NCj4g PiAJKHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcywNCj4gc2xwZWVsX3VwZGF0ZV9w aGlfbm9kZXNfZm9yX2d1YXJkMiwNCj4gPiAJc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xj c3NhLA0KPiB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnNfbXVsdF92ZiwNCj4gPiAJc2xwZWVs X2Nhbl9kdXBsaWNhdGVfbG9vcF9wLA0KPiB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0aWFs X3ZlY3RvcnMpOg0KPiA+IAlVcGRhdGUgZm9yIG11bHRpcGxlIGV4aXRzLg0KPiA+IAkodmVjdF9z ZXRfbG9vcF9jb25kaXRpb24sIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCk6DQo+IFVw ZGF0ZQ0KPiA+IAljb25kaXRpb24gZm9yIGVhcmx5IGV4aXRzLg0KPiA+IAkodmVjdF9kb19wZWVs aW5nKTogUGVlbCBmb3IgZWFybHkgYnJlYWtzLg0KPiA+IAkqIHRyZWUtdmVjdC1sb29wLmNjICh2 ZWN0X2dldF9sb29wX25pdGVycyk6IEFuYWx5emUgYW5kIHJldHVybiBhbGwNCj4gPiAJZXhpdHMu DQo+ID4gCSh2ZWN0X2FuYWx5emVfbG9vcF9mb3JtLCB2ZWN0X2NyZWF0ZV9sb29wX3ZpbmZvKTog QW5hbHl6ZSBhbGwNCj4gY29uZHMuDQo+ID4gCSh2ZWN0X2RldGVybWluZV9wYXJ0aWFsX3ZlY3Rv cnNfYW5kX3BlZWxpbmcpOiBTdXBvcnQgbXVsdGlwbGUNCj4gZXhpdHMgYnkNCj4gPiAJcGVlaW5n Lg0KPiA+IAkodmVjdF9hbmFseXplX2xvb3ApOiBBZGQgYW5heXNpcyBmb3IgbXVsdGlwbGUgZXhp dHMuDQo+ID4gCShtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMsIHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2Jy ZWFrLA0KPiA+IAl2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzLCB2ZWN0b3JpemFibGVfZWFybHlf ZXhpdCk6IE5ldy4NCj4gPiAJKHZlY3Rvcml6YWJsZV9saXZlX29wZXJhdGlvbik6IElnbm9yZSBl YXJseSBicmVhayBzdGF0ZW1lbnRzLg0KPiA+IAkoc2NhbGVfcHJvZmlsZV9mb3JfdmVjdF9sb29w LCB2ZWN0X3RyYW5zZm9ybV9sb29wKTogU3VwcG9ydA0KPiBtdWx0aXBsZQ0KPiA+IAlleGl0cy4N Cj4gPiAJKiB0cmVlLXZlY3Qtc3RtdHMuY2MgKHZlY3Rfc3RtdF9yZWxldmFudF9wKTogQW5hbHl6 ZSBlYXJseSBicmVha3MuDQo+ID4gCShwcmVwYXJlX3ZlY19tYXNrKTogRXhwb3NlLg0KPiA+IAko dmVjdF9hbmFseXplX3N0bXQsIHZlY3RfdHJhbnNmb3JtX3N0bXQsIHZlY3RfaXNfc2ltcGxlX3Vz ZSwNCj4gPiAJdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10KTogU3VwcG9ydCBsb29wIGNv bnRyb2wvZWFybHkgZXhpdHMuDQo+ID4gCSogdHJlZS12ZWN0b3JpemVyLmNjIChwYXNzX3ZlY3Rv cml6ZTo6ZXhlY3V0ZSk6IFJlY29yZCBhbGwgZXhpdHMgZm9yDQo+ID4gCVJQTy4NCj4gPiAJKiB0 cmVlLXZlY3Rvcml6ZXIuaCAoZW51bSB2ZWN0X2RlZl90eXBlKTogQWRkIHZlY3RfZWFybHlfZXhp dF9kZWYuDQo+ID4gCShzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3ApOiBDaGFuZ2UgbG9vcCB0 byBsb29wX3ZlY19pbmZvLg0KPiA+IAkoc3RydWN0IHZlY3RfbG9vcF9mb3JtX2luZm8pOiBBZGQg bG9vcCBjb25kaXRpb25zLg0KPiA+IAkoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MsIHZlY3RfdHJh bnNmb3JtX2Vhcmx5X2JyZWFrLA0KPiA+IAl2ZWN0b3JpemFibGVfZWFybHlfZXhpdCk6IE5ldy4N Cj4gPiAJKHByZXBhcmVfdmVjX21hc2spOiBOZXcuDQo+ID4gCSh2ZWNfaW5mbyk6IEFkZCBlYXJs eV9icmVha3MuDQo+ID4gCShsb29wX3ZlY19pbmZvX2Zvcl9sb29wKTogTWFrZSBsb29wIGNvbnN0 Lg0KPiA+DQo+ID4gZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6DQo+ID4NCj4gPiAJKiBsaWIvdGFy Z2V0LXN1cHBvcnRzLmV4cCAodmVjdF9lYXJseV9icmVhayk6IE5ldy4NCj4gPiAJKiBnKysuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2M6IE5ldyB0ZXN0Lg0KPiA+IAkqIGcrKy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfMi5jYzogTmV3IHRlc3QuDQo+ID4gCSogZysrLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVha18zLmNjOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrLXJ1bl8xLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWstcnVuXzEwLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWstcnVuXzIuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay1ydW5fMy5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl80LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWstcnVuXzUuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVhay1ydW5fNi5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXJ1bl83LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWstcnVuXzguYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay1ydW5fOS5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXRlbXBsYXRlXzEuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVhay10ZW1wbGF0ZV8yLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMS5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrXzEwLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtf MTEuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMi5j OiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEzLmM6IE5l dyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTQuYzogTmV3IHRl c3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNS5jOiBOZXcgdGVzdC4N Cj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYzogTmV3IHRlc3QuDQo+ID4g CSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNC5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrXzUuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha182LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWtfNy5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrXzguYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh a185LmM6IE5ldyB0ZXN0Lg0KPiA+DQo+ID4gLS0tIGlubGluZSBjb3B5IG9mIHBhdGNoIC0tDQo+ ID4gZGlmZiAtLWdpdCBhL2djYy9jZmdsb29wLmggYi9nY2MvY2ZnbG9vcC5oDQo+ID4gaW5kZXgN Cj4gNTI4YjEyMTliYzM3YWQ4ZjExNGQ1Y2YzODFjMGNmZjg5OWRiMzFlZS4uOWM3ZjAxOWE1MWFi ZmUyZGU4ZTFkZDcxMzUNCj4gZGVhMjQ2M2IwMjU2YTAgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2Nm Z2xvb3AuaA0KPiA+ICsrKyBiL2djYy9jZmdsb29wLmgNCj4gPiBAQCAtMzg1LDYgKzM4NSw3IEBA IGV4dGVybiBiYXNpY19ibG9jaw0KPiAqZ2V0X2xvb3BfYm9keV9pbl9jdXN0b21fb3JkZXIgKGNv bnN0IGNsYXNzIGxvb3AgKiwgdm9pZCAqLA0KPiA+DQo+ID4gIGV4dGVybiBhdXRvX3ZlYzxlZGdl PiBnZXRfbG9vcF9leGl0X2VkZ2VzIChjb25zdCBjbGFzcyBsb29wICosDQo+IGJhc2ljX2Jsb2Nr ICogPSBOVUxMKTsNCj4gPiAgZXh0ZXJuIGVkZ2Ugc2luZ2xlX2V4aXQgKGNvbnN0IGNsYXNzIGxv b3AgKik7DQo+ID4gK2V4dGVybiBlZGdlIG5vcm1hbF9leGl0IChjb25zdCBjbGFzcyBsb29wICop Ow0KPiA+ICBleHRlcm4gZWRnZSBzaW5nbGVfbGlrZWx5X2V4aXQgKGNsYXNzIGxvb3AgKmxvb3As IGNvbnN0IHZlYzxlZGdlPiAmKTsNCj4gPiAgZXh0ZXJuIHVuc2lnbmVkIG51bV9sb29wX2JyYW5j aGVzIChjb25zdCBjbGFzcyBsb29wICopOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2djYy9jZmds b29wLmNjIGIvZ2NjL2NmZ2xvb3AuY2MNCj4gPiBpbmRleA0KPiA1N2JmN2IxODU1ZDRkZDIwZmIz ZjQyMzg4MTI0OTMyZDBjYTJiNDhhLi45N2E3MzczZmI2ZDk1MTRkYTYwMmQ1YmUwDQo+IDEwNTBm MmVjNjYwOTRiYyAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvY2ZnbG9vcC5jYw0KPiA+ICsrKyBiL2dj Yy9jZmdsb29wLmNjDQo+ID4gQEAgLTE4MTIsNiArMTgxMiwyMCBAQCBzaW5nbGVfZXhpdCAoY29u c3QgY2xhc3MgbG9vcCAqbG9vcCkNCj4gPiAgICAgIHJldHVybiBOVUxMOw0KPiA+ICB9DQo+ID4N Cj4gPiArLyogUmV0dXJucyB0aGUgbm9ybWFsIGV4aXQgZWRnZSBvZiBMT09QLCBvciBOVUxMIGlm IExPT1AgaGFzIGVpdGhlciBubw0KPiBleGl0Lg0KPiA+ICsgICBJZiBsb29wcyBkbyBub3QgaGF2 ZSB0aGUgZXhpdHMgcmVjb3JkZWQsIE5VTEwgaXMgcmV0dXJuZWQgYWx3YXlzLiAgKi8NCj4gPiAr DQo+ID4gK2VkZ2UNCj4gPiArbm9ybWFsX2V4aXQgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3ApDQo+ ID4gK3sNCj4gPiArICBzdHJ1Y3QgbG9vcF9leGl0ICpleGl0ID0gbG9vcC0+ZXhpdHMtPm5leHQ7 DQo+ID4gKw0KPiA+ICsgIGlmICghbG9vcHNfc3RhdGVfc2F0aXNmaWVzX3AgKExPT1BTX0hBVkVf UkVDT1JERURfRVhJVFMpKQ0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgIHJl dHVybiBleGl0LT5lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKiBSZXR1cm5zIHRydWUgd2hlbiBC QiBoYXMgYW4gaW5jb21pbmcgZWRnZSBleGl0aW5nIExPT1AuICAqLw0KPiA+DQo+ID4gIGJvb2wN Cj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9sb29wLnRleGkgYi9nY2MvZG9jL2xvb3AudGV4aQ0K PiA+IGluZGV4DQo+IDZlODY1N2EwNzRkMjQ0N2RiN2FlOWI3NWNiZmJiNzEyODJiODQyODcuLmUx ZGUyYWM0MGY4N2Y4NzlhYjY5MWY2OGINCj4gZDQxYjNiYzIxYTgzYmY3IDEwMDY0NA0KPiA+IC0t LSBhL2djYy9kb2MvbG9vcC50ZXhpDQo+ID4gKysrIGIvZ2NjL2RvYy9sb29wLnRleGkNCj4gPiBA QCAtMjExLDYgKzIxMSwxMCBAQCByZWxhdGlvbiwgYW5kIGJyZWF0aC1maXJzdCBzZWFyY2ggb3Jk ZXIsDQo+IHJlc3BlY3RpdmVseS4NCj4gPiAgQGl0ZW0gQGNvZGV7c2luZ2xlX2V4aXR9OiBSZXR1 cm5zIHRoZSBzaW5nbGUgZXhpdCBlZGdlIG9mIHRoZSBsb29wLCBvcg0KPiA+ICBAY29kZXtOVUxM fSBpZiB0aGUgbG9vcCBoYXMgbW9yZSB0aGFuIG9uZSBleGl0LiAgWW91IGNhbiBvbmx5IHVzZSB0 aGlzDQo+ID4gIGZ1bmN0aW9uIGlmIEBjb2Rle0xPT1BTX0hBVkVfUkVDT1JERURfRVhJVFN9IGlz IHVzZWQuDQo+ID4gK2Z1bmN0aW9uIGlmIExPT1BTX0hBVkVfTUFSS0VEX1NJTkdMRV9FWElUUyBw cm9wZXJ0eSBpcyB1c2VkLg0KPiA+ICtAaXRlbSBAY29kZXtub3JtYWxfZXhpdH06IFJldHVybnMg dGhlIG5hdHVyYWwgZXhpdCBlZGdlIG9mIHRoZSBsb29wLA0KPiA+ICtldmVuIGlmIHRoZSBsb29w IGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBUaGUgbmF0dXJhbCBleGl0IGlzIHRoZSBleGl0DQo+ ID4gK3RoYXQgd291bGQgbm9ybWFsbHkgYmUgdGFrZW4gd2hlcmUgdGhlIGxvb3AgdG8gYmUgZnVs bHkgZXhlY3V0ZWQuDQo+ID4gIEBpdGVtIEBjb2Rle2dldF9sb29wX2V4aXRfZWRnZXN9OiBFbnVt ZXJhdGVzIHRoZSBleGl0IGVkZ2VzIG9mIGENCj4gbG9vcC4NCj4gPiAgQGl0ZW0gQGNvZGV7anVz dF9vbmNlX2VhY2hfaXRlcmF0aW9uX3B9OiBSZXR1cm5zIHRydWUgaWYgdGhlIGJhc2ljDQo+IGJs b2NrDQo+ID4gIGlzIGV4ZWN1dGVkIGV4YWN0bHkgb25jZSBkdXJpbmcgZWFjaCBpdGVyYXRpb24g b2YgYSBsb29wICh0aGF0IGlzLCBpdA0KPiA+IEBAIC02MjMsNCArNjI3LDQgQEAgbWF4aW11bSB2 ZXJib3NpdHkgdGhlIGRldGFpbHMgb2YgYSBkYXRhDQo+IGRlcGVuZGVuY2UgcmVsYXRpb25zIGFy cmF5LA0KPiA+ICBAY29kZXtkdW1wX2Rpc3RfZGlyX3ZlY3RvcnN9IHByaW50cyBvbmx5IHRoZSBj bGFzc2ljYWwgZGlzdGFuY2UgYW5kDQo+ID4gIGRpcmVjdGlvbiB2ZWN0b3JzIGZvciBhIGRhdGEg ZGVwZW5kZW5jZSByZWxhdGlvbnMgYXJyYXksIGFuZA0KPiA+ICBAY29kZXtkdW1wX2RhdGFfcmVm ZXJlbmNlc30gcHJpbnRzIHRoZSBkZXRhaWxzIG9mIHRoZSBkYXRhIHJlZmVyZW5jZXMNCj4gPiAt Y29udGFpbmVkIGluIGEgZGF0YSByZWZlcmVuY2UgYXJyYXkuDQo+ID4gK2NvbnRhaW5lZCBpbiBh IGRhdGEgcmVmZXJlbmNlIGFycmF5DQo+ID4gZGlmZiAtLWdpdCBhL2djYy9kb2Mvc291cmNlYnVp bGQudGV4aSBiL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQ0KPiA+IGluZGV4DQo+IGUyMWExZDM4 MWUwNWRhMWJmY2NiNTU1MDY4ZWExZGJlYWJkOWZjNzkuLjE2ZmE5NGViZjUzMmQyN2NkOWEzYTQ1 YTcNCj4gYWFkNTc4Y2E2OTIwNDk2IDEwMDY0NA0KPiA+IC0tLSBhL2djYy9kb2Mvc291cmNlYnVp bGQudGV4aQ0KPiA+ICsrKyBiL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQ0KPiA+IEBAIC0xNjQw LDYgKzE2NDAsMTAgQEAgVGFyZ2V0IHN1cHBvcnRzIGhhcmR3YXJlIHZlY3RvcnMgb2YNCj4gQGNv ZGV7ZmxvYXR9IHdoZW4NCj4gPiAgQG9wdGlvbnstZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnN9 IGlzIG5vdCBpbiBlZmZlY3QuDQo+ID4gIFRoaXMgaW1wbGllcyBAY29kZXt2ZWN0X2Zsb2F0fS4N Cj4gPg0KPiA+ICtAaXRlbSB2ZWN0X2Vhcmx5X2JyZWFrDQo+ID4gK1RhcmdldCBzdXBwb3J0cyBo YXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGxvb3BzIHdpdGggZWFybHkgYnJlYWtzLg0KPiA+ICtU aGlzIHJlcXVpcmVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYnJhbmNoIG9wdGFiIGZvciB2 ZWN0b3JzLg0KPiA+ICsNCj4gPiAgQGl0ZW0gdmVjdF9pbnQNCj4gPiAgVGFyZ2V0IHN1cHBvcnRz IGhhcmR3YXJlIHZlY3RvcnMgb2YgQGNvZGV7aW50fS4NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYw0KPiBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmNjDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi42YTgzNjQ4Y2EzNmUyYzhmZWViNzgzMzVmYw0KPiBjZjNmM2I4MmE5N2QyZQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWtfMS5jYw0KPiA+IEBAIC0wLDAgKzEsNjEgQEANCj4gPiArLyogeyBkZy1k byBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICIt dyAtTzIiIH0gKi8NCj4gPiArDQo+ID4gK3ZvaWQgZmFuY3lfYWJvcnQoY2hhciAqLCBpbnQsIGNv bnN0IGNoYXIgKikNCj4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7DQo+ID4gK3RlbXBs YXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gc3RydWN0IHBvbHlfaW50X3BvZCB7IGludCBjb2Vm ZnNbTl07IH07DQo+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gY2xhc3MgcG9s eV9pbnQgOiBwdWJsaWMgcG9seV9pbnRfcG9kPE4sDQo+IGludD4gew0KPiA+ICtwdWJsaWM6DQo+ ID4gKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENhPiBwb2x5X2ludCAmb3BlcmF0b3IrPShjb25zdCBw b2x5X2ludF9wb2Q8TiwNCj4gQ2E+ICYpOw0KPiA+ICt9Ow0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWdu ZWQgTiwgdHlwZW5hbWUgQz4NCj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lIENhPg0KPiA+ICtwb2x5 X2ludDxOLCBDPiAmcG9seV9pbnQ8TiwgQz46Om9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRfcG9k PE4sIENhPg0KPiAmYSkgew0KPiA+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ ICsgICAgdGhpcy0+Y29lZmZzW2ldICs9IGEuY29lZmZzW2ldOw0KPiA+ICsgIHJldHVybiAqdGhp czsNCj4gPiArfQ0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWUgQ2EsIHR5cGVu YW1lIENiPg0KPiA+ICtwb2x5X2ludDxOLCBsb25nPiBleGFjdF9kaXYocG9seV9pbnRfcG9kPE4s IENhPiwgQ2IpIHsNCj4gPiArICBwb2x5X2ludDxOLCBsb25nPiByOw0KPiA+ICsgIHJldHVybiBy Ow0KPiA+ICt9DQo+ID4gK3N0cnVjdCB2ZWNfcHJlZml4IHsNCj4gPiArICB1bnNpZ25lZCBtX251 bTsNCj4gPiArfTsNCj4gPiArc3RydWN0IHZsX3B0cjsNCj4gPiArc3RydWN0IHZhX2hlYXAgew0K PiA+ICsgIHR5cGVkZWYgdmxfcHRyIGRlZmF1bHRfbGF5b3V0Ow0KPiA+ICt9Ow0KPiA+ICt0ZW1w bGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lIEEsIHR5cGVuYW1lID0gdHlwZW5hbWUNCj4gQTo6ZGVm YXVsdF9sYXlvdXQ+DQo+ID4gK3N0cnVjdCB2ZWM7DQo+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBU LCB0eXBlbmFtZSBBPiBzdHJ1Y3QgdmVjPFQsIEEsIGludD4gew0KPiA+ICsgIFQgJm9wZXJhdG9y W10odW5zaWduZWQpOw0KPiA+ICsgIHZlY19wcmVmaXggbV92ZWNwZng7DQo+ID4gKyAgVCBtX3Zl Y2RhdGFbXTsNCj4gPiArfTsNCj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+ IFQgJnZlYzxULCBBLA0KPiBpbnQ+OjpvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7DQo+ID4gKyAg bV92ZWNwZngubV9udW0gPyBmYW5jeV9hYm9ydCgiIiwgOSwgX19GVU5DVElPTl9fKSwgMCA6IDA7 DQo+ID4gKyAgcmV0dXJuIG1fdmVjZGF0YVtpeF07DQo+ID4gK30NCj4gPiArdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+IHN0cnVjdCB2ZWM8VCwgdmFfaGVhcD4gew0KPiA+ICsgIFQgJm9wZXJhdG9yW10o dW5zaWduZWQgaXgpIHsgcmV0dXJuIG1fdmVjW2l4XTsgfQ0KPiA+ICsgIHZlYzxULCB2YV9oZWFw LCBpbnQ+IG1fdmVjOw0KPiA+ICt9Ow0KPiA+ICtjbGFzcyBhdXRvX3ZlYyA6IHB1YmxpYyB2ZWM8 cG9seV9pbnQ8MiwgbG9uZz4sIHZhX2hlYXA+IHt9Ow0KPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWU+ IGNsYXNzIHZlY3Rvcl9idWlsZGVyIDogcHVibGljIGF1dG9fdmVjIHt9Ow0KPiA+ICtjbGFzcyBp bnRfdmVjdG9yX2J1aWxkZXIgOiBwdWJsaWMgdmVjdG9yX2J1aWxkZXI8aW50PiB7DQo+ID4gK3B1 YmxpYzoNCj4gPiArICBpbnRfdmVjdG9yX2J1aWxkZXIocG9seV9pbnQ8MiwgbG9uZz4sIGludCwg aW50KTsNCj4gPiArfTsNCj4gPiArYm9vbCB2ZWN0X2dyb3VwZWRfc3RvcmVfc3VwcG9ydGVkKCkg ew0KPiA+ICsgIGludCBpOw0KPiA+ICsgIHBvbHlfaW50PDIsIGxvbmc+IG5lbHQ7DQo+ID4gKyAg aW50X3ZlY3Rvcl9idWlsZGVyIHNlbChuZWx0LCAyLCAzKTsNCj4gPiArICBmb3IgKGkgPSAwOyBp IDwgNjsgaSsrKQ0KPiA+ICsgICAgc2VsW2ldICs9IGV4YWN0X2RpdihuZWx0LCAyKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RP UklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuY2MNCj4gYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE4MzY0 OGNhMzZlMmM4ZmVlYjc4MzM1ZmMNCj4gY2YzZjNiODJhOTdkMmUNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIu Y2MNCj4gPiBAQCAtMCwwICsxLDYxIEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAq Lw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLXcgLU8yIiB9ICovDQo+ID4g Kw0KPiA+ICt2b2lkIGZhbmN5X2Fib3J0KGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopDQo+IF9f YXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOw0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwg dHlwZW5hbWU+IHN0cnVjdCBwb2x5X2ludF9wb2QgeyBpbnQgY29lZmZzW05dOyB9Ow0KPiA+ICt0 ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWU+IGNsYXNzIHBvbHlfaW50IDogcHVibGljIHBv bHlfaW50X3BvZDxOLA0KPiBpbnQ+IHsNCj4gPiArcHVibGljOg0KPiA+ICsgIHRlbXBsYXRlIDx0 eXBlbmFtZSBDYT4gcG9seV9pbnQgJm9wZXJhdG9yKz0oY29uc3QgcG9seV9pbnRfcG9kPE4sDQo+ IENhPiAmKTsNCj4gPiArfTsNCj4gPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lIEM+ DQo+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBDYT4NCj4gPiArcG9seV9pbnQ8TiwgQz4gJnBvbHlf aW50PE4sIEM+OjpvcGVyYXRvcis9KGNvbnN0IHBvbHlfaW50X3BvZDxOLCBDYT4NCj4gJmEpIHsN Cj4gPiArICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiArICAgIHRoaXMtPmNvZWZm c1tpXSArPSBhLmNvZWZmc1tpXTsNCj4gPiArICByZXR1cm4gKnRoaXM7DQo+ID4gK30NCj4gPiAr dGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lIENhLCB0eXBlbmFtZSBDYj4NCj4gPiArcG9s eV9pbnQ8TiwgbG9uZz4gZXhhY3RfZGl2KHBvbHlfaW50X3BvZDxOLCBDYT4sIENiKSB7DQo+ID4g KyAgcG9seV9pbnQ8TiwgbG9uZz4gcjsNCj4gPiArICByZXR1cm4gcjsNCj4gPiArfQ0KPiA+ICtz dHJ1Y3QgdmVjX3ByZWZpeCB7DQo+ID4gKyAgdW5zaWduZWQgbV9udW07DQo+ID4gK307DQo+ID4g K3N0cnVjdCB2bF9wdHI7DQo+ID4gK3N0cnVjdCB2YV9oZWFwIHsNCj4gPiArICB0eXBlZGVmIHZs X3B0ciBkZWZhdWx0X2xheW91dDsNCj4gPiArfTsNCj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lLCB0 eXBlbmFtZSBBLCB0eXBlbmFtZSA9IHR5cGVuYW1lDQo+IEE6OmRlZmF1bHRfbGF5b3V0Pg0KPiA+ ICtzdHJ1Y3QgdmVjOw0KPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4gc3Ry dWN0IHZlYzxULCBBLCBpbnQ+IHsNCj4gPiArICBUICZvcGVyYXRvcltdKHVuc2lnbmVkKTsNCj4g PiArICB2ZWNfcHJlZml4IG1fdmVjcGZ4Ow0KPiA+ICsgIFQgbV92ZWNkYXRhW107DQo+ID4gK307 DQo+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBUICZ2ZWM8VCwgQSwNCj4g aW50Pjo6b3BlcmF0b3JbXSh1bnNpZ25lZCBpeCkgew0KPiA+ICsgIG1fdmVjcGZ4Lm1fbnVtID8g ZmFuY3lfYWJvcnQoIiIsIDksIF9fRlVOQ1RJT05fXyksIDAgOiAwOw0KPiA+ICsgIHJldHVybiBt X3ZlY2RhdGFbaXhdOw0KPiA+ICt9DQo+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3Qg dmVjPFQsIHZhX2hlYXA+IHsNCj4gPiArICBUICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJl dHVybiBtX3ZlY1tpeF07IH0NCj4gPiArICB2ZWM8VCwgdmFfaGVhcCwgaW50PiBtX3ZlYzsNCj4g PiArfTsNCj4gPiArY2xhc3MgYXV0b192ZWMgOiBwdWJsaWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+ LCB2YV9oZWFwPiB7fTsNCj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyB2ZWN0b3JfYnVp bGRlciA6IHB1YmxpYyBhdXRvX3ZlYyB7fTsNCj4gPiArY2xhc3MgaW50X3ZlY3Rvcl9idWlsZGVy IDogcHVibGljIHZlY3Rvcl9idWlsZGVyPGludD4gew0KPiA+ICtwdWJsaWM6DQo+ID4gKyAgaW50 X3ZlY3Rvcl9idWlsZGVyKHBvbHlfaW50PDIsIGxvbmc+LCBpbnQsIGludCk7DQo+ID4gK307DQo+ ID4gK2Jvb2wgdmVjdF9ncm91cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsNCj4gPiArICBpbnQgaTsN Cj4gPiArICBwb2x5X2ludDwyLCBsb25nPiBuZWx0Ow0KPiA+ICsgIGludF92ZWN0b3JfYnVpbGRl ciBzZWwobmVsdCwgMiwgMyk7DQo+ID4gKyAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4gPiAr ICAgIHNlbFtpXSArPSBleGFjdF9kaXYobmVsdCwgMik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9 ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha18zLmNjDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrXzMuY2MNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExMmU1Y2E0MzRiMmFjMzdjMDNkYmFh MTINCj4gMjczZmQ4ZTVhYTIwMThjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmNjDQo+ID4gQEAgLTAsMCAr MSwxNiBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi13IC1PMiIgfSAqLw0KPiA+ICsNCj4gPiAraW50IGFhcmNo NjRfYWR2c2ltZF92YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7DQo+ID4gK2Jvb2wgYWFyY2g2NF9h ZHZzaW1kX3ZhbGlkX2ltbWVkaWF0ZV9ocygpIHsNCj4gPiArICBmb3IgKGludCBzaGlmdCA9IDA7 IHNoaWZ0IDwgMzI7IHNoaWZ0ICs9IDgpDQo+ID4gKyAgICBpZiAoYWFyY2g2NF9hZHZzaW1kX3Zh bGlkX2ltbWVkaWF0ZV9oc192YWwzMiAmIHNoaWZ0KQ0KPiA+ICsgICAgICByZXR1cm4gYWFyY2g2 NF9hZHZzaW1kX3ZhbGlkX2ltbWVkaWF0ZV9oc192YWwzMjsNCj4gPiArICBmb3IgKDs7KQ0KPiA+ ICsgICAgOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMS5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi4yNDk1YjM2YTcyZWFlOTRjYjdhYmM0YTBkDQo+IDE3YTVjOTc5ZmQ3ODA4 Mw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiArLyog eyBkZy1kbyBydW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgwMw0KPiA+ ICsjZGVmaW5lIFAgMA0KPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8x LmMiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVD VE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEwLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjliY2Q3ZjdlNTdlZjlhMWQ0NjQ5ZDE4NTYNCj4gOWIzNDA2MDUwZTU0NjAzDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVhay1ydW5fMTAuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiArLyogeyBkZy1kbyBy dW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5 X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9p bnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCAt c2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgwMA0KPiA+ICsjZGVmaW5l IFAgNzk5DQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyINCj4g PiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVE IiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8yLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZjYz MTAxYTQ2NzkwOWYzMjhiZTdmM2FjDQo+IGJjNWJjYjcyMTk2N2ZmDQo+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1y dW5fMi5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsvKiB7IGRnLWRvIHJ1biB9ICovDQo+ ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAq Lw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRlbXBz IiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNkZWZpbmUgUCA4MDINCj4g PiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KPiA+ICsNCj4gPiAr LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9 IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrLXJ1bl8zLmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWstcnVuXzMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4g MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2Yjk1ZTliODUxNzA4 MWQ0MWQ3OTRlOQ0KPiBlMDI2NGQ2MzAxYzg1ODkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMNCj4g PiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiArLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4g Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4g PiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2RlZmluZSBQIDUNCj4gPiArI2luY2x1ZGUg InZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jIg0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiBk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1 bl80LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVu XzQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UwZTY0MjYxMjA1NTExNTJhN2JkODAwYw0K PiAxNWQ5ZWQ2YWIxNWJhZGENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl80LmMNCj4gPiBAQCAtMCwwICsx LDExIEBADQo+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4gKyNk ZWZpbmUgTiA4MDMNCj4gPiArI2RlZmluZSBQIDI3OA0KPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJs eS1icmVhay10ZW1wbGF0ZV8xLmMiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYw0KPiBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi4yNDJjZjQ4NmY5YzQwMDU1ZGYwYWVmNWZkMjMNCj4gOGQxYWZm N2E3YzdkYQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4g PiArLyogeyBkZy1kbyBydW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgw MA0KPiA+ICsjZGVmaW5lIFAgNzk5DQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRl bXBsYXRlXzEuYyINCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAi TE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNi5jDQo+IGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl82LmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjlmZTcxMzZiNzIxM2E0NjNjYTY1NzNjNjA0DQo+IDc2YjdjOGY1MzFkZGNiDQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVhay1ydW5fNi5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsvKiB7IGRn LWRvIHJ1biB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9m YXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNk ZWZpbmUgUCAwDQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyIN Cj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJ WkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl83LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAy ZjkzZDc3ZGJhMzFiOTM4ZjZmZDllOGM3DQo+IGY1ZTRhY2RlNGFlZWM5DQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh ay1ydW5fNy5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsvKiB7IGRnLWRvIHJ1biB9ICov DQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsg fSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICov DQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IC1zYXZlLXRl bXBzIiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNkZWZpbmUgUCA4MDIN Cj4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0KPiA+ICsNCj4g PiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrLXJ1bl84LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWstcnVuXzguYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgN Cj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYxNDkyNTQ2NTYw NmI1NGM2MzgyMjFmZmINCj4gOTVhNWU4ZDNiZWU3OTcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl84LmMN Cj4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiArLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4g Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8N Cj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2RlZmluZSBQIDUNCj4gPiArI2luY2x1 ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0KPiA+ICsNCj4gPiArLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr LXJ1bl85LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWst cnVuXzkuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRlMmI5YzMwMTQ1NmVkYThmOWFkN2Vh YQ0KPiA2NzYwNDU2M2YwYWZlZTcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl85LmMNCj4gPiBAQCAtMCww ICsxLDExIEBADQo+ID4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4g KyNkZWZpbmUgTiA4MDMNCj4gPiArI2RlZmluZSBQIDI3OA0KPiA+ICsjaW5jbHVkZSAidmVjdC1l YXJseS1icmVhay10ZW1wbGF0ZV8yLmMiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVf MS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBs YXRlXzEuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY3MGE4ZTJhNWE5ZGM5NzU2ZWRiNTU4 MGYNCj4gMmRlMDJkZGNjOTVkZTkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYw0KPiA+IEBA IC0wLDAgKzEsNDcgQEANCj4gPiArI2lmbmRlZiBODQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiAr I2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFANCj4gPiArI2RlZmluZSBQIDANCj4gPiArI2Vu ZGlmDQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl0gPSB7MH07DQo+ID4gK3Vuc2lnbmVk IHZlY3RfYltOXSA9IHswfTsNCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5vaXBhLCBub2lu bGluZSkpDQo+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gK3sNCj4gPiArIHVu c2lnbmVkIHJldCA9IDA7DQo+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiAr IHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4 KQ0KPiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsNCj4gPiAr IH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2V4dGVybiB2b2lkIGFi b3J0ICgpOw0KPiA+ICsNCj4gPiAraW50IG1haW4gKCkNCj4gPiArew0KPiA+ICsNCj4gPiArICBp bnQgeCA9IDE7DQo+ID4gKyAgaW50IGlkeCA9IFA7DQo+ID4gKyAgdmVjdF9hW2lkeF0gPSB4ICsg MTsNCj4gPiArDQo+ID4gKyAgdGVzdDQoeCk7DQo+ID4gKw0KPiA+ICsgIGlmICh2ZWN0X2JbaWR4 XSAhPSAoeCArIGlkeCkpDQo+ID4gKyAgICBhYm9ydCAoKTsNCj4gPiArDQo+ID4gKyAgaWYgKHZl Y3RfYVtpZHhdICE9IHggKyAxKQ0KPiA+ICsgICAgYWJvcnQgKCk7DQo+ID4gKw0KPiA+ICsgIGlm IChpZHggPiAwICYmIHZlY3RfYVtpZHgtMV0gIT0geCkNCj4gPiArICAgIGFib3J0ICgpOw0KPiA+ ICsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u ZDBmOTI0ZDkwNDQzN2U3MTU2N2QyN2NjMWYNCj4gMTA4OWU1NjA3ZGNhMGQNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrLXRlbXBsYXRlXzIuYw0KPiA+IEBAIC0wLDAgKzEsNTAgQEANCj4gPiArI2lmbmRlZiBODQo+ ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFANCj4g PiArI2RlZmluZSBQIDANCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2Fb Tl0gPSB7MH07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXSA9IHswfTsNCj4gPiArDQo+ID4gK19f YXR0cmlidXRlX18oKG5vaXBhLCBub2lubGluZSkpDQo+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2ln bmVkIHgpDQo+ID4gK3sNCj4gPiArIHVuc2lnbmVkIHJldCA9IDA7DQo+ID4gKyBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykNCj4gPiArIHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ICsgICAgIHJldHVybiBpOw0KPiA+ICsgICB2 ZWN0X2FbaV0gPSB4Ow0KPiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK2V4dGVybiB2b2lkIGFib3J0ICgpOw0KPiA+ICsNCj4gPiAraW50IG1haW4g KCkNCj4gPiArew0KPiA+ICsNCj4gPiArICBpbnQgeCA9IDE7DQo+ID4gKyAgaW50IGlkeCA9IFA7 DQo+ID4gKyAgdmVjdF9hW2lkeF0gPSB4ICsgMTsNCj4gPiArDQo+ID4gKyAgdW5zaWduZWQgcmVz ID0gdGVzdDQoeCk7DQo+ID4gKw0KPiA+ICsgIGlmIChyZXMgIT0gaWR4KQ0KPiA+ICsgICAgYWJv cnQgKCk7DQo+ID4gKw0KPiA+ICsgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCArIGlkeCkpDQo+ID4g KyAgICBhYm9ydCAoKTsNCj4gPiArDQo+ID4gKyAgaWYgKHZlY3RfYVtpZHhdICE9IHggKyAxKQ0K PiA+ICsgICAgYWJvcnQgKCk7DQo+ID4gKw0KPiA+ICsgIGlmIChpZHggPiAwICYmIHZlY3RfYVtp ZHgtMV0gIT0geCkNCj4gPiArICAgIGFib3J0ICgpOw0KPiA+ICsNCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jDQo+ IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uNTFlN2Q2NDg5Yjk5YzI1YjliNGIzZDFjOA0KPiAzOWY5ODU2MmI2 ZDRkZDcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyog eyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRp b25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaWZuZGVm IE4NCj4gPiArI2RlZmluZSBOIDgwMw0KPiA+ICsjZW5kaWYNCj4gPiArdW5zaWduZWQgdmVjdF9h W05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0 NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9y IChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHgg KyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICBicmVhazsNCj4gPiAr ICAgdmVjdF9hW2ldID0geDsNCj4gPiArDQo+ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha18xMC5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJy ZWFrXzEwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNGFkMTc2MzIwMmRmZGFiM2VkNzk2 MWUNCj4gYWQ1MTE0ZmNjNjFhMTFiDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5jDQo+ID4gQEAgLTAsMCAr MSwyOCBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBk Zy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4g PiArDQo+ID4gKyNpZm5kZWYgTg0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNlbmRpZg0KPiA+ ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4gPiArDQo+ ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsaW50IHksIGludCB6KQ0KPiA+ICt7DQo+ID4g KyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ld ID4geCkNCj4gPiArICAgICBicmVhazsNCj4gPiArICAgdmVjdF9hW2ldID0geDsNCj4gPiArIH0N Cj4gPiArDQo+ID4gKyByZXQgPSB4ICsgeSAqIHo7DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9 DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xMS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzExLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MTNkZDk5MDlmYjA5Mjc4ZGQ5MmE4MWEN Cj4gMjRlZjg1NDk5NGE5ODkwDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMS5jDQo+ID4gQEAgLTAsMCArMSwz MSBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1h ZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiAr DQo+ID4gKyNpZm5kZWYgTg0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNlbmRpZg0KPiA+ICt1 bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4gPiArDQo+ID4g K3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsIGludCB5KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25l ZCByZXQgPSAwOw0KPiA+ICtmb3IgKGludCBvID0gMDsgbyA8IHk7IG8rKykNCj4gPiArew0KPiA+ ICsgcmV0ICs9IG87DQo+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiArIHsN Cj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0K PiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsNCj4gPiArIH0N Cj4gPiArfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYw0KPiBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMi5jDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi5jYzEwZjMyMzhmMWNiOGUxMzA3ZTAyNGEzZQ0KPiBiY2I1YzI1YTM5ZDFiMg0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt ZWFybHktYnJlYWtfMTIuYw0KPiA+IEBAIC0wLDAgKzEsMzEgQEANCj4gPiArLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9l YXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zh c3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9P UCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIE4NCj4gPiAr I2RlZmluZSBOIDgwMw0KPiA+ICsjZW5kaWYNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25l ZCB4LCBpbnQgeSkNCj4gPiArew0KPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiArZm9yIChp bnQgbyA9IDA7IG8gPCB5OyBvKyspDQo+ID4gK3sNCj4gPiArIHJldCArPSBvOw0KPiA+ICsgZm9y IChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHgg KyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICByZXR1cm4gdmVjdF9h W2ldOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsNCj4gPiArIH0NCj4gPiArfQ0KPiA+ ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha18xMy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OTY3 YjczOTVlZDdjMTllMzhhNDM2ZDZlDQo+IGRjZmU3YzE1ODBjNzExMw0KPiA+IC0tLSAvZGV2L251 bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtf MTMuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8N Cj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9 ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8N Cj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4g PiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVE IiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIE4NCj4gPiArI2RlZmluZSBOIDgw Mw0KPiA+ICsjZW5kaWYNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2 ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7 DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBp KyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVj dF9hW2ldID4geCkNCj4gPiArICAgICByZXR1cm4gdmVjdF9hW2ldICogeDsNCj4gPiArICAgdmVj dF9hW2ldID0geDsNCj4gPiArDQo+ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVh a18xNC5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE0 LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzY2NlNWNmNmNhZGVjYjUyMGI0NmJlNjY2DQo+ IGJmNjA4ZTNiYzZhNTExDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5jDQo+ID4gQEAgLTAsMCArMSwyNSBA QA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25l ZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICtpbnQgdGVzdDQodW5zaWduZWQgeCkNCj4gPiArew0K PiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsr KQ0KPiA+ICsgew0KPiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3Rf YVtpXSA+IHgpDQo+ID4gKyAgICAgcmV0dXJuIGk7DQo+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICog dmVjdF9iW2ldOw0KPiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4g PiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzE1LmMNCj4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTUu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVjNjg3MmUxMTE1ZmY2NjY5NWY1YTUwMGZmDQo+ IGE3Y2EwMWMwZjhkM2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE1LmMNCj4gPiBAQCAtMCwwICsxLDI1IEBA DQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0 aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4g PiArI2RlZmluZSBOIDgwMw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVk IHZlY3RfYltOXTsNCj4gPiArDQo+ID4gK2ludCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ ID4gKyBpbnQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ ICsgew0KPiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+ IHgpDQo+ID4gKyAgICAgcmV0dXJuIGk7DQo+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9i W2ldOw0KPiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0K PiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmMNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjcyNjhmNmFlMjQ4NWQwMjc0ZmQ4NWVhNTNjDQo+IGMxZTQ0ZWY0 Yjg0ZDVjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmMNCj4gPiBAQCAtMCwwICsxLDI3IEBADQo+ID4gKy8q IHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZl LXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0 aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgPGNvbXBsZXguaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiAxMDI0DQo+ID4gK2NvbXBsZXgg ZG91YmxlIHZlY3RfYVtOXTsNCj4gPiArY29tcGxleCBkb3VibGUgdmVjdF9iW05dOw0KPiA+ICsN Cj4gPiArY29tcGxleCBkb3VibGUgdGVzdDQoY29tcGxleCBkb3VibGUgeCkNCj4gPiArew0KPiA+ ICsgY29tcGxleCBkb3VibGUgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsg aSsrKQ0KPiA+ICsgew0KPiA+ICsgICB2ZWN0X2JbaV0gKz0geCArIGk7DQo+ID4gKyAgIGlmICh2 ZWN0X2FbaV0gPT0geCkNCj4gPiArICAgICByZXR1cm4gaTsNCj4gPiArICAgdmVjdF9hW2ldICs9 IHggKiB2ZWN0X2JbaV07DQo+ID4gKw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWtfMy5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M2ZDI4YmQyZDZlNmU3OTQxNDZiYWY4OQ0K PiBlNDNjM2I3MDI5M2I3ZDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuYw0KPiA+IEBAIC0wLDAgKzEsMjAg QEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ ICsNCj4gPiArdW5zaWduZWQgdGVzdDQoY2hhciB4LCBjaGFyICp2ZWN0LCBpbnQgbikNCj4gPiAr ew0KPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg aSsrKQ0KPiA+ICsgew0KPiA+ICsgICBpZiAodmVjdFtpXSA+IHgpDQo+ID4gKyAgICAgcmV0dXJu IDE7DQo+ID4gKw0KPiA+ICsgICB2ZWN0W2ldID0geDsNCj4gPiArIH0NCj4gPiArIHJldHVybiBy ZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrXzQuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha180LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxNmM1NmZhZjMzMDQ0OWJm MTk2OWI3ZTUxDQo+IGZmMWU5NDI3MGRjODYxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha180LmMNCj4gPiBAQCAt MCwwICsxLDIzIEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7 IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsv KiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9 IH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiAxMDI0DQo+ID4gK3Vuc2lnbmVkIHZlY3RbTl07 DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1 bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4g KyB7DQo+ID4gKyAgIGlmIChpID4gMTYgJiYgdmVjdFtpXSA+IHgpDQo+ID4gKyAgICAgYnJlYWs7 DQo+ID4gKw0KPiA+ICsgICB2ZWN0W2ldID0geDsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzUuYw0KPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha181LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhMzZkNjk3OWRiMWZkMWY5N2Jh MmEyOTBmDQo+IDc4YWMzYjg0ZjZkZTI0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha181LmMNCj4gPiBAQCAtMCww ICsxLDI0IEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0K PiA+ICsNCj4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25l ZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9 IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICByZXR1cm4gdmVjdF9hW2ldOw0KPiA+ ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0K PiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfNi5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk2MzJkOWFmZGE3ZTA3ZjFhODQxNzUxNGUNCj4g Zjc3MzU2ZjAwMDQ1YmQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYw0KPiA+IEBAIC0wLDAgKzEsMjYgQEAN Cj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsN Cj4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNp Z25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0K PiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkg PCAoTi8yKTsgaSs9MikNCj4gPiArIHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4g KyAgIHZlY3RfYltpKzFdID0geCArIGkrMTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHggfHwg dmVjdF9hW2krMV0gPiB4KQ0KPiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gKz0g eCAqIHZlY3RfYltpXTsNCj4gPiArICAgdmVjdF9hW2krMV0gKz0geCAqIHZlY3RfYltpKzFdOw0K PiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+IGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzcuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uMTBmZDhiNDI5NTJjNDJmM2QzYTAxNGRhMTANCj4gMzkzMWNhMzk0NDIzZDUNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrXzcuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyogeyBkZy1kbyBjb21w aWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3Qi IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBW RUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8Y29tcGxleC5o Pg0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiArY29tcGxleCBkb3VibGUgdmVjdF9h W05dOw0KPiA+ICtjb21wbGV4IGRvdWJsZSB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICtjb21wbGV4 IGRvdWJsZSB0ZXN0NChjb21wbGV4IGRvdWJsZSB4KQ0KPiA+ICt7DQo+ID4gKyBjb21wbGV4IGRv dWJsZSByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7 DQo+ID4gKyAgIHZlY3RfYltpXSArPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA9PSB4 KQ0KPiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsN Cj4gPiArDQo+ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMNCj4gYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOC5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5hZTcwNmIyOTUyY2ZjZWNmMjA1NDZhNjdhNw0KPiAzNWI4ZDkwMmNiYjYw Nw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfOC5jDQo+ID4gQEAgLTAsMCArMSwyNyBAQA0KPiA+ICsvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxj b21wbGV4Lmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gMTAyNA0KPiA+ICtjaGFyIHZlY3RfYVtO XTsNCj4gPiArY2hhciB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICtjaGFyIHRlc3Q0KGNoYXIgeCwg Y2hhciAqIHJlc3RyaWN0IHJlcykNCj4gPiArew0KPiA+ICsgY2hhciByZXQgPSAwOw0KPiA+ICsg Zm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSAr PSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gKyAgICAgYnJlYWs7DQo+ ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KPiA+ICsgICByZXNbaV0gKj0gdmVj dF9iW2ldOw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+IGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYw0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uMzUwZjAyZjNjN2NhZWY0NTdhZGJlMWJlODANCj4gMmJiYTUxY2Q4MTgz OTMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzkuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2lmbmRl ZiBODQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2VuZGlmDQo+ID4gK3Vuc2lnbmVkIHZlY3Rf YVtOXTsNCj4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ICsNCj4gPiArdW5zaWduZWQgdGVz dDQodW5zaWduZWQgeCkNCj4gPiArew0KPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiArIGZv ciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgew0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4 ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gKyAgICAgYnJlYWs7DQo+ID4g KyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gKw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMu ZXhwIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LQ0KPiBzdXBwb3J0cy5leHANCj4gPiBpbmRl eA0KPiBjY2JiZWU4NDdmNzU1ZDZmMzAxMTZkNWIzOGU0MDI3YTk5OGI0OGZkLi41Y2JmNTRiZDJh MjNkZmRjNWRjN2IxNDhiDQo+IDBkYzZlZDRjNjM4MTRhZSAxMDA2NDQNCj4gPiAtLS0gYS9nY2Mv dGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cA0KPiA+IEBAIC0zNjQ1LDYgKzM2NDUsMTggQEAgcHJv YyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3ZlY3RfaW50IHsgfSB7DQo+ID4gIAl9fV0NCj4gPiAg fQ0KPiA+DQo+ID4gKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBzdXBwb3J0cyBoYXJkd2FyZSB2 ZWN0b3JpemF0aW9uIG9mIGVhcmx5IGJyZWFrcywNCj4gPiArIyAwIG90aGVyd2lzZS4NCj4gPiAr Iw0KPiA+ICsjIFRoaXMgd29uJ3QgY2hhbmdlIGZvciBkaWZmZXJlbnQgc3VidGFyZ2V0cyBzbyBj YWNoZSB0aGUgcmVzdWx0Lg0KPiA+ICsNCj4gPiArcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0 X3ZlY3RfZWFybHlfYnJlYWsgeyB9IHsNCj4gPiArICAgIHJldHVybiBbY2hlY2tfY2FjaGVkX2Vm ZmVjdGl2ZV90YXJnZXRfaW5kZXhlZCB2ZWN0X2Vhcmx5X2JyZWFrIHsNCj4gPiArICAgICAgZXhw ciB7DQo+ID4gKwkoW2lzdGFyZ2V0IGFhcmNoNjQqLSotKl0NCj4gPiArCSAmJiBbY2hlY2tfZWZm ZWN0aXZlX3RhcmdldF9hYXJjaDY0X3N2ZV0pDQo+ID4gKwl9fV0NCj4gPiArfQ0KPiA+ICAjIFJl dHVybiAxIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9yaXphdGlvbiBvZiBj b21wbGV4DQo+IGFkZGl0aW9ucyBvZg0KPiA+ICAjIGJ5dGUsIDAgb3RoZXJ3aXNlLg0KPiA+ICAj DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaCBiL2djYy90cmVl LXNjYWxhci1ldm9sdXRpb24uaA0KPiA+IGluZGV4DQo+IDBmOTAyMDdiYzczM2RiM2NmODU5Nzlk OWIwYjk2MmFlZmEwODMxZDYuLjVhZjdkMmJiYTBkNjIxOTU3MDRhOGQ0MWUNCj4gZjZlNjAwMzI3 MTY5NzcwIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaA0KPiA+ ICsrKyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uaA0KPiA+IEBAIC0yMyw2ICsyMyw3IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlDQo+ID4N Cj4gPiAgZXh0ZXJuIHRyZWUgbnVtYmVyX29mX2xhdGNoX2V4ZWN1dGlvbnMgKGNsYXNzIGxvb3Ag Kik7DQo+ID4gIGV4dGVybiBnY29uZCAqZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24gKGNvbnN0IGNs YXNzIGxvb3AgKik7DQo+ID4gK2V4dGVybiBnY29uZCAqZ2V0X2VkZ2VfY29uZGl0aW9uIChlZGdl KTsNCj4gPg0KPiA+ICBleHRlcm4gdm9pZCBzY2V2X2luaXRpYWxpemUgKHZvaWQpOw0KPiA+ICBl eHRlcm4gYm9vbCBzY2V2X2luaXRpYWxpemVkX3AgKHZvaWQpOw0KPiA+IGRpZmYgLS1naXQgYS9n Y2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmNjIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5j Yw0KPiA+IGluZGV4DQo+IDdlMmEzZTk4NjYxOWRlODdlNGFlOWRhZjE2MTk4YmUxZjEzYjkxN2Mu LjMwMTI4NzFkZDdmOWE3ZDE4OTdmOTZhMjkNCj4gYjFiMGIyOGQ5MGNiNjNmIDEwMDY0NA0KPiA+ IC0tLSBhL2djYy90cmVlLXNjYWxhci1ldm9sdXRpb24uY2MNCj4gPiArKysgYi9nY2MvdHJlZS1z Y2FsYXItZXZvbHV0aW9uLmNjDQo+ID4gQEAgLTg4NCw3ICs4ODQsNyBAQCBzY2V2X2Rmczo6YWRk X3RvX2V2b2x1dGlvbiAodHJlZSBjaHJlY19iZWZvcmUsDQo+IGVudW0gdHJlZV9jb2RlIGNvZGUs DQo+ID4gICAgcmV0dXJuIHJlczsNCj4gPiAgfQ0KPiA+DQo+ID4gLQ0KPiA+ICsNCj4gDQo+IA0K PiA+ICAvKiBGb2xsb3cgdGhlIHNzYSBlZGdlIGludG8gdGhlIGJpbmFyeSBleHByZXNzaW9uIFJI UzAgQ09ERSBSSFMxLg0KPiA+ICAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3Ryb25nbHkgY29ubmVj dGVkIGNvbXBvbmVudCBoYXMgYmVlbiBmb3VuZC4gICovDQo+ID4NCj4gPiBAQCAtMTI5NSw4ICsx Mjk1LDE1IEBAIHRhaWxfcmVjdXJzZToNCj4gPiAgZ2NvbmQgKg0KPiA+ICBnZXRfbG9vcF9leGl0 X2NvbmRpdGlvbiAoY29uc3QgY2xhc3MgbG9vcCAqbG9vcCkNCj4gPiAgew0KPiA+ICsgIHJldHVy biBnZXRfZWRnZV9jb25kaXRpb24gKG5vcm1hbF9leGl0IChsb29wKSk7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qIElmIHRoZSBzdGF0ZW1lbnQganVzdCBiZWZvcmUgdGhlIEVYSVRfRURHRSBjb250 YWlucyBhIGNvbmRpdGlvbiB0aGVuDQo+ID4gKyAgIHJldHVybiB0aGUgY29uZGl0aW9uLCBvdGhl cndpc2UgTlVMTC4gKi8NCj4gPiArDQo+ID4gK2djb25kICoNCj4gPiArZ2V0X2VkZ2VfY29uZGl0 aW9uIChlZGdlIGV4aXRfZWRnZSl7DQo+ID4gICAgZ2NvbmQgKnJlcyA9IE5VTEw7DQo+ID4gLSAg ZWRnZSBleGl0X2VkZ2UgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4NCj4gPiAgICBpZiAoZHVt cF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX1NDRVYpKQ0KPiA+ICAgICAgZnByaW50ZiAoZHVt cF9maWxlLCAiKGdldF9sb29wX2V4aXRfY29uZGl0aW9uIFxuICAiKTsNCj4gPiBkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MgYi9nY2MvdHJlZS12ZWN0LWRhdGEtcmVmcy5j Yw0KPiA+IGluZGV4DQo+IDRhMjNkNjE3MmFhYTEyYWQ3MDQ5ZGM2MjZlNWM0YWZiZDVjYTNmNzQu LjAyZTM3MzE3MTY3NTQzMmNkMzJjNGE3MjQ0DQo+IDBlZWJkZmY5ODhiZGNmIDEwMDY0NA0KPiA+ IC0tLSBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVj dC1kYXRhLXJlZnMuY2MNCj4gPiBAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdmVjdF9lbmhhbmNlX2Rh dGFfcmVmc19hbGlnbm1lbnQNCj4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykNCj4gPg0KPiA+ ICAgIC8qIENoZWNrIGlmIHdlIGNhbiBwb3NzaWJseSBwZWVsIHRoZSBsb29wLiAgKi8NCj4gPiAg ICBpZiAoIXZlY3RfY2FuX2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8pDQo+ID4gLSAgICAgIHx8 ICFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3AsIHNpbmdsZV9leGl0IChsb29wKSkN Cj4gPiArICAgICAgfHwgIXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcF92aW5mbywg bm9ybWFsX2V4aXQgKGxvb3ApKQ0KPiA+ICAgICAgICB8fCBsb29wLT5pbm5lcikNCj4gPiAgICAg IGRvX3BlZWxpbmcgPSBmYWxzZTsNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 LWxvb3AtbWFuaXAuY2MgYi9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MNCj4gPiBpbmRleA0K PiAxZDk2MTMwYzk4NWUyZGVmZDE0MWNmZGY2MDIyMjRjNzNiNGI0MWYyLi4wYjJhNDkyMDc1NGQ4 M2FlYjM3OTViNDM1DQo+IDY5M2Q2MWFkY2ZlOTJiNiAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJl ZS12ZWN0LWxvb3AtbWFuaXAuY2MNCj4gPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAu Y2MNCj4gPiBAQCAtNzcwLDcgKzc3MCw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3BhcnRp YWxfdmVjdG9ycyAoY2xhc3MgbG9vcA0KPiAqbG9vcCwNCj4gPiAgICBhZGRfaGVhZGVyX3NlcSAo bG9vcCwgaGVhZGVyX3NlcSk7DQo+ID4NCj4gPiAgICAvKiBHZXQgYSBib29sZWFuIHJlc3VsdCB0 aGF0IHRlbGxzIHVzIHdoZXRoZXIgdG8gaXRlcmF0ZS4gICovDQo+ID4gLSAgZWRnZSBleGl0X2Vk Z2UgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgZWRnZSBleGl0X2VkZ2UgPSBub3JtYWxf ZXhpdCAobG9vcCk7DQo+ID4gICAgdHJlZV9jb2RlIGNvZGUgPSAoZXhpdF9lZGdlLT5mbGFncyAm IEVER0VfVFJVRV9WQUxVRSkgPyBFUV9FWFBSIDoNCj4gTkVfRVhQUjsNCj4gPiAgICB0cmVlIHpl cm9fY3RybCA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHRlc3RfY3RybCkpOw0KPiA+ICAg IGdjb25kICpjb25kX3N0bXQgPSBnaW1wbGVfYnVpbGRfY29uZCAoY29kZSwgdGVzdF9jdHJsLCB6 ZXJvX2N0cmwsDQo+ID4gQEAgLTc4OSw3ICs3ODksNyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlv bl9wYXJ0aWFsX3ZlY3RvcnMgKGNsYXNzIGxvb3ANCj4gKmxvb3AsDQo+ID4gICAgaWYgKGZpbmFs X2l2KQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBnYXNzaWduICphc3NpZ24gPSBnaW1wbGVfYnVp bGRfYXNzaWduIChmaW5hbF9pdiwgb3JpZ19uaXRlcnMpOw0KPiA+IC0gICAgICBnc2lfaW5zZXJ0 X29uX2VkZ2VfaW1tZWRpYXRlIChzaW5nbGVfZXhpdCAobG9vcCksIGFzc2lnbik7DQo+ID4gKyAg ICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKGV4aXRfZWRnZSwgYXNzaWduKTsNCj4g PiAgICAgIH0NCj4gPg0KPiA+ICAgIHJldHVybiBjb25kX3N0bXQ7DQo+ID4gQEAgLTc5OSw3ICs3 OTksOCBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMgKGNsYXNzIGxv b3ANCj4gKmxvb3AsDQo+ID4gICAgIGxvb3AgaGFuZGxlcyBleGFjdGx5IFZGIHNjYWxhcnMgcGVy IGl0ZXJhdGlvbi4gICovDQo+ID4NCj4gPiAgc3RhdGljIGdjb25kICoNCj4gPiAtdmVjdF9zZXRf bG9vcF9jb25kaXRpb25fbm9ybWFsIChjbGFzcyBsb29wICpsb29wLCB0cmVlIG5pdGVycywgdHJl ZSBzdGVwLA0KPiA+ICt2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbywNCj4gPiArCQkJCWNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0ZXJzLCB0 cmVlIHN0ZXAsDQo+ID4gIAkJCQl0cmVlIGZpbmFsX2l2LCBib29sIG5pdGVyc19tYXliZV96ZXJv LA0KPiA+ICAJCQkJZ2ltcGxlX3N0bXRfaXRlcmF0b3IgbG9vcF9jb25kX2dzaSkNCj4gPiAgew0K PiA+IEBAIC04MDcsNyArODA4LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChj bGFzcyBsb29wICpsb29wLA0KPiB0cmVlIG5pdGVycywgdHJlZSBzdGVwLA0KPiA+ICAgIGdjb25k ICpjb25kX3N0bXQ7DQo+ID4gICAgZ2NvbmQgKm9yaWdfY29uZDsNCj4gPiAgICBlZGdlIHBlID0g bG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7DQo+ID4gLSAgZWRnZSBleGl0X2VkZ2UgPSBzaW5n bGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgZWRnZSBleGl0X2VkZ2UgPSBub3JtYWxfZXhpdCAobG9v cCk7DQo+ID4gICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaW5jcl9nc2k7DQo+ID4gICAgYm9vbCBp bnNlcnRfYWZ0ZXI7DQo+ID4gICAgZW51bSB0cmVlX2NvZGUgY29kZTsNCj4gPiBAQCAtODcyLDcg Kzg3MywxMSBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3ANCj4g Kmxvb3AsIHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ID4gIAkgSW4gYm90aCBjYXNlcyB0aGUg bG9vcCBsaW1pdCBpcyBOSVRFUlMgLSBTVEVQLiAgKi8NCj4gPiAgICAgICAgZ2ltcGxlX3NlcSBz ZXEgPSBOVUxMOw0KPiA+ICAgICAgICBsaW1pdCA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChuaXRl cnMsICZzZXEsIHRydWUsIE5VTExfVFJFRSk7DQo+ID4gLSAgICAgIGxpbWl0ID0gZ2ltcGxlX2J1 aWxkICgmc2VxLCBNSU5VU19FWFBSLCBUUkVFX1RZUEUgKGxpbWl0KSwgbGltaXQsDQo+IHN0ZXAp Ow0KPiA+ICsgICAgICAvKiBGb3IgVkxBIGxlYXZlIGxpbWl0ID09IG5pdGVycy4gIFRob3VnaCBJ IHdvbmRlciBpZiBtYXliZSBJIHNob3VsZA0KPiA+ICsJIGZvcmNlIHBhcnRpYWwgbG9vcHMgaGVy ZSBhbmQgdXNlDQo+IHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxfdmVjdG9ycw0KPiA+ ICsJIGluc3RlYWQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBWTCBjaGVjayBpcyB1c2VsZXNz IGhlcmUuICAqLw0KPiA+ICsgICAgICBpZiAoIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29w X3ZpbmZvKSAmJg0KPiAhTE9PUF9WSU5GT19OSVRFUlNfS05PV05fUCAobG9vcF92aW5mbykpDQo+ ID4gKwlsaW1pdCA9IGdpbXBsZV9idWlsZCAoJnNlcSwgTUlOVVNfRVhQUiwgVFJFRV9UWVBFIChs aW1pdCksIGxpbWl0LA0KPiBzdGVwKTsNCj4gPiAgICAgICAgaWYgKHNlcSkNCj4gPiAgCXsNCj4g PiAgCSAgYmFzaWNfYmxvY2sgbmV3X2JiID0gZ3NpX2luc2VydF9zZXFfb25fZWRnZV9pbW1lZGlh dGUgKHBlLA0KPiBzZXEpOw0KPiA+IEBAIC05MDcsNyArOTEyLDggQEAgdmVjdF9zZXRfbG9vcF9j b25kaXRpb25fbm9ybWFsIChjbGFzcyBsb29wICpsb29wLA0KPiB0cmVlIG5pdGVycywgdHJlZSBz dGVwLA0KPiA+ICAgIGdzaV9pbnNlcnRfYmVmb3JlICgmbG9vcF9jb25kX2dzaSwgY29uZF9zdG10 LCBHU0lfU0FNRV9TVE1UKTsNCj4gPg0KPiA+ICAgIC8qIFJlY29yZCB0aGUgbnVtYmVyIG9mIGxh dGNoIGl0ZXJhdGlvbnMuICAqLw0KPiA+IC0gIGlmIChsaW1pdCA9PSBuaXRlcnMpDQo+ID4gKyAg aWYgKGxpbWl0ID09IG5pdGVycw0KPiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFL UyAobG9vcF92aW5mbykpDQo+ID4gICAgICAvKiBDYXNlIEE6IHRoZSBsb29wIGl0ZXJhdGVzIE5J VEVSUyB0aW1lcy4gIFN1YnRyYWN0IG9uZSB0byBnZXQgdGhlDQo+ID4gICAgICAgICBsYXRjaCBj b3VudC4gICovDQo+ID4gICAgICBsb29wLT5uYl9pdGVyYXRpb25zID0gZm9sZF9idWlsZDIgKE1J TlVTX0VYUFIsIG5pdGVyc190eXBlLCBuaXRlcnMsDQo+ID4gQEAgLTkxOCwxMCArOTI0LDE3IEBA IHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAoY2xhc3MgbG9vcA0KPiAqbG9vcCwgdHJl ZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gPiAgICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBmb2xk X2J1aWxkMiAoVFJVTkNfRElWX0VYUFIsIG5pdGVyc190eXBlLA0KPiA+ICAJCQkJICAgICAgIGxp bWl0LCBzdGVwKTsNCj4gPg0KPiA+IC0gIGlmIChmaW5hbF9pdikNCj4gPiArICBhdXRvX3ZlYzxl ZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KPiA+ICsgIC8qIEZvciBt dWx0aXBsZSBleGl0cyB3ZSd2ZSBhbHJlYWR5IG1haW50YWluZWQgTENTU0EgZm9ybSBhbmQgaGFu ZGxlZA0KPiA+ICsgICAgIHRoZSBzY2FsYXIgaXRlcmF0aW9uIHVwZGF0ZSBpbiB0aGUgY29kZSB0 aGF0IGRlYWxzIHdpdGggdGhlIG1lcmdlDQo+ID4gKyAgICAgYmxvY2sgYW5kIGl0cyB1cGRhdGVk IGd1YXJkLiAgSSBjb3VsZCBtb3ZlIHRoYXQgY29kZSBoZXJlIGluc3RlYWQNCj4gPiArICAgICBv ZiBpbiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWsgYnV0IEkgaGF2ZSB0byBzdGls bCBkZWFsDQo+ID4gKyAgICAgd2l0aCB0aGUgdXBkYXRlcyB0byB0aGUgY291bnRlciBgaWAuICBT byBmb3Igbm93IEknbGwga2VlcCB0aGVtDQo+ID4gKyAgICAgdG9nZXRoZXIuICAqLw0KPiA+ICsg IGlmIChmaW5hbF9pdiAmJiBleGl0cy5sZW5ndGggKCkgPT0gMSkNCj4gPiAgICAgIHsNCj4gPiAg ICAgICAgZ2Fzc2lnbiAqYXNzaWduOw0KPiA+IC0gICAgICBlZGdlIGV4aXQgPSBzaW5nbGVfZXhp dCAobG9vcCk7DQo+ID4gKyAgICAgIGVkZ2UgZXhpdCA9IG5vcm1hbF9leGl0IChsb29wKTsNCj4g PiAgICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWRfcCAoZXhpdC0+ZGVzdCkpOw0KPiA+ICAg ICAgICB0cmVlIHBoaV9kZXN0DQo+ID4gIAk9IGludGVnZXJfemVyb3AgKGluaXQpID8gZmluYWxf aXYgOiBjb3B5X3NzYV9uYW1lIChpbmR4X2FmdGVyX2luY3IpOw0KPiA+IEBAIC05NzIsMTMgKzk4 NSwxNSBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gbG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ICAgIGdjb25kICpvcmlnX2NvbmQgPSBnZXRfbG9v cF9leGl0X2NvbmRpdGlvbiAobG9vcCk7DQo+ID4gICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgbG9v cF9jb25kX2dzaSA9IGdzaV9mb3Jfc3RtdCAob3JpZ19jb25kKTsNCj4gPg0KPiA+IC0gIGlmIChs b29wX3ZpbmZvICYmIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JTX1ANCj4gKGxvb3Bf dmluZm8pKQ0KPiA+ICsgIGlmIChsb29wX3ZpbmZvDQo+ID4gKyAgICAgICYmIExPT1BfVklORk9f VVNJTkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pKQ0KPiA+ICAgICAgY29uZF9zdG10 ID0gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlhbF92ZWN0b3JzIChsb29wLCBsb29wX3Zp bmZvLA0KPiA+ICAJCQkJCQkJIG5pdGVycywgZmluYWxfaXYsDQo+ID4gIAkJCQkJCQkgbml0ZXJz X21heWJlX3plcm8sDQo+ID4gIAkJCQkJCQkgbG9vcF9jb25kX2dzaSk7DQo+ID4gICAgZWxzZQ0K PiA+IC0gICAgY29uZF9zdG10ID0gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29w LCBuaXRlcnMsIHN0ZXAsDQo+IGZpbmFsX2l2LA0KPiA+ICsgICAgY29uZF9zdG10ID0gdmVjdF9z ZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChsb29wX3ZpbmZvLCBsb29wLCBuaXRlcnMsDQo+ID4g KwkJCQkJCXN0ZXAsIGZpbmFsX2l2LA0KPiA+ICAJCQkJCQluaXRlcnNfbWF5YmVfemVybywNCj4g PiAgCQkJCQkJbG9vcF9jb25kX2dzaSk7DQo+ID4NCj4gPiBAQCAtMTA2Niw3ICsxMDgxLDcgQEAg c2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKGNsYXNzDQo+IGxvb3AgKmxv b3AsDQo+ID4gICAgZWRnZSBleGl0LCBuZXdfZXhpdDsNCj4gPiAgICBib29sIGR1cGxpY2F0ZV9v dXRlcl9sb29wID0gZmFsc2U7DQo+ID4NCj4gPiAtICBleGl0ID0gc2luZ2xlX2V4aXQgKGxvb3Ap Ow0KPiA+ICsgIGV4aXQgPSBub3JtYWxfZXhpdCAobG9vcCk7DQo+ID4gICAgYXRfZXhpdCA9IChl ID09IGV4aXQpOw0KPiA+ICAgIGlmICghYXRfZXhpdCAmJiBlICE9IGxvb3BfcHJlaGVhZGVyX2Vk Z2UgKGxvb3ApKQ0KPiA+ICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gQEAgLTExMDQsMTEgKzExMTks MTEgQEAgc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gKGNsYXNzIGxv b3AgKmxvb3AsDQo+ID4gICAgYmJzWzBdID0gcHJlaGVhZGVyOw0KPiA+ICAgIG5ld19iYnMgPSBY TkVXVkVDIChiYXNpY19ibG9jaywgc2NhbGFyX2xvb3AtPm51bV9ub2RlcyArIDEpOw0KPiA+DQo+ ID4gLSAgZXhpdCA9IHNpbmdsZV9leGl0IChzY2FsYXJfbG9vcCk7DQo+ID4gKyAgZXhpdCA9IG5v cm1hbF9leGl0IChzY2FsYXJfbG9vcCk7DQo+ID4gICAgY29weV9iYnMgKGJicywgc2NhbGFyX2xv b3AtPm51bV9ub2RlcyArIDEsIG5ld19iYnMsDQo+ID4gIAkgICAgJmV4aXQsIDEsICZuZXdfZXhp dCwgTlVMTCwNCj4gPiAgCSAgICBhdF9leGl0ID8gbG9vcC0+bGF0Y2ggOiBlLT5zcmMsIHRydWUp Ow0KPiA+IC0gIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgZXhpdCA9IG5vcm1h bF9leGl0IChsb29wKTsNCj4gPiAgICBiYXNpY19ibG9jayBuZXdfcHJlaGVhZGVyID0gbmV3X2Ji c1swXTsNCj4gPg0KPiA+ICAgIC8qIEJlZm9yZSBpbnN0YWxsaW5nIFBISSBhcmd1bWVudHMgbWFr ZSBzdXJlIHRoYXQgdGhlIGVkZ2VzDQo+ID4gQEAgLTExNzYsMTEgKzExOTEsNTMgQEAgc2xwZWVs X3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gKGNsYXNzIGxvb3AgKmxvb3AsDQo+ ID4gIAkgICAgICBhZGRfcGhpX2FyZyAocGhpLCBvcmlnX2FyZywgbmV3X2V4aXQsIG9yaWdfbG9j dXMpOw0KPiA+ICAJICAgIH0NCj4gPiAgCX0NCj4gPiArDQo+ID4gKyAgICAgIC8qIElmIGhhdmUg bXVsdGlwbGUgZXhpc3QsIHdlIG5vdyBuZWVkIHRvIHBvaW50IHRoZSBhZGRpdGlvbmFsIGV4aXRz DQo+ID4gKwkgZnJvbSB0aGUgb2xkIGxvb3AgdG8gdGhlIGxvb3AgcHJlLWhlYWRlciBvZiB0aGUg bmV3IGNvcGllZCBsb29wLg0KPiA+ICsJIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgc2ltcGxl IGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gc28gYWxsDQo+ID4gKwkgYWRkaXRpb25hbCBleGl0 cyBtdXN0IGV4aXQgdGhlIGxvb3AuIEFkZGl0aW9uYWxseSB3ZSBjYW4gb25seSBwbGFjZQ0KPiA+ ICsJIGNvcGllcyBhdCB0aGUgZW5kLiAgaS5lLiB3ZSBjYW5ub3QgZG8gcHJvbG9ndWUgcGVlbGlu Zy4gICovDQo+ID4gKyAgICAgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9l ZGdlcyAobG9vcCk7DQo+ID4gKyAgICAgIGJvb2wgbXVsdGlwbGVfZXhpdHNfcCA9IGV4aXRzLmxl bmd0aCAoKSA+IDE7DQo+ID4gKw0KPiA+ICsgICAgICAvKiBDaGVjayB0byBzZWUgaWYgYWxsIG9m IHRoZSBleGl0cyBwb2ludCB0byB0aGUgbG9vcCBoZWFkZXIuICBJZiB0aGV5DQo+ID4gKwkgZG9u J3QgdGhlbiB3ZSBoYXZlIGFuIGludGVybWVkaWF0ZSBCQiB0aGF0J3Mgbm8gbG9uZ2VyIHVzZWZ1 bCBhZnRlcg0KPiA+ICsJIHRoZSBjb3B5IGFuZCB3ZSBzaG91bGQgcmVtb3ZlIGl0LiAqLw0KPiA+ ICsgICAgICBib29sIGltbV9leGl0ID0gdHJ1ZTsNCj4gPiArICAgICAgZm9yIChhdXRvIGV4aXQg OiBleGl0cykNCj4gPiArCXsNCj4gPiArCSAgIGltbV9leGl0ID0gaW1tX2V4aXQgJiYgZXhpdC0+ ZGVzdCA9PSBsb29wLT5oZWFkZXI7DQo+ID4gKwkgICBpZiAoIWltbV9leGl0KQ0KPiA+ICsJICAg ICBicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7 IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykNCj4gPiArCXsNCj4gPiArCSAgcmVkaXJlY3RfZWRn ZV9hbmRfYnJhbmNoIChleGl0c1tpXSwgbmV3X3ByZWhlYWRlcik7DQo+ID4gKwkgIGZsdXNoX3Bl bmRpbmdfc3RtdHMgKGV4aXRzW2ldKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKyAgICAgIC8qIE1h aW4gZXhpdCBtdXN0IGJlIHRoZSBsYXN0IHRvIGJlIHJld3JpdHRlbiBhcyBpdCdzIHRoZSBmaXJz dCBwaGkgbm9kZQ0KPiA+ICsJIGVudHJ5LiAgVGhlIHJlc3QgYXJlIGluIGFycmF5IG9yZGVyLiAg Ki8NCj4gPiAgICAgICAgcmVkaXJlY3RfZWRnZV9hbmRfYnJhbmNoX2ZvcmNlIChlLCBuZXdfcHJl aGVhZGVyKTsNCj4gPiAgICAgICAgZmx1c2hfcGVuZGluZ19zdG10cyAoZSk7DQo+ID4gLSAgICAg IHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgbmV3X3ByZWhlYWRlciwg ZS0NCj4gPnNyYyk7DQo+ID4gKw0KPiA+ICsgICAgICAvKiBPbmx5IHVwZGF0ZSB0aGUgZG9taW5h dG9ycyBvZiB0aGUgbmV3X3ByZWhlYWRlciB0byB0aGUgb2xkIGV4aXQgaWYNCj4gPiArCSB3ZSBo YXZlIGVmZmVjdGl2ZWx5IGEgc2luZ2xlIGV4aXQuICAqLw0KPiA+ICsgICAgICBpZiAoIW11bHRp cGxlX2V4aXRzX3ANCj4gPiArCSAgfHwgZXhpdHNbMV0tPnNyYyAhPSBFREdFX1BSRUQgKGV4aXRz WzBdLT5zcmMsIDApLT5zcmMpDQo+ID4gKyAgICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3Ig KENESV9ET01JTkFUT1JTLCBuZXdfcHJlaGVhZGVyLCBlLQ0KPiA+c3JjKTsNCj4gPiArICAgICAg ZWxzZQ0KPiA+ICsJc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBuZXdf cHJlaGVhZGVyLA0KPiBleGl0c1sxXS0+c3JjKTsNCj4gPiArDQo+ID4gKyAgICAgIGF1dG9fdmVj PGVkZ2U+IG5ld19leGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKG5ld19sb29wKTsNCj4gPiAg ICAgICAgaWYgKHdhc19pbW1fZG9tIHx8IGR1cGxpY2F0ZV9vdXRlcl9sb29wKQ0KPiA+IC0Jc2V0 X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0X2Rlc3QsDQo+IG5ld19l eGl0LT5zcmMpOw0KPiA+ICsJew0KPiA+ICsJICBpZiAoIW11bHRpcGxlX2V4aXRzX3ApDQo+ID4g KwkgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0X2Rlc3Qs DQo+IG5ld19leGl0LT5zcmMpOw0KPiA+ICsJICBlbHNlDQo+ID4gKwkgICAgc2V0X2ltbWVkaWF0 ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0X2Rlc3QsDQo+IG5ld19leGl0c1sxXS0+ c3JjKTsNCj4gPiArCX0NCj4gPg0KPiA+ICAgICAgICAvKiBBbmQgcmVtb3ZlIHRoZSBub24tbmVj ZXNzYXJ5IGZvcndhcmRlciBhZ2Fpbi4gIEtlZXAgdGhlIG90aGVyDQo+ID4gICAgICAgICAgIG9u ZSBzbyB3ZSBoYXZlIGEgcHJvcGVyIHByZS1oZWFkZXIgZm9yIHRoZSBsb29wIGF0IHRoZSBleGl0 IGVkZ2UuICAqLw0KPiA+IEBAIC0xMTg5LDYgKzEyNDYsMzkgQEAgc2xwZWVsX3RyZWVfZHVwbGlj YXRlX2xvb3BfdG9fZWRnZV9jZmcgKGNsYXNzDQo+IGxvb3AgKmxvb3AsDQo+ID4gICAgICAgIGRl bGV0ZV9iYXNpY19ibG9jayAocHJlaGVhZGVyKTsNCj4gPiAgICAgICAgc2V0X2ltbWVkaWF0ZV9k b21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBzY2FsYXJfbG9vcC0+aGVhZGVyLA0KPiA+ICAJCQkg ICAgICAgbG9vcF9wcmVoZWFkZXJfZWRnZSAoc2NhbGFyX2xvb3ApLT5zcmMpOw0KPiA+ICsNCj4g PiArICAgICAgLyogRmluYWxseSBhZnRlciB3aXJpbmcgdGhlIG5ldyBlcGlsb2d1ZSB3ZSBuZWVk IHRvIHVwZGF0ZSBpdHMgbWFpbg0KPiBleGl0DQo+ID4gKwkgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0 aW9uIGV4aXQgd2UgcmVjb3JkZWQuICBPdGhlciBleGl0cyBhcmUgYWxyZWFkeQ0KPiA+ICsJIGNv cnJlY3QuICAqLw0KPiA+ICsgICAgICBpZiAoIWltbV9leGl0ICYmIG11bHRpcGxlX2V4aXRzX3Ap DQo+ID4gKwl7DQo+ID4gKwkgIC8qIEZvciBub3cgd2UgZXhwZWN0IGF0IG1vc3QgYSBzaW5nbGUg c3VjY2Vzc29yIGhlcmUsIGJ1dCB3ZSBtaWdodA0KPiBiZQ0KPiA+ICsJICAgICBhYmxlIHRvIGV4 dGVuZCB0aGlzIHRvIG11bHRpcGxlLiAgKi8NCj4gPiArCSAgaWYgKHNpbmdsZV9zdWNjX3AgKG5l d19leGl0LT5kZXN0KSAmJiBzaW5nbGVfcHJlZF9wIChuZXdfZXhpdC0NCj4gPmRlc3QpKQ0KPiA+ ICsJICAgIHsNCj4gPiArCSAgICAgIGVkZ2UgZXhpdF9lZGdlID0gc2luZ2xlX3N1Y2NfZWRnZSAo bmV3X2V4aXQtPmRlc3QpOw0KPiA+ICsJICAgICAgLyogTm93IGNvcnJlY3QgdGhlIGRvbWluYXRv cnMgdGhhdCB3ZXJlIG1lc3NlZCB1cCBkdXJpbmcgdGhlDQo+IGNvcHlpbmcNCj4gPiArCQkgYXMg dGhlIENGRyB3YXMgdHdlYWtlZCBhIGJpdC4gICovDQo+ID4gKwkgICAgICAvKiBUaGUgbWFpbiBl eGl0IGlzIG5vdyBkb21pbmF0ZWQgYnkgYSBuZXcgZmFsbCB0aHJvdWdoIGVkZ2UuICAqLw0KPiA+ ICsJICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0X2Vk Z2UtPnNyYywNCj4gPiArCQkJCSAgICAgICBuZXdfZXhpdHNbMF0tPnNyYyk7DQo+ID4gKwkgICAg ICAvKiBJZiB0aGlzIGlzIGEgZmFsbCB0aHJvdWdoIGVkZ2UgdGhlbiBkb24ndCB1cGRhdGUgZG9t cy4gICovDQo+ID4gKwkgICAgICBpZiAoIWVtcHR5X2Jsb2NrX3AgKGV4aXRfZWRnZS0+c3JjKSkN Cj4gPiArCQlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4aXRfZWRn ZS0NCj4gPmRlc3QsDQo+ID4gKwkJCQkJIG5ld19leGl0c1sxXS0+c3JjKTsNCj4gPiArCSAgICB9 DQo+ID4gKw0KPiA+ICsJICAvKiBUaGUgZXhpdHMgZnJvbSB0aGUgQkIgd2l0aCB0aGUgZWFybHkg ZXhpdCBkb21pbmF0ZSB0aGUgbmV3DQo+IGZ1bmN0aW9uDQo+ID4gKwkgICAgIGV4aXQgZWRnZSBh bmQgYWxzbyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGxvb3AuICBUaGUgZWRnZXMgd2VyZQ0KPiA+ ICsJICAgICBjb3BpZWQgY29ycmVjdGx5IGJ1dCB0aGUgZG9tcyBhcmUgd3JvbmcgYmVjYXVzZSBk dXJpbmcgdGhlDQo+IGNvcHlpbmcNCj4gPiArCSAgICAgc29tZSBvZiB0aGUgaW50ZXJtZWRpYXRl IGVkZ2VzIGFyZSByZXdyaXR0ZW4uICAgKi8NCj4gPiArCSAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0 b3IgKENESV9ET01JTkFUT1JTLCBuZXdfZXhpdHNbMF0tPnNyYywNCj4gPiArCQkJCSAgIG5ld19l eGl0c1sxXS0+c3JjKTsNCj4gPiArCSAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01J TkFUT1JTLCBuZXdfZXhpdHNbMF0tDQo+ID5kZXN0LA0KPiA+ICsJCQkJICAgbmV3X2V4aXRzWzBd LT5zcmMpOw0KPiA+ICsJICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMs IG5ld19leGl0c1sxXS0NCj4gPmRlc3QsDQo+ID4gKwkJCQkgICBuZXdfZXhpdHNbMV0tPnNyYyk7 DQo+ID4gKwl9DQo+ID4gICAgICB9DQo+ID4gICAgZWxzZSAvKiBBZGQgdGhlIGNvcHkgYXQgZW50 cnkuICAqLw0KPiA+ICAgICAgew0KPiA+IEBAIC0xMzEwLDIwICsxNDAwLDI0IEBAIHNscGVlbF9h ZGRfbG9vcF9ndWFyZCAoYmFzaWNfYmxvY2sgZ3VhcmRfYmIsDQo+IHRyZWUgY29uZCwNCj4gPiAg ICovDQo+ID4NCj4gPiAgYm9vbA0KPiA+IC1zbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNv bnN0IGNsYXNzIGxvb3AgKmxvb3AsIGNvbnN0X2VkZ2UgZSkNCj4gPiArc2xwZWVsX2Nhbl9kdXBs aWNhdGVfbG9vcF9wIChjb25zdCBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IGNvbnN0X2Vk Z2UgZSkNCj4gPiAgew0KPiA+IC0gIGVkZ2UgZXhpdF9lID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0K PiA+ICsgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0K PiA+ICsgIGVkZ2UgZXhpdF9lID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0KPiA+ICAgIGVkZ2UgZW50 cnlfZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOw0KPiA+ICAgIGdjb25kICpvcmlnX2Nv bmQgPSBnZXRfbG9vcF9leGl0X2NvbmRpdGlvbiAobG9vcCk7DQo+ID4gICAgZ2ltcGxlX3N0bXRf aXRlcmF0b3IgbG9vcF9leGl0X2dzaSA9IGdzaV9sYXN0X2JiIChleGl0X2UtPnNyYyk7DQo+ID4g ICAgdW5zaWduZWQgaW50IG51bV9iYiA9IGxvb3AtPmlubmVyPyA1IDogMjsNCj4gPg0KPiA+ICsg IGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gKyAgICBudW1f YmIgKz0gMTsNCj4gPiArDQo+ID4gICAgLyogQWxsIGxvb3BzIGhhdmUgYW4gb3V0ZXIgc2NvcGU7 IHRoZSBvbmx5IGNhc2UgbG9vcC0+b3V0ZXIgaXMgTlVMTCBpcyBmb3INCj4gPiAgICAgICB0aGUg ZnVuY3Rpb24gaXRzZWxmLiAgKi8NCj4gPiAgICBpZiAoIWxvb3Bfb3V0ZXIgKGxvb3ApDQo+ID4g ICAgICAgIHx8IGxvb3AtPm51bV9ub2RlcyAhPSBudW1fYmINCj4gPiAgICAgICAgfHwgIWVtcHR5 X2Jsb2NrX3AgKGxvb3AtPmxhdGNoKQ0KPiA+IC0gICAgICB8fCAhc2luZ2xlX2V4aXQgKGxvb3Ap DQo+ID4gKyAgICAgIHx8ICghc2luZ2xlX2V4aXQgKGxvb3ApICYmICFMT09QX1ZJTkZPX0VBUkxZ X0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gICAgICAgIC8qIFZlcmlmeSB0aGF0IG5ldyBsb29w IGV4aXQgY29uZGl0aW9uIGNhbiBiZSB0cml2aWFsbHkgbW9kaWZpZWQuICAqLw0KPiA+ICAgICAg ICB8fCAoIW9yaWdfY29uZCB8fCBvcmlnX2NvbmQgIT0gZ3NpX3N0bXQgKGxvb3BfZXhpdF9nc2kp KQ0KPiA+ICAgICAgICB8fCAoZSAhPSBleGl0X2UgJiYgZSAhPSBlbnRyeV9lKSkNCj4gPiBAQCAt MTUyOCw2ICsxNjIyLDEyIEBAIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyDQo+IChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gICAgZ3BoaV9pdGVyYXRvciBnc2ksIGdzaTE7 DQo+ID4gICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7 DQo+ID4gICAgYmFzaWNfYmxvY2sgdXBkYXRlX2JiID0gdXBkYXRlX2UtPmRlc3Q7DQo+ID4gKw0K PiA+ICsgIC8qIEZvciBlYXJseSBleGl0cyB3ZSdsbCB1cGRhdGUgdGhlIElWcyBpbg0KPiA+ICsg ICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhay4gICovDQo+ID4gKyAgaWYgKExP T1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiArICAgIHJldHVybjsNCj4g PiArDQo+ID4gICAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVz dDsNCj4gPg0KPiA+ICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBleGlzdHMgYSBzaW5nbGUtcHJlZGVj ZXNzb3IgZXhpdCBiYjogICovDQo+ID4gQEAgLTE2MTMsNiArMTcxMywxODYgQEAgdmVjdF91cGRh dGVfaXZzX2FmdGVyX3ZlY3Rvcml6ZXINCj4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4g PiAgICAgICAgLyogRml4IHBoaSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8N Cj4gPiAgICAgICAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMgKHBoaTEsIHVwZGF0ZV9lLCBu aV9uYW1lKTsNCj4gPiAgICAgIH0NCj4gPiArICByZXR1cm47DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qICAgRnVuY3Rpb24gdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrLg0KPiA+ICsN Cj4gPiArICAgICAiQWR2YW5jZSIgdGhlIGluZHVjdGlvbiB2YXJpYWJsZXMgb2YgTE9PUCB0byB0 aGUgdmFsdWUgdGhleSBzaG91bGQNCj4gdGFrZQ0KPiA+ICsgICAgIGFmdGVyIHRoZSBleGVjdXRp b24gb2YgTE9PUC4gIFRoaXMgaXMgY3VycmVudGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQ0KPiA+ ICsgICAgIHZlY3Rvcml6ZXIgZG9lcyBub3QgaGFuZGxlIGluZHVjdGlvbiB2YXJpYWJsZXMgdGhh dCBhcmUgdXNlZCBhZnRlciB0aGUNCj4gPiArICAgICBsb29wLiAgU3VjaCBhIHNpdHVhdGlvbiBv Y2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVyYXRpb25zIG9mIExPT1AgYXJlDQo+ID4gKyAgICAgcGVl bGVkLCBiZWNhdXNlIG9mIHRoZSBlYXJseSBleGl0LiAgV2l0aCBhbiBlYXJseSBleGl0IHdlIGFs d2F5cyBwZWVsIHRoZQ0KPiA+ICsgICAgIGxvb3AuDQo+ID4gKw0KPiA+ICsgICAgIElucHV0Og0K PiA+ICsgICAgIC0gTE9PUF9WSU5GTyAtIGEgbG9vcCBpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGxv b3AgdGhhdCBpcyBnb2luZyB0byBiZQ0KPiA+ICsJCSAgICB2ZWN0b3JpemVkLiBUaGUgbGFzdCBm ZXcgaXRlcmF0aW9ucyBvZiBMT09QIHdlcmUgcGVlbGVkLg0KPiA+ICsgICAgIC0gTE9PUCAtIGEg bG9vcCB0aGF0IGlzIGdvaW5nIHRvIGJlIHZlY3Rvcml6ZWQuIFRoZSBsYXN0IGZldyBpdGVyYXRp b25zDQo+ID4gKwkgICAgICBvZiBMT09QIHdlcmUgcGVlbGVkLg0KPiA+ICsgICAgIC0gVkYgLSBU aGUgbG9vcCB2ZWN0b3JpemF0aW9uIGZhY3Rvci4NCj4gPiArICAgICAtIE5JVEVSU19PUklHIC0g dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgTE9PUCBleGVjdXRlcyAoYmVmb3JlDQo+IGl0 IGlzDQo+ID4gKwkJICAgICB2ZWN0b3JpemVkKS4gaS5lLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRo ZSBpdnMgc2hvdWxkIGJlDQo+ID4gKwkJICAgICBidW1wZWQuDQo+ID4gKyAgICAgLSBOSVRFUlNf VkVDVE9SIC0gVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoYXQgdGhlIHZlY3RvciBMT09QDQo+ IGV4ZWN1dGVzLg0KPiA+ICsgICAgIC0gVVBEQVRFX0UgLSBhIHN1Y2Nlc3NvciBlZGdlIG9mIExP T1AtPmV4aXQgdGhhdCBpcyBvbiB0aGUgKG9ubHkpIHBhdGgNCj4gPiArCQkgIGNvbWluZyBvdXQg ZnJvbSBMT09QIG9uIHdoaWNoIHRoZXJlIGFyZSB1c2VzIG9mIHRoZSBMT09QDQo+IGl2cw0KPiA+ ICsJCSAgKHRoaXMgaXMgdGhlIHBhdGggZnJvbSBMT09QLT5leGl0IHRvIGVwaWxvZ19sb29wLQ0K PiA+cHJlaGVhZGVyKS4NCj4gPiArDQo+ID4gKwkJICBUaGUgbmV3IGRlZmluaXRpb25zIG9mIHRo ZSBpdnMgYXJlIHBsYWNlZCBpbiBMT09QLT5leGl0Lg0KPiA+ICsJCSAgVGhlIHBoaSBhcmdzIGFz c29jaWF0ZWQgd2l0aCB0aGUgZWRnZSBVUERBVEVfRSBpbiB0aGUgYmINCj4gPiArCQkgIFVQREFU RV9FLT5kZXN0IGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5Lg0KPiA+ICsNCj4gPiArICAgICBPdXRw dXQ6DQo+ID4gKyAgICAgICAtIElmIGF2YWlsYWJsZSwgdGhlIExDU1NBIHBoaSBub2RlIGZvciB0 aGUgbG9vcCBJViB0ZW1wLg0KPiA+ICsNCj4gPiArICAgICBBc3N1bXB0aW9uIDE6IExpa2UgdGhl IHJlc3Qgb2YgdGhlIHZlY3Rvcml6ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcw0KPiA+ICsgICAg IGEgc2luZ2xlIGxvb3AgZXhpdCB0aGF0IGhhcyBhIHNpbmdsZSBwcmVkZWNlc3Nvci4NCj4gPiAr DQo+ID4gKyAgICAgQXNzdW1wdGlvbiAyOiBUaGUgcGhpIG5vZGVzIGluIHRoZSBMT09QIGhlYWRl ciBhbmQgaW4gdXBkYXRlX2JiIGFyZQ0KPiA+ICsgICAgIG9yZ2FuaXplZCBpbiB0aGUgc2FtZSBv cmRlci4NCj4gPiArDQo+ID4gKyAgICAgQXNzdW1wdGlvbiAzOiBUaGUgYWNjZXNzIGZ1bmN0aW9u IG9mIHRoZSBpdnMgaXMgc2ltcGxlIGVub3VnaCAoc2VlDQo+ID4gKyAgICAgdmVjdF9jYW5fYWR2 YW5jZV9pdnNfcCkuICBUaGlzIGFzc3VtcHRpb24gd2lsbCBiZSByZWxheGVkIGluIHRoZQ0KPiBm dXR1cmUuDQo+ID4gKw0KPiA+ICsgICAgIEFzc3VtcHRpb24gNDogRXhhY3RseSBvbmUgb2YgdGhl IHN1Y2Nlc3NvcnMgb2YgTE9PUCBleGl0LWJiIGlzIG9uIGENCj4gcGF0aA0KPiA+ICsgICAgIGNv bWluZyBvdXQgb2YgTE9PUCBvbiB3aGljaCB0aGUgaXZzIG9mIExPT1AgYXJlIHVzZWQgKHRoaXMg aXMgdGhlIHBhdGgNCj4gPiArICAgICB0aGF0IGxlYWRzIHRvIHRoZSBlcGlsb2cgbG9vcDsgb3Ro ZXIgcGF0aHMgc2tpcCB0aGUgZXBpbG9nIGxvb3ApLiAgVGhpcw0KPiA+ICsgICAgIHBhdGggc3Rh cnRzIHdpdGggdGhlIGVkZ2UgVVBEQVRFX0UsIGFuZCBpdHMgZGVzdGluYXRpb24gKGRlbm90ZWQN Cj4gdXBkYXRlX2JiKQ0KPiA+ICsgICAgIG5lZWRzIHRvIGhhdmUgaXRzIHBoaXMgdXBkYXRlZC4N Cj4gPiArICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgdHJlZQ0KPiA+ICt2ZWN0X3VwZGF0ZV9pdnNf YWZ0ZXJfZWFybHlfYnJlYWsgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgY2xhc3MgbG9vcA0K PiAqLA0KPiA+ICsJCQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJlZSBuaXRlcnNfb3JpZywNCj4gPiAr CQkJCSAgIHRyZWUgbml0ZXJzX3ZlY3RvciwgZWRnZSB1cGRhdGVfZSkNCj4gPiArew0KPiA+ICsg IGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiA+ICsgIHRyZWUgbmlfbmFtZSwgaXZ0bXAgPSBO VUxMOw0KPiA+ICsgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3Bfdmlu Zm8pOw0KPiA+ICsgIGJhc2ljX2Jsb2NrIHVwZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0Ow0KPiA+ ICsgIGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ ID4gKw0KPiA+ICsgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBleGl0c1swXS0+ZGVzdDsNCj4gPiAr DQo+ID4gKyAgaWYgKCFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4g KyAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhp cyAobG9vcC0+aGVhZGVyKSwgZ3NpMSA9IGdzaV9zdGFydF9waGlzDQo+ICh1cGRhdGVfYmIpOw0K PiA+ICsgICAgICAgIWdzaV9lbmRfcCAoZ3NpKSAmJiAhZ3NpX2VuZF9wIChnc2kxKTsNCj4gPiAr ICAgICAgIGdzaV9uZXh0ICgmZ3NpKSwgZ3NpX25leHQgKCZnc2kxKSkNCj4gPiArICAgIHsNCj4g PiArICAgICAgdHJlZSBpbml0X2V4cHI7DQo+ID4gKyAgICAgIHRyZWUgc3RlcF9leHByOw0KPiA+ ICsgICAgICB0cmVlIHR5cGU7DQo+ID4gKyAgICAgIHRyZWUgdmFyLCBuaTsNCj4gPiArICAgICAg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgbGFzdF9nc2k7DQo+ID4gKw0KPiA+ICsgICAgICBncGhpICpw aGkgPSBnc2kxLnBoaSAoKTsNCj4gPiArICAgICAgdHJlZSBwaGlfc3NhID0gUEhJX0FSR19ERUZf RlJPTV9FREdFIChwaGksDQo+IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsNCj4gPiArICAg ICAgZ3BoaSAqcGhpMSA9IGFzX2EgPGdwaGkgKj4gKFNTQV9OQU1FX0RFRl9TVE1UIChwaGlfc3Nh KSk7DQo+ID4gKyAgICAgIHN0bXRfdmVjX2luZm8gcGhpX2luZm8gPSBsb29wX3ZpbmZvLT5sb29r dXBfc3RtdCAoZ3NpLnBoaSAoKSk7DQo+ID4gKyAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkN Cj4gPiArCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJ CSAidmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2JyZWFrOiBwaGk6ICVHIiwNCj4gPiArCQkJ IChnaW1wbGUgKilwaGkpOw0KPiA+ICsNCj4gPiArICAgICAgLyogU2tpcCByZWR1Y3Rpb24gYW5k IHZpcnR1YWwgcGhpcy4gICovDQo+ID4gKyAgICAgIGlmICghaXZfcGhpX3AgKHBoaV9pbmZvKSkN Cj4gPiArCXsNCj4gPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJICAgIGR1bXBf cHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCSAgICAgInJlZHVj IG9yIHZpcnR1YWwgcGhpLiBza2lwLlxuIik7DQo+ID4gKwkgIGNvbnRpbnVlOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArICAgICAgLyogRm9yIG11bHRpcGxlIGV4aXRzIHdoZXJlIHdlIGhhbmRsZSBl YXJseSBleGl0cyB3ZSBuZWVkIHRvIGNhcnJ5IG9uDQo+ID4gKwkgd2l0aCB0aGUgcHJldmlvdXMg SVYgYXMgbG9vcCBpdGVyYXRpb24gd2FzIG5vdCBkb25lIGJlY2F1c2Ugd2UNCj4gZXhpdGVkDQo+ ID4gKwkgZWFybHkuICBBcyBzdWNoIGp1c3QgZ3JhYiB0aGUgb3JpZ2luYWwgSVYuICAqLw0KPiA+ ICsgICAgICBpZiAoU1RNVF9WSU5GT19UWVBFIChwaGlfaW5mbykgIT0gdW5kZWZfdmVjX2luZm9f dHlwZSkNCj4gPiArCXsNCj4gPiArCSAgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX3BoaV9yZXN1 bHQgKHBoaSkpOw0KPiA+ICsJICBzdGVwX2V4cHIgPSBTVE1UX1ZJTkZPX0xPT1BfUEhJX0VWT0xV VElPTl9QQVJUDQo+IChwaGlfaW5mbyk7DQo+ID4gKwkgIHN0ZXBfZXhwciA9IHVuc2hhcmVfZXhw ciAoc3RlcF9leHByKTsNCj4gPiArDQo+ID4gKwkgIC8qIFdlIHByZXZpb3VzbHkgZ2VuZXJhdGVk IHRoZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcw0KPiB0aGUNCj4gPiArCSAgICAg Z3VhcmQuICBTbyB1c2UgdGhhdCB0byBwZXJmb3JtIHRoZSBzY2FsaW5nIG9uIHJhdGhlciB0aGFu IHRoZQ0KPiA+ICsJICAgICBub3JtYWwgbG9vcCBwaGkgd2hpY2ggZG9uJ3QgdGFrZSB0aGUgZWFy bHkgYnJlYWtzIGludG8gYWNjb3VudC4gICovDQo+ID4gKwkgIGluaXRfZXhwciA9IGdpbXBsZV9w aGlfcmVzdWx0IChwaGkxKTsgLy9QSElfQVJHX0RFRl9GUk9NX0VER0UNCj4gKHBoaTEsIGxvb3Bf cHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsNCj4gPiArDQo+ID4gKwkgIG5pID0gZm9sZF9idWlsZDIg KE1VTFRfRVhQUiwgVFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KPiA+ICsJCQkgICAgZm9sZF9jb252 ZXJ0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIGluaXRfZXhwciksDQo+ID4gKwkJCSAgICBidWls ZF9pbnRfY3N0IChUUkVFX1RZUEUgKHN0ZXBfZXhwciksIHZmKSk7DQo+ID4gKw0KPiA+ICsJICB2 YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgInRtcCIpOw0KPiA+ICsNCj4gPiArCSAgbGFzdF9n c2kgPSBnc2lfbGFzdF9iYiAoZXhpdF9iYik7DQo+ID4gKwkgIGdpbXBsZV9zZXEgbmV3X3N0bXRz ID0gTlVMTDsNCj4gPiArCSAgbmlfbmFtZSA9IGZvcmNlX2dpbXBsZV9vcGVyYW5kIChuaSwgJm5l d19zdG10cywgZmFsc2UsIHZhcik7DQo+ID4gKwkgIC8qIEV4aXRfYmIgc2hvdWxkbid0IGJlIGVt cHR5LiAgKi8NCj4gPiArCSAgaWYgKCFnc2lfZW5kX3AgKGxhc3RfZ3NpKSkNCj4gPiArCSAgICBn c2lfaW5zZXJ0X3NlcV9hZnRlciAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQp Ow0KPiA+ICsJICBlbHNlDQo+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYmVmb3JlICgmbGFzdF9n c2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gKw0KPiA+ICsJICAvKiBGaXggcGhp IGV4cHJlc3Npb25zIGluIHRoZSBzdWNjZXNzb3IgYmIuICAqLw0KPiA+ICsJICBhZGp1c3RfcGhp X2FuZF9kZWJ1Z19zdG10cyAocGhpLCB1cGRhdGVfZSwgbmlfbmFtZSk7DQo+ID4gKwl9DQo+ID4g KyAgICAgIGVsc2UgaWYgKFNUTVRfVklORk9fVFlQRSAocGhpX2luZm8pID09IHVuZGVmX3ZlY19p bmZvX3R5cGUpDQo+ID4gKwl7DQo+ID4gKwkgIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9waGlf cmVzdWx0IChwaGkpKTsNCj4gPiArCSAgc3RlcF9leHByID0gU1RNVF9WSU5GT19MT09QX1BISV9F Vk9MVVRJT05fUEFSVA0KPiAocGhpX2luZm8pOw0KPiA+ICsJICBzdGVwX2V4cHIgPSB1bnNoYXJl X2V4cHIgKHN0ZXBfZXhwcik7DQo+ID4gKw0KPiA+ICsJICAvKiBXZSBwcmV2aW91c2x5IGdlbmVy YXRlZCB0aGUgbmV3IG1lcmdlZCBwaGkgaW4gdGhlIHNhbWUgQkIgYXMNCj4gdGhlDQo+ID4gKwkg ICAgIGd1YXJkLiAgU28gdXNlIHRoYXQgdG8gcGVyZm9ybSB0aGUgc2NhbGluZyBvbiByYXRoZXIg dGhhbiB0aGUNCj4gPiArCSAgICAgbm9ybWFsIGxvb3AgcGhpIHdoaWNoIGRvbid0IHRha2UgdGhl IGVhcmx5IGJyZWFrcyBpbnRvIGFjY291bnQuICAqLw0KPiA+ICsJICBpbml0X2V4cHIgPSBQSElf QVJHX0RFRl9GUk9NX0VER0UgKHBoaTEsDQo+IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKTsN Cj4gPiArDQo+ID4gKwkgIGlmICh2Zi5pc19jb25zdGFudCAoKSkNCj4gPiArCSAgICB7DQo+ID4g KwkgICAgICBuaSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9leHBy KSwNCj4gPiArCQkJCWZvbGRfY29udmVydCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KPiA+ICsJ CQkJCSAgICAgIG5pdGVyc192ZWN0b3IpLA0KPiA+ICsJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9U WVBFIChzdGVwX2V4cHIpLCB2ZikpOw0KPiA+ICsNCj4gPiArCSAgICAgIG5pID0gZm9sZF9idWls ZDIgKE1JTlVTX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4gPiArCQkJCWZvbGRfY29u dmVydCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLA0KPiA+ICsJCQkJCSAgICAgIG5pdGVyc19vcmln KSwNCj4gPiArCQkJCWZvbGRfY29udmVydCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLCBuaSkpOw0K PiA+ICsJICAgIH0NCj4gPiArCSAgZWxzZQ0KPiA+ICsJICAgIC8qIElmIHRoZSBsb29wJ3MgVkYg aXNuJ3QgY29uc3RhbnQgdGhlbiB0aGUgbG9vcCBtdXN0IGhhdmUgYmVlbg0KPiA+ICsJICAgICAg IG1hc2tlZCwgc28gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCB3ZSBrbm93IHdlIGhhdmUgZmluaXNo ZWQNCj4gPiArCSAgICAgICB0aGUgZW50aXJlIGxvb3AgYW5kIGZvdW5kIG5vdGhpbmcuICAqLw0K PiA+ICsJICAgIG5pID0gYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAoc3RlcF9leHByKSk7DQo+ ID4gKw0KPiA+ICsJICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKG5pKSA9PSBJTlRFR0VSX0NTVCk7 DQo+ID4gKw0KPiA+ICsJICB2YXIgPSBjcmVhdGVfdG1wX3ZhciAodHlwZSwgInRtcCIpOw0KPiA+ ICsNCj4gPiArCSAgbGFzdF9nc2kgPSBnc2lfbGFzdF9iYiAoZXhpdF9iYik7DQo+ID4gKwkgIGdp bXBsZV9zZXEgbmV3X3N0bXRzID0gTlVMTDsNCj4gPiArCSAgbmlfbmFtZSA9IGZvcmNlX2dpbXBs ZV9vcGVyYW5kIChuaSwgJm5ld19zdG10cywgZmFsc2UsIHZhcik7DQo+ID4gKwkgIC8qIEV4aXRf YmIgc2hvdWxkbid0IGJlIGVtcHR5LiAgKi8NCj4gPiArCSAgaWYgKCFnc2lfZW5kX3AgKGxhc3Rf Z3NpKSkNCj4gPiArCSAgICBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoJmxhc3RfZ3NpLCBuZXdfc3Rt dHMsIEdTSV9TQU1FX1NUTVQpOw0KPiA+ICsJICBlbHNlDQo+ID4gKwkgICAgZ3NpX2luc2VydF9z ZXFfYmVmb3JlICgmbGFzdF9nc2ksIG5ld19zdG10cywgR1NJX1NBTUVfU1RNVCk7DQo+ID4gKw0K PiA+ICsJICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAocGhpMSwgdXBkYXRlX2UsIG5pX25h bWUpOw0KPiA+ICsNCj4gPiArCSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0 aCAoKTsgaSsrKQ0KPiA+ICsJICAgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzIChwaGkxLCBl eGl0c1tpXSwNCj4gPiArCQkJCQlidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUNCj4gKHN0ZXBfZXhw ciksDQo+ID4gKwkJCQkJCSAgICAgICB2ZikpOw0KPiA+ICsJICBpdnRtcCA9IGdpbXBsZV9waGlf cmVzdWx0IChwaGkxKTsNCj4gPiArCX0NCj4gPiArICAgICAgZWxzZQ0KPiA+ICsJY29udGludWU7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBpdnRtcDsNCj4gPiAgfQ0KPiA+DQo+ ID4gIC8qIFJldHVybiBhIGdpbXBsZSB2YWx1ZSBjb250YWluaW5nIHRoZSBtaXNhbGlnbm1lbnQg KG1lYXN1cmVkIGluIHZlY3Rvcg0KPiA+IEBAIC0yMDk2LDcgKzIzNzYsNyBAQCB2ZWN0X2dlbl92 ZWN0b3JfbG9vcF9uaXRlcnNfbXVsdF92Zg0KPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0K PiA+ICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0K PiA+ICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAobml0ZXJzX3ZlY3Rvcik7DQo+ID4gICAgdHJl ZSBsb2dfdmYgPSBidWlsZF9pbnRfY3N0ICh0eXBlLCBleGFjdF9sb2cyICh2ZikpOw0KPiA+IC0g IGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+ID4gKyAg YmFzaWNfYmxvY2sgZXhpdF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVzdDsNCj4gPg0KPiA+ ICAgIGdjY19hc3NlcnQgKG5pdGVyc192ZWN0b3JfbXVsdF92Zl9wdHIgIT0gTlVMTCk7DQo+ID4g ICAgdHJlZSBuaXRlcnNfdmVjdG9yX211bHRfdmYgPSBmb2xkX2J1aWxkMiAoTFNISUZUX0VYUFIs IHR5cGUsDQo+ID4gQEAgLTIxMjMsMTkgKzI0MDMsNDYgQEAgZmluZF9ndWFyZF9hcmcgKGNsYXNz IGxvb3AgKmxvb3AsIGNsYXNzIGxvb3ANCj4gKmVwaWxvZyBBVFRSSUJVVEVfVU5VU0VELA0KPiA+ ICAJCWdwaGkgKmxjc3NhX3BoaSkNCj4gPiAgew0KPiA+ICAgIGdwaGlfaXRlcmF0b3IgZ3NpOw0K PiA+IC0gIGVkZ2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiArICBlZGdlIGUgPSBub3Jt YWxfZXhpdCAobG9vcCk7DQo+ID4NCj4gPiAtICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChl LT5kZXN0KSk7DQo+ID4gICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoZS0+ZGVzdCk7ICFn c2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiAgICAgIHsNCj4gPiAgICAgICAg Z3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsNCj4gPiAtICAgICAgaWYgKG9wZXJhbmRfZXF1YWxfcCAo UEhJX0FSR19ERUYgKHBoaSwgMCksDQo+ID4gLQkJCSAgIFBISV9BUkdfREVGIChsY3NzYV9waGks IDApLCAwKSkNCj4gPiArICAgICAgLyogTmVzdGVkIGxvb3BzIHdpdGggbXVsdGlwbGUgZXhpdHMg Y2FuIGhhdmUgZGlmZmVyZW50IG5vIyBwaGkgbm9kZQ0KPiA+ICsJIGFyZ3VtZW50cyBiZXR3ZWVu IHRoZSBtYWluIGxvb3AgYW5kIGVwaWxvZyBhcyBlcGlsb2cgZmFsbHMgdG8gdGhlDQo+ID4gKwkg c2Vjb25kIGxvb3AuICAqLw0KPiA+ICsgICAgICBpZiAoZ2ltcGxlX3BoaV9udW1fYXJncyAocGhp KSA+IGUtPmRlc3RfaWR4DQo+ID4gKwkgICYmIG9wZXJhbmRfZXF1YWxfcCAoUEhJX0FSR19ERUYg KHBoaSwgZS0+ZGVzdF9pZHgpLA0KPiA+ICsJCQkgICAgICBQSElfQVJHX0RFRiAobGNzc2FfcGhp LCAwKSwgMCkpDQo+ID4gIAlyZXR1cm4gUEhJX1JFU1VMVCAocGhpKTsNCj4gPiAgICAgIH0NCj4g PiAgICByZXR1cm4gTlVMTF9UUkVFOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogU3RhcnRpbmcgZnJv bSB0aGUgY3VycmVudCBlZGdlIHdhbGsgYWxsIGluc3RydWN0aW9ucyBhbmQgZmluZCB0aGUgbGFz dA0KPiA+ICsgICBWVVNFL1ZERUYgaW4gdGhlIGJhc2ljIGJsb2NrLiAgKi8NCj4gPiArDQo+ID4g K3N0YXRpYyB0cmVlDQo+ID4gK2dpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSAoZWRnZSBlKQ0KPiA+ ICt7DQo+ID4gKyAgYmFzaWNfYmxvY2sgYmIgPSBlLT5zcmM7DQo+ID4gKyAgdHJlZSByZXMgPSBO VUxMOw0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGl0ZXIgPSBnc2lfbGFzdF9iYiAoYmIp Ow0KPiA+ICsgIGRvDQo+ID4gKyAgew0KPiA+ICsgICAgZ2ltcGxlICpzdG10ID0gZ3NpX3N0bXQg KGl0ZXIpOw0KPiA+ICsgICAgaWYgKChyZXMgPSBnaW1wbGVfdmRlZiAoc3RtdCkpKQ0KPiA+ICsg ICAgICByZXR1cm4gcmVzOw0KPiA+ICsNCj4gPiArICAgIGlmICgocmVzID0gZ2ltcGxlX3Z1c2Ug KHN0bXQpKSkNCj4gPiArICAgICAgcmV0dXJuIHJlczsNCj4gPiArDQo+ID4gKyAgICBnc2lfcHJl diAoJml0ZXIpOw0KPiA+ICsgIH0gd2hpbGUgKCFnc2lfZW5kX3AgKGl0ZXIpKTsNCj4gPiArDQo+ ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8qIEZ1bmN0aW9uIHNscGVl bF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIGR1cGxjaWF0ZXMNCj4gRklSU1QvU0VD T05EDQo+ID4gICAgIGZyb20gU0VDT05EL0ZJUlNUIGFuZCBwdXRzIGl0IGF0IHRoZSBvcmlnaW5h bCBsb29wJ3MgcHJlaGVhZGVyL2V4aXQNCj4gPiAgICAgZWRnZSwgdGhlIHR3byBsb29wcyBhcmUg YXJyYW5nZWQgYXMgYmVsb3c6DQo+ID4gQEAgLTIxODUsNiArMjQ5Miw3IEBAIGZpbmRfZ3VhcmRf YXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFzcyBsb29wDQo+ICplcGlsb2cgQVRUUklCVVRFX1VO VVNFRCwNCj4gPiAgc3RhdGljIHZvaWQNCj4gPiAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9y X2xvb3BzIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gIAkJCQkgICBjbGFzcyBsb29w ICpmaXJzdCwgY2xhc3MgbG9vcCAqc2Vjb25kLA0KPiA+ICsJCQkJICAgdHJlZSAqbGNzc2FfaXZ0 bXAsDQo+ID4gIAkJCQkgICBib29sIGNyZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcykNCj4gPiAgew0K PiA+ICAgIGdwaGlfaXRlcmF0b3IgZ3NpX3VwZGF0ZSwgZ3NpX29yaWc7DQo+ID4gQEAgLTIxOTIs MTAgKzI1MDAsMTggQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzDQo+IChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4NCj4gPiAgICBlZGdlIGZpcnN0X2xhdGNoX2UgPSBF REdFX1NVQ0MgKGZpcnN0LT5sYXRjaCwgMCk7DQo+ID4gICAgZWRnZSBzZWNvbmRfcHJlaGVhZGVy X2UgPSBsb29wX3ByZWhlYWRlcl9lZGdlIChzZWNvbmQpOw0KPiA+IC0gIGJhc2ljX2Jsb2NrIGJl dHdlZW5fYmIgPSBzaW5nbGVfZXhpdCAoZmlyc3QpLT5kZXN0Ow0KPiA+ICsgIGF1dG9fdmVjPGVk Z2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoZmlyc3QpOw0KPiA+ICsgIGJhc2ljX2Js b2NrIGJldHdlZW5fYmIgPSBleGl0c1swXS0+ZGVzdDsNCj4gPiArDQo+ID4gKyAgYm9vbCBlYXJs eV9leGl0ID0gTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pOw0KPiA+ICsgIC8q IEZvciBlYXJseSBleGl0cyB3aGVuIHdlIGNyZWF0ZSB0aGUgbWVyZ2UgQkIgd2UgbXVzdCBtYWlu dGFpbiBpdCBpbg0KPiA+ICsgICAgIExDU1NBIGZvcm0sIG90aGVyd2lzZSB0aGUgZmluYWwgdmVj dG9yaXplciBwYXNzZXMgd2lsbCBjcmVhdGUgdGhlDQo+ID4gKyAgICAgd3JvbmcgUEhJIG5vZGVz IGhlcmUuICAqLw0KPiA+ICsgIGNyZWF0ZV9sY3NzYV9mb3JfaXZfcGhpcyA9IGNyZWF0ZV9sY3Nz YV9mb3JfaXZfcGhpcyB8fCBlYXJseV9leGl0Ow0KPiA+DQo+ID4gICAgZ2NjX2Fzc2VydCAoYmV0 d2Vlbl9iYiA9PSBzZWNvbmRfcHJlaGVhZGVyX2UtPnNyYyk7DQo+ID4gLSAgZ2NjX2Fzc2VydCAo c2luZ2xlX3ByZWRfcCAoYmV0d2Vlbl9iYikgJiYgc2luZ2xlX3N1Y2NfcA0KPiAoYmV0d2Vlbl9i YikpOw0KPiA+ICsgIGdjY19hc3NlcnQgKChzaW5nbGVfcHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBz aW5nbGVfc3VjY19wDQo+IChiZXR3ZWVuX2JiKSkNCj4gPiArCSAgICAgIHx8IGVhcmx5X2V4aXQp Ow0KPiA+ICAgIC8qIEVpdGhlciB0aGUgZmlyc3QgbG9vcCBvciB0aGUgc2Vjb25kIGlzIHRoZSBs b29wIHRvIGJlIHZlY3Rvcml6ZWQuICAqLw0KPiA+ICAgIGdjY19hc3NlcnQgKGxvb3AgPT0gZmly c3QgfHwgbG9vcCA9PSBzZWNvbmQpOw0KPiA+DQo+ID4gQEAgLTIyMTUsMTAgKzI1MzEsNDAgQEAg c2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzDQo+IChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sDQo+ID4gIAl7DQo+ID4gIAkgIHRyZWUgbmV3X3JlcyA9IGNvcHlfc3NhX25hbWUgKFBI SV9SRVNVTFQgKG9yaWdfcGhpKSk7DQo+ID4gIAkgIGdwaGkgKmxjc3NhX3BoaSA9IGNyZWF0ZV9w aGlfbm9kZSAobmV3X3JlcywgYmV0d2Vlbl9iYik7DQo+ID4gLQkgIGFkZF9waGlfYXJnIChsY3Nz YV9waGksIGFyZywgc2luZ2xlX2V4aXQgKGZpcnN0KSwNCj4gVU5LTk9XTl9MT0NBVElPTik7DQo+ ID4gKw0KPiA+ICsJICAvKiBUaGUgZmlyc3QgZXhpdCBpcyBhbHdheXMgdGhlIGxvb3AgbGF0Y2gs IHNvIGhhbmRsZSB0aGF0DQo+ID4gKwkgICAgIHNlcGVyYXRlbHkuICAqLw0KPiA+ICsJICBnY2Nf YXNzZXJ0IChhcmcpOw0KPiA+ICsJICBhZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBhcmcsIGV4aXRz WzBdLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiArDQo+ID4gKwkgIC8qIFRoZSBlYXJseSBleGl0 cyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIHN0YXJ0aW5nIGZyb20gZXhpdCAxLiAgKi8NCj4gPiAr CSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KPiA+ICsJ ICAgIHsNCj4gPiArCSAgICAgIHRyZWUgcGhpX2FyZzsNCj4gPiArCSAgICAgIGlmIChpdl9waGlf cCAodmVjdF9waGlfaW5mbykpDQo+ID4gKwkJLyogRm9yIGluZHVjdGlvbiB2YWx1ZXMganVzdCBj b3B5IHRoZSBwcmV2aW91cyBvbmUgYXMgdGhlDQo+ID4gKwkJICAgY3VycmVudCBpdGVyYXRpb24g ZGlkIG5vdCBmaW5pc2guICBXZSdsbCB1cGRhdGUgYXMgbmVlZGVkDQo+ID4gKwkJICAgbGF0ZXIg b24uICAqLw0KPiA+ICsJCXBoaV9hcmcgPSBnaW1wbGVfcGhpX3Jlc3VsdCAob3JpZ19waGkpOw0K PiA+ICsJICAgICAgZWxzZQ0KPiA+ICsJCXBoaV9hcmcgPSBnaW1wbGVfZmluZF9sYXN0X21lbV91 c2UgKGV4aXRzW2ldKTsNCj4gPiArCSAgICAgIC8qIElmIHdlIGRpZG4ndCBmaW5kIGFueSBqdXN0 IGNvcHkgdGhlIGV4aXN0aW5nIG9uZSBhbmQgbGVhdmUNCj4gPiArCQkgaXQgdG8gdGhlIG90aGVy cyB0byBmaXggaXQgdXAuICAqLw0KPiA+ICsJICAgICAgaWYgKCFwaGlfYXJnKQ0KPiA+ICsJCXBo aV9hcmcgPSBnaW1wbGVfcGhpX3Jlc3VsdCAob3JpZ19waGkpOw0KPiA+ICsJICAgICAgYWRkX3Bo aV9hcmcgKGxjc3NhX3BoaSwgcGhpX2FyZywgZXhpdHNbaV0sIFVOS05PV05fTE9DQVRJT04pOw0K PiA+ICsJICAgIH0NCj4gPiAgCSAgYXJnID0gbmV3X3JlczsNCj4gPiAgCX0NCj4gPg0KPiA+ICsg ICAgICAvKiBOb3JtYWxseSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGl0ZXJhdG9y IGNvdW50ZXIgYW5kIHRoZQ0KPiA+ICsJIGl2dGVtcHMgYnUgbG9va2luZyBhdCB0aGUgU1RNVF9W SU5GT19UWVBFIG9mIHRoZSBwaGkgbm9kZS4NCj4gPiArCSBob3dldmVyIGZvciBzb21lIHJlYXNv biB0aGlzIGlzbid0IGNvbnNpc3RlbnRseSBzZXQuICBJcyB0aGVyZSBhDQo+ID4gKwkgYmV0dGVy IHdheT8/LiAgKi8NCj4gPiArICAgICAgaWYgKGxjc3NhX2l2dG1wDQo+ID4gKwkgICYmIGl2X3Bo aV9wICh2ZWN0X3BoaV9pbmZvKSkNCj4gPiArCSpsY3NzYV9pdnRtcCA9IGFyZzsNCj4gPiArDQo+ ID4gICAgICAgIC8qIFVwZGF0ZSBQSEkgbm9kZSBpbiB0aGUgc2Vjb25kIGxvb3AgYnkgcmVwbGFj aW5nIGFyZyBvbiB0aGUgbG9vcCdzDQo+ID4gIAkgaW5jb21pbmcgZWRnZS4gICovDQo+ID4gICAg ICAgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0bXRzICh1cGRhdGVfcGhpLCBzZWNvbmRfcHJlaGVh ZGVyX2UsDQo+IGFyZyk7DQo+ID4gQEAgLTIyMjgsNyArMjU3NCw4IEBAIHNscGVlbF91cGRhdGVf cGhpX25vZGVzX2Zvcl9sb29wcw0KPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ICAg ICAgIGZvciBjb3JyZWN0IHZlY3Rvcml6YXRpb24gb2YgbGl2ZSBzdG10cy4gICovDQo+ID4gICAg aWYgKGxvb3AgPT0gZmlyc3QpDQo+ID4gICAgICB7DQo+ID4gLSAgICAgIGJhc2ljX2Jsb2NrIG9y aWdfZXhpdCA9IHNpbmdsZV9leGl0IChzZWNvbmQpLT5kZXN0Ow0KPiA+ICsgICAgICBhdXRvX3Zl YzxlZGdlPiBuZXdfZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChzZWNvbmQpOw0KPiA+ICsg ICAgICBiYXNpY19ibG9jayBvcmlnX2V4aXQgPSBuZXdfZXhpdHNbMF0tPmRlc3Q7DQo+ID4gICAg ICAgIGZvciAoZ3NpX29yaWcgPSBnc2lfc3RhcnRfcGhpcyAob3JpZ19leGl0KTsNCj4gPiAgCSAg ICFnc2lfZW5kX3AgKGdzaV9vcmlnKTsgZ3NpX25leHQgKCZnc2lfb3JpZykpDQo+ID4gIAl7DQo+ ID4gQEAgLTIyNDMsNyArMjU5MCwxNSBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9v cHMNCj4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPg0KPiA+ICAJICB0cmVlIG5ld19y ZXMgPSBjb3B5X3NzYV9uYW1lIChvcmlnX2FyZyk7DQo+ID4gIAkgIGdwaGkgKmxjcGhpID0gY3Jl YXRlX3BoaV9ub2RlIChuZXdfcmVzLCBiZXR3ZWVuX2JiKTsNCj4gPiAtCSAgYWRkX3BoaV9hcmcg KGxjcGhpLCBvcmlnX2FyZywgc2luZ2xlX2V4aXQgKGZpcnN0KSwNCj4gVU5LTk9XTl9MT0NBVElP Tik7DQo+ID4gKwkgIC8qIFRoZSBmaXJzdCBleGl0IGlzIGFsd2F5cyB0aGUgbG9vcCBsYXRjaCwg c28gaGFuZGxlIHRoYXQNCj4gPiArCSAgICAgc2VwZXJhdGVseS4gICovDQo+ID4gKwkgIGFkZF9w aGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIG5ld19leGl0c1swXSwNCj4gVU5LTk9XTl9MT0NBVElP Tik7DQo+ID4gKwkgIC8qIFRoZSBlYXJseSBleGl0cyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIHN0 YXJ0aW5nIGZyb20gZXhpdCAxLiAgKi8NCj4gPiArCSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8 IG5ld19leGl0cy5sZW5ndGggKCk7IGkrKykNCj4gPiArCSAgICB7DQo+ID4gKwkgICAgICB0cmVl IHBoaV9hcmcgPSBnaW1wbGVfcGhpX3Jlc3VsdCAob3JpZ19waGkpOw0KPiA+ICsJICAgICAgYWRk X3BoaV9hcmcgKGxjcGhpLCBwaGlfYXJnLCBleGl0c1tpXSwgVU5LTk9XTl9MT0NBVElPTik7DQo+ ID4gKwkgICAgfQ0KPiA+ICAJfQ0KPiA+ICAgICAgfQ0KPiA+ICB9DQo+ID4gQEAgLTIzOTMsMTMg KzI3NDgsMTEgQEAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2d1YXJkMiAoY2xhc3MNCj4g bG9vcCAqbG9vcCwgY2xhc3MgbG9vcCAqZXBpbG9nLA0KPiA+ICAgIGdjY19hc3NlcnQgKHNpbmds ZV9zdWNjX3AgKG1lcmdlX2JiKSk7DQo+ID4gICAgZWRnZSBlID0gc2luZ2xlX3N1Y2NfZWRnZSAo bWVyZ2VfYmIpOw0KPiA+ICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBlLT5kZXN0Ow0KPiA+IC0g IGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gPiAtICBnY2NfYXNzZXJ0 IChzaW5nbGVfcHJlZCAoZXhpdF9iYikgPT0gc2luZ2xlX2V4aXQgKGVwaWxvZyktPmRlc3QpOw0K PiA+DQo+ID4gICAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAoZXhpdF9iYik7ICFnc2lfZW5k X3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkNCj4gPiAgICAgIHsNCj4gPiAgICAgICAgZ3BoaSAq dXBkYXRlX3BoaSA9IGdzaS5waGkgKCk7DQo+ID4gLSAgICAgIHRyZWUgb2xkX2FyZyA9IFBISV9B UkdfREVGICh1cGRhdGVfcGhpLCAwKTsNCj4gPiArICAgICAgdHJlZSBvbGRfYXJnID0gUEhJX0FS R19ERUYgKHVwZGF0ZV9waGksIGUtPmRlc3RfaWR4KTsNCj4gPg0KPiA+ICAgICAgICB0cmVlIG1l cmdlX2FyZyA9IE5VTExfVFJFRTsNCj4gPg0KPiA+IEBAIC0yNDM4LDEyICsyNzkxLDE0IEBAIHN0 YXRpYyB2b2lkDQo+ID4gIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sY3NzYSAoY2xhc3Mg bG9vcCAqZXBpbG9nKQ0KPiA+ICB7DQo+ID4gICAgZ3BoaV9pdGVyYXRvciBnc2k7DQo+ID4gLSAg YmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChlcGlsb2cpLT5kZXN0Ow0KPiA+ICsg IGF1dG9fdmVjPGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAoZXBpbG9nKTsNCj4g Pg0KPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gPiAtICBl ZGdlIGUgPSBFREdFX1BSRUQgKGV4aXRfYmIsIDApOw0KPiA+IC0gIGZvciAoZ3NpID0gZ3NpX3N0 YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ ID4gLSAgICByZW5hbWVfdXNlX29wIChQSElfQVJHX0RFRl9QVFJfRlJPTV9FREdFIChnc2kucGhp ICgpLCBlKSk7DQo+ID4gKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXRzLmxlbmd0aCAo KTsgaSsrKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBiYXNpY19ibG9jayBleGl0X2JiID0gZXhp dHNbaV0tPmRlc3Q7DQo+ID4gKyAgICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRf YmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gKwlyZW5hbWVfdXNl X29wIChQSElfQVJHX0RFRl9QVFJfRlJPTV9FREdFIChnc2kucGhpICgpLA0KPiBleGl0c1tpXSkp Ow0KPiA+ICsgICAgfQ0KPiA+ICB9DQo+ID4NCj4gPiAgLyogRVBJTE9HVUVfVklORk8gaXMgYW4g ZXBpbG9ndWUgbG9vcCB0aGF0IHdlIG5vdyBrbm93IHdvdWxkIG5lZWQgdG8NCj4gPiBAQCAtMjYy MSw2ICsyOTc2LDE0IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LA0KPiB0cmVlIG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gPiAgICAgIGJvdW5kX2VwaWxvZyAr PSB2ZiAtIDE7DQo+ID4gICAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1JfR0FQUyAobG9vcF92 aW5mbykpDQo+ID4gICAgICBib3VuZF9lcGlsb2cgKz0gMTsNCj4gPiArICAvKiBGb3IgZWFybHkg YnJlYWtzIHRoZSBzY2FsYXIgbG9vcCBuZWVkcyB0byBleGVjdXRlIGF0IG1vc3QgVkYgdGltZXMN Cj4gPiArICAgICB0byBmaW5kIHRoZSBlbGVtZW50IHRoYXQgY2F1c2VkIHRoZSBicmVhay4gICov DQo+ID4gKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiAr ICAgIHsNCj4gPiArICAgICAgYm91bmRfZXBpbG9nID0gdmY7DQo+ID4gKyAgICAgIC8qIEZvcmNl IGEgc2NhbGFyIGVwaWxvZ3VlIGFzIHdlIGNhbid0IHZlY3Rvcml6ZSB0aGUgaW5kZXggZmluZGlu Zy4gICovDQo+ID4gKyAgICAgIHZlY3RfZXBpbG9ndWVzID0gZmFsc2U7DQo+ID4gKyAgICB9DQo+ ID4gICAgYm9vbCBlcGlsb2dfcGVlbGluZyA9IG1heWJlX25lIChib3VuZF9lcGlsb2csIDBVKTsN Cj4gPiAgICBwb2x5X3VpbnQ2NCBib3VuZF9zY2FsYXIgPSBib3VuZF9lcGlsb2c7DQo+ID4NCj4g PiBAQCAtMjc4MCwxNiArMzE0MywyNCBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywNCj4gdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gIAkJCQkgIGJv dW5kX3Byb2xvZyArIGJvdW5kX2VwaWxvZykNCj4gPiAgCQkgICAgICA6ICghTE9PUF9SRVFVSVJF U19WRVJTSU9OSU5HIChsb29wX3ZpbmZvKQ0KPiA+ICAJCQkgfHwgdmVjdF9lcGlsb2d1ZXMpKTsN Cj4gPiArDQo+ID4gKyAgLyogV2Ugb25seSBzdXBwb3J0IGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRp b24gb24ga25vd24gYm91bmRzIGF0IHRoaXMNCj4gdGltZS4NCj4gPiArICAgICBUaGlzIG1lYW5z IHRoYXQgaWYgdGhlIHZlY3RvciBsb29wIGNhbid0IGJlIGVudGVyZWQgdGhlbiB3ZSB3b24ndA0K PiBnZW5lcmF0ZQ0KPiA+ICsgICAgIGl0IGF0IGFsbC4gIFNvIGZvciBub3cgZm9yY2Ugc2tpcF92 ZWN0b3Igb2ZmIGJlY2F1c2UgdGhlIGFkZGl0aW9uYWwgY29udHJvbA0KPiA+ICsgICAgIGZsb3cg bWVzc2VzIHdpdGggdGhlIEJCIGV4aXRzIGFuZCB3ZSd2ZSBhbHJlYWR5IGFuYWx5emVkIHRoZW0u ICAqLw0KPiA+ICsgc2tpcF92ZWN0b3IgPSBza2lwX3ZlY3RvciAmJiAhTE9PUF9WSU5GT19FQVJM WV9CUkVBS1MNCj4gKGxvb3BfdmluZm8pOw0KPiA+ICsNCj4gPiAgICAvKiBFcGlsb2cgbG9vcCBt dXN0IGJlIGV4ZWN1dGVkIGlmIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgZXBpbG9nDQo+ ID4gICAgICAgbG9vcCBpcyBrbm93biBhdCBjb21waWxlIHRpbWUsIG90aGVyd2lzZSB3ZSBuZWVk IHRvIGFkZCBhIGNoZWNrIGF0DQo+ID4gICAgICAgdGhlIGVuZCBvZiB2ZWN0b3IgbG9vcCBhbmQg c2tpcCB0byB0aGUgZW5kIG9mIGVwaWxvZyBsb29wLiAgKi8NCj4gPiAgICBib29sIHNraXBfZXBp bG9nID0gKHByb2xvZ19wZWVsaW5nIDwgMA0KPiA+ICAJCSAgICAgIHx8ICFMT09QX1ZJTkZPX05J VEVSU19LTk9XTl9QIChsb29wX3ZpbmZvKQ0KPiA+ICAJCSAgICAgIHx8ICF2Zi5pc19jb25zdGFu dCAoKSk7DQo+ID4gLSAgLyogUEVFTElOR19GT1JfR0FQUyBpcyBzcGVjaWFsIGJlY2F1c2UgZXBp bG9nIGxvb3AgbXVzdCBiZSBleGVjdXRlZC4NCj4gKi8NCj4gPiAtICBpZiAoTE9PUF9WSU5GT19Q RUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSkNCj4gPiArICAvKiBQRUVMSU5HX0ZPUl9HQVBT IGFuZCBwZWVsaW5nIGZvciBlYXJseSBicmVha3MgYXJlIHNwZWNpYWwgYmVjYXVzZQ0KPiBlcGls b2cNCj4gPiArICAgICBsb29wIG11c3QgYmUgZXhlY3V0ZWQuICAqLw0KPiA+ICsgIGlmIChMT09Q X1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pDQo+ID4gKyAgICAgIHx8IExPT1Bf VklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiAgICAgIHNraXBfZXBpbG9nID0g ZmFsc2U7DQo+ID4gLQ0KPiA+ICAgIGNsYXNzIGxvb3AgKnNjYWxhcl9sb29wID0gTE9PUF9WSU5G T19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbyk7DQo+ID4gICAgYXV0b192ZWM8cHJvZmlsZV9jb3Vu dD4gb3JpZ2luYWxfY291bnRzOw0KPiA+ICAgIGJhc2ljX2Jsb2NrICpvcmlnaW5hbF9iYnMgPSBO VUxMOw0KPiA+IEBAIC0yODI4LDcgKzMxOTksNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVj X2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gICAg aWYgKHByb2xvZ19wZWVsaW5nKQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBlID0gbG9vcF9wcmVo ZWFkZXJfZWRnZSAobG9vcCk7DQo+ID4gLSAgICAgIGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVf bG9vcF9wIChsb29wLCBlKSkNCj4gPiArICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9s b29wX3AgKGxvb3BfdmluZm8sIGUpKQ0KPiA+ICAJew0KPiA+ICAJICBkdW1wX3ByaW50Zl9sb2Mg KE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCBsb29wX2xvYywNCj4gPiAgCQkJICAgImxvb3AgY2Fu J3QgYmUgZHVwbGljYXRlZCB0byBwcmVoZWFkZXIgZWRnZS5cbiIpOw0KPiA+IEBAIC0yODQzLDcg KzMyMTQsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJl ZQ0KPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gIAkgIGdjY191bnJlYWNoYWJsZSAoKTsN Cj4gPiAgCX0NCj4gPiAgICAgICAgcHJvbG9nLT5mb3JjZV92ZWN0b3JpemUgPSBmYWxzZTsNCj4g PiAtICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3ZpbmZvLCBw cm9sb2csIGxvb3AsIHRydWUpOw0KPiA+ICsgICAgICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19m b3JfbG9vcHMgKGxvb3BfdmluZm8sIHByb2xvZywgbG9vcCwgTlVMTCwNCj4gdHJ1ZSk7DQo+ID4g ICAgICAgIGZpcnN0X2xvb3AgPSBwcm9sb2c7DQo+ID4gICAgICAgIHJlc2V0X29yaWdpbmFsX2Nv cHlfdGFibGVzICgpOw0KPiA+DQo+ID4gQEAgLTI5MDIsMTEgKzMyNzMsMTMgQEAgdmVjdF9kb19w ZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IHRyZWUgbml0ZXJzLCB0cmVlIG5p dGVyc20xLA0KPiA+DQo+ID4gICAgaWYgKGVwaWxvZ19wZWVsaW5nKQ0KPiA+ICAgICAgew0KPiA+ IC0gICAgICBlID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+IC0gICAgICBpZiAoIXNscGVlbF9j YW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgZSkpDQo+ID4gKyAgICAgIGF1dG9fdmVjPGVkZ2U+ IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gKyAgICAgIGUgPSBleGl0 c1swXTsNCj4gPiArICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGxvb3Bf dmluZm8sIGUpKQ0KPiA+ICAJew0KPiA+IC0JICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURf T1BUSU1JWkFUSU9OLCBsb29wX2xvYywNCj4gPiAtCQkJICAgImxvb3AgY2FuJ3QgYmUgZHVwbGlj YXRlZCB0byBleGl0IGVkZ2UuXG4iKTsNCj4gPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0K PiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3Bf bG9jLA0KPiA+ICsJCQkgICAgICJsb29wIGNhbid0IGJlIGR1cGxpY2F0ZWQgdG8gZXhpdCBlZGdl LlxuIik7DQo+ID4gIAkgIGdjY191bnJlYWNoYWJsZSAoKTsNCj4gPiAgCX0NCj4gPiAgICAgICAg LyogUGVlbCBlcGlsb2cgYW5kIHB1dCBpdCBvbiBleGl0IGVkZ2Ugb2YgbG9vcC4gIElmIHdlIGFy ZSB2ZWN0b3JpemluZw0KPiA+IEBAIC0yOTIwLDEyICszMjkzLDE2IEBAIHZlY3RfZG9fcGVlbGlu ZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiB0cmVlIG5pdGVycywgdHJlZSBuaXRlcnNt MSwNCj4gPiAgICAgICAgZXBpbG9nID0gc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRn ZV9jZmcgKGxvb3AsIGVwaWxvZywgZSk7DQo+ID4gICAgICAgIGlmICghZXBpbG9nKQ0KPiA+ICAJ ew0KPiA+IC0JICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCBsb29w X2xvYywNCj4gPiAtCQkJICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2Zn DQo+IGZhaWxlZC5cbiIpOw0KPiA+ICsJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkg ICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgbG9vcF9sb2MsDQo+ ID4gKwkJCSAgICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnDQo+IGZh aWxlZC5cbiIpOw0KPiA+ICAJICBnY2NfdW5yZWFjaGFibGUgKCk7DQo+ID4gIAl9DQo+ID4gICAg ICAgIGVwaWxvZy0+Zm9yY2VfdmVjdG9yaXplID0gZmFsc2U7DQo+ID4gLSAgICAgIHNscGVlbF91 cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5mbywgbG9vcCwgZXBpbG9nLCBmYWxz ZSk7DQo+ID4gKw0KPiA+ICsgICAgICB0cmVlIGVhcmx5X2JyZWFrX2l2X25hbWU7DQo+ID4gKyAg ICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92aW5mbywgbG9vcCwg ZXBpbG9nLA0KPiA+ICsJCQkJCSAmZWFybHlfYnJlYWtfaXZfbmFtZSwgZmFsc2UpOw0KPiA+DQo+ ID4gICAgICAgIC8qIFNjYWxhciB2ZXJzaW9uIGxvb3AgbWF5IGJlIHByZWZlcnJlZC4gIEluIHRo aXMgY2FzZSwgYWRkIGd1YXJkDQo+ID4gIAkgYW5kIHNraXAgdG8gZXBpbG9nLiAgTm90ZSB0aGlz IG9ubHkgaGFwcGVucyB3aGVuIHRoZSBudW1iZXIgb2YNCj4gPiBAQCAtMjk3OCw2ICszMzU1LDcg QEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIHRyZWUNCj4gbml0 ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAgICAgICB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRl cnMgKGxvb3BfdmluZm8sIG5pdGVycywNCj4gPiAgCQkJCSAgIG5pdGVyc192ZWN0b3IsIHN0ZXBf dmVjdG9yLA0KPiA+ICAJCQkJICAgbml0ZXJzX25vX292ZXJmbG93KTsNCj4gPiArDQo+ID4gICAg ICAgIGlmICghaW50ZWdlcl9vbmVwICgqc3RlcF92ZWN0b3IpKQ0KPiA+ICAJew0KPiA+ICAJICAv KiBPbiBleGl0IGZyb20gdGhlIGxvb3Agd2Ugd2lsbCBoYXZlIGFuIGVhc3kgd2F5IG9mIGNhbGNh bGF0aW5nDQo+ID4gQEAgLTI5ODcsOSArMzM2NSwxMyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywNCj4gdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4g IAkgIFNTQV9OQU1FX0RFRl9TVE1UIChuaXRlcnNfdmVjdG9yX211bHRfdmYpID0NCj4gZ2ltcGxl X2J1aWxkX25vcCAoKTsNCj4gPiAgCSAgKm5pdGVyc192ZWN0b3JfbXVsdF92Zl92YXIgPSBuaXRl cnNfdmVjdG9yX211bHRfdmY7DQo+ID4gIAl9DQo+ID4gKyAgICAgIGVsc2UgaWYgKExPT1BfVklO Rk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiArCXZlY3RfZ2VuX3ZlY3Rvcl9sb29w X25pdGVyc19tdWx0X3ZmIChsb29wX3ZpbmZvLA0KPiBlYXJseV9icmVha19pdl9uYW1lLA0KPiA+ ICsJCQkJCSAgICAgJm5pdGVyc192ZWN0b3JfbXVsdF92Zik7DQo+ID4gICAgICAgIGVsc2UNCj4g PiAgCXZlY3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVyc19tdWx0X3ZmIChsb29wX3ZpbmZvLCAqbml0 ZXJzX3ZlY3RvciwNCj4gPiAgCQkJCQkgICAgICZuaXRlcnNfdmVjdG9yX211bHRfdmYpOw0KPiA+ ICsNCj4gPiAgICAgICAgLyogVXBkYXRlIElWcyBvZiBvcmlnaW5hbCBsb29wIGFzIGlmIHRoZXkg d2VyZSBhZHZhbmNlZCBieQ0KPiA+ICAJIG5pdGVyc192ZWN0b3JfbXVsdF92ZiBzdGVwcy4gICov DQo+ID4gICAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHZlY3RfY2FuX2FkdmFuY2VfaXZzX3Ag KGxvb3BfdmluZm8pKTsNCj4gPiBAQCAtMjk5NywxMiArMzM3OSw5NyBAQCB2ZWN0X2RvX3BlZWxp bmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gdHJlZSBuaXRlcnMsIHRyZWUgbml0ZXJz bTEsDQo+ID4gICAgICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChsb29wX3Zp bmZvLCBuaXRlcnNfdmVjdG9yX211bHRfdmYsDQo+ID4gIAkJCQkJdXBkYXRlX2UpOw0KPiA+DQo+ ID4gKyAgICAgIC8qIEZvciBlYXJseSBicmVha3Mgd2UgbXVzdCBjcmVhdGUgYSBndWFyZCB0byBj aGVjayBob3cgbWFueQ0KPiBpdGVyYXRpb25zDQo+ID4gKwkgb2YgdGhlIHNjYWxhciBsb29wIGFy ZSB5ZXQgdG8gYmUgcGVyZm9ybWVkLiAgKi8NCj4gPiArICAgICAgaWYgKExPT1BfVklORk9fRUFS TFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiArCXsNCj4gPiArCSAgZ2NjX2Fzc2VydCAoZWFy bHlfYnJlYWtfaXZfbmFtZSk7DQo+ID4gKwkgIHRyZWUgaXZ0bXAgPQ0KPiA+ICsJICAgIHZlY3Rf dXBkYXRlX2l2c19hZnRlcl9lYXJseV9icmVhayAobG9vcF92aW5mbywgZXBpbG9nLCB2Ziwgbml0 ZXJzLA0KPiA+ICsJCQkJCSAgICAgICAqbml0ZXJzX3ZlY3RvciwgdXBkYXRlX2UpOw0KPiA+ICsN Cj4gPiArCSAgdHJlZSBndWFyZF9jb25kID0gZm9sZF9idWlsZDIgKEVRX0VYUFIsIGJvb2xlYW5f dHlwZV9ub2RlLA0KPiA+ICsJCQkJCSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAobml0ZXJzKSwN Cj4gPiArCQkJCQkJICAgICAgIGl2dG1wKSwNCj4gPiArCQkJCQkgYnVpbGRfemVyb19jc3QgKFRS RUVfVFlQRSAobml0ZXJzKSkpOw0KPiA+ICsJICBiYXNpY19ibG9jayBndWFyZF9iYiA9IG5vcm1h bF9leGl0IChsb29wKS0+ZGVzdDsNCj4gPiArCSAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0g Z2V0X2xvb3BfZXhpdF9lZGdlcyAoZXBpbG9nKTsNCj4gPiArCSAgLyogSWYgd2UgaGFkIGEgZmFs bHRocm91Z2ggZWRnZSwgdGhlIGd1YXJkIHdpbGwgdGhlIHRocmVhZGVkIHRocm91Z2gNCj4gPiAr CSAgICAgYW5kIHNvIHdlIG1heSBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBmaW5hbCBlZGdlLiAg Ki8NCj4gPiArCSAgZWRnZSBmaW5hbF9lZGdlID0gbmV3X2V4aXRzWzBdOw0KPiA+ICsJICBiYXNp Y19ibG9jayBndWFyZF90bzsNCj4gPiArCSAgYm9vbCBmbl9leGl0X3AgPSBmYWxzZTsNCj4gPiAr CSAgaWYgKGdzaV9lbmRfcCAoZ3NpX3N0YXJ0X25vbmRlYnVnX2JiIChmaW5hbF9lZGdlLT5kZXN0 KSkNCj4gPiArCSAgICAgICYmICFnc2lfZW5kX3AgKGdzaV9zdGFydF9waGlzIChmaW5hbF9lZGdl LT5kZXN0KSkNCj4gPiArCSAgICAgICYmIHNpbmdsZV9zdWNjX3AgKGZpbmFsX2VkZ2UtPmRlc3Qp KQ0KPiA+ICsJICAgIHsNCj4gPiArCSAgICAgIGF1dG8gZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGZp bmFsX2VkZ2UtPmRlc3QpOw0KPiA+ICsJICAgICAgd2hpbGUgKCFnc2lfZW5kX3AgKGdzaSkpDQo+ ID4gKwkJZ3NpX3JlbW92ZSAoJmdzaSwgdHJ1ZSk7DQo+ID4gKwkgICAgICBndWFyZF90byA9IGZp bmFsX2VkZ2UtPmRlc3Q7DQo+ID4gKwkgICAgICBmbl9leGl0X3AgPSB0cnVlOw0KPiA+ICsJICAg IH0NCj4gPiArCSAgZWxzZQ0KPiA+ICsJICAgIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAobm9ybWFs X2V4aXQgKGVwaWxvZykpOw0KPiA+ICsNCj4gPiArCSAgZWRnZSBndWFyZF9lID0gc2xwZWVsX2Fk ZF9sb29wX2d1YXJkIChndWFyZF9iYiwgZ3VhcmRfY29uZCwNCj4gZ3VhcmRfdG8sDQo+ID4gKwkJ CQkJICAgZ3VhcmRfYmIsDQo+ID4gKwkJCQkJICAgcHJvYl9lcGlsb2cuaW52ZXJ0ICgpLA0KPiA+ ICsJCQkJCSAgIGlycmVkX2ZsYWcpOw0KPiA+ICsNCj4gPiArCSAgYmFzaWNfYmxvY2sgZGVzdCA9 IHNpbmdsZV9zdWNjIChndWFyZF90byk7DQo+ID4gKwkgIC8qIElmIHdlIGhhdmUgYSBzaW5nbGUg cHJlZCB0aGVuIHRoZSBwcmV2aW91cyBibG9jayBpcyB0aGUgaW1tZWRpYXRlDQo+ID4gKwkgICAg IGRvbWluYXRvci4gICBUaGlzIG1heSBvciBtYXkgbm90IGJlIHRoZSBndWFyZCBiYi4gIEhvd2V2 ZXIgaWYgd2UNCj4gPiArCSAgICAgaGF2ZSBtdWx0aXBsZSBwcmVkIHRoZW4gdGhlIGd1YXJkIEJC IG11c3QgYmUgdGhlIGRvbWluYXRvciBhcyBhbGwNCj4gPiArCSAgICAgcHJldmlvdXMgZXhpdHMg Z290IHJld3JpdGVkIHRvIHRoZSBndWFyZCBCQi4gICovDQo+ID4gKwkgIGlmIChzaW5nbGVfcHJl ZF9wIChkZXN0KSkNCj4gPiArCSAgICBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlO QVRPUlMsIGRlc3QsIGd1YXJkX3RvKTsNCj4gPiArCSAgZWxzZQ0KPiA+ICsJICAgIHNldF9pbW1l ZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZGVzdCwgZ3VhcmRfYmIpOw0KPiA+ICsN Cj4gPiArCSAgLyogV2UgbXVzdCB1cGRhdGUgYWxsIHRoZSBlZGdlcyBmcm9tIHRoZSBuZXcgZ3Vh cmRfYmIuICAqLw0KPiA+ICsJICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChs b29wLCBlcGlsb2csIGd1YXJkX2UsDQo+ID4gKwkJCQkJICAgICAgZmluYWxfZWRnZSk7DQo+ID4g Kw0KPiA+ICsJICAvKiBJZiB3ZSBoYXZlIGFuIGFkZGl0aW9uYWwgZnVuY3Rpb25lIGV4aXQgYmxv Y2ssIHRoZW4gdGhyZWFkIHRoZQ0KPiB1cGRhdGVzDQo+ID4gKwkgICAgIHRocm91Z2ggdG8gdGhl IGJsb2NrLiAgTGVhdmluZyBpdCB1cCB0byB0aGUgTENTU0EgY2xlYW51cCBwYXNzIHdpbGwNCj4g PiArCSAgICAgZ2V0IHRoZSB3cm9uZyB2YWx1ZXMgaGVyZSBhcyBpdCBjYW4ndCBoYW5kbGUgdGhl IG1lcmdlIGJsb2NrIHdlDQo+IGp1c3QNCj4gPiArCSAgICAgbWFkZSBjb3JyZWN0bHkuICAqLw0K PiA+ICsJICBpZiAoZm5fZXhpdF9wKQ0KPiA+ICsJICAgIHsNCj4gPiArCQlncGhpX2l0ZXJhdG9y IGdzaV91cGRhdGUsIGdzaV9vcmlnLCBnc2lfdmVjdDsNCj4gPiArCQlmb3IgKGdzaV9vcmlnID0g Z3NpX3N0YXJ0X3BoaXMgKGVwaWxvZy0+aGVhZGVyKSwNCj4gPiArCQkgICAgIGdzaV91cGRhdGUg PSBnc2lfc3RhcnRfcGhpcyAoZ3VhcmRfZS0+ZGVzdCksDQo+ID4gKwkJICAgICBnc2lfdmVjdCA9 IGdzaV9zdGFydF9waGlzIChsb29wLT5oZWFkZXIpOw0KPiA+ICsJCSAgICAgIWdzaV9lbmRfcCAo Z3NpX29yaWcpICYmICFnc2lfZW5kX3AgKGdzaV91cGRhdGUpDQo+ID4gKwkJICAgICAmJiAhZ3Np X2VuZF9wIChnc2lfdmVjdCk7DQo+ID4gKwkJICAgICBnc2lfbmV4dCAoJmdzaV9vcmlnKSwgZ3Np X25leHQgKCZnc2lfdXBkYXRlKSwNCj4gPiArCQkgICAgIGdzaV9uZXh0ICgmZ3NpX3ZlY3QpKQ0K PiA+ICsJCSAgew0KPiA+ICsJCSAgICBncGhpICpvcmlnX3BoaSA9IGdzaV9vcmlnLnBoaSAoKTsN Cj4gPiArCQkgICAgZ3BoaSAqdXBkYXRlX3BoaSA9IGdzaV91cGRhdGUucGhpICgpOw0KPiA+ICsJ CSAgICBncGhpICp2ZWN0X3BoaSA9IGdzaV92ZWN0LnBoaSAoKTsNCj4gPiArCQkgICAgc3RtdF92 ZWNfaW5mbyBwaGlfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10DQo+ICh2ZWN0X3BoaSk7 DQo+ID4gKw0KPiA+ICsJCSAgICBpZiAoaXZfcGhpX3AgKHBoaV9pbmZvKSkNCj4gPiArCQkgICAg ICBjb250aW51ZTsNCj4gPiArDQo+ID4gKwkJICAgIHRyZWUgcGhpX2FyZyA9IFBISV9BUkdfREVG X0ZST01fRURHRSAob3JpZ19waGksDQo+IHVwZGF0ZV9lKTsNCj4gPiArCQkgICAgU0VUX1BISV9B UkdfREVGICh1cGRhdGVfcGhpLCB1cGRhdGVfZS0+ZGVzdF9pZHgsDQo+IHBoaV9hcmcpOw0KPiA+ ICsNCj4gPiArCQkgICAgcGhpX2FyZyA9IFBISV9BUkdfREVGX0ZST01fRURHRSAob3JpZ19waGks IGd1YXJkX2UpOw0KPiA+ICsJCSAgICBTRVRfUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGd1YXJk X2UtPmRlc3RfaWR4LA0KPiBwaGlfYXJnKTsNCj4gPiArCQkgIH0NCj4gPiArCSAgICB9DQo+ID4g KwkgIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGd1YXJkX2UpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAg ICAgICAgaWYgKHNraXBfZXBpbG9nKQ0KPiA+ICAJew0KPiA+ICAJICBndWFyZF9jb25kID0gZm9s ZF9idWlsZDIgKEVRX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KPiA+ICAJCQkJICAgIG5pdGVy cywgbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmKTsNCj4gPiAtCSAgZ3VhcmRfYmIgPSBzaW5nbGVfZXhp dCAobG9vcCktPmRlc3Q7DQo+ID4gLQkgIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAoc2luZ2xlX2V4 aXQgKGVwaWxvZykpOw0KPiA+ICsJICBndWFyZF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVz dDsNCj4gPiArCSAgZ3VhcmRfdG8gPSBzcGxpdF9lZGdlIChub3JtYWxfZXhpdCAoZXBpbG9nKSk7 DQo+ID4gIAkgIGd1YXJkX2UgPSBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGd1YXJkX2JiLCBndWFy ZF9jb25kLA0KPiBndWFyZF90bywNCj4gPiAgCQkJCQkgICBza2lwX3ZlY3RvciA/IGFuY2hvciA6 IGd1YXJkX2JiLA0KPiA+ICAJCQkJCSAgIHByb2JfZXBpbG9nLmludmVydCAoKSwNCj4gPiBAQCAt MzAxMCw3ICszNDc3LDcgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3Bfdmlu Zm8sIHRyZWUNCj4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAJICBpZiAodmVjdF9lcGls b2d1ZXMpDQo+ID4gIAkgICAgZXBpbG9ndWVfdmluZm8tPnNraXBfdGhpc19sb29wX2VkZ2UgPSBn dWFyZF9lOw0KPiA+ICAJICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChsb29w LCBlcGlsb2csIGd1YXJkX2UsDQo+ID4gLQkJCQkJICAgICAgc2luZ2xlX2V4aXQgKGVwaWxvZykp Ow0KPiA+ICsJCQkJCSAgICAgIG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gPiAgCSAgLyogT25s eSBuZWVkIHRvIGhhbmRsZSBiYXNpYyBibG9jayBiZWZvcmUgZXBpbG9nIGxvb3AgaWYgaXQncyBu b3QNCj4gPiAgCSAgICAgdGhlIGd1YXJkX2JiLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHNraXBf dmVjdG9yIGlzIHRydWUuICAqLw0KPiA+ICAJICBpZiAoZ3VhcmRfYmIgIT0gYmJfYmVmb3JlX2Vw aWxvZykNCj4gPiBAQCAtMzAyMyw3ICszNDkwLDYgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHRyZWUNCj4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAJ fQ0KPiA+ICAgICAgICBlbHNlDQo+ID4gIAlzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbGNz c2EgKGVwaWxvZyk7DQo+ID4gLQ0KPiA+ICAgICAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGJv dW5kOw0KPiA+ICAgICAgICBpZiAoYm91bmRfc2NhbGFyLmlzX2NvbnN0YW50ICgmYm91bmQpKQ0K PiA+ICAJew0KPiA+IEBAIC0zMTE0LDcgKzM1ODAsNiBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4N Cj4gPiAgICBhZGp1c3RfdmVjLnJlbGVhc2UgKCk7DQo+ID4gICAgZnJlZV9vcmlnaW5hbF9jb3B5 X3RhYmxlcyAoKTsNCj4gPiAtDQo+ID4gICAgcmV0dXJuIHZlY3RfZXBpbG9ndWVzID8gZXBpbG9n IDogTlVMTDsNCj4gPiAgfQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9v cC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYw0KPiA+IGluZGV4DQo+IGQ1YzJiZmY4MGJlOWJl MTUyNzA3ZWI5ZDM5MzJjODYzOTQ4ZGFhNzMuLjU0ODk0NmE2YmJmODg5MjA4NmExN2ZlMzANCj4g MDNkYTJjM2RjZWFkZjViIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5jYw0K PiA+ICsrKyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYw0KPiA+IEBAIC04NDQsODAgKzg0NCwxMDYg QEAgdmVjdF9maXh1cF9zY2FsYXJfY3ljbGVzX3dpdGhfcGF0dGVybnMNCj4gKGxvb3BfdmVjX2lu Zm8gbG9vcF92aW5mbykNCj4gPiAgICAgaW4gTlVNQkVSX09GX0lURVJBVElPTlNNMS4gIFBsYWNl IHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggdGhlDQo+ID4gICAgIG5pdGVyIGluZm9ybWF0aW9u IGhvbGRzIGluIEFTU1VNUFRJT05TLg0KPiA+DQo+ID4gLSAgIFJldHVybiB0aGUgbG9vcCBleGl0 IGNvbmRpdGlvbi4gICovDQo+ID4gKyAgIFJldHVybiB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbnMu ICAqLw0KPiA+DQo+ID4NCj4gPiAtc3RhdGljIGdjb25kICoNCj4gPiArc3RhdGljIHZlYzxnY29u ZCAqPg0KPiA+ICB2ZWN0X2dldF9sb29wX25pdGVycyAoY2xhc3MgbG9vcCAqbG9vcCwgdHJlZSAq YXNzdW1wdGlvbnMsDQo+ID4gIAkJICAgICAgdHJlZSAqbnVtYmVyX29mX2l0ZXJhdGlvbnMsIHRy ZWUNCj4gKm51bWJlcl9vZl9pdGVyYXRpb25zbTEpDQo+ID4gIHsNCj4gPiAtICBlZGdlIGV4aXQg PSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRf bG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiArICB2ZWM8Z2NvbmQgKj4gY29uZHM7DQo+ID4g KyAgY29uZHMuY3JlYXRlIChleGl0cy5sZW5ndGggKCkpOw0KPiA+ICAgIGNsYXNzIHRyZWVfbml0 ZXJfZGVzYyBuaXRlcl9kZXNjOw0KPiA+ICAgIHRyZWUgbml0ZXJfYXNzdW1wdGlvbnMsIG5pdGVy LCBtYXlfYmVfemVybzsNCj4gPiAtICBnY29uZCAqY29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0 aW9uIChsb29wKTsNCj4gPg0KPiA+ICAgICphc3N1bXB0aW9ucyA9IGJvb2xlYW5fdHJ1ZV9ub2Rl Ow0KPiA+ICAgICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gY2hyZWNfZG9udF9rbm93Ow0KPiA+ ICAgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IGNocmVjX2RvbnRfa25vdzsNCj4gPiArDQo+ID4g ICAgRFVNUF9WRUNUX1NDT1BFICgiZ2V0X2xvb3Bfbml0ZXJzIik7DQo+ID4NCj4gPiAtICBpZiAo IWV4aXQpDQo+ID4gLSAgICByZXR1cm4gY29uZDsNCj4gPiArICBpZiAoZXhpdHMuaXNfZW1wdHkg KCkpDQo+ID4gKyAgICByZXR1cm4gY29uZHM7DQo+ID4NCj4gPiAtICBtYXlfYmVfemVybyA9IE5V TExfVFJFRTsNCj4gPiAtICBpZiAoIW51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXRfYXNzdW1wdGlv bnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNjLA0KPiBOVUxMKQ0KPiA+IC0gICAgICB8fCBjaHJl Y19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyX2Rlc2Mubml0ZXIpKQ0KPiA+IC0gICAgcmV0 dXJuIGNvbmQ7DQo+ID4gKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsgICAgZHVtcF9w cmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkxvb3AgaGFzICVkIGV4aXRzLlxu IiwNCj4gPiArCQkgICAgIGV4aXRzLmxlbmd0aCAoKSk7DQo+ID4NCj4gPiAtICBuaXRlcl9hc3N1 bXB0aW9ucyA9IG5pdGVyX2Rlc2MuYXNzdW1wdGlvbnM7DQo+ID4gLSAgbWF5X2JlX3plcm8gPSBu aXRlcl9kZXNjLm1heV9iZV96ZXJvOw0KPiA+IC0gIG5pdGVyID0gbml0ZXJfZGVzYy5uaXRlcjsN Cj4gPiArICBlZGdlIGV4aXQ7DQo+ID4gKyAgdW5zaWduZWQgaW50IGk7DQo+ID4gKyAgRk9SX0VB Q0hfVkVDX0VMVCAoZXhpdHMsIGksIGV4aXQpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGdjb25k ICpjb25kID0gZ2V0X2VkZ2VfY29uZGl0aW9uIChleGl0KTsNCj4gPiArICAgICAgaWYgKGNvbmQp DQo+ID4gKwljb25kcy5zYWZlX3B1c2ggKGNvbmQpOw0KPiA+DQo+ID4gLSAgaWYgKG1heV9iZV96 ZXJvICYmIGludGVnZXJfemVyb3AgKG1heV9iZV96ZXJvKSkNCj4gPiAtICAgIG1heV9iZV96ZXJv ID0gTlVMTF9UUkVFOw0KPiA+ICsgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwlk dW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiQW5hbHl6aW5nIGV4aXQN Cj4gJWQuLi5cbiIsIGkpOw0KPiA+DQo+ID4gLSAgaWYgKG1heV9iZV96ZXJvKQ0KPiA+IC0gICAg ew0KPiA+IC0gICAgICBpZiAoQ09NUEFSSVNPTl9DTEFTU19QIChtYXlfYmVfemVybykpDQo+ID4g KyAgICAgIG1heV9iZV96ZXJvID0gTlVMTF9UUkVFOw0KPiA+ICsgICAgICBpZiAoIW51bWJlcl9v Zl9pdGVyYXRpb25zX2V4aXRfYXNzdW1wdGlvbnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNjLA0K PiBOVUxMKQ0KPiA+ICsgICAgICAgICAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChu aXRlcl9kZXNjLm5pdGVyKSkNCj4gPiArCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgbml0 ZXJfYXNzdW1wdGlvbnMgPSBuaXRlcl9kZXNjLmFzc3VtcHRpb25zOw0KPiA+ICsgICAgICBtYXlf YmVfemVybyA9IG5pdGVyX2Rlc2MubWF5X2JlX3plcm87DQo+ID4gKyAgICAgIG5pdGVyID0gbml0 ZXJfZGVzYy5uaXRlcjsNCj4gPiArDQo+ID4gKyAgICAgIGlmIChtYXlfYmVfemVybyAmJiBpbnRl Z2VyX3plcm9wIChtYXlfYmVfemVybykpDQo+ID4gKwltYXlfYmVfemVybyA9IE5VTExfVFJFRTsN Cj4gPiArDQo+ID4gKyAgICAgIGlmIChtYXlfYmVfemVybykNCj4gPiAgCXsNCj4gPiAtCSAgLyog VHJ5IHRvIGNvbWJpbmUgbWF5X2JlX3plcm8gd2l0aCBhc3N1bXB0aW9ucywgdGhpcyBjYW4gc2lt cGxpZnkNCj4gPiAtCSAgICAgY29tcHV0YXRpb24gb2Ygbml0ZXIgZXhwcmVzc2lvbi4gICovDQo+ ID4gLQkgIGlmIChuaXRlcl9hc3N1bXB0aW9ucyAmJiAhaW50ZWdlcl9ub256ZXJvcCAobml0ZXJf YXNzdW1wdGlvbnMpKQ0KPiA+IC0JICAgIG5pdGVyX2Fzc3VtcHRpb25zID0gZm9sZF9idWlsZDIg KFRSVVRIX0FORF9FWFBSLA0KPiBib29sZWFuX3R5cGVfbm9kZSwNCj4gPiAtCQkJCQkgICAgIG5p dGVyX2Fzc3VtcHRpb25zLA0KPiA+IC0JCQkJCSAgICAgZm9sZF9idWlsZDEgKFRSVVRIX05PVF9F WFBSLA0KPiA+IC0NCj4gYm9vbGVhbl90eXBlX25vZGUsDQo+ID4gLQkJCQkJCQkgIG1heV9iZV96 ZXJvKSk7DQo+ID4gKwkgIGlmIChDT01QQVJJU09OX0NMQVNTX1AgKG1heV9iZV96ZXJvKSkNCj4g PiArCSAgICB7DQo+ID4gKwkgICAgICAvKiBUcnkgdG8gY29tYmluZSBtYXlfYmVfemVybyB3aXRo IGFzc3VtcHRpb25zLCB0aGlzIGNhbg0KPiBzaW1wbGlmeQ0KPiA+ICsJCSBjb21wdXRhdGlvbiBv ZiBuaXRlciBleHByZXNzaW9uLiAgKi8NCj4gPiArCSAgICAgIGlmIChuaXRlcl9hc3N1bXB0aW9u cyAmJiAhaW50ZWdlcl9ub256ZXJvcCAobml0ZXJfYXNzdW1wdGlvbnMpKQ0KPiA+ICsJCW5pdGVy X2Fzc3VtcHRpb25zID0gZm9sZF9idWlsZDIgKFRSVVRIX0FORF9FWFBSLA0KPiBib29sZWFuX3R5 cGVfbm9kZSwNCj4gPiArCQkJCQkJIG5pdGVyX2Fzc3VtcHRpb25zLA0KPiA+ICsJCQkJCQkgZm9s ZF9idWlsZDENCj4gKFRSVVRIX05PVF9FWFBSLA0KPiA+ICsNCj4gYm9vbGVhbl90eXBlX25vZGUs DQo+ID4gKwkJCQkJCQkgICAgICBtYXlfYmVfemVybykpOw0KPiA+ICsJICAgICAgZWxzZQ0KPiA+ ICsJCW5pdGVyID0gZm9sZF9idWlsZDMgKENPTkRfRVhQUiwgVFJFRV9UWVBFIChuaXRlciksDQo+ IG1heV9iZV96ZXJvLA0KPiA+ICsJCQkJICAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5p dGVyKSwgMCksDQo+ID4gKwkJCQkgICAgIHJld3JpdGVfdG9fbm9uX3RyYXBwaW5nX292ZXJmbG93 DQo+IChuaXRlcikpOw0KPiA+ICsNCj4gPiArCSAgICAgIG1heV9iZV96ZXJvID0gTlVMTF9UUkVF Ow0KPiA+ICsJICAgIH0NCj4gPiArCSAgZWxzZSBpZiAoaW50ZWdlcl9ub256ZXJvcCAobWF5X2Jl X3plcm8pICYmIGkgPT0gMCkNCj4gPiArCSAgICB7DQo+ID4gKwkgICAgICAqbnVtYmVyX29mX2l0 ZXJhdGlvbnNtMSA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKTsNCj4gPiAr CSAgICAgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAo bml0ZXIpLCAxKTsNCj4gPiArCSAgICAgIGNvbnRpbnVlOw0KPiA+ICsJICAgIH0NCj4gPiAgCSAg ZWxzZQ0KPiA+IC0JICAgIG5pdGVyID0gZm9sZF9idWlsZDMgKENPTkRfRVhQUiwgVFJFRV9UWVBF IChuaXRlciksIG1heV9iZV96ZXJvLA0KPiA+IC0JCQkJIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQ RSAobml0ZXIpLCAwKSwNCj4gPiAtCQkJCSByZXdyaXRlX3RvX25vbl90cmFwcGluZ19vdmVyZmxv dyAobml0ZXIpKTsNCj4gPiArCSAgICBjb250aW51ZTsNCj4gPiArICAgICAgIH0NCj4gPg0KPiA+ IC0JICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiAtCX0NCj4gPiAtICAgICAgZWxzZSBp ZiAoaW50ZWdlcl9ub256ZXJvcCAobWF5X2JlX3plcm8pKQ0KPiA+ICsgICAgICAvKiBMb29wIGFz c3VtcHRpb25zIGFyZSBiYXNlZCBvZmYgdGhlIG5vcm1hbCBleGl0LiAgKi8NCj4gPiArICAgICAg aWYgKGkgPT0gMCkNCj4gPiAgCXsNCj4gPiAtCSAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBi dWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCk7DQo+ID4gLQkgICpudW1iZXJfb2Zf aXRlcmF0aW9ucyA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAxKTsNCj4gPiAt CSAgcmV0dXJuIGNvbmQ7DQo+ID4gKwkgICphc3N1bXB0aW9ucyA9IG5pdGVyX2Fzc3VtcHRpb25z Ow0KPiA+ICsJICAqbnVtYmVyX29mX2l0ZXJhdGlvbnNtMSA9IG5pdGVyOw0KPiA+ICsNCj4gPiAr CSAgLyogV2Ugd2FudCB0aGUgbnVtYmVyIG9mIGxvb3AgaGVhZGVyIGV4ZWN1dGlvbnMgd2hpY2gg aXMgdGhlDQo+IG51bWJlcg0KPiA+ICsJICAgICBvZiBsYXRjaCBleGVjdXRpb25zIHBsdXMgb25l Lg0KPiA+ICsJICAgICA/Pz8gIEZvciBVSU5UX01BWCBsYXRjaCBleGVjdXRpb25zIHRoaXMgbnVt YmVyIG92ZXJmbG93cyB0bw0KPiB6ZXJvDQo+ID4gKwkgICAgIGZvciBsb29wcyBsaWtlIGRvIHsg bisrOyB9IHdoaWxlIChuICE9IDApOyAgKi8NCj4gPiArCSAgaWYgKG5pdGVyICYmICFjaHJlY19j b250YWluc191bmRldGVybWluZWQgKG5pdGVyKSkNCj4gPiArCSAgICBuaXRlciA9IGZvbGRfYnVp bGQyIChQTFVTX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLA0KPiA+ICsJCQkJIHVuc2hhcmVfZXhw ciAobml0ZXIpLA0KPiA+ICsJCQkJIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAx KSk7DQo+ID4gKwkgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IG5pdGVyOw0KPiA+ICAJfQ0KPiA+ IC0gICAgICBlbHNlDQo+ID4gLQlyZXR1cm4gY29uZDsNCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0g ICphc3N1bXB0aW9ucyA9IG5pdGVyX2Fzc3VtcHRpb25zOw0KPiA+IC0gICpudW1iZXJfb2ZfaXRl cmF0aW9uc20xID0gbml0ZXI7DQo+ID4gLQ0KPiA+IC0gIC8qIFdlIHdhbnQgdGhlIG51bWJlciBv ZiBsb29wIGhlYWRlciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZSBudW1iZXINCj4gPiAtICAgICBv ZiBsYXRjaCBleGVjdXRpb25zIHBsdXMgb25lLg0KPiA+IC0gICAgID8/PyAgRm9yIFVJTlRfTUFY IGxhdGNoIGV4ZWN1dGlvbnMgdGhpcyBudW1iZXIgb3ZlcmZsb3dzIHRvIHplcm8NCj4gPiAtICAg ICBmb3IgbG9vcHMgbGlrZSBkbyB7IG4rKzsgfSB3aGlsZSAobiAhPSAwKTsgICovDQo+ID4gLSAg aWYgKG5pdGVyICYmICFjaHJlY19jb250YWluc191bmRldGVybWluZWQgKG5pdGVyKSkNCj4gPiAt ICAgIG5pdGVyID0gZm9sZF9idWlsZDIgKFBMVVNfRVhQUiwgVFJFRV9UWVBFIChuaXRlciksIHVu c2hhcmVfZXhwcg0KPiAobml0ZXIpLA0KPiA+IC0JCQkgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQ RSAobml0ZXIpLCAxKSk7DQo+ID4gLSAgKm51bWJlcl9vZl9pdGVyYXRpb25zID0gbml0ZXI7DQo+ ID4gKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsgICAgZHVtcF9wcmludGZfbG9jIChN U0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgIkFsbCBsb29wIGV4aXRzIHN1Y2Nlc3NmdWxseQ0KPiBh bmFseXplZC5cbiIpOw0KPiA+DQo+ID4gLSAgcmV0dXJuIGNvbmQ7DQo+ID4gKyAgcmV0dXJuIGNv bmRzOw0KPiA+ICB9DQo+ID4NCj4gPiAgLyogRnVuY3Rpb24gYmJfaW5fbG9vcF9wDQo+ID4gQEAg LTE0NTUsNyArMTQ4MSw4IEBAIHZlY3RfY29tcHV0ZV9zaW5nbGVfc2NhbGFyX2l0ZXJhdGlvbl9j b3N0DQo+IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pDQo+ID4NCj4gPiAgICAgVmVyaWZ5IHRo YXQgY2VydGFpbiBDRkcgcmVzdHJpY3Rpb25zIGhvbGQsIGluY2x1ZGluZzoNCj4gPiAgICAgLSB0 aGUgbG9vcCBoYXMgYSBwcmUtaGVhZGVyDQo+ID4gLSAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xl IGVudHJ5IGFuZCBleGl0DQo+ID4gKyAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVudHJ5DQo+ ID4gKyAgIC0gbmVzdGVkIGxvb3BzIGNhbiBoYXZlIG9ubHkgYSBzaW5nbGUgZXhpdC4NCj4gPiAg ICAgLSB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBpcyBzaW1wbGUgZW5vdWdoDQo+ID4gICAgIC0g dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGNhbiBiZSBhbmFseXplZCwgaS5lLCBhIGNvdW50YWJs ZSBsb29wLiAgVGhlDQo+ID4gICAgICAgbml0ZXIgY291bGQgYmUgYW5hbHl6ZWQgdW5kZXIgc29t ZSBhc3N1bXB0aW9ucy4gICovDQo+ID4gQEAgLTE0ODQsMTEgKzE1MTEsNiBAQCB2ZWN0X2FuYWx5 emVfbG9vcF9mb3JtIChjbGFzcyBsb29wICpsb29wLA0KPiB2ZWN0X2xvb3BfZm9ybV9pbmZvICpp bmZvKQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgIChleGl0LWJiKSAgKi8NCj4gPg0KPiA+IC0gICAgICBpZiAobG9vcC0+bnVt X25vZGVzICE9IDIpDQo+ID4gLQlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9s b2NhdGlvbiwNCj4gPiAtCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+IC0JCQkJICAg ICAgICIgY29udHJvbCBmbG93IGluIGxvb3AuXG4iKTsNCj4gPiAtDQo+ID4gICAgICAgIGlmIChl bXB0eV9ibG9ja19wIChsb29wLT5oZWFkZXIpKQ0KPiA+ICAJcmV0dXJuIG9wdF9yZXN1bHQ6OmZh aWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gIAkJCQkgICAgICAgIm5vdCB2ZWN0b3JpemVk OiBlbXB0eSBsb29wLlxuIik7DQo+ID4gQEAgLTE1NTksMTEgKzE1ODEsMTMgQEAgdmVjdF9hbmFs eXplX2xvb3BfZm9ybSAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gdmVjdF9sb29wX2Zvcm1faW5mbyAq aW5mbykNCj4gPiAgICAgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0 aW9uLA0KPiA+ICAJCQkgIkNvbnNpZGVyaW5nIG91dGVyLWxvb3AgdmVjdG9yaXphdGlvbi5cbiIp Ow0KPiA+ICAgICAgICBpbmZvLT5pbm5lcl9sb29wX2NvbmQgPSBpbm5lci5sb29wX2NvbmQ7DQo+ ID4gKw0KPiA+ICsgICAgICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkNCj4gPiArCXJldHVybiBv cHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkJICAgICAgICJu b3QgdmVjdG9yaXplZDogbXVsdGlwbGUgZXhpdHMuXG4iKTsNCj4gPiArDQo+ID4gICAgICB9DQo+ ID4NCj4gPiAtICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkNCj4gPiAtICAgIHJldHVybiBvcHRf cmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0KPiA+IC0JCQkJICAgIm5vdCB2ZWN0 b3JpemVkOiBtdWx0aXBsZSBleGl0cy5cbiIpOw0KPiA+ICAgIGlmIChFREdFX0NPVU5UIChsb29w LT5oZWFkZXItPnByZWRzKSAhPSAyKQ0KPiA+ICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1 cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gIAkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ IEBAIC0xNTc5LDIxICsxNjAzLDQ1IEBAIHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0gKGNsYXNzIGxv b3AgKmxvb3AsDQo+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ID4gIAkJCQkgICAibm90 IHZlY3Rvcml6ZWQ6IGxhdGNoIGJsb2NrIG5vdCBlbXB0eS5cbiIpOw0KPiA+DQo+ID4gICAgLyog TWFrZSBzdXJlIHRoZSBleGl0IGlzIG5vdCBhYm5vcm1hbC4gICovDQo+ID4gLSAgZWRnZSBlID0g c2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+IC0gIGlmIChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwp DQo+ID4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29w KTsNCj4gPiArICBlZGdlIG5leGl0ID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0KPiA+ICsgIGZvciAo ZWRnZSBlIDogZXhpdHMpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGlmIChlLT5mbGFncyAmIEVE R0VfQUJOT1JNQUwpDQo+ID4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9s b2NhdGlvbiwNCj4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ICsJCQkJICAg ICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVkZ2UuXG4iKTsNCj4gPiArICAgICAgLyogRWFybHkg YnJlYWsgQkIgbXVzdCBiZSBhZnRlciB0aGUgbWFpbiBleGl0IEJCLiAgSW4gdGhlb3J5IHdlIHNo b3VsZA0KPiA+ICsJIGJlIGFibGUgdG8gdmVjdG9yaXplIHRoZSBpbnZlcnNlIG9yZGVyLCBidXQg dGhlIGN1cnJlbnQgZmxvdyBpbiB0aGUNCj4gPiArCSB0aGUgdmVjdG9yaXplciBhbHdheXMgYXNz dW1lcyB5b3UgdXBkYXRlIHN1Y2Nlc3MgUEhJIG5vZGVzLCBub3QNCj4gPiArCSBwcmVkcy4gICov DQo+ID4gKyAgICAgIGlmIChlICE9IG5leGl0ICYmICFkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlO QVRPUlMsIG5leGl0LT5zcmMsIGUtDQo+ID5zcmMpKQ0KPiA+ICsJcmV0dXJuIG9wdF9yZXN1bHQ6 OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCQkgICAgICAgIm5vdCB2ZWN0b3Jp emVkOiINCj4gPiArCQkJCSAgICAgICAiIGFibm9ybWFsIGxvb3AgZXhpdCBlZGdlIG9yZGVyLlxu Iik7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIGlmIChleGl0cy5sZW5ndGggKCkgPiAyKQ0K PiA+ICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sDQo+ ID4gIAkJCQkgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+IC0JCQkJICAgIiBhYm5vcm1hbCBsb29w IGV4aXQgZWRnZS5cbiIpOw0KPiA+IC0NCj4gPiAtICBpbmZvLT5sb29wX2NvbmQNCj4gPiArCQkJ CSAgICIgdG9vIG1hbnkgZXhpdHMuIE9ubHkgMSBhZGRpdGlvbmFsIGV4aXQiDQo+ID4gKwkJCQkg ICAiIHN1cHBvcnRlZC5cbiIpOw0KPiA+ICsgIGlmIChsb29wLT5udW1fbm9kZXMgIT0gMiArIGV4 aXRzLmxlbmd0aCAoKSAtIDEpDQo+ID4gKyAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9h dCAodmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJCSAgICJub3QgdmVjdG9yaXplZDoiDQo+ID4gKwkJ CQkgICAiIHVuc3VwcG9ydGVkIGNvbnRyb2wgZmxvdyBpbiBsb29wLlxuIik7DQo+ID4gKyAgaW5m by0+Y29uZHMNCj4gPiAgICAgID0gdmVjdF9nZXRfbG9vcF9uaXRlcnMgKGxvb3AsICZpbmZvLT5h c3N1bXB0aW9ucywNCj4gPiAgCQkJICAgICZpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9ucywNCj4g PiAgCQkJICAgICZpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9uc20xKTsNCj4gPiAtICBpZiAoIWlu Zm8tPmxvb3BfY29uZCkNCj4gPiArDQo+ID4gKyAgaWYgKGluZm8tPmNvbmRzLmxlbmd0aCAoKSA9 PSAwKQ0KPiA+ICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQNCj4gPiAgICAgICAg KHZlY3RfbG9jYXRpb24sDQo+ID4gICAgICAgICAibm90IHZlY3Rvcml6ZWQ6IGNvbXBsaWNhdGVk IGV4aXQgY29uZGl0aW9uLlxuIik7DQo+ID4NCj4gPiArICBpbmZvLT5sb29wX2NvbmQgPSBpbmZv LT5jb25kc1swXTsNCj4gPiArDQo+ID4gICAgaWYgKGludGVnZXJfemVyb3AgKGluZm8tPmFzc3Vt cHRpb25zKQ0KPiA+ICAgICAgICB8fCAhaW5mby0+bnVtYmVyX29mX2l0ZXJhdGlvbnMNCj4gPiAg ICAgICAgfHwgY2hyZWNfY29udGFpbnNfdW5kZXRlcm1pbmVkIChpbmZvLT5udW1iZXJfb2ZfaXRl cmF0aW9ucykpDQo+ID4gQEAgLTE2MzgsOCArMTY4NiwxNyBAQCB2ZWN0X2NyZWF0ZV9sb29wX3Zp bmZvIChjbGFzcyBsb29wICpsb29wLA0KPiB2ZWNfaW5mb19zaGFyZWQgKnNoYXJlZCwNCj4gPiAg ICBpZiAoIWludGVnZXJfb25lcCAoaW5mby0+YXNzdW1wdGlvbnMpICYmICFtYWluX2xvb3BfaW5m bykNCj4gPiAgICAgIExPT1BfVklORk9fTklURVJTX0FTU1VNUFRJT05TIChsb29wX3ZpbmZvKSA9 IGluZm8tPmFzc3VtcHRpb25zOw0KPiA+DQo+ID4gLSAgc3RtdF92ZWNfaW5mbyBsb29wX2NvbmRf aW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10IChpbmZvLQ0KPiA+bG9vcF9jb25kKTsNCj4g PiAtICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9IGxvb3BfZXhpdF9jdHJsX3Zl Y19pbmZvX3R5cGU7DQo+ID4gKyAgdW5zaWduZWQgaW50IGk7DQo+ID4gKyAgZ2NvbmQgKmNvbmQ7 DQo+ID4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAoaW5mby0+Y29uZHMsIGksIGNvbmQpDQo+ID4gKyAg ICB7DQo+ID4gKyAgICAgIHN0bXRfdmVjX2luZm8gbG9vcF9jb25kX2luZm8gPSBsb29wX3ZpbmZv LT5sb29rdXBfc3RtdCAoY29uZCk7DQo+ID4gKyAgICAgIFNUTVRfVklORk9fVFlQRSAobG9vcF9j b25kX2luZm8pID0gbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZTsNCj4gPiArICAgIH0NCj4g PiArDQo+ID4gKyAgLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHZlY3Rvcml6aW5nIG11bHRpcGxl IGV4aXRzLiAgKi8NCj4gPiArICBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykg PSBpbmZvLT5jb25kcy5sZW5ndGggKCkgPiAxOw0KPiA+ICsNCj4gPiAgICBpZiAoaW5mby0+aW5u ZXJfbG9vcF9jb25kKQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBzdG10X3ZlY19pbmZvIGlubmVy X2xvb3BfY29uZF9pbmZvDQo+ID4gQEAgLTIyNzAsMTAgKzIzMjcsMTMgQEAgdmVjdF9kZXRlcm1p bmVfcGFydGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nDQo+IChsb29wX3ZlY19pbmZvIGxvb3Bfdmlu Zm8sDQo+ID4gICAgYm9vbCBuZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3ANCj4gPiAg ICAgID0gdmVjdF9uZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3AgKGxvb3BfdmluZm8p Ow0KPiA+DQo+ID4gLSAgLyogRGVjaWRlIHdoZXRoZXIgdG8gdmVjdG9yaXplIHRoZSBsb29wIHdp dGggcGFydGlhbCB2ZWN0b3JzLiAgKi8NCj4gPiArICAvKiBEZWNpZGUgd2hldGhlciB0byB2ZWN0 b3JpemUgdGhlIGxvb3Agd2l0aCBwYXJ0aWFsIHZlY3RvcnMuICBDdXJyZW50bHkNCj4gPiArICAg ICBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9uIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCB2ZWN0 b3JzIGFzIHdlIGhhdmUNCj4gPiArICAgICB0byBwZWVsIGEgc2NhbGFyIGxvb3AgdGhhdCB3ZSBj YW4ndCB2ZWN0b3JpemUuICAqLw0KPiA+ICAgIExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNU T1JTX1AgKGxvb3BfdmluZm8pID0gZmFsc2U7DQo+ID4gICAgTE9PUF9WSU5GT19FUElMX1VTSU5H X1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKSA9IGZhbHNlOw0KPiA+ICAgIGlmIChMT09Q X1ZJTkZPX0NBTl9VU0VfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pDQo+ID4gKyAgICAg ICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykNCj4gPiAgICAgICAgJiYg bmVlZF9wZWVsaW5nX29yX3BhcnRpYWxfdmVjdG9yc19wKQ0KPiA+ICAgICAgew0KPiA+ICAgICAg ICAvKiBGb3IgcGFydGlhbC12ZWN0b3ItdXNhZ2U9MSwgdHJ5IHRvIHB1c2ggdGhlIGhhbmRsaW5n IG9mIHBhcnRpYWwNCj4gPiBAQCAtMjc0NiwxMyArMjgwNiwxNCBAQCBzdGFydF9vdmVyOg0KPiA+ DQo+ID4gICAgLyogSWYgYW4gZXBpbG9ndWUgbG9vcCBpcyByZXF1aXJlZCBtYWtlIHN1cmUgd2Ug Y2FuIGNyZWF0ZSBvbmUuICAqLw0KPiA+ICAgIGlmIChMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dB UFMgKGxvb3BfdmluZm8pDQo+ID4gLSAgICAgIHx8IExPT1BfVklORk9fUEVFTElOR19GT1JfTklU RVIgKGxvb3BfdmluZm8pKQ0KPiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX05J VEVSIChsb29wX3ZpbmZvKQ0KPiA+ICsgICAgICB8fCBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAo bG9vcF92aW5mbykpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAo KSkNCj4gPiAgICAgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9u LCAiZXBpbG9nIGxvb3ANCj4gcmVxdWlyZWRcbiIpOw0KPiA+ICAgICAgICBpZiAoIXZlY3RfY2Fu X2FkdmFuY2VfaXZzX3AgKGxvb3BfdmluZm8pDQo+ID4gLQkgIHx8ICFzbHBlZWxfY2FuX2R1cGxp Y2F0ZV9sb29wX3AgKExPT1BfVklORk9fTE9PUA0KPiAobG9vcF92aW5mbyksDQo+ID4gLQkJCQkJ ICAgc2luZ2xlX2V4aXQgKExPT1BfVklORk9fTE9PUA0KPiA+ICsJICB8fCAhc2xwZWVsX2Nhbl9k dXBsaWNhdGVfbG9vcF9wIChsb29wX3ZpbmZvLA0KPiA+ICsJCQkJCSAgIG5vcm1hbF9leGl0IChM T09QX1ZJTkZPX0xPT1ANCj4gPiAgCQkJCQkJCSAobG9vcF92aW5mbykpKSkNCj4gPiAgICAgICAg ICB7DQo+ID4gIAkgIG9rID0gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwN Cj4gPiBAQCAtMzIzOSw2ICszMzAwLDggQEAgdmVjdF9hbmFseXplX2xvb3AgKGNsYXNzIGxvb3Ag Kmxvb3AsDQo+IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQ0KPiA+ICAJCSAgICAgIioqKioqIENo b29zaW5nIHZlY3RvciBtb2RlICVzXG4iLA0KPiA+ICAJCSAgICAgR0VUX01PREVfTkFNRSAoZmly c3RfbG9vcF92aW5mby0+dmVjdG9yX21vZGUpKTsNCj4gPg0KPiA+ICsgIGxvb3BfZm9ybV9pbmZv LmNvbmRzLnJlbGVhc2UgKCk7DQo+ID4gKw0KPiA+ICAgIC8qIE9ubHkgdmVjdG9yaXplIGVwaWxv Z3VlcyBpZiBQQVJBTV9WRUNUX0VQSUxPR1VFU19OT01BU0sgaXMNCj4gPiAgICAgICBlbmFibGVk LCBTSU1EVUlEIGlzIG5vdCBzZXQsIGl0IGlzIHRoZSBpbm5lcm1vc3QgbG9vcCBhbmQgd2UgaGF2 ZQ0KPiA+ICAgICAgIGVpdGhlciBhbHJlYWR5IGZvdW5kIHRoZSBsb29wJ3MgU0lNRExFTiBvciB0 aGVyZSB3YXMgbm8gU0lNRExFTiB0bw0KPiA+IEBAIC0zMzUwLDYgKzM0MTMsOCBAQCB2ZWN0X2Fu YWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gdmVjX2luZm9fc2hhcmVkICpzaGFyZWQp DQo+ID4gIAkJCSAgIChmaXJzdF9sb29wX3ZpbmZvLT5lcGlsb2d1ZV92aW5mb3NbMF0tDQo+ID52 ZWN0b3JfbW9kZSkpOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gKyAgbG9vcF9mb3JtX2luZm8uY29u ZHMucmVsZWFzZSAoKTsNCj4gPiArDQo+ID4gICAgcmV0dXJuIGZpcnN0X2xvb3BfdmluZm87DQo+ ID4gIH0NCj4gPg0KPiA+IEBAIC03OTA3LDYgKzc5NzIsMjM3IEBAIHZlY3RfdHJhbnNmb3JtX3Jl ZHVjdGlvbiAobG9vcF92ZWNfaW5mbw0KPiBsb29wX3ZpbmZvLA0KPiA+ICAgIHJldHVybiB0cnVl Ow0KPiA+ICB9DQo+ID4NCj4gPiArLyogIFdoZW4gdmVjdG9yaXppbmcgZWFybHkgYnJlYWsgc3Rh dGVtZW50cyBpbnN0cnVjdGlvbnMgdGhhdCBoYXBwZW4NCj4gYmVmb3JlDQo+ID4gKyAgICB0aGUg ZWFybHkgYnJlYWsgaW4gdGhlIGN1cnJlbnQgQkIgbmVlZCB0byBiZSBtb3ZlZCB0byBhZnRlciB0 aGUgZWFybHkNCj4gPiArICAgIGJyZWFrLiAgVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIHRoYXQg YW5kIGFzc3VtZXMgdGhhdCBhbnkgdmFsaWRhdHkNCj4gPiArICAgIGNoZWNrcyBoYXMgYWxyZWFk eSBiZWVuIHBlcmZvcm1lZC4NCj4gPiArDQo+ID4gKyAgICBXaGlsZSBtb3ZpbmcgdGhlIGluc3Ry dWN0aW9ucyBpZiBpdCBlbmNvdW50ZXJzIGEgVlVTRSBvciBWREVGIGl0IHRoZW4NCj4gPiArICAg IGNvcnJlY3RzIHRoZSBWVVNFUyBhcyBpdCBtb3ZlcyB0aGUgc3RhdGVtZW50cyBhbG9uZy4gIENI QUlORUQNCj4gY29udGFpbnMNCj4gPiArICAgIHRoZSBsaXN0IG9mIFNTQV9OQU1FUyB0aGF0IGJl bG9uZyB0byB0aGUgZGVwZW5kZW5jeSBjaGFpbiBvZiB0aGUgZWFybHkNCj4gPiArICAgIGJyZWFr IGNvbmRpdGlvbmFsLiAgR0RFU1QgaXMgdGhlIGxvY2F0aW9uIGluIHdoaWNoIHRvIGluc2VydCB0 aGUgbmV3DQo+ID4gKyAgICBzdGF0ZW1lbnRzLiAgR1NUTVQgaXMgdGhlIGl0ZXJhdG9yIHRvIHdh bGsgdXAgdG8gZmluZCBzdGF0ZW1lbnRzIHRvDQo+ID4gKyAgICBjb25zaWRlciBtb3ZpbmcuICBS RUFDSElOR19WVVNFIGNvbnRhaW5zIHRoZSBkb21pbmF0aW5nIFZVU0UNCj4gZm91bmQgc28gZmFy DQo+ID4gKyAgICBhbmQgQ1VSUkVOVF9WREVGIGNvbnRhaW5zIHRoZSBsYXN0IFZERUYgd2UndmUg c2Vlbi4gIFRoZXNlIGFyZQ0KPiB1cGRhdGVkIGluDQo+ID4gKyAgICBwcmUtb3JkZXIgYW5kIHVw ZGF0ZWQgaW4gcG9zdC1vcmRlciBhZnRlciBtb3ZpbmcgdGhlIGluc3RydWN0aW9uLiAgKi8NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK21vdmVfZWFybHlfZXhpdF9zdG10cyAoaGFzaF9z ZXQ8dHJlZT4gKmNoYWluZWQsIGdpbXBsZV9zdG10X2l0ZXJhdG9yDQo+ICpnZGVzdCwNCj4gPiAr CQkgICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzdG10LCB0cmVlICpyZWFjaGluZ192dXNl LA0KPiA+ICsJCSAgICAgICB0cmVlICpjdXJyZW50X3ZkZWYpDQo+ID4gK3sNCj4gPiArICBpZiAo Z3NpX2VuZF9wICgqZ3N0bXQpKQ0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICBnaW1w bGUgKnN0bXQgPSBnc2lfc3RtdCAoKmdzdG10KTsNCj4gPiArICBpZiAoZ2ltcGxlX2hhc19vcHMg KHN0bXQpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICB0cmVlIGRlc3QgPSBOVUxMX1RSRUU7DQo+ ID4gKyAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBTU0FfTkFNRSBiZWluZyBkZWZpbmVkLiAgRm9y IFN0YXRlbWVudHMgd2l0aCBhbg0KPiBMSFMNCj4gPiArCSB1c2UgdGhlIExIUywgaWYgbm90LCBh c3N1bWUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBjYWxsIGlzIHRoZQ0KPiA+ICsJIHZh bHVlIGJlaW5nIGRlZmluZWQuICBlLmcuIE1BU0tFRF9MT0FEIGV0Yy4gICovDQo+ID4gKyAgICAg IGlmIChnaW1wbGVfaGFzX2xocyAoc3RtdCkpDQo+ID4gKwl7DQo+ID4gKwkgIGlmIChpc19naW1w bGVfYXNzaWduIChzdG10KSkNCj4gPiArCSAgICBkZXN0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0 bXQpOw0KPiA+ICsJICBlbHNlIGlmIChjb25zdCBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxjb25z dCBnY2FsbCAqPiAoc3RtdCkpDQo+ID4gKwkgICAgZGVzdCA9IGdpbXBsZV9jYWxsX2xocyAoY2Fs bCk7DQo+ID4gKwl9DQo+ID4gKyAgICAgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0gZHlu X2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCj4gPiArCWRlc3QgPSBnaW1wbGVfYXJnIChj YWxsLCAwKTsNCj4gPiArDQo+ID4gKyAgICAgIC8qIERvbid0IG1vdmUgdGhlIHNjYWxhciBpbnN0 cnVjdGlvbnMuICAqLw0KPiA+ICsgICAgICBib29sIG1vdmUNCj4gPiArCT0gZGVzdCAmJiAoVkVD VE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXN0KSkNCj4gPiArCQkgICB8fCBQT0lOVEVSX1RZUEVf UCAoVFJFRV9UWVBFIChkZXN0KSkpOw0KPiA+ICsNCj4gPiArICAgICAgLyogSWYgd2UgZm91bmQg dGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0aGUN Cj4gPiArCSBjaGFpbiB0aGVuIGV4cGFuZCB0aGUgY2hhaW4gd2l0aCB0aGUgbmV3IFNTQV9WQVJz IGJlaW5nIHVzZWQuICAqLw0KPiA+ICsgICAgICBpZiAoY2hhaW5lZC0+Y29udGFpbnMgKGRlc3Qp KQ0KPiA+ICsJew0KPiA+ICsJICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgZ2ltcGxlX251bV9h cmdzIChzdG10KTsgeCsrKQ0KPiA+ICsJICAgIGlmIChUUkVFX0NPREUgKGdpbXBsZV9hcmcgKHN0 bXQsIHgpKSA9PSBTU0FfTkFNRSkNCj4gPiArCSAgICAgIGNoYWluZWQtPmFkZCAoZ2ltcGxlX2Fy ZyAoc3RtdCwgeCkpOw0KPiA+ICsNCj4gPiArCSAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJ CSAgICAgImZvdW5kIGNoYWluICVHIiwgc3RtdCk7DQo+ID4gKwkgIHVwZGF0ZV9zdG10IChzdG10 KTsNCj4gPiArCSAgbW92ZSA9IGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArICAgICAgaWYg KG1vdmUpDQo+ID4gKwl7DQo+ID4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCSAg ICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCSAgICAg ICAgICAgICAibW92aW5nIHN0bXQgJUciLCBzdG10KTsNCj4gPiArCSAgZ3NpX21vdmVfYmVmb3Jl IChnc3RtdCwgZ2Rlc3QpOw0KPiA+ICsJICBnc2lfcHJldiAoZ2Rlc3QpOw0KPiA+ICsJICB0cmVl IHZkZWYgPSBnaW1wbGVfdmRlZiAoc3RtdCk7DQo+ID4gKw0KPiA+ICsJICAvKiBJZiB3ZSd2ZSBt b3ZlZCBhIFZERUYsIGV4dHJhY3QgdGhlIGRlZmluaW5nIE1FTSBhbmQgdXBkYXRlDQo+ID4gKwkg ICAgIHVzYWdlcyBvZiBpdC4gIFRPRE86IEkgdGhpbmsgdGhpcyBtYXkgbmVlZCBzb21lIGNvbnN0 cmFpbnRzPyAqLw0KPiA+ICsJICBpZiAodmRlZikNCj4gPiArCSAgICB7DQo+ID4gKwkgICAgICAq Y3VycmVudF92ZGVmID0gdmRlZjsNCj4gPiArCSAgICAgICpyZWFjaGluZ192dXNlID0gZ2ltcGxl X3Z1c2UgKHN0bXQpOw0KPiA+ICsJICAgICAgaW1tX3VzZV9pdGVyYXRvciBpbW1faXRlcjsNCj4g PiArCSAgICAgIGdpbXBsZSAqdXNlX3N0bXQ7DQo+ID4gKwkgICAgICBGT1JfRUFDSF9JTU1fVVNF X1NUTVQgKHVzZV9zdG10LCBpbW1faXRlciwgdmRlZikNCj4gPiArCQl7DQo+ID4gKwkJICAgaWYg KCFpc19hIDxncGhpICo+ICh1c2Vfc3RtdCkpDQo+ID4gKwkJICAgICBjb250aW51ZTsNCj4gPiAr CQkgICBncGhpICpwaGlfc3RtdCA9IGFzX2EgPGdwaGkgKj4gKHVzZV9zdG10KTsNCj4gPiArDQo+ ID4gKwkJICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJCSAgICAgZHVtcF9wcmludGZf bG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJCSJ1cGRhdGluZyB2dXNlICVH IiwgdXNlX3N0bXQpOw0KPiA+ICsJCSAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnaW1wbGVf cGhpX251bV9hcmdzIChwaGlfc3RtdCk7DQo+IGkrKykNCj4gPiArCQkgICAgaWYgKGdpbXBsZV9w aGlfYXJnX2RlZiAocGhpX3N0bXQsIGkpID09IHZkZWYpDQo+ID4gKwkJICAgICAgew0KPiA+ICsJ CQlTRVRfVVNFIChQSElfQVJHX0RFRl9QVFIgKHBoaV9zdG10LCBpKSwNCj4gZ2ltcGxlX3Z1c2Ug KHN0bXQpKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJICAgICAgfQ0KPiA+ICsJCX0NCj4gPiAr CSAgICB9DQo+ID4gKwkgIHVwZGF0ZV9zdG10IChzdG10KTsNCj4gPiArCX0NCj4gPiArICAgIH0N Cj4gPiArDQo+ID4gKyAgZ3NpX3ByZXYgKGdzdG10KTsNCj4gPiArICBtb3ZlX2Vhcmx5X2V4aXRf c3RtdHMgKGNoYWluZWQsIGdkZXN0LCBnc3RtdCwgcmVhY2hpbmdfdnVzZSwNCj4gY3VycmVudF92 ZGVmKTsNCj4gPiArDQo+ID4gKyAgaWYgKGdpbXBsZV92dXNlIChzdG10KQ0KPiA+ICsgICAgICAm JiByZWFjaGluZ192dXNlICYmICpyZWFjaGluZ192dXNlDQo+ID4gKyAgICAgICYmIGdpbXBsZV92 dXNlIChzdG10KSA9PSAqY3VycmVudF92ZGVmKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICB1bmxp bmtfc3RtdF92ZGVmIChzdG10KTsNCj4gPiArICAgICAgZ2ltcGxlX3NldF92dXNlIChzdG10LCAq cmVhY2hpbmdfdnVzZSk7DQo+ID4gKyAgICAgIHVwZGF0ZV9zdG10IChzdG10KTsNCj4gPiArICAg IH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogVHJhbnNmb3JtIHRoZSBkZWZpbml0aW9uIHN0bXQg U1RNVF9JTkZPIG9mIGFuIGVhcmx5IGV4aXQNCj4gPiArICAgdmFsdWUuICAqLw0KPiA+ICsNCj4g PiArYm9vbA0KPiA+ICt2ZWN0X3RyYW5zZm9ybV9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbyBs b29wX3ZpbmZvLA0KPiA+ICsJCQkgICAgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9z dG10X2l0ZXJhdG9yDQo+ICpnc2ksDQo+ID4gKwkJCSAgICBnaW1wbGUgKip2ZWNfc3RtdCwgc2xw X3RyZWUgc2xwX25vZGUpDQo+ID4gK3sNCj4gPiArICB0cmVlIHZlY3R5cGVfb3V0ID0gU1RNVF9W SU5GT19WRUNUWVBFIChzdG10X2luZm8pOw0KPiA+ICsgIGludCBpOw0KPiA+ICsgIGludCBuY29w aWVzOw0KPiA+ICsgIGludCB2ZWNfbnVtOw0KPiA+ICsNCj4gPiArICBpZiAoIVNUTVRfVklORk9f UkVMRVZBTlRfUCAoc3RtdF9pbmZvKSkNCj4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ ID4gKyAgZ2ltcGxlX21hdGNoX29wIG9wOw0KPiA+ICsgIGlmICghZ2ltcGxlX2V4dHJhY3Rfb3Ag KHN0bXRfaW5mby0+c3RtdCwgJm9wKSkNCj4gPiArICAgIGdjY191bnJlYWNoYWJsZSAoKTsNCj4g PiArICBnY2NfYXNzZXJ0IChvcC5jb2RlLmlzX3RyZWVfY29kZSAoKSk7DQo+ID4gKyAgYXV0byBj b2RlID0gdHJlZV9jb2RlIChvcC5jb2RlKTsNCj4gPiArDQo+ID4gKyAgdHJlZSB2ZWN0eXBlX2lu ID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOw0KPiA+ICsgIGdjY19hc3NlcnQgKHZl Y3R5cGVfaW4pOw0KPiA+ICsNCj4gPiArDQo+ID4gKyAgaWYgKHNscF9ub2RlKQ0KPiA+ICsgICAg ew0KPiA+ICsgICAgICBuY29waWVzID0gMTsNCj4gPiArICAgICAgdmVjX251bSA9IFNMUF9UUkVF X05VTUJFUl9PRl9WRUNfU1RNVFMgKHNscF9ub2RlKTsNCj4gPiArICAgIH0NCj4gPiArICBlbHNl DQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIG5jb3BpZXMgPSB2ZWN0X2dldF9udW1fY29waWVzIChs b29wX3ZpbmZvLCB2ZWN0eXBlX2luKTsNCj4gPiArICAgICAgdmVjX251bSA9IDE7DQo+ID4gKyAg ICB9DQo+ID4gKw0KPiA+ICsgIHZlY19sb29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01B U0tTIChsb29wX3ZpbmZvKTsNCj4gPiArICBib29sIG1hc2tlZF9sb29wX3AgPSBMT09QX1ZJTkZP X0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKTsNCj4gPiArDQo+ID4gKyAgLyogVHJhbnNmb3Jt LiAgKi8NCj4gPiArICB0cmVlIG5ld190ZW1wID0gTlVMTF9UUkVFOw0KPiA+ICsgIGF1dG9fdmVj PHRyZWU+IHZlY19vcHJuZHMwOw0KPiA+ICsgIGF1dG9fdmVjPHRyZWU+IHZlY19vcHJuZHMxOw0K PiA+ICsgIHRyZWUgZGVmMDsNCj4gPiArDQo+ID4gKyAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0K PiA+ICsgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwgInRyYW5z Zm9ybSBlYXJseS0NCj4gZXhpdC5cbiIpOw0KPiA+ICsNCj4gPiArICAvKiBGT1JOT1c6IE11bHRp cGxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBjb25kaXRpb24uICAqLw0KPiA+ICsgIGlm IChjb2RlID09IENPTkRfRVhQUikNCj4gPiArICAgIGdjY19hc3NlcnQgKG5jb3BpZXMgPT0gMSk7 DQo+ID4gKw0KPiA+ICsNCj4gPiArICBnaW1wbGUgKnN0bXQgPSBTVE1UX1ZJTkZPX1NUTVQgKHN0 bXRfaW5mbyk7DQo+ID4gKyAgYmFzaWNfYmxvY2sgY29uZF9iYiA9IGdpbXBsZV9iYiAoc3RtdCk7 DQo+ID4gKyAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgIGNvbmRfZ3NpID0gZ3NpX2xhc3RfYmIgKGNv bmRfYmIpOw0KPiA+ICsNCj4gPiArICB2ZWN0X2dldF92ZWNfZGVmcyAobG9vcF92aW5mbywgc3Rt dF9pbmZvLCBzbHBfbm9kZSwgbmNvcGllcywNCj4gPiArCQkgICAgIG9wLm9wc1swXSwgJnZlY19v cHJuZHMwLCBvcC5vcHNbMV0sICZ2ZWNfb3BybmRzMSwNCj4gPiArCQkgICAgIE5VTEwsIE5VTEwp Ow0KPiA+ICsNCj4gPiArICBnaW1wbGUgKm5ld19zdG10ID0gTlVMTDsNCj4gPiArICB0cmVlIGNz dF8wID0gYnVpbGRfemVyb19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpOw0KPiA+ ICsgIHRyZWUgY3N0X20xID0gYnVpbGRfbWludXNfb25lX2NzdCAodHJ1dGhfdHlwZV9mb3IgKHZl Y3R5cGVfb3V0KSk7DQo+ID4gKw0KPiA+ICsgIEZPUl9FQUNIX1ZFQ19FTFQgKHZlY19vcHJuZHMw LCBpLCBkZWYwKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICB0cmVlIHZvcFszXSA9IHsgZGVmMCwg dmVjX29wcm5kczFbaV0sIE5VTExfVFJFRSB9Ow0KPiA+ICsJew0KPiA+ICsJICB0cmVlIGNvbmQg PSBtYWtlX3RlbXBfc3NhX25hbWUgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCksDQo+IE5V TEwsICJtYXNrIik7DQo+ID4gKwkgIGdpbXBsZSAqdmVjX2NtcCA9IGdpbXBsZV9idWlsZF9hc3Np Z24gKGNvbmQsIGNvZGUsIHZvcFswXSwNCj4gdm9wWzFdKTsNCj4gPiArCSAgdmVjdF9maW5pc2hf c3RtdF9nZW5lcmF0aW9uIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHZlY19jbXAsDQo+ICZjb25k X2dzaSk7DQo+ID4gKyAgICAgICAgICBpZiAobWFza2VkX2xvb3BfcCkNCj4gPiArCSAgICB7DQo+ ID4gKwkgICAgICB0cmVlIG1hc2sgPSB2ZWN0X2dldF9sb29wX21hc2sgKGdzaSwgbWFza3MsIHZl Y19udW0gKiBuY29waWVzLA0KPiA+ICsJCQkJCSAgICAgIHZlY3R5cGVfaW4sIGkpOw0KPiA+ICsJ ICAgICAgY29uZCA9IHByZXBhcmVfdmVjX21hc2sgKGxvb3BfdmluZm8sIFRSRUVfVFlQRSAobWFz ayksIG1hc2ssDQo+ID4gKwkJCQkgICAgICAgY29uZCwgJmNvbmRfZ3NpKTsNCj4gPiArCSAgICB9 DQo+ID4gKw0KPiA+ICsJICBuZXdfdGVtcCA9IG1ha2VfdGVtcF9zc2FfbmFtZSAodHJ1dGhfdHlw ZV9mb3INCj4gKHZlY3R5cGVfb3V0KSwgTlVMTCwgInZleGl0Iik7DQo+ID4gKyAgICAgICAgICBn aW1wbGUgKnZlY19jb25kID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsDQo+IFZFQ19D T05EX0VYUFIsDQo+ID4gKwkJCQkJCSAgY29uZCwgY3N0X20xLCBjc3RfMCk7DQo+ID4gKwkgIHZl Y3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvLCB2ZWNfY29u ZCwNCj4gJmNvbmRfZ3NpKTsNCj4gPiArCSAgbmV3X3N0bXQgPSB2ZWNfY29uZDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKyAgICAgIGlmIChzbHBfbm9kZSkNCj4gPiArCVNMUF9UUkVFX1ZFQ19TVE1U UyAoc2xwX25vZGUpLnF1aWNrX3B1c2ggKG5ld19zdG10KTsNCj4gPiArICAgICAgZWxzZQ0KPiA+ ICsJU1RNVF9WSU5GT19WRUNfU1RNVFMgKHN0bXRfaW5mbykuc2FmZV9wdXNoIChuZXdfc3RtdCk7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIGdjY19hc3NlcnQgKG5ld19zdG10KTsNCj4gPiAr ICB0cmVlIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhzIChuZXdfc3RtdCk7DQo+ID4gKw0KPiA+ICsg IHRyZWUgdCA9IGZvbGRfYnVpbGQyIChORV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgbGhzLA0K PiA+ICsJCQlidWlsZF96ZXJvX2NzdCAodHJ1dGhfdHlwZV9mb3IgKHZlY3R5cGVfb3V0KSkpOw0K PiA+ICsgIHQgPSBjYW5vbmljYWxpemVfY29uZF9leHByX2NvbmQgKHQpOw0KPiA+ICsgIGdpbXBs ZV9jb25kX3NldF9jb25kaXRpb25fZnJvbV90cmVlICgoZ2NvbmQqKXN0bXQsIHQpOw0KPiA+ICsg IHVwZGF0ZV9zdG10IChzdG10KTsNCj4gPiArDQo+ID4gKyAgYmFzaWNfYmxvY2sgZGVzdF9iYiA9 IEVER0VfU1VDQyAoY29uZF9iYiwgMSktPmRlc3Q7DQo+ID4gKyAgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgZGVzdF9nc2kgPSBnc2lfc3RhcnRfYmIgKGRlc3RfYmIpOw0KPiA+ICsNCj4gPiArICBoYXNo X3NldDx0cmVlPiBjaGFpbmVkOw0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaTIgPSBn c2lfZm9yX3N0bXQgKG5ld19zdG10KTsNCj4gPiArICBjaGFpbmVkLmFkZCAobGhzKTsNCj4gPiAr ICB0cmVlIHZkZWY7DQo+ID4gKyAgdHJlZSB2dXNlID0gZ2ltcGxlX3Z1c2UgKG5ld19zdG10KTsN Cj4gPiArICBtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMgKCZjaGFpbmVkLCAmZGVzdF9nc2ksICZnc2ky LCAmdnVzZSwgJnZkZWYpOw0KPiA+ICsNCj4gPiArICBpZiAoIXNscF9ub2RlKQ0KPiA+ICsgICAg KnZlY19zdG10ID0gU1RNVF9WSU5GT19WRUNfU1RNVFMgKHN0bXRfaW5mbylbMF07DQo+ID4gKw0K PiA+ICsgIHJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArDQo+ID4gIC8q IFRyYW5zZm9ybSBwaGFzZSBvZiBhIGN5Y2xlIFBISS4gICovDQo+ID4NCj4gPiAgYm9vbA0KPiA+ IEBAIC04MTg1LDYgKzg0ODEsMTg2IEBAIHZlY3RfdHJhbnNmb3JtX2N5Y2xlX3BoaSAobG9vcF92 ZWNfaW5mbw0KPiBsb29wX3ZpbmZvLA0KPiA+ICAgIHJldHVybiB0cnVlOw0KPiA+ICB9DQo+ID4N Cj4gPiArLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byB2YWxpZGF0ZSB3aGV0aGVyIGFuIGVhcmx5 IGJyZWFrIHZlY3Rvcml6YXRpb24NCj4gPiArICAgaXMgcG9zc2libGUgZm9yIHRoZSBjdXJyZW50 IGluc3RydWN0aW9uIHNlcXVlbmNlLiBSZXR1cm5zIFRydWUgaQ0KPiA+ICsgICBwb3NzaWJsZSwg b3RoZXJ3aXNlIEZhbHNlLg0KPiA+ICsNCj4gPiArICAgUmVxdWlyZW1lbnRzOg0KPiA+ICsgICAg IC0gQW55IG1lbW9yeSBhY2Nlc3MgbXVzdCBiZSB0byBhIGZpeGVkIHNpemUgYnVmZmVyLg0KPiA+ ICsgICAgIC0gVGhlcmUgbXVzdCBub3QgYmUgYW55IGxvYWRzIGFuZCBzdG9yZXMgdG8gdGhlIHNh bWUgb2JqZWN0Lg0KPiA+ICsgICAgIC0gTXVsdGlwbGUgbG9hZHMgYXJlIGFsbG93ZWQgYXMgbG9u ZyBhcyB0aGV5IGRvbid0IGFsaWFzLg0KPiA+ICsNCj4gPiArDQo+ID4gKyAgIEFyZ3VtZW50czoN Cj4gPiArICAgICAtIExPT1BfVklORk86IGxvb3AgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50 IGxvb3AuDQo+ID4gKyAgICAgLSBDSEFJTjogQ3VycmVudGx5IGRldGVjdGVkIHNlcXVlbmNlIG9m IGluc3RydWN0aW9ucyB0aGF0IGJlbG9uZw0KPiA+ICsJICAgICAgdG8gdGhlIGN1cnJlbnQgZWFy bHkgYnJlYWsuDQo+ID4gKyAgICAgLSBMT0FEUzogTGlzdCBvZiBhbGwgbG9hZHMgZm91bmQgZHVy aW5nIHRyYXZlcnNhbC4NCj4gPiArICAgICAtIEJBU0VTOiBMaXN0IG9mIGFsbCBsb2FkIGRhdGFy ZWZlcmVuY2VzIGZvdW5kIGR1cmluZyB0cmF2ZXJzYWwuDQo+ID4gKyAgICAgLSBHU1RNVDogQ3Vy cmVudCBwb3NpdGlvbiB0byBpbnNwZWN0IGZvciB2YWxpZGl0eS4gIFRoZSBzZXF1ZW5jZQ0KPiA+ ICsJICAgICAgd2lsbCBiZSBtb3ZlZCB1cHdhcmRzIGZyb20gdGhpcyBwb2ludC4gICovDQo+ID4g Kw0KPiA+ICtzdGF0aWMgYm9vbA0KPiA+ICt2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8sIGhhc2hfc2V0PHRyZWU+DQo+ICpjaGFpbiwNCj4gPiArCQkJ ICAgdmVjPHRyZWU+ICpsb2FkcywgdmVjPGRhdGFfcmVmZXJlbmNlICo+ICpiYXNlcywNCj4gPiAr CQkJICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzdG10KQ0KPiA+ICt7DQo+ID4gKyAgaWYgKGdz aV9lbmRfcCAoKmdzdG10KSkNCj4gPiArICAgIHJldHVybiB0cnVlOw0KPiA+ICsNCj4gPiArICBn aW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoKmdzdG10KTsNCj4gPiArICBpZiAoZ2ltcGxlX2hhc19v cHMgKHN0bXQpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICB0cmVlIGRlc3QgPSBOVUxMX1RSRUU7 DQo+ID4gKyAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBTU0FfTkFNRSBiZWluZyBkZWZpbmVkLiAg Rm9yIFN0YXRlbWVudHMgd2l0aCBhbg0KPiBMSFMNCj4gPiArCSB1c2UgdGhlIExIUywgaWYgbm90 LCBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYSBjYWxsIGlzIHRoZQ0KPiA+ICsJ IHZhbHVlIGJlaW5nIGRlZmluZWQuICBlLmcuIE1BU0tFRF9MT0FEIGV0Yy4gICovDQo+ID4gKyAg ICAgIGlmIChnaW1wbGVfaGFzX2xocyAoc3RtdCkpDQo+ID4gKwl7DQo+ID4gKwkgIGlmIChpc19n aW1wbGVfYXNzaWduIChzdG10KSkNCj4gPiArCSAgICBkZXN0ID0gZ2ltcGxlX2Fzc2lnbl9saHMg KHN0bXQpOw0KPiA+ICsJICBlbHNlIGlmIChjb25zdCBnY2FsbCAqY2FsbCA9IGR5bl9jYXN0IDxj b25zdCBnY2FsbCAqPiAoc3RtdCkpDQo+ID4gKwkgICAgZGVzdCA9IGdpbXBsZV9jYWxsX2xocyAo Y2FsbCk7DQo+ID4gKwl9DQo+ID4gKyAgICAgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0g ZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCj4gPiArCWRlc3QgPSBnaW1wbGVfYXJn IChjYWxsLCAwKTsNCj4gPiArDQo+ID4gKyAgICAgIC8qIERvbid0IG1vdmUgdGhlIHNjYWxhciBp bnN0cnVjdGlvbnMuICAqLw0KPiA+ICsgICAgICBib29sIG1vdmUNCj4gPiArCT0gZGVzdCAmJiAo VkVDVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXN0KSkNCj4gPiArCQkgICB8fCBQT0lOVEVSX1RZ UEVfUCAoVFJFRV9UWVBFIChkZXN0KSkpOw0KPiA+ICsNCj4gPiArICAgICAgLyogSWYgd2UgZm91 bmQgdGhlIGRlZmluaW5nIHN0YXRlbWVudCBvZiBhIHNvbWV0aGluZyB0aGF0J3MgcGFydCBvZiB0 aGUNCj4gPiArCSBjaGFpbiB0aGVuIGV4cGFuZCB0aGUgY2hhaW4gd2l0aCB0aGUgbmV3IFNTQV9W QVJzIGJlaW5nIHVzZWQuICAqLw0KPiA+ICsgICAgICBpZiAoY2hhaW4tPmNvbnRhaW5zIChkZXN0 KSkNCj4gPiArCXsNCj4gPiArCSAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGdpbXBsZV9udW1f YXJncyAoc3RtdCk7IHgrKykNCj4gPiArCSAgICBpZiAoVFJFRV9DT0RFIChnaW1wbGVfYXJnIChz dG10LCB4KSkgPT0gU1NBX05BTUUpDQo+ID4gKwkgICAgICBjaGFpbi0+YWRkIChnaW1wbGVfYXJn IChzdG10LCB4KSk7DQo+ID4gKw0KPiA+ICsJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4g KwkgICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJ CQkJImZvdW5kIGNoYWluICVHIiwgc3RtdCk7DQo+ID4gKw0KPiA+ICsJICBtb3ZlID0gZmFsc2U7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICBzdG10X3ZlY19pbmZvIHN0bXRfdmluZm8gPSBs b29wX3ZpbmZvLT5sb29rdXBfc3RtdCAoc3RtdCk7DQo+ID4gKyAgICAgIGlmICghc3RtdF92aW5m bykNCj4gPiArCXsNCj4gPiArCSAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCSAgICAg ZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpBVElPTiwgdmVjdF9sb2NhdGlvbiwN Cj4gPiArCQkJICAgICAgImVhcmx5IGJyZWFrcyBvbmx5IHN1cHBvcnRlZC4gVW5rbm93biINCj4g PiArCQkJICAgICAgIiBzdGF0ZW1lbnQ6ICVHIiwgc3RtdCk7DQo+ID4gKwkgICByZXR1cm4gZmFs c2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICBhdXRvIGRyX3JlZiA9IFNUTVRfVklORk9f REFUQV9SRUYgKHN0bXRfdmluZm8pOw0KPiA+ICsgICAgICBpZiAoZHJfcmVmKQ0KPiA+ICsJew0K PiA+ICsJICAgLyogV2UgY3VycmVubHkgb25seSBzdXBwb3J0IHN0YXRpY2FsbHkgYWxsb2NhdGVk IG9iamVjdHMgZHVlIHRvDQo+ID4gKwkgICAgICBub3QgaGF2aW5nIGZpcnN0LWZhdWx0aW5nIGxv YWRzIHN1cHBvcnQgb3IgcGVlbGluZyBmb3IgYWxpZ25tZW50DQo+ID4gKwkgICAgICBzdXBwb3J0 LiAgQ29tcHV0ZSB0aGUgaXNpemUgb2YgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IChpdCBjb3VsZCBi ZQ0KPiA+ICsJICAgICAgZHluYW1pY2FsbHkgYWxsb2NhdGVkKS4gICovDQo+ID4gKwkgICB0cmVl IG9iaiA9IERSX0JBU0VfQUREUkVTUyAoZHJfcmVmKTsNCj4gPiArCSAgIGlmICghb2JqIHx8IFRS RUVfQ09ERSAob2JqKSAhPSBBRERSX0VYUFIpDQo+ID4gKwkgICAgIHsNCj4gPiArCSAgICAgICBp ZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkJIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NF RF9PUFRJTUlaQVRJT04sDQo+IHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCQkgICJlYXJseSBicmVh a3Mgb25seSBzdXBwb3J0ZWQgb24gc3RhdGljYWxseSINCj4gPiArCQkJCSAgIiBhbGxvY2F0ZWQg b2JqZWN0cy5cbiIpOw0KPiA+ICsJICAgICAgIHJldHVybiBmYWxzZTsNCj4gPiArCSAgICAgfQ0K PiA+ICsNCj4gPiArCSAgIHRyZWUgcmVmb3AgPSBUUkVFX09QRVJBTkQgKG9iaiwgMCk7DQo+ID4g KwkgICB0cmVlIHJlZmJhc2UgPSBnZXRfYmFzZV9hZGRyZXNzIChyZWZvcCk7DQo+ID4gKwkgICBp ZiAoIXJlZmJhc2UgfHwgIURFQ0xfUCAocmVmYmFzZSkNCj4gPiArCSAgICAgICB8fCBUUkVFX0NP REUgKERFQ0xfU0laRSAocmVmYmFzZSkpICE9IElOVEVHRVJfQ1NUKQ0KPiA+ICsJICAgICB7DQo+ ID4gKwkgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJCSBkdW1wX3ByaW50Zl9s b2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLA0KPiB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkJ ICAiZWFybHkgYnJlYWtzIG9ubHkgc3VwcG9ydGVkIG9uIHN0YXRpY2FsbHkiDQo+ID4gKwkJCQkg ICIgYWxsb2NhdGVkIG9iamVjdHMuXG4iKTsNCj4gPiArCSAgICAgICByZXR1cm4gZmFsc2U7DQo+ ID4gKwkgICAgIH0NCj4gPiArDQo+ID4gKwkgICBpZiAoIW1vdmUgJiYgRFJfSVNfUkVBRCAoZHJf cmVmKSkNCj4gPiArCSAgICAgew0KPiA+ICsJCWxvYWRzLT5zYWZlX3B1c2ggKGRlc3QpOw0KPiA+ ICsJCWJhc2VzLT5zYWZlX3B1c2ggKGRyX3JlZik7DQo+ID4gKwkgICAgIH0NCj4gPiArCSAgIGVs c2UgaWYgKERSX0lTX1dSSVRFIChkcl9yZWYpKQ0KPiA+ICsJICAgICB7DQo+ID4gKwkJZm9yIChh dXRvIGRyIDogYmFzZXMpDQo+ID4gKwkJICBpZiAoc2FtZV9kYXRhX3JlZnNfYmFzZV9vYmplY3Rz IChkciwgZHJfcmVmKSkNCj4gPiArCQkgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsJICAgICB9DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICBpZiAobW92ZSkNCj4gPiArCXsNCj4gPiArCSAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUs IHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJICAgICAgICAgICAgICJhbmFseXppbmcgc3RtdCAlRyIs IHN0bXQpOw0KPiA+ICsNCj4gPiArCSAgZm9yICh0cmVlIHJlZiA6IGxvYWRzKQ0KPiA+ICsJICAg IGlmIChzdG10X21heV9jbG9iYmVyX3JlZl9wIChzdG10LCByZWYsIHRydWUpKQ0KPiA+ICsJICAg ICAgew0KPiA+ICsJICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkJICBkdW1w X3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLA0KPiB2ZWN0X2xvY2F0aW9uLA0K PiA+ICsJCQkJICAgImVhcmx5IGJyZWFrcyBub3Qgc3VwcG9ydGVkIGFzIG1lbW9yeQ0KPiB1c2Vk Ig0KPiA+ICsJCQkJICAgIiBtYXkgYWxpYXMuXG4iKTsNCj4gPiArCSAgICAgICAgcmV0dXJuIGZh bHNlOw0KPiA+ICsJICAgICAgfQ0KPiA+ICsJfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICBn c2lfcHJldiAoZ3N0bXQpOw0KPiA+ICsgIHJldHVybiB2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRz IChsb29wX3ZpbmZvLCBjaGFpbiwgbG9hZHMsIGJhc2VzLA0KPiBnc3RtdCk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBlYXJseSBicmVhayBnaXZl biBpbiBTVE1UX0lORk8gaXMgdmFsaWQgZm9yDQo+ID4gKyAgIHZlY3Rvcml6YXRpb24uICAqLw0K PiA+ICsNCj4gPiArYm9vbA0KPiA+ICt2ZWN0b3JpemFibGVfZWFybHlfZXhpdCAodmVjX2luZm8g KnZpbmZvLA0KPiA+ICsJCQlzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgc2xwX3RyZWUgLyogc2xw X25vZGUgKi8sDQo+ID4gKwkJCXNscF9pbnN0YW5jZSAvKiBzbHBfbm9kZV9pbnN0YW5jZSAqLywN Cj4gPiArCQkJc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKiAvKiBjb3N0X3ZlYyAqLykNCj4gPiArew0K PiA+ICsgIGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbyA9IGR5bl9jYXN0IDxsb29wX3ZlY19pbmZv PiAodmluZm8pOw0KPiA+ICsNCj4gPiArICBpZiAoIWxvb3BfdmluZm8NCj4gPiArICAgICAgfHwg IWlzX2EgPGdjb25kICo+IChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpKQ0KPiA+ICsgICAg cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArICBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAoc3Rt dF9pbmZvKSAhPSB2ZWN0X2Vhcmx5X2V4aXRfZGVmKQ0KPiA+ICsgICAgcmV0dXJuIGZhbHNlOw0K PiA+ICsNCj4gPiArICB0cmVlIHZlY3R5cGUgPSBTVE1UX1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5m byk7DQo+ID4gKyAgdHJlZSB0cnV0aF90eXBlID0gdHJ1dGhfdHlwZV9mb3IgKHZlY3R5cGUpOw0K PiA+ICsNCj4gPiArICBhdXRvIG9wdGFiID0gZGlyZWN0X29wdGFiX2hhbmRsZXIgKGNicmFuY2hf b3B0YWIsIFRZUEVfTU9ERQ0KPiAodHJ1dGhfdHlwZSkpOw0KPiA+ICsgIGlmIChvcHRhYiA9PSBD T0RFX0ZPUl9ub3RoaW5nKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBpZiAoZHVtcF9lbmFibGVk X3AgKCkpDQo+ID4gKwkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04s IHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCQkgImNhbid0IHZlY3Rvcml6ZSBlYXJseSBleGl0IGJl Y2F1c2UgdGhlICINCj4gPiArCQkJCSAidGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBmbGFnIHNldHRp bmcgdmVjdG9yICINCj4gPiArCQkJCSAiY29tcGFyaXNvbnMuXG4iKTsNCj4gPiArICAgICAgcmV0 dXJuIGZhbHNlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICBoYXNoX3NldDx0cmVlPiBjaGFp bjsNCj4gPiArICBhdXRvX3ZlYzx0cmVlPiBsb2FkczsNCj4gPiArICBhdXRvX3ZlYzxkYXRhX3Jl ZmVyZW5jZSAqPiBiYXNlczsNCj4gPiArDQo+ID4gKyAgZ2ltcGxlICpzdG10ID0gU1RNVF9WSU5G T19TVE1UIChzdG10X2luZm8pOw0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdz aV9mb3Jfc3RtdCAoc3RtdCk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiB2YWxpZGF0ZV9lYXJseV9l eGl0X3N0bXRzIChsb29wX3ZpbmZvLCAmY2hhaW4sICZsb2FkcywgJmJhc2VzLA0KPiAmZ3NpKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiAgLyogVmVjdG9yaXplcyBMQyBQSElzLiAgKi8NCj4gPg0KPiA+ ICBib29sDQo+ID4gQEAgLTk5OTMsMTMgKzEwNDY5LDI0IEBAIHZlY3Rvcml6YWJsZV9saXZlX29w ZXJhdGlvbiAodmVjX2luZm8gKnZpbmZvLA0KPiA+ICAJICAgbmV3X3RyZWUgPSBsYW5lX2V4dHJh Y3QgPHZlY19saHMnLCAuLi4+Ow0KPiA+ICAJICAgbGhzJyA9IG5ld190cmVlOyAgKi8NCj4gPg0K PiA+ICsgICAgICAvKiBXaGVuIHZlY3Rvcml6aW5nIGFuIGVhcmx5IGJyZWFrLCBhbnkgbGl2ZSBz dGF0ZW1lbnQgdGhhdCBpcyB1c2VkDQo+ID4gKwkgb3V0c2lkZSBvZiB0aGUgbG9vcCBhcmUgZGVh ZC4gIFRoZSBsb29wIHdpbGwgbmV2ZXIgZ2V0IHRvIHRoZW0uDQo+ID4gKwkgV2UgY291bGQgY2hh bmdlIHRoZSBsaXZlbmVzcyB2YWx1ZSBkdXJpbmcgYW5hbHlzaXMgaW5zdGVhZCBidXQgc2luY2UN Cj4gPiArCSB0aGUgYmVsb3cgY29kZSBpcyBpbnZhbGlkIGFueXdheSBqdXN0IGlnbm9yZSBpdCBk dXJpbmcgY29kZWdlbi4gICovDQo+ID4gKyAgICAgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFL UyAobG9vcF92aW5mbykpDQo+ID4gKwlyZXR1cm4gdHJ1ZTsNCj4gPiArDQo+ID4gICAgICAgIGNs YXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+IC0gICAg ICBiYXNpY19ibG9jayBleGl0X2JiID0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiA+ICsg ICAgICBiYXNpY19ibG9jayBleGl0X2JiID0gbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0Ow0KPiA+ ICAgICAgICBnY2NfYXNzZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0X2JiKSk7DQo+ID4NCj4gPiAg ICAgICAgdHJlZSB2ZWNfbGhzX3BoaSA9IGNvcHlfc3NhX25hbWUgKHZlY19saHMpOw0KPiA+ICAg ICAgICBnaW1wbGUgKnBoaSA9IGNyZWF0ZV9waGlfbm9kZSAodmVjX2xoc19waGksIGV4aXRfYmIp Ow0KPiA+IC0gICAgICBTRVRfUEhJX0FSR19ERUYgKHBoaSwgc2luZ2xlX2V4aXQgKGxvb3ApLT5k ZXN0X2lkeCwgdmVjX2xocyk7DQo+ID4gKyAgICAgIC8qIEZvciBlYXJseSBleGl0cyB3ZSBuZWVk IHRvIGNvbXB1dGUgdGhlIHJpZ2h0IGV4aXQuICBUaGUgY3VycmVudA0KPiA+ICsJIGFwcHJvYWNo IHB1bnRzIHRvIGEgc2NhbGFyIGxvb3AgaW5zdGVhZC4gIElmIHdlIHdlcmUgdG8gdmVjdG9yaXpl DQo+ID4gKwkgdGhlIGV4aXQgY29uZGl0aW9uIGJlbG93IG5lZWRzIHRvIHRha2UgaW50byBhY2Nv dW50IHRoZSBkaWZmZXJlbmNlDQo+ID4gKwkgYmV0d2VlbiBhIGBicmVha2AgZWRnZSBhbmQgYSBg cmV0dXJuYCBlZGdlLiAgKi8NCj4gPiArICAgICAgU0VUX1BISV9BUkdfREVGIChwaGksIG5vcm1h bF9leGl0IChsb29wKS0+ZGVzdF9pZHgsIHZlY19saHMpOw0KPiA+DQo+ID4gICAgICAgIGdpbXBs ZV9zZXEgc3RtdHMgPSBOVUxMOw0KPiA+ICAgICAgICB0cmVlIG5ld190cmVlOw0KPiA+IEBAIC0x MDQzOCw3ICsxMDkyNSw4IEBAIHNjYWxlX3Byb2ZpbGVfZm9yX3ZlY3RfbG9vcCAoY2xhc3MgbG9v cCAqbG9vcCwNCj4gdW5zaWduZWQgdmYpDQo+ID4gICAgICAgIHNjYWxlX2xvb3BfZnJlcXVlbmNp ZXMgKGxvb3AsIHApOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gLSAgZWRnZSBleGl0X2UgPSBzaW5n bGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgZWRnZSBleGl0X2UgPSBub3JtYWxfZXhpdCAobG9vcCk7 DQo+ID4gKw0KPiA+ICAgIGV4aXRfZS0+cHJvYmFiaWxpdHkgPSBwcm9maWxlX3Byb2JhYmlsaXR5 OjphbHdheXMgKCkgLyAobmV3X2VzdF9uaXRlciArIDEpOw0KPiA+DQo+ID4gICAgZWRnZSBleGl0 X2wgPSBzaW5nbGVfcHJlZF9lZGdlIChsb29wLT5sYXRjaCk7DQo+ID4gQEAgLTEwNzg3LDcgKzEx Mjc1LDcgQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92ZWNfaW5mbw0KPiBsb29wX3ZpbmZv LCBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiA+ICAgIC8qIE1ha2Ugc3VyZSB0aGVy ZSBleGlzdHMgYSBzaW5nbGUtcHJlZGVjZXNzb3IgZXhpdCBiYi4gIERvIHRoaXMgYmVmb3JlDQo+ ID4gICAgICAgdmVyc2lvbmluZy4gICAqLw0KPiA+ICAgIGVkZ2UgZSA9IHNpbmdsZV9leGl0IChs b29wKTsNCj4gPiAtICBpZiAoISBzaW5nbGVfcHJlZF9wIChlLT5kZXN0KSkNCj4gPiArICBpZiAo ZSAmJiAhIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBz cGxpdF9sb29wX2V4aXRfZWRnZSAoZSwgdHJ1ZSk7DQo+ID4gICAgICAgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkNCj4gPiBAQCAtMTA4MTMsNyArMTEzMDEsNyBAQCB2ZWN0X3RyYW5zZm9ybV9sb29w IChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sIGdpbXBsZSAqbG9vcF92ZWN0b3JpemVkX2Nh bGwpDQo+ID4gICAgaWYgKExPT1BfVklORk9fU0NBTEFSX0xPT1AgKGxvb3BfdmluZm8pKQ0KPiA+ ICAgICAgew0KPiA+ICAgICAgICBlID0gc2luZ2xlX2V4aXQgKExPT1BfVklORk9fU0NBTEFSX0xP T1AgKGxvb3BfdmluZm8pKTsNCj4gPiAtICAgICAgaWYgKCEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVz dCkpDQo+ID4gKyAgICAgIGlmIChlICYmICEgc2luZ2xlX3ByZWRfcCAoZS0+ZGVzdCkpDQo+ID4g IAl7DQo+ID4gIAkgIHNwbGl0X2xvb3BfZXhpdF9lZGdlIChlLCB0cnVlKTsNCj4gPiAgCSAgaWYg KGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+IEBAIC0xMTE0Niw3ICsxMTYzNCw4IEBAIHZlY3RfdHJh bnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5mbywgZ2ltcGxlICpsb29wX3Zl Y3Rvcml6ZWRfY2FsbCkNCj4gPg0KPiA+ICAgIC8qIExvb3BzIHZlY3Rvcml6ZWQgd2l0aCBhIHZh cmlhYmxlIGZhY3RvciB3b24ndCBiZW5lZml0IGZyb20NCj4gPiAgICAgICB1bnJvbGxpbmcvcGVl bGluZy4gICovDQo+ID4gLSAgaWYgKCF2Zi5pc19jb25zdGFudCAoKSkNCj4gPiArICBpZiAoIXZm LmlzX2NvbnN0YW50ICgpDQo+ID4gKyAgICAgICYmICFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAo bG9vcF92aW5mbykpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGxvb3AtPnVucm9sbCA9IDE7DQo+ ID4gICAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Ry ZWUtdmVjdC1zdG10cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiBpbmRleA0KPiA0 ZTBkNzVlMGQ3NTg2YWQ1N2EzNzg1MGQ4YTcwZjYxODJlY2IxM2QwLi40Zjk0NDZhNWM2OTkyODhi ZTA5M2M1NTZlDQo+IGM1MjdlODdjZjc4ODMxNyAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12 ZWN0LXN0bXRzLmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiA+IEBAIC0z NDIsOSArMzQyLDI4IEBAIHZlY3Rfc3RtdF9yZWxldmFudF9wIChzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywNCj4gbG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ICAgICpsaXZlX3AgPSBmYWxz ZTsNCj4gPg0KPiA+ICAgIC8qIGNvbmQgc3RtdCBvdGhlciB0aGFuIGxvb3AgZXhpdCBjb25kLiAg Ki8NCj4gPiAtICBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpDQo+ID4gLSAgICAg ICYmIFNUTVRfVklORk9fVFlQRSAoc3RtdF9pbmZvKSAhPSBsb29wX2V4aXRfY3RybF92ZWNfaW5m b190eXBlKQ0KPiA+IC0gICAgKnJlbGV2YW50ID0gdmVjdF91c2VkX2luX3Njb3BlOw0KPiA+ICsg IGlmIChpc19jdHJsX3N0bXQgKHN0bXRfaW5mby0+c3RtdCkpDQo+ID4gKyAgICB7DQo+ID4gKyAg ICAgIC8qIElkZWFsbHkgRURHRV9MT09QX0VYSVQgd291bGQgaGF2ZSBiZWVuIHNldCBvbiB0aGUg ZXhpdCBlZGdlLCBidXQNCj4gPiArCSBpdCBsb29rcyBsaWtlIGxvb3BfbWFuaXAgZG9lc24ndCBk byB0aGF0Li4gIFNvIHdlIGhhdmUgdG8gZG8gaXQNCj4gPiArCSB0aGUgaGFyZCB3YXkuICAqLw0K PiA+ICsgICAgICBiYXNpY19ibG9jayBiYiA9IGdpbXBsZV9iYiAoc3RtdF9pbmZvLT5zdG10KTsN Cj4gPiArICAgICAgYmFzaWNfYmxvY2sgKmJicyA9IExPT1BfVklORk9fQkJTIChsb29wX3ZpbmZv KTsNCj4gPiArICAgICAgZWRnZSBleGl0ID0gQlJBTkNIX0VER0UgKGJiKTsNCj4gPiArICAgICAg dW5zaWduZWQgbmJicyA9IGxvb3AtPm51bV9ub2RlczsNCj4gPiArICAgICAgYm9vbCBleGl0X2Ji ID0gdHJ1ZTsNCj4gPiArICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iYnM7IGkrKykN Cj4gPiArCXsNCj4gPiArCSAgaWYgKGV4aXQtPmRlc3QgPT0gYmJzW2ldKQ0KPiA+ICsJICAgIHsN Cj4gPiArCSAgICAgIGV4aXRfYmIgPSBmYWxzZTsNCj4gPiArCSAgICAgIGJyZWFrOw0KPiA+ICsJ ICAgIH0NCj4gPiArCX0NCj4gPiArDQo+ID4gKyAgICAgIGlmIChleGl0X2JiKQ0KPiA+ICsJKnJl bGV2YW50ID0gdmVjdF91c2VkX2luX3Njb3BlOw0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gICAgLyog Y2hhbmdpbmcgbWVtb3J5LiAgKi8NCj4gPiAgICBpZiAoZ2ltcGxlX2NvZGUgKHN0bXRfaW5mby0+ c3RtdCkgIT0gR0lNUExFX1BISSkNCj4gPiBAQCAtMzU3LDYgKzM3NiwxMSBAQCB2ZWN0X3N0bXRf cmVsZXZhbnRfcCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+IGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywNCj4gPiAgCSpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsNCj4gPiAgICAg ICAgfQ0KPiA+DQo+ID4gKyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2Vk Z2VzIChsb29wKTsNCj4gPiArICBhdXRvX2JpdG1hcCBleGl0X2JiczsNCj4gPiArICBmb3IgKGVk Z2UgZXhpdCA6IGV4aXRzKQ0KPiA+ICsgICAgYml0bWFwX3NldF9iaXQgKGV4aXRfYmJzLCBleGl0 LT5kZXN0LT5pbmRleCk7DQo+ID4gKw0KPiA+ICAgIC8qIHVzZXMgb3V0c2lkZSB0aGUgbG9vcC4g ICovDQo+ID4gICAgRk9SX0VBQ0hfUEhJX09SX1NUTVRfREVGIChkZWZfcCwgc3RtdF9pbmZvLT5z dG10LCBvcF9pdGVyLA0KPiBTU0FfT1BfREVGKQ0KPiA+ICAgICAgew0KPiA+IEBAIC0zNzUsNyAr Mzk5LDcgQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLA0K PiBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gIAkgICAgICAvKiBXZSBleHBlY3QgYWxs IHN1Y2ggdXNlcyB0byBiZSBpbiB0aGUgbG9vcCBleGl0IHBoaXMNCj4gPiAgCQkgKGJlY2F1c2Ug b2YgbG9vcCBjbG9zZWQgZm9ybSkgICAqLw0KPiA+ICAJICAgICAgZ2NjX2Fzc2VydCAoZ2ltcGxl X2NvZGUgKFVTRV9TVE1UICh1c2VfcCkpID09IEdJTVBMRV9QSEkpOw0KPiA+IC0JICAgICAgZ2Nj X2Fzc2VydCAoYmIgPT0gc2luZ2xlX2V4aXQgKGxvb3ApLT5kZXN0KTsNCj4gPiArCSAgICAgIGdj Y19hc3NlcnQgKGJpdG1hcF9iaXRfcCAoZXhpdF9iYnMsIGJiLT5pbmRleCkpOw0KPiA+DQo+ID4g ICAgICAgICAgICAgICAgKmxpdmVfcCA9IHRydWU7DQo+ID4gIAkgICAgfQ0KPiA+IEBAIC0xODQ1 LDcgKzE4NjksNyBAQCBjaGVja19sb2FkX3N0b3JlX2Zvcl9wYXJ0aWFsX3ZlY3RvcnMNCj4gKGxv b3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSB2ZWN0eXBlLA0KPiA+ICAgICBNQVNLX1RZUEUg aXMgdGhlIHR5cGUgb2YgYm90aCBtYXNrcy4gIElmIG5ldyBzdGF0ZW1lbnRzIGFyZSBuZWVkZWQs DQo+ID4gICAgIGluc2VydCB0aGVtIGJlZm9yZSBHU0kuICAqLw0KPiA+DQo+ID4gLXN0YXRpYyB0 cmVlDQo+ID4gK3RyZWUNCj4gPiAgcHJlcGFyZV92ZWNfbWFzayAobG9vcF92ZWNfaW5mbyBsb29w X3ZpbmZvLCB0cmVlIG1hc2tfdHlwZSwgdHJlZQ0KPiBsb29wX21hc2ssDQo+ID4gIAkJICB0cmVl IHZlY19tYXNrLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpKQ0KPiA+ICB7DQo+ID4gQEAgLTEx MTU4LDExICsxMTE4MiwxNCBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0K PiA+ICAJCQkgICAgIG5vZGVfaW5zdGFuY2UsIGNvc3RfdmVjKTsNCj4gPiAgICAgICAgaWYgKCFy ZXMpDQo+ID4gIAlyZXR1cm4gcmVzOw0KPiA+IC0gICB9DQo+ID4gKyAgICB9DQo+ID4gKyAgZWxz ZSBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8tPnN0bXQpKQ0KPiA+ICsgICAgU1RNVF9WSU5G T19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9IHZlY3RfZWFybHlfZXhpdF9kZWY7DQo+ID4NCj4gPiAg ICBzd2l0Y2ggKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRfaW5mbykpDQo+ID4gICAgICB7DQo+ ID4gICAgICAgIGNhc2UgdmVjdF9pbnRlcm5hbF9kZWY6DQo+ID4gKyAgICAgIGNhc2UgdmVjdF9l YXJseV9leGl0X2RlZjoNCj4gPiAgICAgICAgICBicmVhazsNCj4gPg0KPiA+ICAgICAgICBjYXNl IHZlY3RfcmVkdWN0aW9uX2RlZjoNCj4gPiBAQCAtMTExOTUsNiArMTEyMjIsNyBAQCB2ZWN0X2Fu YWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ICAgICAgew0KPiA+ICAgICAgICBnY2Fs bCAqY2FsbCA9IGR5bl9jYXN0IDxnY2FsbCAqPiAoc3RtdF9pbmZvLT5zdG10KTsNCj4gPiAgICAg ICAgZ2NjX2Fzc2VydCAoU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pDQo+ID4gKwkJICB8 fCBnaW1wbGVfY29kZSAoc3RtdF9pbmZvLT5zdG10KSA9PSBHSU1QTEVfQ09ORA0KPiA+ICAJCSAg fHwgKGNhbGwgJiYgZ2ltcGxlX2NhbGxfbGhzIChjYWxsKSA9PSBOVUxMX1RSRUUpKTsNCj4gPiAg ICAgICAgKm5lZWRfdG9fdmVjdG9yaXplID0gdHJ1ZTsNCj4gPiAgICAgIH0NCj4gPiBAQCAtMTEy MzcsNyArMTEyNjUsOSBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ ICAJICB8fCB2ZWN0b3JpemFibGVfbGNfcGhpIChhc19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8p LA0KPiA+ICAJCQkJICBzdG10X2luZm8sIE5VTEwsIG5vZGUpDQo+ID4gIAkgIHx8IHZlY3Rvcml6 YWJsZV9yZWN1cnIgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQo+ID4gLQkJCQkgICBz dG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7DQo+ID4gKwkJCQkgICBzdG10X2luZm8s IE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0KPiA+ICsJICB8fCB2ZWN0b3JpemFibGVfZWFybHlfZXhp dCAodmluZm8sIHN0bXRfaW5mbywNCj4gPiArCQkJCSAgICAgIG5vZGUsIG5vZGVfaW5zdGFuY2Us IGNvc3RfdmVjKSk7DQo+ID4gICAgZWxzZQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBpZiAoYmJf dmluZm8pDQo+ID4gQEAgLTExMjYwLDcgKzExMjkwLDEwIEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2 ZWNfaW5mbyAqdmluZm8sDQo+ID4gIAkJCQkJIE5VTEwsIE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0K PiA+ICAJICAgICAgfHwgdmVjdG9yaXphYmxlX2NvbXBhcmlzb24gKHZpbmZvLCBzdG10X2luZm8s IE5VTEwsIE5VTEwsIG5vZGUsDQo+ID4gIAkJCQkJICBjb3N0X3ZlYykNCj4gPiAtCSAgICAgIHx8 IHZlY3Rvcml6YWJsZV9waGkgKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVj KSk7DQo+ID4gKwkgICAgICB8fCB2ZWN0b3JpemFibGVfcGhpICh2aW5mbywgc3RtdF9pbmZvLCBO VUxMLCBub2RlLCBjb3N0X3ZlYykNCj4gPiArCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9lYXJseV9l eGl0ICh2aW5mbywgc3RtdF9pbmZvLCBub2RlLA0KPiA+ICsJCQkJCSAgbm9kZV9pbnN0YW5jZSwg Y29zdF92ZWMpKTsNCj4gPiArDQo+ID4gICAgICB9DQo+ID4NCj4gPiAgICBpZiAobm9kZSkNCj4g PiBAQCAtMTE0MTgsNiArMTE0NTEsMTIgQEAgdmVjdF90cmFuc2Zvcm1fc3RtdCAodmVjX2luZm8g KnZpbmZvLA0KPiA+ICAgICAgICBnY2NfYXNzZXJ0IChkb25lKTsNCj4gPiAgICAgICAgYnJlYWs7 DQo+ID4NCj4gPiArICAgIGNhc2UgbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZToNCj4gPiAr ICAgICAgZG9uZSA9IHZlY3RfdHJhbnNmb3JtX2Vhcmx5X2JyZWFrIChhc19hIDxsb29wX3ZlY19p bmZvPiAodmluZm8pLA0KPiBzdG10X2luZm8sDQo+ID4gKwkJCQkgICAgICAgICBnc2ksICZ2ZWNf c3RtdCwgc2xwX25vZGUpOw0KPiA+ICsgICAgICBnY2NfYXNzZXJ0IChkb25lKTsNCj4gPiArICAg ICAgYnJlYWs7DQo+ID4gKw0KPiA+ICAgICAgZGVmYXVsdDoNCj4gPiAgICAgICAgaWYgKCFTVE1U X1ZJTkZPX0xJVkVfUCAoc3RtdF9pbmZvKSkNCj4gPiAgCXsNCj4gPiBAQCAtMTE4MTYsNiArMTE4 NTUsOSBAQCB2ZWN0X2lzX3NpbXBsZV91c2UgKHRyZWUgb3BlcmFuZCwgdmVjX2luZm8NCj4gKnZp bmZvLCBlbnVtIHZlY3RfZGVmX3R5cGUgKmR0LA0KPiA+ICAJY2FzZSB2ZWN0X2ZpcnN0X29yZGVy X3JlY3VycmVuY2U6DQo+ID4gIAkgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgImZpcnN0IG9yZGVy IHJlY3VycmVuY2VcbiIpOw0KPiA+ICAJICBicmVhazsNCj4gPiArCWNhc2UgdmVjdF9lYXJseV9l eGl0X2RlZjoNCj4gPiArCSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAiZWFybHkgZXhpdFxuIik7 DQo+ID4gKwkgIGJyZWFrOw0KPiA+ICAJY2FzZSB2ZWN0X3Vua25vd25fZGVmX3R5cGU6DQo+ID4g IAkgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgInVua25vd25cbiIpOw0KPiA+ICAJICBicmVhazsN Cj4gPiBAQCAtMTI0ODYsNiArMTI1MjgsOCBAQCB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0 bXQgKHZlY19pbmZvDQo+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ID4gICAg Km51bml0c192ZWN0eXBlX291dCA9IE5VTExfVFJFRTsNCj4gPg0KPiA+ICAgIGlmIChnaW1wbGVf Z2V0X2xocyAoc3RtdCkgPT0gTlVMTF9UUkVFDQo+ID4gKyAgICAgIC8qIEFsbG93IHZlY3RvciBj b25kaXRpb25hbHMgdGhyb3VnaCBoZXJlLiAgKi8NCj4gPiArICAgICAgJiYgIWlzX2N0cmxfc3Rt dCAoc3RtdCkNCj4gPiAgICAgICAgLyogTUFTS19TVE9SRSBoYXMgbm8gbGhzLCBidXQgaXMgb2su ICAqLw0KPiA+ICAgICAgICAmJiAhZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZOX01B U0tfU1RPUkUpKQ0KPiA+ICAgICAgew0KPiA+IEBAIC0xMjUwMiw3ICsxMjU0Niw3IEBAIHZlY3Rf Z2V0X3ZlY3Rvcl90eXBlc19mb3Jfc3RtdCAodmVjX2luZm8NCj4gKnZpbmZvLCBzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywNCj4gPiAgCX0NCj4gPg0KPiA+ICAgICAgICByZXR1cm4gb3B0X3Jlc3Vs dDo6ZmFpbHVyZV9hdCAoc3RtdCwNCj4gPiAtCQkJCSAgICAgIm5vdCB2ZWN0b3JpemVkOiBpcnJl Z3VsYXIgc3RtdC4lRyIsIHN0bXQpOw0KPiA+ICsJCQkJICAgICAibm90IHZlY3Rvcml6ZWQ6IGly cmVndWxhciBzdG10OiAlRyIsIHN0bXQpOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gICAgdHJlZSB2 ZWN0eXBlOw0KPiA+IEBAIC0xMjUzMSw2ICsxMjU3NSw4IEBAIHZlY3RfZ2V0X3ZlY3Rvcl90eXBl c19mb3Jfc3RtdCAodmVjX2luZm8NCj4gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywN Cj4gPiAgCXNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChEUl9SRUYgKGRyKSk7DQo+ID4gICAgICAg IGVsc2UgaWYgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElGTl9NQVNLX1NUT1JFKSkN Cj4gPiAgCXNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDMp KTsNCj4gPiArICAgICAgZWxzZSBpZiAoaXNfY3RybF9zdG10IChzdG10KSkNCj4gPiArCXNjYWxh cl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY29uZF9yaHMgKHN0bXQpKTsNCj4gPiAgICAgICAg ZWxzZQ0KPiA+ICAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9nZXRfbGhzIChzdG10 KSk7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3Ry ZWUtdmVjdG9yaXplci5oDQo+ID4gaW5kZXgNCj4gMDE2OTYxZGE4NTEwY2E3ZGQyZDA3ZTcxNmNi ZTM1NjIzZWQyZDlhNS4uZWRiYjcyMjhkM2FhZTI5YjZmNTFmZGFiDQo+IDI4NGY0OWFjNTdjNjYx MmQgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oDQo+ID4gKysrIGIvZ2Nj L3RyZWUtdmVjdG9yaXplci5oDQo+ID4gQEAgLTYzLDYgKzYzLDcgQEAgZW51bSB2ZWN0X2RlZl90 eXBlIHsNCj4gPiAgICB2ZWN0X2ludGVybmFsX2RlZiwNCj4gPiAgICB2ZWN0X2luZHVjdGlvbl9k ZWYsDQo+ID4gICAgdmVjdF9yZWR1Y3Rpb25fZGVmLA0KPiA+ICsgIHZlY3RfZWFybHlfZXhpdF9k ZWYsDQo+ID4gICAgdmVjdF9kb3VibGVfcmVkdWN0aW9uX2RlZiwNCj4gPiAgICB2ZWN0X25lc3Rl ZF9jeWNsZSwNCj4gPiAgICB2ZWN0X2ZpcnN0X29yZGVyX3JlY3VycmVuY2UsDQo+ID4gQEAgLTgz Niw2ICs4MzcsMTAgQEAgcHVibGljOg0KPiA+ICAgICAgIHdlIG5lZWQgdG8gcGVlbCBvZmYgaXRl cmF0aW9ucyBhdCB0aGUgZW5kIHRvIGZvcm0gYW4gZXBpbG9ndWUgbG9vcC4gICovDQo+ID4gICAg Ym9vbCBwZWVsaW5nX2Zvcl9uaXRlcjsNCj4gPg0KPiA+ICsgIC8qIFdoZW4gdGhlIGxvb3AgaGFz IGVhcmx5IGJyZWFrcyB0aGF0IHdlIGNhbiB2ZWN0b3JpemUgd2UgbmVlZCB0byBwZWVsDQo+ID4g KyAgICAgdGhlIGxvb3AgZm9yIHRoZSBicmVhayBmaW5kaW5nIGxvb3AuICAqLw0KPiA+ICsgIGJv b2wgZWFybHlfYnJlYWtzOw0KPiA+ICsNCj4gPiAgICAvKiBUcnVlIGlmIHRoZXJlIGFyZSBubyBs b29wIGNhcnJpZWQgZGF0YSBkZXBlbmRlbmNpZXMgaW4gdGhlIGxvb3AuDQo+ID4gICAgICAgSWYg bG9vcC0+c2FmZWxlbiA8PSAxLCB0aGVuIHRoaXMgaXMgYWx3YXlzIHRydWUsIGVpdGhlciB0aGUg bG9vcA0KPiA+ICAgICAgIGRpZG4ndCBoYXZlIGFueSBsb29wIGNhcnJpZWQgZGF0YSBkZXBlbmRl bmNpZXMsIG9yIHRoZSBsb29wIGlzIGJlaW5nDQo+ID4gQEAgLTkyMSw2ICs5MjYsNyBAQCBwdWJs aWM6DQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19SRURVQ1RJT05fQ0hBSU5TKEwpICAgICAoTCkt PnJlZHVjdGlvbl9jaGFpbnMNCj4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dB UFMoTCkgICAgIChMKS0+cGVlbGluZ19mb3JfZ2Fwcw0KPiA+ICAjZGVmaW5lIExPT1BfVklORk9f UEVFTElOR19GT1JfTklURVIoTCkgICAgKEwpLT5wZWVsaW5nX2Zvcl9uaXRlcg0KPiA+ICsjZGVm aW5lIExPT1BfVklORk9fRUFSTFlfQlJFQUtTKEwpICAgICAgICAgKEwpLT5lYXJseV9icmVha3MN Cj4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX05PX0RBVEFfREVQRU5ERU5DSUVTKEwpIChMKS0NCj4g Pm5vX2RhdGFfZGVwZW5kZW5jaWVzDQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19TQ0FMQVJfTE9P UChMKQkgICAoTCktPnNjYWxhcl9sb29wDQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19TQ0FMQVJf TE9PUF9TQ0FMSU5HKEwpICAoTCktDQo+ID5zY2FsYXJfbG9vcF9zY2FsaW5nDQo+ID4gQEAgLTk3 MCw3ICs5NzYsNyBAQCBwdWJsaWM6DQo+ID4gIHR5cGVkZWYgb3B0X3BvaW50ZXJfd3JhcHBlciA8 bG9vcF92ZWNfaW5mbz4gb3B0X2xvb3BfdmVjX2luZm87DQo+ID4NCj4gPiAgc3RhdGljIGlubGlu ZSBsb29wX3ZlY19pbmZvDQo+ID4gLWxvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNsYXNzIGxvb3Ag Kmxvb3ApDQo+ID4gK2xvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxv b3ApDQo+ID4gIHsNCj4gPiAgICByZXR1cm4gKGxvb3BfdmVjX2luZm8pIGxvb3AtPmF1eDsNCj4g PiAgfQ0KPiA+IEBAIC0yMTA3LDcgKzIxMTMsNyBAQCBjbGFzcyBhdXRvX3B1cmdlX3ZlY3RfbG9j YXRpb24NCj4gPiAgICAgaW4gdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MuICAqLw0KPiA+ICBleHRl cm4gdm9pZCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19p bmZvLA0KPiA+ICAJCQkJICAgICB0cmVlLCB0cmVlLCB0cmVlLCBib29sKTsNCj4gPiAtZXh0ZXJu IGJvb2wgc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBjbGFzcyBsb29wICosDQo+ IGNvbnN0X2VkZ2UpOw0KPiA+ICtleHRlcm4gYm9vbCBzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29w X3AgKGNvbnN0IGxvb3BfdmVjX2luZm8sDQo+IGNvbnN0X2VkZ2UpOw0KPiA+ICBjbGFzcyBsb29w ICpzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyAoY2xhc3MgbG9vcCAqLA0K PiA+ICAJCQkJCQkgICAgIGNsYXNzIGxvb3AgKiwgZWRnZSk7DQo+ID4gIGNsYXNzIGxvb3AgKnZl Y3RfbG9vcF92ZXJzaW9uaW5nIChsb29wX3ZlY19pbmZvLCBnaW1wbGUgKik7DQo+ID4gQEAgLTIz MDYsNiArMjMxMiw3IEBAIHN0cnVjdCB2ZWN0X2xvb3BfZm9ybV9pbmZvDQo+ID4gICAgdHJlZSBu dW1iZXJfb2ZfaXRlcmF0aW9uczsNCj4gPiAgICB0cmVlIG51bWJlcl9vZl9pdGVyYXRpb25zbTE7 DQo+ID4gICAgdHJlZSBhc3N1bXB0aW9uczsNCj4gPiArICB2ZWM8Z2NvbmQgKj4gY29uZHM7DQo+ ID4gICAgZ2NvbmQgKmxvb3BfY29uZDsNCj4gPiAgICBnY29uZCAqaW5uZXJfbG9vcF9jb25kOw0K PiA+ICB9Ow0KPiA+IEBAIC0yMzI2LDYgKzIzMzMsOSBAQCBleHRlcm4gYm9vbCB2ZWN0b3JpemFi bGVfaW5kdWN0aW9uDQo+IChsb29wX3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvLA0KPiA+ICBleHRl cm4gYm9vbCB2ZWN0X3RyYW5zZm9ybV9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8sIHN0bXRfdmVj X2luZm8sDQo+ID4gIAkJCQkgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqLA0KPiA+ICAJCQkJ ICAgICAgZ2ltcGxlICoqLCBzbHBfdHJlZSk7DQo+ID4gK2V4dGVybiBib29sIHZlY3RfdHJhbnNm b3JtX2Vhcmx5X2JyZWFrIChsb29wX3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvLA0KPiA+ICsJCQkJ CWdpbXBsZV9zdG10X2l0ZXJhdG9yICosDQo+ID4gKwkJCQkJZ2ltcGxlICoqLCBzbHBfdHJlZSk7 DQo+ID4gIGV4dGVybiBib29sIHZlY3RfdHJhbnNmb3JtX2N5Y2xlX3BoaSAobG9vcF92ZWNfaW5m bywgc3RtdF92ZWNfaW5mbywNCj4gPiAgCQkJCSAgICAgIGdpbXBsZSAqKiwNCj4gPiAgCQkJCSAg ICAgIHNscF90cmVlLCBzbHBfaW5zdGFuY2UpOw0KPiA+IEBAIC0yMzM1LDYgKzIzNDUsMTEgQEAg ZXh0ZXJuIGJvb2wgdmVjdG9yaXphYmxlX3BoaSAodmVjX2luZm8gKiwNCj4gc3RtdF92ZWNfaW5m bywgZ2ltcGxlICoqLCBzbHBfdHJlZSwNCj4gPiAgCQkJICAgICAgc3RtdF92ZWN0b3JfZm9yX2Nv c3QgKik7DQo+ID4gIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9yZWN1cnIgKGxvb3BfdmVjX2lu Zm8sIHN0bXRfdmVjX2luZm8sDQo+ID4gIAkJCQkgIGdpbXBsZSAqKiwgc2xwX3RyZWUsIHN0bXRf dmVjdG9yX2Zvcl9jb3N0DQo+ICopOw0KPiA+ICtleHRlcm4gYm9vbCB2ZWN0b3JpemFibGVfZWFy bHlfZXhpdCAodmVjX2luZm8gKiwgc3RtdF92ZWNfaW5mbywNCj4gPiArCQkJCSAgICAgc2xwX3Ry ZWUsIHNscF9pbnN0YW5jZSwNCj4gPiArCQkJCSAgICAgc3RtdF92ZWN0b3JfZm9yX2Nvc3QgKik7 DQo+ID4gK2V4dGVybiB0cmVlIHByZXBhcmVfdmVjX21hc2sgKGxvb3BfdmVjX2luZm8sIHRyZWUs IHRyZWUsDQo+ID4gKwkJCSAgICAgIHRyZWUsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOw0KPiA+ ICBleHRlcm4gYm9vbCB2ZWN0X2VtdWxhdGVkX3ZlY3Rvcl9wICh0cmVlKTsNCj4gPiAgZXh0ZXJu IGJvb2wgdmVjdF9jYW5fdmVjdG9yaXplX3dpdGhvdXRfc2ltZF9wICh0cmVlX2NvZGUpOw0KPiA+ ICBleHRlcm4gYm9vbCB2ZWN0X2Nhbl92ZWN0b3JpemVfd2l0aG91dF9zaW1kX3AgKGNvZGVfaGVs cGVyKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5jYyBiL2djYy90cmVl LXZlY3Rvcml6ZXIuY2MNCj4gPiBpbmRleA0KPiA2ZWM0OTUxMWQ3NGJkMmUwZTVkZDUxODIzYTZj NDExODBmMDg3MTZjLi40YWE0NmM3YzBkODIzNWQzYjc4M2NlOTMwDQo+IGU1ZGYzNDgwZTFiM2Vm OSAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNjDQo+ID4gKysrIGIvZ2Nj L3RyZWUtdmVjdG9yaXplci5jYw0KPiA+IEBAIC0xMzgyLDcgKzEzODIsOSBAQCBwYXNzX3ZlY3Rv cml6ZTo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikNCj4gPiAgCSBwcmVkaWNhdGVzIHRoYXQgbmVl ZCB0byBiZSBzaGFyZWQgZm9yIG9wdGltYWwgcHJlZGljYXRlIHVzYWdlLg0KPiA+ICAJIEhvd2V2 ZXIgcmVhc3NvYyB3aWxsIHJlLW9yZGVyIHRoZW0gYW5kIHByZXZlbnQgQ1NFIGZyb20gd29ya2lu Zw0KPiA+ICAJIGFzIGl0IHNob3VsZC4gIENTRSBvbmx5IHRoZSBsb29wIGJvZHksIG5vdCB0aGUg ZW50cnkuICAqLw0KPiA+IC0gICAgICBiaXRtYXBfc2V0X2JpdCAoZXhpdF9iYnMsIHNpbmdsZV9l eGl0IChsb29wKS0+ZGVzdC0+aW5kZXgpOw0KPiA+ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0 cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KPiA+ICsgICAgICBmb3IgKGVkZ2UgZXhp dCA6IGV4aXRzKQ0KPiA+ICsJYml0bWFwX3NldF9iaXQgKGV4aXRfYmJzLCBleGl0LT5kZXN0LT5p bmRleCk7DQo+ID4NCj4gPiAgICAgICAgZWRnZSBlbnRyeSA9IEVER0VfUFJFRCAobG9vcF9wcmVo ZWFkZXJfZWRnZSAobG9vcCktPnNyYywgMCk7DQo+ID4gICAgICAgIGRvX3Jwb192biAoZnVuLCBl bnRyeSwgZXhpdF9iYnMpOw0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ID4NCj4gDQo+IC0tDQo+IFJp Y2hhcmQgQmllbmVyIDxyZ3VlbnRoZXJAc3VzZS5kZT4NCj4gU1VTRSBTb2Z0d2FyZSBTb2x1dGlv bnMgR2VybWFueSBHbWJILCBGcmFua2Vuc3RyYXNzZSAxNDYsIDkwNDYxDQo+IE51ZXJuYmVyZywN Cj4gR2VybWFueTsgR0Y6IEl2byBUb3RldiwgQW5kcmV3IE15ZXJzLCBBbmRyZXcgTWNEb25hbGQs IEJvdWRpZW4NCj4gTW9lcm1hbjsNCj4gSFJCIDM2ODA5IChBRyBOdWVybmJlcmcpDQo=