From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A74F9C47094 for ; Thu, 10 Jun 2021 11:16:19 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3E58361359 for ; Thu, 10 Jun 2021 11:16:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3E58361359 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 995F982D3C; Thu, 10 Jun 2021 13:16:14 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=intel.onmicrosoft.com header.i=@intel.onmicrosoft.com header.b="FfWRSjGb"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4527082B71; Thu, 10 Jun 2021 08:54:39 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E70BE82B71 for ; Thu, 10 Jun 2021 08:54:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=tien.fong.chee@intel.com IronPort-SDR: GqW6+EDLgtudj5CptKzXakBxZ9SoNrcL+5pK67QAuPMwaCE0j6HeOLq52QM7GeUXY3BbXsisFf fqwmD2orxt8A== X-IronPort-AV: E=McAfee;i="6200,9189,10010"; a="192350199" X-IronPort-AV: E=Sophos;i="5.83,262,1616482800"; d="scan'208";a="192350199" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Jun 2021 23:54:21 -0700 IronPort-SDR: 2JbtDHe7cNuN6l9DM8/KCcZ85ASaPkhio3ubiiv9aMnr/40nklENSNIaUUL0OoKpG30eEUBTeK ravbRk++tJdg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,262,1616482800"; d="scan'208";a="486051889" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga002.fm.intel.com with ESMTP; 09 Jun 2021 23:54:20 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Wed, 9 Jun 2021 23:54:19 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4; Wed, 9 Jun 2021 23:54:19 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.4 via Frontend Transport; Wed, 9 Jun 2021 23:54:19 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.105) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Wed, 9 Jun 2021 23:54:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g+d+cTLEpjPOcGJP6BFXBlrMltHPQq0I+Gw+1oPiPZ49xacYIeK0/8vBQ8TWoMrxtpx44VxtDLyyn27naIMMB/kfM4hs0B6svgqiQxdm0/lmTexc4TGTdoL6RkEHXCn/cf2eoP06qbAhS8YkQ4o6cDEIJrirvSOPG0vWnvaEhYO59A9hBozD/Gh6DrQtR32BRJIvpgI3e0OGq5QeozUD3stGprAneTCDBjXvkHR0fSazFC+5Bmj0EQeBZYTiJ8wX/HpJJof3N6QrpTHLshWLexdXwllbQ4kOew7c2RoQCbQOBlRfj5CyHiRt8KTHNGwFQTbxzuLfL+Gk+gEAig6CFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nsD32xvpTVXPwF19F/DUNGUDQpoxNZGTeVkoHAOi51A=; b=NHjlWZvLIokNZIAxkxpWp6SS08/YElSgWnd8nntY/9yXKH/m6qSFQCHie4H0CBUQIIWLUk6ARlA0qDIGwicgaoAViR6kkRk6AA3DnbY8qXzRd5RqzFAqVpBlVVIXeQLfoqf7rr4YMnOA4QzqLrpz6/WG6r1U7OAt9abx/5t20W6YSGNJnqu1P/Valb/R9uPb5b2BkLB9y7iW0c26WFgWgCFHWwvquKC4RaupS71EtGfs8u/WFYYKzk9/mybC1/5IDl08WN2e3aQJIg/lOYcLfpsyRqPO2/W0vl/Dp8ok32pjPPJXDPxzszd85s2KIpNaH3ITRGqdITLofdtuNdW29g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nsD32xvpTVXPwF19F/DUNGUDQpoxNZGTeVkoHAOi51A=; b=FfWRSjGbeiiZohiiYXp7rwI46k011pSZIOYA6GJUC28AUCGBfh0giNnkrrfAq0h+8JNFMfrbPVe1kwElCMOaF9Zih5w85Vu3pMUlTczUsY8aOgszV8959vae7p/mKNUFalpqBsDLPQP4RSD+9Dsx7WG14ljf9QICZQPOuLvJqSM= Received: from DM8PR11MB5592.namprd11.prod.outlook.com (2603:10b6:8:35::6) by DM8PR11MB5656.namprd11.prod.outlook.com (2603:10b6:8:38::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.22; Thu, 10 Jun 2021 06:54:13 +0000 Received: from DM8PR11MB5592.namprd11.prod.outlook.com ([fe80::a4aa:ed29:5fce:a9b9]) by DM8PR11MB5592.namprd11.prod.outlook.com ([fe80::a4aa:ed29:5fce:a9b9%3]) with mapi id 15.20.4195.030; Thu, 10 Jun 2021 06:54:13 +0000 From: "Chee, Tien Fong" To: Ley Foon Tan , "Lim, Elly Siew Chin" CC: ZY - u-boot , Marek Vasut , "Tan, Ley Foon" , "See, Chin Liang" , Simon Goldschmidt , "Westergreen, Dalon" , Simon Glass , "Gan, Yau Wai" Subject: RE: [v2 12/17] ddr: altera: Add SDRAM driver for Intel N5X device Thread-Topic: [v2 12/17] ddr: altera: Add SDRAM driver for Intel N5X device Thread-Index: AQHXPZPnJc1wAIwYZ0au1nttkHc4Jqr40ACAgAqaodCACaQ7gA== Date: Thu, 10 Jun 2021 06:54:12 +0000 Message-ID: References: <20210430073814.193576-1-elly.siew.chin.lim@intel.com> <20210430073814.193576-13-elly.siew.chin.lim@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [161.142.254.250] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a70784fb-4e73-46e1-ea64-08d92bdc8e54 x-ms-traffictypediagnostic: DM8PR11MB5656: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:94; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: NgKraQK30N25fjTqPGXogvBV9KajgMohp4axR+Q4t28mH3iFFOzyz0nVeIHVGmmbobT0PDX7foV/CzOUCriVL8BLtI0N2kZrqXKraadIrpsemiRJ5WLn10O9Ylg4nsWLkQzx2j+ljCU3IxjHHvpgldHOBp4Hx6twBRAsFdm2MbR76h7jQ1cIcMj+47T9eysIV+gla8dVWXJAiG6kqmm5I3C16xpgL0MoXr9oHihgbbfKfi6ILp6hdwV7rhiSWABIRsTv4Dl/RQZvgRFVbW8ZnPV/vNAfRICGraSMKFo6KH0g+BnuXz7fDnFyKzH7Z3IfYy88ZdGXYZHXoGWz7r+rxO2+FUQQ8/GDfqXV9hKoadaSCq6aWEiI9w5gHZwU2mqkFL7aaTfjA/9uoMBo9HpsypmOSX6jPiLgZA+P/+LDAYudRrV0kSPF7R0JbALVssz+NiB+d3xImBJY7i21idTeL77hWaoh24nUxo9dLmY9DSj0zAuMBRUdxlY34rd/3y2CJi3A8EP53E8PxTil1xz/saIXKzV5JI6QwOZ38WimvoJ7XqhZjmDTCWn8YfuQXonR3UDfoEtPPr/Um02iM6lBv+DaCUydiGrwASeWgwgCEkCw+Na+HQBadRGFoVmW0CIGQ0KaLaAhkqcCsOSrUr0FqMXn3Yy5st0xecFUvacBFkWRzNFB9D2DVXyO6imTa9D05ivZEoOxViBwKoMblITCEVuylbfEhmXBnK+6fFh0qrpf+dEzo0qpfOTdnTps5JCKPxc7Yf70reEA94KEr67bSw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5592.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(346002)(396003)(136003)(366004)(39860400002)(33656002)(107886003)(4326008)(53546011)(7696005)(2906002)(6506007)(52536014)(83380400001)(86362001)(9686003)(55016002)(186003)(71200400001)(66446008)(64756008)(5660300002)(8676002)(30864003)(316002)(76116006)(66476007)(122000001)(8936002)(66946007)(38100700002)(478600001)(110136005)(26005)(54906003)(66556008)(6636002)(21314003)(569008)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cDFNaXdwdzJQbEQ2WktyTzdQZHV5RnRuSHRxajhMYzBHU3RmUFR0ODJieTNK?= =?utf-8?B?UFhPc3J3LzFsNkNVTjRhOWFYZEtQaWpJNEtwTlh3NzAxZmJydER4bDNPQnZE?= =?utf-8?B?UHFTcm54V1dVVVNlSzA1L1lZdnJhLytpSjM4a0lud2FQSkJPSGlCbDlkcjB1?= =?utf-8?B?WEozZmwxL1lEWTh2Vk54QTJqQWFMRElOMm91eWZYMjFUc1JzWkU3cGthakdI?= =?utf-8?B?eVZNZmxKYnBpeW1Kd21yek1VTmNqMU1NS0VNS2o0RUNvaTl0RGtQNmZ6S1Rv?= =?utf-8?B?NnR6eTRTWkVsektqM0F4YUNwTkg1QmpTQnR2SUs0elBXWWdQeGk5Y1M2TXAy?= =?utf-8?B?QzZhY3NlY1dQaTY2eUl2VHhBS2kwSHZVWEkxa0tQN0FSSTFtUUFPY1Rrc1VW?= =?utf-8?B?SXcyT1RjQ3A2YllEZnlJWm5xdi9pM09MZ1d4ck45bzZxVkd6L3cxVjk3ODZt?= =?utf-8?B?T0Mrb3pwYnFqYnZZbUhzTTQyZ0JVZEVRdklqa051dEQydENiV01McklNUTVQ?= =?utf-8?B?eG54eFV1SmRwSE1JOE9samtNWmkxYnlCTUZZWEpBbGM0K1dxaGp0UUdVbGRy?= =?utf-8?B?WVFJOUphall5RnlWekhYdmFKNWdBeE5BaWpnaENXQmUxeHZVOXczMnhIOGhY?= =?utf-8?B?SElpdmt4NEpwM2M5VXB6aXRWNG1TSjAxZVpuZzRyWVp3ZklBeHNvYXh2bVNw?= =?utf-8?B?K3BBZFp6SGc3THpaY1FvMmlnUG5XclpHa2lwdVZheUxYdk1EdnA5NlZPS095?= =?utf-8?B?cnJiK3VrMjlTU25PdXN2bHpCakpQQjNDNzY1ekp3QjRKWEdLcURxNXNRZGJL?= =?utf-8?B?Z1VydGE0cFF2QUd2NTdCcFMvTTIvMGJsRHpKcGZyajBib01naTRaek5GNGly?= =?utf-8?B?aGhVSWFsT3JNMm5wRWFnU3lEY1VZT3d1blJDSU9QZEpZVVFxQUtGUlN3bGFG?= =?utf-8?B?d3BldEVsSWdYUTY0NFFCVklqTlBhNER0VUJiY0VMNWVjLzI5OGVjMy9rMFRu?= =?utf-8?B?aFVxYTdzRTFBSUhyWUVvbk1BY2ZpalNEcCtTdGhaQVd5TWRIUmpCSXN6RDd1?= =?utf-8?B?eDVHUGkxVWZIZWUxMEJ5NC9GVDRrK0p3UHNXMUdGQzNkRXdaMDBIQUs2ZGdU?= =?utf-8?B?ZExQMkt3WnkzUW16bHQxUUhnSEREWjJTZFFrakF5RndGbkZDQzgyMnhDQW5X?= =?utf-8?B?NEp2NnhhRGNDZ1d3aGJEWDBNVjc2SXFWbzRYZlFjMyt3WldTQkEyZFlKanR5?= =?utf-8?B?cllod0xBZG55Y09UcHNyaEJ4c0VNeG9neTg1MWVtK09idlhSVG9sTkY5Szhp?= =?utf-8?B?NTE0NTNFSGJDU3ZESldJaFBSZ2ZOQkxzL1RTUU9RbHdJQk9qQUl0S1NldGgy?= =?utf-8?B?QWI2dGZSSExocmlpNkJTeXdPaHlRL3FwVjg1WlVVSWJRUEVwelVlY3VSNXdC?= =?utf-8?B?TEI1UWVrYy96Q3Z5SUxPUm02Y1JPc1Jhemxqd243eEtVbDU4SDJSS2Z6bDlK?= =?utf-8?B?UTFTaW9LSmpUbWNxWkFMdE92bnZ3Vmt5aFlSZUJkT2t3M0tHMlYyQ3NrTVhm?= =?utf-8?B?ZHNwVUh1ZTRodGM3VGFKTVRrRzl2dHdXV3E3YS9FOGMyWjIyTWQ4eUI3a2h2?= =?utf-8?B?a0tMRm5GVDRQdjhFeTh0a291Nmx3Z1BQSzllM0VlK01VWndvS25LeWtjbnV0?= =?utf-8?B?TDJLNVJvQXNNZzlxTnlZMlA1U2JBb1JZTzUwRlIreEt6OXhOQzV3eUY1Ymwz?= =?utf-8?Q?kUwYUU5rO7CDkDT/d4QhMqf6F9v1VLPpOu1Y3ou?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5592.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a70784fb-4e73-46e1-ea64-08d92bdc8e54 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jun 2021 06:54:12.8314 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: itTpH32QEdPVpQaUU1u2pdluijsLpxdnFyJ96EUG1oxca4COZ4bXMwj4839004RJxxh5EY3BuxHZzhSMCpzuIyv4MRrDV4vCDpz9gkpJdHQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM8PR11MB5656 X-OriginatorOrg: intel.com X-Mailman-Approved-At: Thu, 10 Jun 2021 13:16:12 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean SGkgTGV5IEZvb24sDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQ2hl ZSwgVGllbiBGb25nDQo+IFNlbnQ6IEZyaWRheSwgNCBKdW5lLCAyMDIxIDEyOjAzIFBNDQo+IFRv OiBMZXkgRm9vbiBUYW4gPGxmdGFuLmxpbnV4QGdtYWlsLmNvbT47IExpbSwgRWxseSBTaWV3IENo aW4NCj4gPGVsbHkuc2lldy5jaGluLmxpbUBpbnRlbC5jb20+DQo+IENjOiBaWSAtIHUtYm9vdCA8 dS1ib290QGxpc3RzLmRlbnguZGU+OyBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT47DQo+IFRh biwgTGV5IEZvb24gPGxleS5mb29uLnRhbkBpbnRlbC5jb20+OyBTZWUsIENoaW4gTGlhbmcNCj4g PGNoaW4ubGlhbmcuc2VlQGludGVsLmNvbT47IFNpbW9uIEdvbGRzY2htaWR0DQo+IDxzaW1vbi5r LnIuZ29sZHNjaG1pZHRAZ21haWwuY29tPjsgV2VzdGVyZ3JlZW4sIERhbG9uDQo+IDxkYWxvbi53 ZXN0ZXJncmVlbkBpbnRlbC5jb20+OyBTaW1vbiBHbGFzcyA8c2pnQGNocm9taXVtLm9yZz47IEdh biwNCj4gWWF1IFdhaSA8eWF1LndhaS5nYW5AaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSRTogW3Yy IDEyLzE3XSBkZHI6IGFsdGVyYTogQWRkIFNEUkFNIGRyaXZlciBmb3IgSW50ZWwgTjVYIGRldmlj ZQ0KPiANCj4gSGkgTGV5IEZvb24sDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4gRnJvbTogTGV5IEZvb24gVGFuIDxsZnRhbi5saW51eEBnbWFpbC5jb20+DQo+ID4gU2Vu dDogRnJpZGF5LCAyOCBNYXksIDIwMjEgNTo0MSBQTQ0KPiA+IFRvOiBMaW0sIEVsbHkgU2lldyBD aGluIDxlbGx5LnNpZXcuY2hpbi5saW1AaW50ZWwuY29tPg0KPiA+IENjOiBaWSAtIHUtYm9vdCA8 dS1ib290QGxpc3RzLmRlbnguZGU+OyBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT47DQo+IFRh biwNCj4gPiBMZXkgRm9vbiA8bGV5LmZvb24udGFuQGludGVsLmNvbT47IFNlZSwgQ2hpbiBMaWFu Zw0KPiA+IDxjaGluLmxpYW5nLnNlZUBpbnRlbC5jb20+OyBTaW1vbiBHb2xkc2NobWlkdA0KPiA+ IDxzaW1vbi5rLnIuZ29sZHNjaG1pZHRAZ21haWwuY29tPjsgQ2hlZSwgVGllbiBGb25nDQo+ID4g PHRpZW4uZm9uZy5jaGVlQGludGVsLmNvbT47IFdlc3RlcmdyZWVuLCBEYWxvbg0KPiA+IDxkYWxv bi53ZXN0ZXJncmVlbkBpbnRlbC5jb20+OyBTaW1vbiBHbGFzcyA8c2pnQGNocm9taXVtLm9yZz47 IEdhbiwNCj4gWWF1DQo+ID4gV2FpIDx5YXUud2FpLmdhbkBpbnRlbC5jb20+DQo+ID4gU3ViamVj dDogUmU6IFt2MiAxMi8xN10gZGRyOiBhbHRlcmE6IEFkZCBTRFJBTSBkcml2ZXIgZm9yIEludGVs IE41WCBkZXZpY2UNCj4gPg0KPiA+IE9uIEZyaSwgQXByIDMwLCAyMDIxIGF0IDM6NDEgUE0gU2ll dyBDaGluIExpbQ0KPiA+IDxlbGx5LnNpZXcuY2hpbi5saW1AaW50ZWwuY29tPiB3cm90ZToNCj4g PiA+DQo+ID4gPiBUaGUgRERSIHN1YnN5c3RlbSBpbiBEaWFtb25kIE1lc2EgaXMgY29uc2lzdGVk IG9mIGNvbnRyb2xsZXIsIFBIWSwNCj4gPiA+IG1lbW9yeSByZXNldCBtYW5hZ2VyIGFuZCBtZW1v cnkgY2xvY2sgbWFuYWdlci4NCj4gPiA+DQo+ID4gPiBDb25maWd1cmF0aW9uIHNldHRpbmdzIG9m IGNvbnRyb2xsZXIsIFBIWSBhbmQgIG1lbW9yeSByZXNldCBtYW5hZ2VyDQo+ID4gPiBpcyBjb21l IGZyb20gRERSIGhhbmRvZmYgZGF0YSBpbiBiaXRzdHJlYW0sIHdoaWNoIGNvbnRhaW4gdGhlIHJl Z2lzdGVyDQo+ID4gPiBiYXNlIGFkZHJlc3NlcyBhbmQgdXNlciBzZXR0aW5ncyBmcm9tIHRvb2wu DQo+ID4gPg0KPiA+ID4gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBvZiBtZW1vcnkgY2xvY2sgbWFu YWdlciBpcyBjb21lIGZyb20gdGhlIEhQUw0KPiA+ID4gaGFuZG9mZiBkYXRhIGluIGJpdHN0cmVh bSwgaG93ZXZlciB0aGUgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIGlzIGRlZmluZWQNCj4gPiA+IGlu IGRldmljZSB0cmVlLg0KPiA+ID4NCj4gPiA+IFRoZSBjYWxpYnJhdGlvbiBpcyBmdWxseSBkb25l IGluIEhQUywgd2hpY2ggcmVxdWlyZXMgSU1FTSBhbmQgRE1FTQ0KPiA+ID4gYmluYXJpZXMgbG9h ZGluZyB0byBQSFkgU1JBTSBmb3IgcnVubmluZyB0aGlzIGNhbGlicmF0aW9uLCBib3RoDQo+ID4g PiBJTUVNIGFuZCBETUVNIGJpbmFyaWVzIGFyZSBhbHNvIHBhcnQgb2YgYml0c3RyZWFtLCB0aGlz IGJpdHN0cmVhbQ0KPiA+ID4gd291bGQgYmUgbG9hZGVkIHRvIE9DUkFNIGJ5IFNETSwgYW5kIGNv bmZpZ3VyZWQgYnkgRERSIGRyaXZlci4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBTaWV3 IENoaW4gTGltIDxlbGx5LnNpZXcuY2hpbi5saW1AaW50ZWwuY29tPg0KPiA+ID4gU2lnbmVkLW9m Zi1ieTogVGllbiBGb25nIENoZWUgPHRpZW4uZm9uZy5jaGVlQGludGVsLmNvbT4NCj4gPiA+DQo+ ID4gPiAtLS0NCj4gPiA+IHYyOg0KPiA+ID4gLSBNb3ZlIGlzX2Rkcl9pbml0X3NraXBwZWQgYW5k IGl0cyBoZWxwZXIgZnVuY3Rpb25zIHRvIEREUiBkcml2ZXIgYW5kDQo+ID4gPiAgIGNvbnZlcnRl ZCBmdW5jdGlvbiB0byBwb3NpdGl2ZSBjaGVja2luZw0KPiA+ID4gLSBVc2luZyBHRU5NQVNLKCkg bWFjcm8NCj4gPiA+IC0gRml4ZWQgdHlwbw0KPiA+ID4gLSBSZXR1cm4gc3RhdHVzIG9mIHN1YmZ1 bmN0aW9uDQo+ID4gPiAtIENoYW5nZWQgZG0gdG8gbjV4DQo+ID4gPiAtLS0NCj4gPiA+ICBhcmNo L2FybS9tYWNoLXNvY2ZwZ2EvaW5jbHVkZS9tYWNoL2ZpcmV3YWxsLmggfCAgICA2ICsNCj4gPiA+ ICAuLi4vaW5jbHVkZS9tYWNoL3N5c3RlbV9tYW5hZ2VyX3NvYzY0LmggICAgICAgfCAgIDEwICst DQo+ID4gPiAgZHJpdmVycy9kZHIvYWx0ZXJhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwg ICAgMyArLQ0KPiA+ID4gIGRyaXZlcnMvZGRyL2FsdGVyYS9zZHJhbV9uNXguYyAgICAgICAgICAg ICAgICB8IDIyOTkgKysrKysrKysrKysrKysrKysNCj4gPiA+ICBkcml2ZXJzL2Rkci9hbHRlcmEv c2RyYW1fc29jNjQuYyAgICAgICAgICAgICAgfCAgIDcwICsNCj4gPiA+ICBkcml2ZXJzL2Rkci9h bHRlcmEvc2RyYW1fc29jNjQuaCAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiA+ICA2IGZpbGVz IGNoYW5nZWQsIDIzODcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4gPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kZHIvYWx0ZXJhL3NkcmFtX241eC5jDQo+ID4gPg0KPiA+ DQo+ID4gWy4uXQ0KPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZHIvYWx0ZXJhL01h a2VmaWxlIGIvZHJpdmVycy9kZHIvYWx0ZXJhL01ha2VmaWxlDQo+ID4gPiBpbmRleCAzOWRmZWU1 ZDVhLi45ZmE1ZDg1YTI3IDEwMDY0NA0KPiA+ID4gLS0tIGEvZHJpdmVycy9kZHIvYWx0ZXJhL01h a2VmaWxlDQo+ID4gPiArKysgYi9kcml2ZXJzL2Rkci9hbHRlcmEvTWFrZWZpbGUNCj4gPiA+IEBA IC00LDExICs0LDEyIEBADQo+ID4gPiAgIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVu Z2luZWVyaW5nLCB3ZEBkZW54LmRlLg0KPiA+ID4gICMNCj4gPiA+ICAjIChDKSBDb3B5cmlnaHQg MjAxMCwgVGhvbWFzIENob3UgPHRob21hc0B3eXRyb24uY29tLnR3Pg0KPiA+ID4gLSMgQ29weXJp Z2h0IChDKSAyMDE0IEFsdGVyYSBDb3Jwb3JhdGlvbiA8d3d3LmFsdGVyYS5jb20+DQo+ID4gPiAr IyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBbHRlcmEgQ29ycG9yYXRpb24gPHd3dy5hbHRlcmEu Y29tPg0KPiA+IEludGVsIGNvcHlyaWdodA0KPiA+DQo+ID4NCj4gPiBbLi4uXQ0KPiA+DQo+ID4g PiArI2luY2x1ZGUgPGNvbW1vbi5oPg0KPiA+IFNvcnQgaW5jbHVkZSBoZWFkZXIuDQo+IA0KPiBP a2F5Lg0KPiANCj4gPg0KPiA+ID4gKyNpbmNsdWRlIDxhc20vYXJjaC9maXJld2FsbC5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxhc20vYXJjaC9oYW5kb2ZmX3NvYzY0Lmg+DQo+ID4gPiArI2luY2x1ZGUg PGFzbS9hcmNoL21pc2MuaD4NCj4gPiA+ICsjaW5jbHVkZSA8YXNtL2FyY2gvcmVzZXRfbWFuYWdl ci5oPg0KPiA+ID4gKyNpbmNsdWRlIDxhc20vYXJjaC9zeXN0ZW1fbWFuYWdlci5oPg0KPiA+ID4g KyNpbmNsdWRlIDxhc20vZ2xvYmFsX2RhdGEuaD4NCj4gPiA+ICsjaW5jbHVkZSA8YXNtL2lvLmg+ DQo+ID4gPiArI2luY2x1ZGUgPGNsay5oPg0KPiA+ID4gKyNpbmNsdWRlIDxkaXY2NC5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxkbS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiA+ID4gKyNp bmNsdWRlIDxmZHRkZWMuaD4NCj4gPiA+ICsjaW5jbHVkZSA8aGFuZy5oPg0KPiA+ID4gKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4NCj4gPiA+ ICsjaW5jbHVkZSA8cmFtLmg+DQo+ID4gPiArI2luY2x1ZGUgPHJlc2V0Lmg+DQo+ID4gPiArI2lu Y2x1ZGUgInNkcmFtX3NvYzY0LmgiDQo+ID4gPiArI2luY2x1ZGUgPHdhaXRfYml0Lmg+DQo+ID4g PiArDQo+ID4gPiArREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7DQo+ID4gPiArDQo+ID4gPiArLyog TVBGRSBOT0MgcmVnaXN0ZXJzICovDQo+ID4gPiArI2RlZmluZSBGUEdBMlNEUkFNX01HUl9NQUlO X1NJREVCQU5ETUdSX0ZMQUdPVVRTRVQwDQo+ID4gMHhGODAyNDA1MA0KPiA+ID4gKw0KPiA+ID4g Ky8qIE1lbW9yeSByZXNldCBtYW5hZ2VyICovDQo+ID4gPiArI2RlZmluZSBNRU1fUlNUX01HUl9T VEFUVVMgICAgIDB4OA0KPiA+ID4gKw0KPiA+ID4gKy8qIFJlZ2lzdGVyIGFuZCBiaXQgaW4gbWVt b3J5IHJlc2V0IG1hbmFnZXIgKi8NCj4gPiA+ICsjZGVmaW5lIE1FTV9SU1RfTUdSX1NUQVRVU19S RVNFVF9DT01QTEVURSAgICAgIEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgTUVNX1JTVF9NR1JfU1RB VFVTX1BXUk9LSU5fU1RBVFVTICAgICAgQklUKDEpDQo+ID4gPiArI2RlZmluZSBNRU1fUlNUX01H Ul9TVEFUVVNfQ09OVFJPTExFUl9SU1QgICAgICBCSVQoMikNCj4gPiA+ICsjZGVmaW5lIE1FTV9S U1RfTUdSX1NUQVRVU19BWElfUlNUICAgICAgICAgICAgIEJJVCgzKQ0KPiA+ID4gKw0KPiA+ID4g KyNkZWZpbmUgVElNRU9VVF8yMDBNUyAgICAgMjAwDQo+ID4gPiArI2RlZmluZSBUSU1FT1VUXzUw MDBNUyAgICA1MDAwDQo+ID4gPiArDQo+ID4gPiArLyogRERSNCB1bWN0bDIgKi8NCj4gPiA+ICsj ZGVmaW5lIEREUjRfTVNUUl9PRkZTRVQgICAgICAgICAgICAgICAweDANCj4gPiA+ICsjZGVmaW5l IEREUjRfRlJFUV9SQVRJTyAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyMikNCj4gPiA+ICsN Cj4gPiA+ICsjZGVmaW5lIEREUjRfU1RBVF9PRkZTRVQgICAgICAgICAgICAgICAweDQNCj4gPiA+ ICsjZGVmaW5lIEREUjRfU1RBVF9TRUxGUkVGX1RZUEUgICAgICAgICBHRU5NQVNLKDUsIDQpDQo+ ID4gPiArI2RlZmluZSBERFI0X1NUQVRfU0VMRlJFRl9UWVBFX1NISUZUICAgNA0KPiA+ID4gKyNk ZWZpbmUgRERSNF9TVEFUX09QRVJBVElOR19NT0RFICAgICAgIEdFTk1BU0soMiwgMCkNCj4gPiA+ ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfTVJDVFJMMF9PRkZTRVQgICAgICAgICAgICAweDEwDQo+ ID4gPiArI2RlZmluZSBERFI0X01SQ1RSTDBfTVJfVFlQRSAgICAgICAgICAgQklUKDApDQo+ID4g PiArI2RlZmluZSBERFI0X01SQ1RSTDBfTVBSX0VOICAgICAgICAgICAgQklUKDEpDQo+ID4gPiAr I2RlZmluZSBERFI0X01SQ1RSTDBfTVJfUkFOSyAgICAgICAgICAgR0VOTUFTSyg1LCA0KQ0KPiA+ ID4gKyNkZWZpbmUgRERSNF9NUkNUUkwwX01SX1JBTktfU0hJRlQgICAgIDQNCj4gPiA+ICsjZGVm aW5lIEREUjRfTVJDVFJMMF9NUl9BRERSICAgICAgICAgICBHRU5NQVNLKDE1LCAxMikNCj4gPiA+ ICsjZGVmaW5lIEREUjRfTVJDVFJMMF9NUl9BRERSX1NISUZUICAgICAxMg0KPiA+ID4gKyNkZWZp bmUgRERSNF9NUkNUUkwwX01SX1dSICAgICAgICAgICAgIEJJVCgzMSkNCj4gPiA+ICsNCj4gPiA+ ICsjZGVmaW5lIEREUjRfTVJDVFJMMV9PRkZTRVQgICAgICAgICAgICAweDE0DQo+ID4gPiArI2Rl ZmluZSBERFI0X01SQ1RSTDFfTVJfREFUQSAgICAgICAgICAgMHgzRkZGRg0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgRERSNF9NUlNUQVRfT0ZGU0VUICAgICAgICAgICAgIDB4MTgNCj4gPiA+ICsj ZGVmaW5lIEREUjRfTVJTVEFUX01SX1dSX0JVU1kgICAgICAgICBCSVQoMCkNCj4gPiA+ICsNCj4g PiA+ICsjZGVmaW5lIEREUjRfTVJDVFJMMl9PRkZTRVQgICAgICAgICAgICAweDFDDQo+ID4gPiAr DQo+ID4gPiArI2RlZmluZSBERFI0X1BXUkNUTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAw eDMwDQo+ID4gPiArI2RlZmluZSBERFI0X1BXUkNUTF9TRUxGUkVGX0VOICAgICAgICAgICAgICAg ICBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfUFdSQ1RMX1BPV0VSRE9XTl9FTiAgICAgICAg ICAgICAgIEJJVCgxKQ0KPiA+ID4gKyNkZWZpbmUgRERSNF9QV1JDVExfRU5fREZJX0RSQU1fQ0xL X0RJU0FCTEUgICAgQklUKDMpDQo+ID4gPiArI2RlZmluZSBERFI0X1BXUkNUTF9TRUxGUkVGX1NX ICAgICAgICAgICAgICAgICBCSVQoNSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfUFdS VE1HX09GRlNFVCAgICAgICAgICAgICAweDM0DQo+ID4gPiArI2RlZmluZSBERFI0X0hXTFBDVExf T0ZGU0VUICAgICAgICAgICAgMHgzOA0KPiA+ID4gKyNkZWZpbmUgRERSNF9SRlNIQ1RMMF9PRkZT RVQgICAgICAgICAgIDB4NTANCj4gPiA+ICsjZGVmaW5lIEREUjRfUkZTSENUTDFfT0ZGU0VUICAg ICAgICAgICAweDU0DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFI0X1JGU0hDVEwzX09GRlNF VCAgICAgICAgICAgICAgICAgICAweDYwDQo+ID4gPiArI2RlZmluZSBERFI0X1JGU0hDVEwzX0RJ U19BVVRPX1JFRlJFU0ggICAgICAgICBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfUkZTSENU TDNfUkVGUkVTSF9NT0RFICAgICAgICAgICAgIEdFTk1BU0soNiwgNCkNCj4gPiA+ICsjZGVmaW5l IEREUjRfUkZTSENUTDNfUkVGUkVTSF9NT0RFX1NISUZUICAgICAgIDQNCj4gPiA+ICsNCj4gPiA+ ICsjZGVmaW5lIEREUjRfRUNDQ0ZHMF9PRkZTRVQgICAgICAgICAgICAweDcwDQo+ID4gPiArI2Rl ZmluZSBERFI0X0VDQ19NT0RFICAgICAgICAgICAgICAgICAgR0VOTUFTSygyLCAwKQ0KPiA+ID4g KyNkZWZpbmUgRERSNF9ESVNfU0NSVUIgICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiA+ID4gKyNk ZWZpbmUgTFBERFI0X0VDQ0NGRzBfRUNDX1JFR0lPTl9NQVBfR1JBTlVfU0hJRlQgICAgICAzMA0K PiA+ID4gKyNkZWZpbmUgTFBERFI0X0VDQ0NGRzBfRUNDX1JFR0lPTl9NQVBfU0hJRlQgICAgOA0K PiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9FQ0NDRkcxX09GRlNFVCAgICAgICAgICAgIDB4 NzQNCj4gPiA+ICsjZGVmaW5lIExQRERSNF9FQ0NDRkcxX0VDQ19SRUdJT05TX1BBUklUWV9MT0NL IEJJVCg0KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9DUkNQQVJDVEwwX09GRlNFVCAg ICAgICAgICAgICAgICAgMHhDMA0KPiA+ID4gKyNkZWZpbmUgRERSNF9DUkNQQVJDVEwwX0RGSV9B TEVSVF9FUlJfSU5JVF9DTFIgQklUKDEpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFI0X0NS Q1BBUkNUTDFfT0ZGU0VUICAgICAgICAgICAgICAgICAweEM0DQo+ID4gPiArI2RlZmluZSBERFI0 X0NSQ1BBUkNUTDFfQ1JDX1BBUklUWV9SRVRSWV9FTkFCTEUgICAgICAgIEJJVCg4KQ0KPiA+ID4g KyNkZWZpbmUgRERSNF9DUkNQQVJDVEwxX0FMRVJUX1dBSVRfRk9SX1NXICAgICAgQklUKDkpDQo+ ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFI0X0NSQ1BBUlNUQVRfT0ZGU0VUICAgICAgICAgICAg ICAgICAweENDDQo+ID4gPiArI2RlZmluZSBERFI0X0NSQ1BBUlNUQVRfREZJX0FMRVJUX0VSUl9J TlQgICAgICBCSVQoMTYpDQo+ID4gPiArI2RlZmluZSBERFI0X0NSQ1BBUlNUQVRfREZJX0FMRVJU X0VSUl9GQVRMX0lOVCBCSVQoMTcpDQo+ID4gPiArI2RlZmluZSBERFI0X0NSQ1BBUlNUQVRfREZJ X0FMRVJUX0VSUl9OT19TVyAgICBCSVQoMTkpDQo+ID4gPiArI2RlZmluZSBERFI0X0NSQ1BBUlNU QVRfQ01EX0lOX0VSUl9XSU5ET1cgICAgICBCSVQoMjkpDQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBERFI0X0lOSVQwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweEQwDQo+ID4gPiArI2Rl ZmluZSBERFI0X0lOSVQwX1NLSVBfUkFNX0lOSVQgICAgICAgICAgICAgICBHRU5NQVNLKDMxLCAz MCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfUkFOS0NUTF9PRkZTRVQgICAgICAgICAg ICAgICAgICAgIDB4RjQNCj4gPiA+ICsjZGVmaW5lIEREUjRfUkFOS0NUTF9ESUZGX1JBTktfUkRf R0FQICAgICAgICAgIEdFTk1BU0soNywgNCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfUkFOS0NUTF9E SUZGX1JBTktfV1JfR0FQICAgICAgICAgIEdFTk1BU0soMTEsIDgpDQo+ID4gPiArI2RlZmluZSBE RFI0X1JBTktDVExfRElGRl9SQU5LX1JEX0dBUF9NU0IgICAgICBCSVQoMjQpDQo+ID4gPiArI2Rl ZmluZSBERFI0X1JBTktDVExfRElGRl9SQU5LX1dSX0dBUF9NU0IgICAgICBCSVQoMjYpDQo+ID4g PiArI2RlZmluZSBERFI0X1JBTktDVExfRElGRl9SQU5LX1JEX0dBUF9TSElGVCAgICA0DQo+ID4g PiArI2RlZmluZSBERFI0X1JBTktDVExfRElGRl9SQU5LX1dSX0dBUF9TSElGVCAgICA4DQo+ID4g PiArI2RlZmluZSBERFI0X1JBTktDVExfRElGRl9SQU5LX1JEX0dBUF9NU0JfU0hJRlQgICAgICAg IDI0DQo+ID4gPiArI2RlZmluZSBERFI0X1JBTktDVExfRElGRl9SQU5LX1dSX0dBUF9NU0JfU0hJ RlQgICAgICAgIDI2DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFI0X1JBTktDVEwxX09GRlNF VCAgIDB4RjgNCj4gPiA+ICsjZGVmaW5lIEREUjRfUkFOS0NUTDFfV1IyUkRfRFIgR0VOTUFTSyg1 LCAwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9EUkFNVE1HMl9PRkZTRVQgICAweDEw OA0KPiA+ID4gKyNkZWZpbmUgRERSNF9EUkFNVE1HMl9XUjJSRCAgICBHRU5NQVNLKDUsIDApDQo+ ID4gPiArI2RlZmluZSBERFI0X0RSQU1UTUcyX1JEMldSICAgIEdFTk1BU0soMTMsIDgpDQo+ID4g PiArI2RlZmluZSBERFI0X0RSQU1UTUcyX1JEMldSX1NISUZUICAgICAgOA0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgRERSNF9EUkFNVE1HOV9PRkZTRVQgICAweDEyNA0KPiA+ID4gKyNkZWZpbmUg RERSNF9EUkFNVE1HOV9XMlJEX1MgICBHRU5NQVNLKDUsIDApDQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBERFI0X0RGSVRNRzFfT0ZGU0VUICAgIDB4MTk0DQo+ID4gPiArI2RlZmluZSBERFI0X0RG SVRNRzFfREZJX1RfV1JEQVRBX0RFTEFZICAgICAgICBHRU5NQVNLKDIwLCAxNikNCj4gPiA+ICsj ZGVmaW5lIEREUjRfREZJVE1HMV9ERklfVF9XUkRBVEFfU0hJRlQgICAgICAgIDE2DQo+ID4gPiAr DQo+ID4gPiArI2RlZmluZSBERFI0X0RGSU1JU0NfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAw eDFCMA0KPiA+ID4gKyNkZWZpbmUgRERSNF9ERklNSVNDX0RGSV9JTklUX0NPTVBMRVRFX0VOICAg ICAgQklUKDApDQo+ID4gPiArI2RlZmluZSBERFI0X0RGSU1JU0NfREZJX0lOSVRfU1RBUlQgICAg ICAgICAgICBCSVQoNSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfREZJU1RBVF9PRkZT RVQgICAgICAgICAgICAweDFCQw0KPiA+ID4gKyNkZWZpbmUgRERSNF9ERklfSU5JVF9DT01QTEVU RSAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9EQkcwX09GRlNF VCAgICAgICAgICAgICAgIDB4MzAwDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFI0X0RCRzFf T0ZGU0VUICAgICAgICAgICAgICAgMHgzMDQNCj4gPiA+ICsjZGVmaW5lIEREUjRfREJHMV9ESVNE USAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgRERSNF9EQkcx X0RJU19ISUYgICAgICAgICAgICAgIEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERS NF9EQkdDQU1fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgzMDgNCj4gPiA+ICsjZGVmaW5l IEREUjRfREJHQ0FNX0RCR19SRF9RX0VNUFRZICAgICAgICAgICAgIEJJVCgyNSkNCj4gPiA+ICsj ZGVmaW5lIEREUjRfREJHQ0FNX0RCR19XUl9RX0VNUFRZICAgICAgICAgICAgIEJJVCgyNikNCj4g PiA+ICsjZGVmaW5lIEREUjRfREJHQ0FNX1JEX0RBVEFfUElQRUxJTkVfRU1QVFkgICAgIEJJVCgy OCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfREJHQ0FNX1dSX0RBVEFfUElQRUxJTkVfRU1QVFkgICAg IEJJVCgyOSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfU1dDVExfT0ZGU0VUICAgICAg ICAgICAgICAweDMyMA0KPiA+ID4gKyNkZWZpbmUgRERSNF9TV0NUTF9TV19ET05FICAgICAgICAg ICAgIEJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9TV1NUQVRfT0ZGU0VUICAg ICAgICAgICAgIDB4MzI0DQo+ID4gPiArI2RlZmluZSBERFI0X1NXU1RBVF9TV19ET05FX0FDSyAg ICAgICAgICAgICAgICBCSVQoMCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfUFNUQVRf T0ZGU0VUICAgICAgICAgICAgICAweDNGQw0KPiA+ID4gKyNkZWZpbmUgRERSNF9QU1RBVF9SRF9Q T1JUX0JVU1lfMCAgICAgIEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgRERSNF9QU1RBVF9XUl9QT1JU X0JVU1lfMCAgICAgIEJJVCgxNikNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUjRfUENUUkww X09GRlNFVCAgICAgICAgICAgICAweDQ5MA0KPiA+ID4gKyNkZWZpbmUgRERSNF9QQ1RSTDBfUE9S VF9FTiAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9TQlJD VExfT0ZGU0VUICAgICAgICAgICAgIDB4RjI0DQo+ID4gPiArI2RlZmluZSBERFI0X1NCUkNUTF9T Q1JVQl9JTlRFUlZBTCAgICAgMHgxRkZGMDANCj4gPiA+ICsjZGVmaW5lIEREUjRfU0JSQ1RMX1ND UlVCX0VOICAgICAgICAgICBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfU0JSQ1RMX1NDUlVC X1dSSVRFICAgICAgICAgICAgICAgIEJJVCgyKQ0KPiA+ID4gKyNkZWZpbmUgRERSNF9TQlJDVExf U0NSVUJfQlVSU1RfMSAgICAgIEJJVCg0KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9T QlJTVEFUX09GRlNFVCAgICAgICAgICAgIDB4RjI4DQo+ID4gPiArI2RlZmluZSBERFI0X1NCUlNU QVRfU0NSVUJfQlVTWSBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIEREUjRfU0JSU1RBVF9TQ1JVQl9E T05FIEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSNF9TQlJXREFUQTBfT0ZGU0VU ICAgICAgICAgIDB4RjJDDQo+ID4gPiArI2RlZmluZSBERFI0X1NCUldEQVRBMV9PRkZTRVQgICAg ICAgICAgMHhGMzANCj4gPiA+ICsjZGVmaW5lIEREUjRfU0JSU1RBUlQwX09GRlNFVCAgICAgICAg ICAweEYzOA0KPiA+ID4gKyNkZWZpbmUgRERSNF9TQlJTVEFSVDFfT0ZGU0VUICAgICAgICAgIDB4 RjNDDQo+ID4gPiArI2RlZmluZSBERFI0X1NCUlJBTkdFMF9PRkZTRVQgICAgICAgICAgMHhGNDAN Cj4gPiA+ICsjZGVmaW5lIEREUjRfU0JSUkFOR0UxX09GRlNFVCAgICAgICAgICAweEY0NA0KPiA+ ID4gKw0KPiA+ID4gKy8qIEREUiBQSFkgKi8NCj4gPiA+ICsjZGVmaW5lIEREUl9QSFlfVFhPRFRE UlZTVFJFTl9CMF9QMCAgICAgICAgICAgIDB4MjAwOUENCj4gPiA+ICsjZGVmaW5lIEREUl9QSFlf UlhQQkRMWVRHMF9SMCAgICAgICAgICAgICAgICAgIDB4MjAwRDANCj4gPiA+ICsjZGVmaW5lIERE Ul9QSFlfREJZVEUwX1RYRFFETFlURzBfVTBfUDAgICAgICAgICAgICAgICAgMHgyMDFBMA0KPiA+ ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9EQllURTBfVFhEUURMWVRHMF9VMV9QMCAgICAg ICAgICAgICAgICAweDIwM0EwDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX0RCWVRFMV9UWERRRExZ VEcwX1UwX1AwICAgICAgICAgICAgICAgIDB4MjIxQTANCj4gPiA+ICsjZGVmaW5lIEREUl9QSFlf REJZVEUxX1RYRFFETFlURzBfVTFfUDAgICAgICAgICAgICAgICAgMHgyMjNBMA0KPiA+ID4gKyNk ZWZpbmUgRERSX1BIWV9UWERRRExZVEcwX0NPQVJTRV9ERUxBWSAgICAgICAgICAgICAgICBHRU5N QVNLKDksIDYpDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX1RYRFFETFlURzBfQ09BUlNFX0RFTEFZ X1NISUZUICA2DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX0NBTFJBVEVfT0ZGU0VU ICAgICAgICAgICAgICAgICAweDQwMTEwDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX0NBTFpBUF9P RkZTRVQgICAgICAgICAgICAgICAgICAweDQwMTEyDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX1NF UTBCRExZMF9QMF9PRkZTRVQgICAgICAgICAgICAweDQwMDE2DQo+ID4gPiArI2RlZmluZSBERFJf UEhZX1NFUTBCRExZMV9QMF9PRkZTRVQgICAgICAgICAgICAweDQwMDE4DQo+ID4gPiArI2RlZmlu ZSBERFJfUEhZX1NFUTBCRExZMl9QMF9PRkZTRVQgICAgICAgICAgICAweDQwMDFBDQo+ID4gPiAr I2RlZmluZSBERFJfUEhZX1NFUTBCRExZM19QMF9PRkZTRVQgICAgICAgICAgICAweDQwMDFDDQo+ ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX01FTVJFU0VUTF9PRkZTRVQgICAgICAgICAg ICAgICAweDQwMEMwDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX01FTVJFU0VUTF9WQUxVRSAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9QUk9URUNU X01FTVJFU0VUICAgICAgICAgICAgICAgQklUKDEpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBE RFJfUEhZX0NBTEJVU1lfT0ZGU0VUICAgICAgICAgICAgICAgICAweDQwMTJFDQo+ID4gPiArI2Rl ZmluZSBERFJfUEhZX0NBTEJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgw KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9UUkFJTl9JTUVNX09GRlNFVCAgICAg ICAgICAgICAgMHhBMDAwMA0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9UUkFJTl9ETUVNX09GRlNF VCAgICAgICAgICAgICAgMHhBODAwMA0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9D RERfUlJfMV8wX09GRlNFVCAgICAgICAgICAgICAgMHhBODAyQw0KPiA+ID4gKyNkZWZpbmUgRE1F TV9NQl9DRERfUlJfMF8xX09GRlNFVCAgICAgICAgICAgICAgMHhBODAzMA0KPiA+ID4gKyNkZWZp bmUgRE1FTV9NQl9DRERfV1dfMV8wX09GRlNFVCAgICAgICAgICAgICAgMHhBODAzOA0KPiA+ID4g KyNkZWZpbmUgRE1FTV9NQl9DRERfV1dfMF8xX09GRlNFVCAgICAgICAgICAgICAgMHhBODAzQw0K PiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfUldfMV8xX09GRlNFVCAgICAgICAgICAgICAgMHhB ODA0Ng0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfUldfMV8wX09GRlNFVCAgICAgICAgICAg ICAgMHhBODA0OA0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfUldfMF8xX09GRlNFVCAgICAg ICAgICAgICAgMHhBODA0QQ0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfUldfMF8wX09GRlNF VCAgICAgICAgICAgICAgMHhBODA0Qw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9D RERfQ0hBX1JSXzFfMF9PRkZTRVQgICAgICAgICAgMHhBODAyNg0KPiA+ID4gKyNkZWZpbmUgRE1F TV9NQl9DRERfQ0hBX1JSXzBfMV9PRkZTRVQgICAgICAgICAgMHhBODAyNg0KPiA+ID4gKyNkZWZp bmUgRE1FTV9NQl9DRERfQ0hCX1JSXzFfMF9PRkZTRVQgICAgICAgICAgMHhBODA1OA0KPiA+ID4g KyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1JSXzBfMV9PRkZTRVQgICAgICAgICAgMHhBODA1QQ0K PiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hBX1dXXzFfMF9PRkZTRVQgICAgICAgICAgMHhB ODAzMA0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hBX1dXXzBfMV9PRkZTRVQgICAgICAg ICAgMHhBODAzMA0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1dXXzFfMF9PRkZTRVQg ICAgICAgICAgMHhBODA2Mg0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1dXXzBfMV9P RkZTRVQgICAgICAgICAgMHhBODA2NA0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9D RERfQ0hBX1JXXzFfMV9PRkZTRVQgICAgICAgICAgMHhBODAyOA0KPiA+ID4gKyNkZWZpbmUgRE1F TV9NQl9DRERfQ0hBX1JXXzFfMF9PRkZTRVQgICAgICAgICAgMHhBODAyOA0KPiA+ID4gKyNkZWZp bmUgRE1FTV9NQl9DRERfQ0hBX1JXXzBfMV9PRkZTRVQgICAgICAgICAgMHhBODAyQQ0KPiA+ID4g KyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hBX1JXXzBfMF9PRkZTRVQgICAgICAgICAgMHhBODAyQQ0K PiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1JXXzFfMV9PRkZTRVQgICAg ICAgICAgMHhBODA1QQ0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1JXXzFfMF9PRkZT RVQgICAgICAgICAgMHhBODA1Qw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hCX1JXXzBf MV9PRkZTRVQgICAgICAgICAgMHhBODA1Yw0KPiA+ID4gKyNkZWZpbmUgRE1FTV9NQl9DRERfQ0hC X1JXXzBfMF9PRkZTRVQgICAgICAgICAgMHhBODA1RQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUg RERSX1BIWV9TRVEwRElTQUJMRUZMQUcwX09GRlNFVCAgICAgICAgICAgICAgICAweDEyMDAxOA0K PiA+ID4gKyNkZWZpbmUgRERSX1BIWV9TRVEwRElTQUJMRUZMQUcxX09GRlNFVCAgICAgICAgICAg ICAgICAweDEyMDAxQQ0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9TRVEwRElTQUJMRUZMQUcyX09G RlNFVCAgICAgICAgICAgICAgICAweDEyMDAxQw0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9TRVEw RElTQUJMRUZMQUczX09GRlNFVCAgICAgICAgICAgICAgICAweDEyMDAxRQ0KPiA+ID4gKyNkZWZp bmUgRERSX1BIWV9TRVEwRElTQUJMRUZMQUc0X09GRlNFVCAgICAgICAgICAgICAgICAweDEyMDAy MA0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9TRVEwRElTQUJMRUZMQUc1X09GRlNFVCAgICAgICAg ICAgICAgICAweDEyMDAyMg0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9TRVEwRElTQUJMRUZMQUc2 X09GRlNFVCAgICAgICAgICAgICAgICAweDEyMDAyNA0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9T RVEwRElTQUJMRUZMQUc3X09GRlNFVCAgICAgICAgICAgICAgICAweDEyMDAyNg0KPiA+ID4gKw0K PiA+ID4gKyNkZWZpbmUgRERSX1BIWV9VQ0NMS0hDTEtFTkFCTEVTX09GRlNFVCAgICAgICAgICAg ICAgICAweDE4MDEwMA0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9VQ0NMS0hDTEtFTkFCTEVTX1VD Q0xLRU4gICAgICAgQklUKDApDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX1VDQ0xLSENMS0VOQUJM RVNfSENMS0VOICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUg RERSX1BIWV9VQ1RXUklURVBST1RfT0ZGU0VUICAgICAgICAgICAgMHgxODAwNjYNCj4gPiA+ICsj ZGVmaW5lIEREUl9QSFlfVUNUV1JJVEVQUk9UICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9BUEJPTkxZMF9PRkZTRVQgICAgICAgICAgICAg ICAgICAgICAgICAweDFBMDAwMA0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9NSUNST0NPTlRNVVhT RUwgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5l IEREUl9QSFlfVUNUU0hBRE9XUkVHU19PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgxQTAwMDgN Cj4gPiA+ICsjZGVmaW5lIEREUl9QSFlfVUNUU0hBRE9XUkVHU19VQ1RXUklURVBST1RFU0hBRE9X DQo+IEJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9EQ1RXUklURVBST1Rf T0ZGU0VUICAgICAgICAgICAgMHgxQTAwNjINCj4gPiA+ICsjZGVmaW5lIEREUl9QSFlfRENUV1JJ VEVQUk9UICAgICAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUg RERSX1BIWV9VQ1RXUklURU9OTFlTSEFET1dfT0ZGU0VUICAgICAgMHgxQTAwNjQNCj4gPiA+ICsj ZGVmaW5lIEREUl9QSFlfVUNUREFUV1JJVEVPTkxZU0hBRE9XX09GRlNFVCAgIDB4MUEwMDY4DQo+ ID4gPiArDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX01JQ1JPUkVTRVRfT0ZGU0VUICAgICAgICAg ICAgICAweDFBMDEzMg0KPiA+ID4gKyNkZWZpbmUgRERSX1BIWV9NSUNST1JFU0VUX1NUQUxMICAg ICAgICAgICAgICAgQklUKDApDQo+ID4gPiArI2RlZmluZSBERFJfUEhZX01JQ1JPUkVTRVRfUkVT RVQgICAgICAgICAgICAgICBCSVQoMykNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEREUl9QSFlf VFhPRFREUlZTVFJFTl9CMF9QMSAgICAgICAgICAgIDB4MjIwMDlBDQo+ID4gPiArDQo+ID4gPiAr LyogRm9yIGZpcm13YXJlIHRyYWluaW5nICovDQo+ID4gPiArI2RlZmluZSBIV19EQkdfVFJBQ0Vf Q09OVFJPTF9PRkZTRVQgICAgMHgxOA0KPiA+ID4gKyNkZWZpbmUgRldfVFJBSU5JTkdfQ09NUExF VEVEX1NUQVQgICAgIDB4MDcNCj4gPiA+ICsjZGVmaW5lIEZXX1RSQUlOSU5HX0ZBSUxFRF9TVEFU ICAgICAgICAgICAgICAgIDB4RkYNCj4gPiA+ICsjZGVmaW5lIEZXX0NPTVBMRVRJT05fTVNHX09O TFlfTU9ERSAgICAweEZGDQo+ID4gPiArI2RlZmluZSBGV19TVFJFQU1JTkdfTVNHX0lEICAgICAg ICAgICAgMHgwOA0KPiA+ID4gKyNkZWZpbmUgR0VUX0xPV0hXX0RBVEEoeCkgICAgICAgICAgICAg ICgoeCkgJiAweEZGRkYpDQo+ID4gPiArI2RlZmluZSBHRVRfTE9XQl9EQVRBKHgpICAgICAgICAg ICAgICAgKCh4KSAmIDB4RkYpDQo+ID4gPiArI2RlZmluZSBHRVRfSElHSEJfREFUQSh4KSAgICAg ICAgICAgICAgKCgoeCkgJiAweEZGMDApID4+IDgpDQo+ID4gPiArDQo+ID4gPiArLyogT3BlcmF0 aW5nIG1vZGUgKi8NCj4gPiA+ICsjZGVmaW5lIElOSVRfT1BNICAgICAgICAgICAgICAgICAgICAg ICAweDAwMA0KPiA+ID4gKyNkZWZpbmUgTk9STUFMX09QTSAgICAgICAgICAgICAgICAgICAgIDB4 MDAxDQo+ID4gPiArI2RlZmluZSBQV1JfRDBXTl9PUE0gICAgICAgICAgICAgICAgICAgMHgwMTAN Cj4gPiA+ICsjZGVmaW5lIFNFTEZfU0VMRlJFRl9PUE0gICAgICAgICAgICAgICAweDAxMQ0KPiA+ ID4gKyNkZWZpbmUgRERSNF9ERUVQX1BXUl9ET1dOX09QTSAgICAgICAgIDB4MTAwDQo+ID4gVXNl IHByZWZpeCBPUE1feHh4DQo+IA0KPiBPa2F5Lg0KPiANCj4gPg0KPiA+ID4gKw0KPiA+ID4gKy8q IFJlZnJlc2ggbW9kZSAqLw0KPiA+ID4gKyNkZWZpbmUgRklYRURfMVggICAgICAgICAgICAgICAw DQo+ID4gPiArI2RlZmluZSBGSVhFRF8yWCAgICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ID4gKyNk ZWZpbmUgRklYRURfNFggICAgICAgICAgICAgICBCSVQoNCkNCj4gPiA+ICsNCj4gPiA+ICsvKiBB ZGRyZXNzIG9mIG1vZGUgcmVnaXN0ZXIgKi8NCj4gPiA+ICsjZGVmaW5lIE1SMCAgICAweDAwMDAN Cj4gPiA+ICsjZGVmaW5lIE1SMSAgICAweDAwMDENCj4gPiA+ICsjZGVmaW5lIE1SMiAgICAweDAw MTANCj4gPiA+ICsjZGVmaW5lIE1SMyAgICAweDAwMTENCj4gPiA+ICsjZGVmaW5lIE1SNCAgICAw eDAxMDANCj4gPiA+ICsjZGVmaW5lIE1SNSAgICAweDAxMDENCj4gPiA+ICsjZGVmaW5lIE1SNiAg ICAweDAxMTANCj4gPiA+ICsjZGVmaW5lIE1SNyAgICAweDAxMTENCj4gPiA+ICsNCj4gPiA+ICsv KiBNUiByYW5rICovDQo+ID4gPiArI2RlZmluZSBSQU5LMCAgICAgICAgICAweDENCj4gPiA+ICsj ZGVmaW5lIFJBTksxICAgICAgICAgIDB4Mg0KPiA+ID4gKyNkZWZpbmUgQUxMX1JBTksgICAgICAg MHgzDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBNUjVfQklUNCAgICAgICBCSVQoNCkNCj4gPiA+ ICsNCj4gPiA+ICsvKiBWYWx1ZSBmb3IgZWNjX3JlZ2lvbl9tYXAgKi8NCj4gPiA+ICsjZGVmaW5l IEFMTF9QUk9URUNURUQgIDB4N0YNCj4gPiA+ICsNCj4gPiA+ICsvKiBSZWdpb24gc2l6ZSBmb3Ig RUNDQ0ZHMC5lY2NfcmVnaW9uX21hcCAqLw0KPiA+ID4gK2VudW0gcmVnaW9uX3NpemUgew0KPiA+ ID4gKyAgICAgICBPTkVfRUlHSFQsDQo+ID4gPiArICAgICAgIE9ORV9TSVhURUVOVEgsDQo+ID4g PiArICAgICAgIE9ORV9USElSVFlfU0VDT05ELA0KPiA+ID4gKyAgICAgICBPTkVfU0lYVFlfRk9V UlRIDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtlbnVtIGRkcl90eXBlIHsNCj4gPiA+ICsg ICAgICAgRERSVFlQRV9MUEREUjRfMCwNCj4gPiA+ICsgICAgICAgRERSVFlQRV9MUEREUjRfMSwN Cj4gPiA+ICsgICAgICAgRERSVFlQRV9ERFI0LA0KPiA+ID4gKyAgICAgICBERFJUWVBFX1VOS05P V04NCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gKy8qIFJlc2V0IHR5cGUgKi8NCj4gPiA+ICtl bnVtIHJlc2V0X3R5cGUgew0KPiA+ID4gKyAgICAgICBQT1JfUkVTRVQsDQo+ID4gPiArICAgICAg IFdBUk1fUkVTRVQsDQo+ID4gPiArICAgICAgIENPTERfUkVTRVQNCj4gPiA+ICt9Ow0KPiA+ID4g Kw0KPiA+ID4gKy8qIEREUiBoYW5kb2ZmIHN0cnVjdHVyZSAqLw0KPiA+ID4gK3N0cnVjdCBkZHJf aGFuZG9mZiB7DQo+ID4gPiArICAgICAgIC8qIE1lbW9yeSByZXNldCBtYW5hZ2VyIGJhc2UgKi8N Cj4gPiA+ICsgICAgICAgcGh5c19hZGRyX3QgbWVtX3Jlc2V0X2Jhc2U7DQo+ID4gPiArDQo+ID4g PiArICAgICAgIC8qIEZpcnN0IGNvbnRyb2xsZXIgYXR0cmlidXRlcyAqLw0KPiA+ID4gKyAgICAg ICBwaHlzX2FkZHJfdCBjbnRscl9oYW5kb2ZmX2Jhc2U7DQo+ID4gPiArICAgICAgIHBoeXNfYWRk cl90IGNudGxyX2Jhc2U7DQo+ID4gPiArICAgICAgIHNpemVfdCBjbnRscl90b3RhbF9sZW5ndGg7 DQo+ID4gPiArICAgICAgIGVudW0gZGRyX3R5cGUgY250bHJfdDsNCj4gPiA+ICsgICAgICAgc2l6 ZV90IGNudGxyX2hhbmRvZmZfbGVuZ3RoOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBTZWNv bmQgY29udHJvbGxlciBhdHRyaWJ1dGVzKi8NCj4gPiA+ICsgICAgICAgcGh5c19hZGRyX3QgY250 bHIyX2hhbmRvZmZfYmFzZTsNCj4gPiA+ICsgICAgICAgcGh5c19hZGRyX3QgY250bHIyX2Jhc2U7 DQo+ID4gPiArICAgICAgIHNpemVfdCBjbnRscjJfdG90YWxfbGVuZ3RoOw0KPiA+ID4gKyAgICAg ICBlbnVtIGRkcl90eXBlIGNudGxyMl90Ow0KPiA+ID4gKyAgICAgICBzaXplX3QgY250bHIyX2hh bmRvZmZfbGVuZ3RoOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBQSFkgYXR0cmlidXRlcyAq Lw0KPiA+ID4gKyAgICAgICBwaHlzX2FkZHJfdCBwaHlfaGFuZG9mZl9iYXNlOw0KPiA+ID4gKyAg ICAgICBwaHlzX2FkZHJfdCBwaHlfYmFzZTsNCj4gPiA+ICsgICAgICAgc2l6ZV90IHBoeV90b3Rh bF9sZW5ndGg7DQo+ID4gPiArICAgICAgIHNpemVfdCBwaHlfaGFuZG9mZl9sZW5ndGg7DQo+ID4g PiArDQo+ID4gPiArICAgICAgIC8qIFBIWSBlbmdpbmUgYXR0cmlidXRlcyAqLw0KPiA+ID4gKyAg ICAgICBwaHlzX2FkZHJfdCBwaHlfZW5naW5lX2hhbmRvZmZfYmFzZTsNCj4gPiA+ICsgICAgICAg c2l6ZV90IHBoeV9lbmdpbmVfdG90YWxfbGVuZ3RoOw0KPiA+ID4gKyAgICAgICBzaXplX3QgcGh5 X2VuZ2luZV9oYW5kb2ZmX2xlbmd0aDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogQ2FsaWJy YXRpb24gYXR0cmlidXRlcyAqLw0KPiA+ID4gKyAgICAgICBwaHlzX2FkZHJfdCB0cmFpbl9pbWVt X2Jhc2U7DQo+ID4gPiArICAgICAgIHBoeXNfYWRkcl90IHRyYWluX2RtZW1fYmFzZTsNCj4gPiA+ ICsgICAgICAgc2l6ZV90IHRyYWluX2ltZW1fbGVuZ3RoOw0KPiA+ID4gKyAgICAgICBzaXplX3Qg dHJhaW5fZG1lbV9sZW5ndGg7DQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICsvKiBNZXNzYWdl IG1vZGUgKi8NCj4gPiA+ICtlbnVtIG1lc3NhZ2VfbW9kZSB7DQo+ID4gPiArICAgICAgIE1BSk9S X01FU1NBR0UsDQo+ID4gPiArICAgICAgIFNUUkVBTUlOR19NRVNTQUdFDQo+ID4gPiArfTsNCj4g PiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGNscl9jYV9wYXJpdHlfZXJyb3Jfc3RhdHVzKHBoeXNf YWRkcl90IHVtY3RsMl9iYXNlKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgZGVidWcoIiVzOiBDbGVhciBDL0EgcGFyaXR5IGVycm9yIHN0 YXR1cyBpbiBNUjVbNF1cbiIsIF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyog U2V0IG1vZGUgcmVnaXN0ZXIgTVJTICovDQo+ID4gPiArICAgICAgIGNscmJpdHNfbGUzMih1bWN0 bDJfYmFzZSArIEREUjRfTVJDVFJMMF9PRkZTRVQsDQo+ID4gRERSNF9NUkNUUkwwX01QUl9FTik7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIFNldCBtb2RlIHJlZ2lzdGVyIHRvIHdyaXRlIG9w ZXJhdGlvbiAqLw0KPiA+ID4gKyAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0 X01SQ1RSTDBfT0ZGU0VULA0KPiA+IEREUjRfTVJDVFJMMF9NUl9UWVBFKTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgLyogU2V0IHRoZSBhZGRyZXNzIG9mIG1vZGUgcmdpc3RlciB0byAweDEwMShN UjUpICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfTVJD VFJMMF9PRkZTRVQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAoTVI1IDw8IEREUjRfTVJD VFJMMF9NUl9BRERSX1NISUZUKSAmDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFI0X01S Q1RSTDBfTVJfQUREUik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIFNldCBNUiByYW5rIHRv IHJhbmsgMSAqLw0KPiA+ID4gKyAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0 X01SQ1RSTDBfT0ZGU0VULA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKFJBTksxIDw8IERE UjRfTVJDVFJMMF9NUl9SQU5LX1NISUZUKSAmDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBE RFI0X01SQ1RSTDBfTVJfUkFOSyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIENsZWFyIEMv QSBwYXJpdHkgZXJyb3Igc3RhdHVzIGluIE1SNVs0XSAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRz X2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X01SQ1RSTDFfT0ZGU0VULCBNUjVfQklUNCk7DQo+ID4g PiArDQo+ID4gPiArICAgICAgIC8qIFRyaWdnZXIgbW9kZSByZWdpc3RlciByZWFkIG9yIHdyaXRl IG9wZXJhdGlvbiAqLw0KPiA+ID4gKyAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBE RFI0X01SQ1RSTDBfT0ZGU0VULA0KPiA+IEREUjRfTVJDVFJMMF9NUl9XUik7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgIC8qIFdhaXQgZm9yIHJldHJ5IGRvbmUgKi8NCj4gPiA+ICsgICAgICAgcmV0 ID0gd2FpdF9mb3JfYml0X2xlMzIoKGNvbnN0IHZvaWQgKikodW1jdGwyX2Jhc2UgKw0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X01SU1RBVF9PRkZTRVQpLCBERFI0 X01SU1RBVF9NUl9XUl9CVVNZLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmYWxzZSwgVElNRU9VVF8yMDBNUywgZmFsc2UpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KSB7 DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgbm8gb3V0c3Rh bmRpbmcgTVIgdHJhbnNhY3Rpb25cbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgZGRyX3JldHJ5X3NvZnR3YXJlX3Nl cXVlbmNlKHBoeXNfYWRkcl90IHVtY3RsMl9iYXNlKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAg dTMyIHZhbHVlOw0KPiA+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICAvKiBDaGVjayBzb2Z0d2FyZSBjYW4gcGVyZm9ybSBNUlMvTVBSL1BEQT8gKi8NCj4gPiA+ICsg ICAgICAgdmFsdWUgPSByZWFkbCh1bWN0bDJfYmFzZSArIEREUjRfQ1JDUEFSU1RBVF9PRkZTRVQp ICYNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBERFI0X0NSQ1BBUlNUQVRfREZJX0FMRVJU X0VSUl9OT19TVzsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHZhbHVlKSB7DQo+ID4gPiAr ICAgICAgICAgICAgICAgLyogQ2xlYXIgaW50ZXJydXB0IGJpdCBmb3IgREZJIGFsZXJ0IGVycm9y ICovDQo+ID4gPiArICAgICAgICAgICAgICAgc2V0Yml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERS NF9DUkNQQVJDVEwwX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg RERSNF9DUkNQQVJDVEwwX0RGSV9BTEVSVF9FUlJfSU5JVF9DTFIpOw0KPiA+ID4gKyAgICAgICB9 DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGRlYnVnKCIlczogU29mdHdhcmUgY2FuIHBlcmZvcm0g TVJTL01QUi9QREFcbiIsIF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0g d2FpdF9mb3JfYml0X2xlMzIoKGNvbnN0IHZvaWQgKikodW1jdGwyX2Jhc2UgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X01SU1RBVF9PRkZTRVQpLA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X01SU1RBVF9NUl9XUl9CVVNZLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgVElNRU9VVF8yMDBN UywgZmFsc2UpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAg ICAgZGVidWcoIiVzOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIiwgX19mdW5jX18pOw0KPiA+ ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgbm8gb3V0c3RhbmRpbmcgTVIgdHJhbnNhY3Rpb25c biIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0gY2xyX2NhX3Bhcml0eV9lcnJvcl9zdGF0dXMo dW1jdGwyX2Jhc2UpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGlmICghdmFsdWUpIHsNCj4g PiA+ICsgICAgICAgICAgICAgICAvKiBDbGVhciBpbnRlcnJ1cHQgYml0IGZvciBERkkgYWxlcnQg ZXJyb3IgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2Ug KyBERFI0X0NSQ1BBUkNUTDBfT0ZGU0VULA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERFI0X0NSQ1BBUkNUTDBfREZJX0FMRVJUX0VSUl9JTklUX0NMUik7DQo+ID4gPiArICAg ICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBpbnQgZW5zdXJlX3JldHJ5X3Byb2NlZHVyZV9jb21wbGV0ZShwaHlz X2FkZHJfdCB1bWN0bDJfYmFzZSkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIHUzMiB2YWx1ZTsN Cj4gPiA+ICsgICAgICAgdTMyIHN0YXJ0ID0gZ2V0X3RpbWVyKDApOw0KPiA+ID4gKyAgICAgICBp bnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBDaGVjayBwYXJpdHkvY3JjL2Vycm9y IHdpbmRvdyBpcyBlbXB0aWVkID8gKi8NCj4gPiA+ICsgICAgICAgdmFsdWUgPSByZWFkbCh1bWN0 bDJfYmFzZSArIEREUjRfQ1JDUEFSU1RBVF9PRkZTRVQpICYNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICBERFI0X0NSQ1BBUlNUQVRfQ01EX0lOX0VSUl9XSU5ET1c7DQo+ID4gQ2FuIHNpbXBs aWZ5IHRoZSBjb2RlIHdpdGggZG8uLi53aGlsZSBsb29wLg0KPiANCj4gT2theS4NCg0KSSB0aGlu ayB0aGlzIGlzIGEgcmlnaHQgaW1wbGVtZW50YXRpb24sIHRoZSB3aGlsZSBsb29wIHdvdWxkIGJl IHNraXBwZWQgaWYgdmFsdWUgaXMgemVybywgdGhhdCdzIGFsc28gbWVhbnMgbm8gZXJyb3IuDQpI ZW5jZSwgSSdtIG5vdCBhZ3JlZSB0byB1c2UgZG8uLi53aGlsZSBmb3IgdGhpcyBjYXNlLg0KDQo+ IA0KPiA+DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIFBvbGxpbmcgdW50aWwgcGFyaXR5L2Ny Yy9lcnJvciB3aW5kb3cgaXMgZW1wdGllZCAqLw0KPiA+ID4gKyAgICAgICB3aGlsZSAodmFsdWUp IHsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IFRJTUVPVVRf MjAwTVMpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIlczogVGltZW91 dCB3aGlsZSB3YWl0aW5nIGZvciIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiIHBhcml0 eS9jcmMvZXJyb3Igd2luZG93IGVtcHR5XG4iKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtRVRJTUVET1VUOw0KPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgICAgICAgICAvKiBDaGVjayBzb2Z0d2FyZSBpbnRlcnZlbnRpb24gaXMg ZW5hYmxlZD8gKi8NCj4gPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRsKHVtY3RsMl9i YXNlICsgRERSNF9DUkNQQVJDVEwxX09GRlNFVCkgJg0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRERSNF9DUkNQQVJDVEwxX0FMRVJUX1dBSVRfRk9SX1NXOw0KPiA+ID4gKyAg ICAgICAgICAgICAgIGlmICh2YWx1ZSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoIiVzOiBTb2Z0d2FyZSBpbnRlcnZlbnRpb24gaXMgZW5hYmxlZFxuIiwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGRmaSBhbGVydCBlcnJvciBpbnRlcnJ1cHQg aXMgc2V0PyAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZWFkbCh1 bWN0bDJfYmFzZSArIEREUjRfQ1JDUEFSU1RBVF9PRkZTRVQpICYNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRERSNF9DUkNQQVJTVEFUX0RGSV9BTEVSVF9FUlJf SU5UOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7 DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRkcl9yZXRyeV9z b2Z0d2FyZV9zZXF1ZW5jZSh1bWN0bDJfYmFzZSk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKCIlczogREZJIGFsZXJ0IGVycm9yIGludGVycnVwdCAiLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJpcyBzZXRcbiIpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KQ0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAvKg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICogQ2hlY2sg ZmF0YWwgcGFyaXR5IGVycm9yIGludGVycnVwdCBpcyBzZXQ/DQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVh ZGwodW1jdGwyX2Jhc2UgKyBERFI0X0NSQ1BBUlNUQVRfT0ZGU0VUKSAmDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfQ1JDUEFSU1RBVF9ERklfQUxFUlRf RVJSX0ZBVExfSU5UOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7 DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IEZhdGFs IHBhcml0eSBlcnJvciAgIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJpbnRlcnJ1cHQgaXMgc2V0LCBIYW5nIGl0ISFcbiIpOw0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoYW5nKCk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICB9DQo+ID4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg ICAgICAgIHZhbHVlID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X0NSQ1BBUlNUQVRfT0ZGU0VU KSAmDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X0NSQ1BBUlNUQVRf Q01EX0lOX0VSUl9XSU5ET1c7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgdWRlbGF5 KDEpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIFdBVENIRE9HX1JFU0VUKCk7DQo+ID4gPiArICAg ICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBpbnQgZW5hYmxlX3F1YXNpX2R5bmFtaWNfcmVnX2dycDMocGh5c19h ZGRyX3QgdW1jdGwyX2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gZGRyX3R5cGUgdW1jdGwyX3R5cGUpDQo+ID4gPiArew0KPiA+ID4gKyAg ICAgICB1MzIgaSwgdmFsdWUsIGJhY2t1cDsNCj4gPiA+ICsgICAgICAgaW50IHJldCA9IDA7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgIC8qIERpc2FibGUgaW5wdXQgdHJhZmZpYyBwZXIgcG9ydCAq Lw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1BDVFJMMF9P RkZTRVQsDQo+ID4gRERSNF9QQ1RSTDBfUE9SVF9FTik7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IC8qIFBvbGxpbmcgQVhJIHBvcnQgdW50aWwgaWRsZSAqLw0KPiA+ID4gKyAgICAgICByZXQgPSB3 YWl0X2Zvcl9iaXRfbGUzMigoY29uc3Qgdm9pZCAqKSh1bWN0bDJfYmFzZSArDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfUFNUQVRfT0ZGU0VUKSwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERSNF9QU1RBVF9XUl9QT1JUX0JVU1lfMCB8 DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfUFNUQVRfUkRfUE9S VF9CVVNZXzAsIGZhbHNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU SU1FT1VUXzIwME1TLCBmYWxzZSk7DQo+ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsg ICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLCBfX2Z1 bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiBjb250cm9sbGVyIGlkbGVcbiIp Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgLyogQmFja3VwIHVzZXIgc2V0dGluZyAqLw0KPiA+ID4gKyAg ICAgICBiYWNrdXAgPSByZWFkbCh1bWN0bDJfYmFzZSArIEREUjRfREJHMV9PRkZTRVQpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICAvKiBEaXNhYmxlIGlucHV0IHRyYWZmaWMgdG8gdGhlIGNvbnRy b2xsZXIgKi8NCj4gPiA+ICsgICAgICAgc2V0Yml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9E QkcxX09GRlNFVCwNCj4gRERSNF9EQkcxX0RJU19ISUYpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICAvKg0KPiA+ID4gKyAgICAgICAgKiBFbnN1cmUgQ0FNL2RhdGEgcGlwZWxpbmVzIGFyZSBlbXB0 eS4NCj4gPiA+ICsgICAgICAgICogUG9sbCB1bnRpbCBDQU0vZGF0YSBwaXBlbGluZXMgYXJlIHNl dCBhdCBsZWFzdCB0d2ljZSwNCj4gPiA+ICsgICAgICAgICogdGltZW91dCBhdCAyMDBtcw0KPiA+ ID4gKyAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0K PiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IHdhaXRfZm9yX2JpdF9sZTMyKChjb25zdCB2b2lk ICopKHVtY3RsMl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBERFI0X0RCR0NBTV9PRkZTRVQpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEREUjRfREJHQ0FNX1dSX0RBVEFfUElQRUxJTkVfRU1QVFkgfA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfREJHQ0FN X1JEX0RBVEFfUElQRUxJTkVfRU1QVFkgfA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEREUjRfREJHQ0FNX0RCR19XUl9RX0VNUFRZIHwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X0RCR0NBTV9EQkdfUkRfUV9F TVBUWSwgdHJ1ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUSU1FT1VUXzIwME1TLCBmYWxzZSk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkg ew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBsb29wKCV1KTogVGlt ZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgaSArIDEpOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoIiBDQU0vZGF0YSBwaXBlbGluZXMgYXJlIGVtcHR5XG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAodW1jdGwyX3R5cGUg PT0gRERSVFlQRV9ERFI0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgLyogQ2hlY2sgRERSNCBy ZXRyeSBpcyBlbmFibGVkID8gKi8NCj4gPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRs KHVtY3RsMl9iYXNlICsgRERSNF9DUkNQQVJDVEwxX09GRlNFVCkgJg0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRERSNF9DUkNQQVJDVEwxX0NSQ19QQVJJVFlfUkVUUllfRU5B QkxFOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgew0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBERFI0IHJldHJ5IGlzIGVuYWJsZWRc biIsIF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dCA9IGVuc3VyZV9yZXRyeV9wcm9jZWR1cmVfY29tcGxldGUodW1jdGwyX2Jhc2UpOw0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLA0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7DQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgcmV0cnkgcHJvY2Vk dXJlIGNvbXBsZXRlXG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXQ7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4g PiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg ICAgIGRlYnVnKCIlczogUXVhc2ktZHluYW1pYyBncm91cCAzIHJlZ2lzdGVycyBhcmUgZW5hYmxl ZFxuIiwNCj4gX19mdW5jX18pOw0KPiA+ID4gKw0KPiA+ID4gK291dDoNCj4gPiA+ICsgICAgICAg LyogUmVzdG9yZSB1c2VyIHNldHRpbmcgKi8NCj4gPiA+ICsgICAgICAgd3JpdGVsKGJhY2t1cCwg dW1jdGwyX2Jhc2UgKyBERFI0X0RCRzFfT0ZGU0VUKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg cmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGVudW0gZGRyX3R5 cGUgZ2V0X2Rkcl90eXBlKHBoeXNfYWRkcl90IGRkcl90eXBlX2xvY2F0aW9uKQ0KPiA+ID4gK3sN Cj4gPiA+ICsgICAgICAgdTMyIGRkcl90eXBlX21hZ2ljID0gcmVhZGwoZGRyX3R5cGVfbG9jYXRp b24pOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAoZGRyX3R5cGVfbWFnaWMgPT0gU09DNjRf SEFORE9GRl9ERFJfVU1DVEwyX0REUjRfVFlQRSkNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1 cm4gRERSVFlQRV9ERFI0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAoZGRyX3R5cGVfbWFn aWMgPT0NCj4gU09DNjRfSEFORE9GRl9ERFJfVU1DVEwyX0xQRERSNF8wX1RZUEUpDQo+ID4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIEREUlRZUEVfTFBERFI0XzA7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIGlmIChkZHJfdHlwZV9tYWdpYyA9PQ0KPiBTT0M2NF9IQU5ET0ZGX0REUl9VTUNUTDJf TFBERFI0XzFfVFlQRSkNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gRERSVFlQRV9MUERE UjRfMTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIEREUlRZUEVfVU5LTk9XTjsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQgdXNlX2xwZGRyNF9pbnRlcmxlYXZp bmcoYm9vbCBzZXQpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICBpZiAoc2V0KSB7DQo+ID4gPiAr ICAgICAgICAgICAgICAgcHJpbnRmKCJTdGFydGluZyBMUEREUjQgaW50ZXJsZWF2aW5nIGNvbmZp Z3VyYXRpb24gLi4uXG4iKTsNCj4gPiA+ICsNCj4gPiBzZXRiaXRzX2xlMzIoRlBHQTJTRFJBTV9N R1JfTUFJTl9TSURFQkFORE1HUl9GTEFHT1VUU0VUMCwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQklUKDUpKTsNCj4gPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAg ICAgICAgICAgICBwcmludGYoIlN0YXJ0aW5nIExQRERSNCBub24taW50ZXJsZWF2aW5nIGNvbmZp Z3VyYXRpb24gLi4uXG4iKTsNCj4gPiA+ICsNCj4gPiBjbHJiaXRzX2xlMzIoRlBHQTJTRFJBTV9N R1JfTUFJTl9TSURFQkFORE1HUl9GTEFHT1VUU0VUMCwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQklUKDUpKTsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgdm9pZCB1c2VfZGRyNChlbnVtIGRkcl90eXBlIHR5cGUpDQo+ID4gPiAr ew0KPiA+ID4gKyAgICAgICBpZiAodHlwZSA9PSBERFJUWVBFX0REUjQpIHsNCj4gPiA+ICsgICAg ICAgICAgICAgICBwcmludGYoIlN0YXJ0aW5nIEREUjQgY29uZmlndXJhdGlvbiAuLi5cbiIpOw0K PiA+ID4gKyAgICAgICAgICAgICAgIHNldGJpdHNfbGUzMihzb2NmcGdhX2dldF9zeXNtZ3JfYWRk cigpICsNCj4gPiBTWVNNR1JfU09DNjRfRERSX01PREUsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNZU01HUl9TT0M2NF9ERFJfTU9ERV9NU0spOw0KPiA+ID4gKyAgICAgICB9 IGVsc2UgaWYgKHR5cGUgPT0gRERSVFlQRV9MUEREUjRfMCkgIHsNCj4gPiA+ICsgICAgICAgICAg ICAgICBwcmludGYoIlN0YXJ0aW5nIExQRERSNCBjb25maWd1cmF0aW9uIC4uLlxuIik7DQo+ID4g PiArICAgICAgICAgICAgICAgY2xyYml0c19sZTMyKHNvY2ZwZ2FfZ2V0X3N5c21ncl9hZGRyKCkg Kw0KPiA+IFNZU01HUl9TT0M2NF9ERFJfTU9ERSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU1lTTUdSX1NPQzY0X0REUl9NT0RFX01TSyk7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgICAgICAgICAgdXNlX2xwZGRyNF9pbnRlcmxlYXZpbmcoZmFsc2UpOw0KPiA+ID4gKyAgICAg ICB9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgc2NydWJiZXJfZGRyX2Nv bmZpZyhwaHlzX2FkZHJfdCB1bWN0bDJfYmFzZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnVtIGRkcl90eXBlIHVtY3RsMl90eXBlKQ0KPiA+ID4gK3sNCj4gPiA+ICsg ICAgICAgdTMyIGJhY2t1cFs5XTsNCj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgLyogUmVzZXQgdG8gZGVmYXVsdCB2YWx1ZSwgcHJldmVudCBzY3J1YmJlciBz dG9wIGR1ZSB0byBsb3dlciBwb3dlcg0KPiAqLw0KPiA+ID4gKyAgICAgICB3cml0ZWwoMCwgdW1j dGwyX2Jhc2UgKyBERFI0X1BXUkNUTF9PRkZTRVQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAv KiBCYWNrdXAgdXNlciBzZXR0aW5ncyAqLw0KPiA+ID4gKyAgICAgICBiYWNrdXBbMF0gPSByZWFk bCh1bWN0bDJfYmFzZSArIEREUjRfU0JSQ1RMX09GRlNFVCk7DQo+ID4gPiArICAgICAgIGJhY2t1 cFsxXSA9IHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9TQlJXREFUQTBfT0ZGU0VUKTsNCj4gPiA+ ICsgICAgICAgYmFja3VwWzJdID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X1NCUlNUQVJUMF9P RkZTRVQpOw0KPiA+ID4gKyAgICAgICBpZiAodW1jdGwyX3R5cGUgPT0gRERSVFlQRV9ERFI0KSB7 DQo+ID4gPiArICAgICAgICAgICAgICAgYmFja3VwWzNdID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBE RFI0X1NCUldEQVRBMV9PRkZTRVQpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGJhY2t1cFs0XSA9 IHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9TQlJTVEFSVDFfT0ZGU0VUKTsNCj4gPiA+ICsgICAg ICAgfQ0KPiA+ID4gKyAgICAgICBiYWNrdXBbNV0gPSByZWFkbCh1bWN0bDJfYmFzZSArIEREUjRf U0JSUkFOR0UwX09GRlNFVCk7DQo+ID4gPiArICAgICAgIGJhY2t1cFs2XSA9IHJlYWRsKHVtY3Rs Ml9iYXNlICsgRERSNF9TQlJSQU5HRTFfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgYmFja3VwWzdd ID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X0VDQ0NGRzBfT0ZGU0VUKTsNCj4gPiA+ICsgICAg ICAgYmFja3VwWzhdID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X0VDQ0NGRzFfT0ZGU0VUKTsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3RsMl90eXBlICE9IEREUlRZUEVfRERSNCkg ew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIExvY2sgRUNDIHJlZ2lvbiwgZW5zdXJlIHRoaXMg cmVnaW9ucyBpcyBub3QgYmVpbmcgYWNjZXNzZWQgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBz ZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X0VDQ0NGRzFfT0ZGU0VULA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMUEREUjRfRUNDQ0ZHMV9FQ0NfUkVHSU9OU19QQVJJ VFlfTE9DSyk7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsgICAgICAgLyogRGlzYWJsZSBpbnB1 dCB0cmFmZmljIHBlciBwb3J0ICovDQo+ID4gPiArICAgICAgIGNscmJpdHNfbGUzMih1bWN0bDJf YmFzZSArIEREUjRfUENUUkwwX09GRlNFVCwNCj4gPiBERFI0X1BDVFJMMF9QT1JUX0VOKTsNCj4g PiA+ICsgICAgICAgLyogRGlzYWJsZXMgc2NydWJiZXIgKi8NCj4gPiA+ICsgICAgICAgY2xyYml0 c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9TQlJDVExfT0ZGU0VULA0KPiA+IEREUjRfU0JSQ1RM X1NDUlVCX0VOKTsNCj4gPiA+ICsgICAgICAgLyogUG9sbGluZyBhbGwgc2NydWIgd3JpdGVzIGRh dGEgaGF2ZSBiZWVuIHNlbnQgKi8NCj4gPiA+ICsgICAgICAgcmV0ID0gd2FpdF9mb3JfYml0X2xl MzIoKGNvbnN0IHZvaWQgKikodW1jdGwyX2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBERFI0X1NCUlNUQVRfT0ZGU0VUKSwgRERSNF9TQlJTVEFUX1NDUlVCX0JV U1ksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBUSU1FT1VU XzUwMDBNUywgZmFsc2UpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAg ICAgICAgICAgZGVidWcoIiVzOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIiwgX19mdW5jX18p Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgc2VuZGluZyBhbGwgc2NydWIgZGF0YVxu Iik7DQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsgICAgICAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBMUEREUjQgc3VwcG9ydHMgaW5saW5lIEVDQyBvbmx5 ICovDQo+ID4gPiArICAgICAgIGlmICh1bWN0bDJfdHlwZSAhPSBERFJUWVBFX0REUjQpIHsNCj4g PiA+ICsgICAgICAgICAgICAgICAvKg0KPiA+ID4gKyAgICAgICAgICAgICAgICAqIFNldHRpbmcg YWxsIHJlZ2lvbnMgZm9yIHByb3RlY3RlZCwgdGhpcyBpcyByZXF1aXJlZCBmb3INCj4gPiA+ICsg ICAgICAgICAgICAgICAgKiBzcnViYmVyIHRvIGluaXQgd2hvbGUgTFBERFI0IGV4cGVjdCBFQ0Mg cmVnaW9uDQo+ID4gPiArICAgICAgICAgICAgICAgICovDQo+ID4gPiArICAgICAgICAgICAgICAg d3JpdGVsKCgoT05FX0VJR0hUIDw8DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIExQRERS NF9FQ0NDRkcwX0VDQ19SRUdJT05fTUFQX0dSQU5VX1NISUZUKSB8DQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgIChBTExfUFJPVEVDVEVEIDw8DQo+ID4gTFBERFI0X0VDQ0NGRzBfRUNDX1JF R0lPTl9NQVBfU0hJRlQpKSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgdW1jdGwyX2Jh c2UgKyBERFI0X0VDQ0NGRzBfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICAvKiBTY3J1Yl9idXJzdCA9IDEsIHNjcnViX21vZGUgPSAxKHBlcmZvcm1zIHdy aXRlcykgKi8NCj4gPiA+ICsgICAgICAgd3JpdGVsKEREUjRfU0JSQ1RMX1NDUlVCX0JVUlNUXzEg fA0KPiBERFI0X1NCUkNUTF9TQ1JVQl9XUklURSwNCj4gPiA+ICsgICAgICAgICAgICAgIHVtY3Rs Ml9iYXNlICsgRERSNF9TQlJDVExfT0ZGU0VUKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyog WmVyb2luZyB3aG9sZSBERFIgKi8NCj4gPiA+ICsgICAgICAgd3JpdGVsKDAsIHVtY3RsMl9iYXNl ICsgRERSNF9TQlJXREFUQTBfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgd3JpdGVsKDAsIHVtY3Rs Ml9iYXNlICsgRERSNF9TQlJTVEFSVDBfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3Rs Ml90eXBlID09IEREUlRZUEVfRERSNCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCgw LCB1bWN0bDJfYmFzZSArIEREUjRfU0JSV0RBVEExX09GRlNFVCk7DQo+ID4gPiArICAgICAgICAg ICAgICAgd3JpdGVsKDAsIHVtY3RsMl9iYXNlICsgRERSNF9TQlJTVEFSVDFfT0ZGU0VUKTsNCj4g PiA+ICsgICAgICAgfQ0KPiA+ID4gKyAgICAgICB3cml0ZWwoMCwgdW1jdGwyX2Jhc2UgKyBERFI0 X1NCUlJBTkdFMF9PRkZTRVQpOw0KPiA+ID4gKyAgICAgICB3cml0ZWwoMCwgdW1jdGwyX2Jhc2Ug KyBERFI0X1NCUlJBTkdFMV9PRkZTRVQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBFbmFi bGVzIHNjcnViYmVyICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSAr IEREUjRfU0JSQ1RMX09GRlNFVCwNCj4gPiBERFI0X1NCUkNUTF9TQ1JVQl9FTik7DQo+ID4gPiAr ICAgICAgIC8qIFBvbGxpbmcgYWxsIHNjcnViIHdyaXRlcyBjb21tYW5kcyBoYXZlIGJlZW4gc2Vu dCAqLw0KPiA+ID4gKyAgICAgICByZXQgPSB3YWl0X2Zvcl9iaXRfbGUzMigoY29uc3Qgdm9pZCAq KSh1bWN0bDJfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERE UjRfU0JSU1RBVF9PRkZTRVQpLCBERFI0X1NCUlNUQVRfU0NSVUJfRE9ORSwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgVElNRU9VVF81MDAwTVMsIGZhbHNlKTsN Cj4gPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIl czogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAg ICAgICAgICBkZWJ1ZygiIHNlbmRpbmcgYWxsIHNjcnViIGNvbW1hbmRzXG4iKTsNCj4gPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+IE5lZWQgcmVzdG9yZSB1c2VyIHNldHRpbmdz IGJlZm9yZSByZXR1cm4/DQo+IA0KPiBObyBuZWVkIGJlY2F1c2UgdGhpcyBpcyBjb25zaWRlcmVk IGVycm9yLCBhbmQgc3lzdGVtIHdvdWxkIGhhbmcgZm9yDQo+IHdhdGNoZG9nIHRvIGtpY2sgaW4u DQo+IA0KPiA+DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogUG9s bGluZyBhbGwgc2NydWIgd3JpdGVzIGRhdGEgaGF2ZSBiZWVuIHNlbnQgKi8NCj4gPiA+ICsgICAg ICAgcmV0ID0gd2FpdF9mb3JfYml0X2xlMzIoKGNvbnN0IHZvaWQgKikodW1jdGwyX2Jhc2UgKw0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X1NCUlNUQVRfT0ZGU0VU KSwgRERSNF9TQlJTVEFUX1NDUlVCX0JVU1ksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZhbHNlLCBUSU1FT1VUXzUwMDBNUywgZmFsc2UpOw0KPiA+ID4gKyAgICAgICBp ZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgcHJpbnRmKCIlczogVGltZW91dCB3aGls ZSB3YWl0aW5nIGZvciIsIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmludGYo IiBzZW5kaW5nIGFsbCBzY3J1YiBkYXRhXG4iKTsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1 cm4gcmV0Ow0KPiA+IFNhbWUgaGVyZS4NCj4gDQo+IE5vIG5lZWQgYmVjYXVzZSB0aGlzIGlzIGNv bnNpZGVyZWQgZXJyb3IsIGFuZCBzeXN0ZW0gd291bGQgaGFuZyBmb3INCj4gd2F0Y2hkb2cgdG8g a2ljayBpbi4NCj4gDQo+ID4NCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICAvKiBEaXNhYmxlcyBzY3J1YmJlciAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMzIodW1j dGwyX2Jhc2UgKyBERFI0X1NCUkNUTF9PRkZTRVQsDQo+ID4gRERSNF9TQlJDVExfU0NSVUJfRU4p Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBSZXN0b3JlIHVzZXIgc2V0dGluZ3MgKi8NCj4g PiA+ICsgICAgICAgd3JpdGVsKGJhY2t1cFswXSwgdW1jdGwyX2Jhc2UgKyBERFI0X1NCUkNUTF9P RkZTRVQpOw0KPiA+ID4gKyAgICAgICB3cml0ZWwoYmFja3VwWzFdLCB1bWN0bDJfYmFzZSArIERE UjRfU0JSV0RBVEEwX09GRlNFVCk7DQo+ID4gPiArICAgICAgIHdyaXRlbChiYWNrdXBbMl0sIHVt Y3RsMl9iYXNlICsgRERSNF9TQlJTVEFSVDBfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgaWYgKHVt Y3RsMl90eXBlID09IEREUlRZUEVfRERSNCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHdyaXRl bChiYWNrdXBbM10sIHVtY3RsMl9iYXNlICsgRERSNF9TQlJXREFUQTFfT0ZGU0VUKTsNCj4gPiA+ ICsgICAgICAgICAgICAgICB3cml0ZWwoYmFja3VwWzRdLCB1bWN0bDJfYmFzZSArIEREUjRfU0JS U1RBUlQxX09GRlNFVCk7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsgICAgICAgd3JpdGVsKGJh Y2t1cFs1XSwgdW1jdGwyX2Jhc2UgKyBERFI0X1NCUlJBTkdFMF9PRkZTRVQpOw0KPiA+ID4gKyAg ICAgICB3cml0ZWwoYmFja3VwWzZdLCB1bWN0bDJfYmFzZSArIEREUjRfU0JSUkFOR0UxX09GRlNF VCk7DQo+ID4gPiArICAgICAgIHdyaXRlbChiYWNrdXBbN10sIHVtY3RsMl9iYXNlICsgRERSNF9F Q0NDRkcwX09GRlNFVCk7DQo+ID4gPiArICAgICAgIHdyaXRlbChiYWNrdXBbOF0sIHVtY3RsMl9i YXNlICsgRERSNF9FQ0NDRkcxX09GRlNFVCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIEVu YWJsZXMgRUNDIHNjcnViIG9uIHNjcnViYmVyICovDQo+ID4gPiArICAgICAgIGlmICghKHJlYWRs KHVtY3RsMl9iYXNlICsgRERSNF9TQlJDVExfT0ZGU0VUKSAmDQo+ID4gPiArICAgICAgICAgICBE RFI0X1NCUkNUTF9TQ1JVQl9XUklURSkpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAvKiBFbmFi bGVzIHNjcnViYmVyICovDQo+ID4gPiArICAgICAgICAgICAgICAgc2V0Yml0c19sZTMyKHVtY3Rs Ml9iYXNlICsgRERSNF9TQlJDVExfT0ZGU0VULA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBERFI0X1NCUkNUTF9TQ1JVQl9FTik7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyBpbnQgaW5pdF91bWN0bDIocGh5c19hZGRyX3QgdW1jdGwyX2hhbmRvZmZfYmFzZSwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgcGh5c19hZGRyX3QgdW1jdGwyX2Jhc2UsIGVudW0gZGRy X3R5cGUgdW1jdGwyX3R5cGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1 bWN0bDJfaGFuZG9mZl9sZW5ndGgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIHUzMiAq dXNlcl9iYWNrdXApDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICB1MzIgaGFuZG9mZl90YWJsZVt1 bWN0bDJfaGFuZG9mZl9sZW5ndGhdOw0KPiA+ID4gKyAgICAgICB1MzIgaTsNCj4gPiA+ICsgICAg ICAgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3RsMl90eXBlID09IERE UlRZUEVfRERSNCkNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmludGYoIkluaXRpYWxpemluZyBE RFI0IGNvbnRyb2xsZXIgLi4uXG4iKTsNCj4gPiA+ICsgICAgICAgZWxzZSBpZiAodW1jdGwyX3R5 cGUgPT0gRERSVFlQRV9MUEREUjRfMCkNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmludGYoIklu aXRpYWxpemluZyBMUEREUjRfMCBjb250cm9sbGVyIC4uLlxuIik7DQo+ID4gPiArICAgICAgIGVs c2UgaWYgKHVtY3RsMl90eXBlID09IEREUlRZUEVfTFBERFI0XzEpDQo+ID4gPiArICAgICAgICAg ICAgICAgcHJpbnRmKCJJbml0aWFsaXppbmcgTFBERFI0XzEgY29udHJvbGxlciAuLi5cbiIpOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBQcmV2ZW50IGNvbnRyb2xsZXIgZnJvbSBpc3N1aW5n IHJlYWQvd3JpdGUgdG8gU0RSQU0gKi8NCj4gPiA+ICsgICAgICAgc2V0Yml0c19sZTMyKHVtY3Rs Ml9iYXNlICsgRERSNF9EQkcxX09GRlNFVCwNCj4gRERSNF9EQkcxX0RJU0RRKTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgLyogUHV0IFNEUkFNIGludG8gc2VsZi1yZWZyZXNoICovDQo+ID4gPiAr ICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfUFdSQ1RMX09GRlNFVCwNCj4g PiBERFI0X1BXUkNUTF9TRUxGUkVGX0VOKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogRW5h YmxlIHF1YXNpLWR5bmFtaWMgcHJvZ3JhbWluZyBvZiB0aGUgY29udHJvbGxlciByZWdpc3RlcnMg Ki8NCj4gPiA+ICsgICAgICAgY2xyYml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9TV0NUTF9P RkZTRVQsDQo+ID4gRERSNF9TV0NUTF9TV19ET05FKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg LyogRW5zdXJlIHRoZSBjb250cm9sbGVyIGlzIGluIGluaXRpYWxpemF0aW9uIG1vZGUgKi8NCj4g PiA+ICsgICAgICAgcmV0ID0gd2FpdF9mb3JfYml0X2xlMzIoKGNvbnN0IHZvaWQgKikodW1jdGwy X2Jhc2UgKw0KPiA+IEREUjRfU1RBVF9PRkZTRVQpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBERFI0X1NUQVRfT1BFUkFUSU5HX01PREUsIGZhbHNlLA0KPiBUSU1FT1VU XzIwME1TLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7DQo+ ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6 IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLCBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAg ICAgICAgZGVidWcoIiBpbml0IG9wZXJhdGluZyBtb2RlXG4iKTsNCj4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAg IGRlYnVnKCIlczogVU1DVEwyIGhhbmRvZmYgYmFzZSBhZGRyZXNzID0gMHglcCB0YWJsZSBsZW5n dGggPQ0KPiA+IDB4JTA4eFxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgX19mdW5jX18sICh1MzIg Kil1bWN0bDJfaGFuZG9mZl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAodTMyKXVtY3RsMl9o YW5kb2ZmX2xlbmd0aCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHNvY2ZwZ2FfaGFuZG9mZl9y ZWFkKCh2b2lkICopdW1jdGwyX2hhbmRvZmZfYmFzZSwNCj4gaGFuZG9mZl90YWJsZSwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW1jdGwyX2hhbmRvZmZfbGVuZ3RoKTsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHVtY3RsMl9oYW5kb2ZmX2xlbmd0 aDsgaSA9IGkgKyAyKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBBYnNvbHV0 ZSBhZGRyOiAweCUwOGxseCBBUEIgb2Zmc2V0OiAweCUwOHgiLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCBoYW5kb2ZmX3RhYmxlW2ldICsgdW1jdGwyX2Jhc2UsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgaGFuZG9mZl90YWJsZVtpXSk7DQo+ID4gPiArICAgICAg ICAgICAgICAgZGVidWcoIiB3ciA9IDB4JTA4eCAiLCBoYW5kb2ZmX3RhYmxlW2kgKyAxXSk7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgd3JpdGVsKGhhbmRvZmZfdGFibGVbaSArIDFd LCAodWludHB0cl90KShoYW5kb2ZmX3RhYmxlW2ldICsNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgdW1jdGwyX2Jhc2UpKTsNCj4gPiA+ICsNCj4gPiBDYW4gaGF2ZSBhIGNvbW1vbiBmdW5j dGlvbiB0byB3cml0ZSB0aGUgaGFuZG9mZiBkYXRhLiBDaGVjayBhbGwgY29kZQ0KPiA+IGFmdGVy IGNhbGwgdG8gc29jZnBnYV9oYW5kb2ZmX3JlYWQoKS4NCj4gDQo+IEkgY2FuIGNyZWF0ZSBhIGNv bW1vbiBmdW5jdGlvbiBmb3IgYm90aCBQSFkgYW5kIFBIWSBpbml0IGVuZ2luZSwgYnV0IG5vdCBm b3INCj4gdGhpcyB1bWN0bCBiZWNhdXNlIGJvdGggZm9yIGxvb3AgcHJvY2VzcyBhcmUgZGlmZmVy ZW50LCBoYW5kb2ZmX3RhYmxlIGZvcg0KPiBib3RoIFBIWSBhbmQgUEhZIGludCBlbmdpbmUgbmVl ZCBzb21lIHByZXByb2Nlc3NpbmcgYmVmb3JlIHdyaXRpbmcgaW50bw0KPiByZXNwZWN0aXZlIHJl Z2lzdGVycyBidXQgdGhpcyBpcyBub3QgcmVxdWlyZWQgaW4gdW1jdGwuDQo+IA0KPiA+DQo+ID4g PiArICAgICAgICAgICAgICAgZGVidWcoInJkID0gMHglMDh4XG4iLCByZWFkbCgodWludHB0cl90 KShoYW5kb2ZmX3RhYmxlW2ldICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICB1bWN0bDJf YmFzZSkpKTsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBCYWNr dXAgdXNlciBzZXR0aW5ncywgcmVzdG9yZSBhZnRlciBERFIgdXAgcnVubmluZyAqLw0KPiA+ID4g KyAgICAgICAqdXNlcl9iYWNrdXAgPSByZWFkbCh1bWN0bDJfYmFzZSArIEREUjRfUFdSQ1RMX09G RlNFVCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIERpc2FibGUgc2VsZiByZXNmcmVzaCAq Lw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1BXUkNUTF9P RkZTRVQsDQo+ID4gRERSNF9QV1JDVExfU0VMRlJFRl9FTik7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgIGlmICh1bWN0bDJfdHlwZSA9PSBERFJUWVBFX0xQRERSNF8wIHx8DQo+ID4gPiArICAgICAg ICAgICB1bWN0bDJfdHlwZSA9PSBERFJUWVBFX0xQRERSNF8xKSB7DQo+ID4gPiArICAgICAgICAg ICAgICAgLyogU2V0dGluZyBzZWxmcmVmX3N3IHRvIDEsIGJhc2VkIG9uIGxwZGRyNCByZXF1aXJl bWVudCAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSAr IEREUjRfUFdSQ1RMX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg RERSNF9QV1JDVExfU0VMRlJFRl9TVyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAg LyogQmFja3VwIHVzZXIgc2V0dGluZ3MsIHJlc3RvcmUgYWZ0ZXIgRERSIHVwIHJ1bm5pbmcgKi8N Cj4gPiA+ICsgICAgICAgICAgICAgICB1c2VyX2JhY2t1cCsrOw0KPiA+ID4gKyAgICAgICAgICAg ICAgICp1c2VyX2JhY2t1cCA9IHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9JTklUMF9PRkZTRVQp ICYNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X0lOSVQw X1NLSVBfUkFNX0lOSVQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyoNCj4gPiA+ ICsgICAgICAgICAgICAgICAgKiBTZXR0aW5nIElOSVQwLnNraXBfZHJhbV9pbml0IHRvIDB4Mywg YmFzZWQgb24gbHBkZHI0DQo+ID4gPiArICAgICAgICAgICAgICAgICogcmVxdWlyZW1lbnQNCj4g PiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBzZXRiaXRzX2xl MzIodW1jdGwyX2Jhc2UgKyBERFI0X0lOSVQwX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9JTklUMF9TS0lQX1JBTV9JTklUKTsNCj4gPiA+ICsgICAgICAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBDb21wbGV0ZSBxdWFzaS1keW5hbWljIHJlZ2lz dGVyIHByb2dyYW1taW5nICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFz ZSArIEREUjRfU1dDVExfT0ZGU0VULA0KPiA+IEREUjRfU1dDVExfU1dfRE9ORSk7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgIC8qIEVuYWJsZSBjb250cm9sbGVyIGZyb20gaXNzdWluZyByZWFkL3dy aXRlIHRvIFNEUkFNICovDQo+ID4gPiArICAgICAgIGNscmJpdHNfbGUzMih1bWN0bDJfYmFzZSAr IEREUjRfREJHMV9PRkZTRVQsDQo+IEREUjRfREJHMV9ESVNEUSk7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHBo eV9wcmVfaGFuZG9mZl9jb25maWcocGh5c19hZGRyX3QgdW1jdGwyX2Jhc2UsDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBkZHJfdHlwZSB1bWN0bDJfdHlwZSkN Cj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCByZXQ7DQo+ID4gPiArICAgICAgIHUzMiB2YWx1 ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3RsMl90eXBlID09IEREUlRZUEVfRERS NCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIENoZWNrIEREUjQgcmV0cnkgaXMgZW5hYmxl ZCA/ICovDQo+ID4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSByZWFkbCh1bWN0bDJfYmFzZSAr IEREUjRfQ1JDUEFSQ1RMMV9PRkZTRVQpICYNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEREUjRfQ1JDUEFSQ1RMMV9DUkNfUEFSSVRZX1JFVFJZX0VOQUJMRTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnKCIlczogRERSNCByZXRyeSBpcyBlbmFibGVkXG4iLCBfX2Z1bmNfXyk7 DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IERpc2FibGUgYXV0byBy ZWZyZXNoIGlzIG5vdCBzdXBwb3J0ZWRcbiIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgYXV0byByZWZyZXNoICovDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0 X1JGU0hDVEwzX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERFI0X1JGU0hDVEwzX0RJU19BVVRPX1JFRlJFU0gpOw0KPiA+ID4gKyAgICAgICAgICAg ICAgIH0NCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBEaXNhYmxl IHNlbGZyZWZfZW4gJiBwb3dlcmRvd25fZW4sIG52ciBkaXNhYmxlIGRmaSBkcmFtIGNsayAqLw0K PiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1BXUkNUTF9PRkZT RVQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFI0X1BXUkNUTF9FTl9ERklfRFJBTV9D TEtfRElTQUJMRSB8DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFI0X1BXUkNUTF9QT1dF UkRPV05fRU4gfA0KPiA+IEREUjRfUFdSQ1RMX1NFTEZSRUZfRU4pOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAvKiBFbmFibGUgcXVhc2ktZHluYW1pYyBwcm9ncmFtaW5nIG9mIHRoZSBjb250cm9s bGVyIHJlZ2lzdGVycyAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMzIodW1jdGwyX2Jhc2Ug KyBERFI0X1NXQ1RMX09GRlNFVCwNCj4gPiBERFI0X1NXQ1RMX1NXX0RPTkUpOw0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICByZXQgPSBlbmFibGVfcXVhc2lfZHluYW1pY19yZWdfZ3JwMyh1bWN0bDJf YmFzZSwgdW1jdGwyX3R5cGUpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIE1hc2tpbmcg ZGZpIGluaXQgY29tcGxldGUgKi8NCj4gPiA+ICsgICAgICAgY2xyYml0c19sZTMyKHVtY3RsMl9i YXNlICsgRERSNF9ERklNSVNDX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIERE UjRfREZJTUlTQ19ERklfSU5JVF9DT01QTEVURV9FTik7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IC8qIENvbXBsZXRlIHF1YXNpLWR5bmFtaWMgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcgKi8NCj4gPiA+ ICsgICAgICAgc2V0Yml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9TV0NUTF9PRkZTRVQsDQo+ ID4gRERSNF9TV0NUTF9TV19ET05FKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogUG9sbGlu ZyBwcm9ncmFtbWluZyBkb25lICovDQo+ID4gPiArICAgICAgIHJldCA9IHdhaXRfZm9yX2JpdF9s ZTMyKChjb25zdCB2b2lkICopKHVtY3RsMl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9TV1NUQVRfT0ZGU0VUKSwNCj4gRERSNF9TV1NUQVRfU1dfRE9O RV9BQ0ssDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIFRJTUVP VVRfMjAwTVMsIGZhbHNlKTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAg ICAgICAgICAgIGRlYnVnKCIlczogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsIF9fZnVuY19f KTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiIHByb2dyYW1taW5nIGRvbmVcbiIpOw0K PiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgaW5pdF9waHkoc3RydWN0IGRkcl9oYW5k b2ZmICpkZHJfaGFuZG9mZl9pbmZvKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgdTMyIGhhbmRv ZmZfdGFibGVbZGRyX2hhbmRvZmZfaW5mby0+cGh5X2hhbmRvZmZfbGVuZ3RoXTsNCj4gPiA+ICsg ICAgICAgdTMyIGksIHZhbHVlOw0KPiA+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICBwcmludGYoIkluaXRpYWxpemluZyBERFIgUEhZIC4uLlxuIik7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgIGlmIChkZHJfaGFuZG9mZl9pbmZvLT5jbnRscl90ID09IEREUlRZUEVf RERSNCB8fA0KPiA+ID4gKyAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+Y250bHJfdCA9PSBE RFJUWVBFX0xQRERSNF8wKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0gcGh5X3ByZV9o YW5kb2ZmX2NvbmZpZyhkZHJfaGFuZG9mZl9pbmZvLT5jbnRscl9iYXNlLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+ Y250bHJfdCk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgaWYgKGRkcl9oYW5kb2ZmX2luZm8tPmNudGxyMl90ID09IEREUlRZUEVfTFBE RFI0XzEpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBwaHlfcHJlX2hhbmRvZmZfY29u ZmlnDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAoZGRyX2hhbmRvZmZfaW5mby0+Y250 bHIyX2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5m by0+Y250bHIyX3QpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiAr DQo+ID4gPiArICAgICAgIC8qIEV4ZWN1dGUgUEhZIGNvbmZpZ3VyYXRpb24gaGFuZG9mZiAqLw0K PiA+ID4gKyAgICAgICBzb2NmcGdhX2hhbmRvZmZfcmVhZCgodm9pZCAqKWRkcl9oYW5kb2ZmX2lu Zm8tDQo+ID5waHlfaGFuZG9mZl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoYW5kb2ZmX3RhYmxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dTMyKWRkcl9oYW5kb2ZmX2luZm8tPnBoeV9oYW5kb2ZmX2xlbmd0aCk7DQo+ID4gPiArDQo+ID4g PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZHJfaGFuZG9mZl9pbmZvLT5waHlfaGFuZG9mZl9s ZW5ndGg7IGkgPSBpICsgMikgew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qDQo+ID4gPiArICAg ICAgICAgICAgICAgICogQ29udmVydCBQSFkgb2RkIG9mZnNldCB0byBldmVuIG9mZnNldCB0aGF0 IHN1cHBvcnRlZCBieQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAqIEFSTSBwcm9jZXNzb3IuDQo+ ID4gPiArICAgICAgICAgICAgICAgICovDQo+ID4gPiArICAgICAgICAgICAgICAgdmFsdWUgPSBo YW5kb2ZmX3RhYmxlW2ldIDw8IDE7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBB YnNvbHV0ZSBhZGRyOiAweCUwOGxseCwgQVBCIG9mZnNldDogMHglMDh4ICIsDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHZhbHVlICsgZGRyX2hhbmRvZmZfaW5mby0+cGh5 X2Jhc2UsIHZhbHVlKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiUEhZIG9mZnNldDog MHglMDh4IiwgaGFuZG9mZl90YWJsZVtpXSk7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWco IiB3ciA9IDB4JTA4eCAiLCBoYW5kb2ZmX3RhYmxlW2kgKyAxXSk7DQo+ID4gPiArICAgICAgICAg ICAgICAgd3JpdGV3KGhhbmRvZmZfdGFibGVbaSArIDFdLCAodWludHB0cl90KSh2YWx1ZSArDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgIGRkcl9oYW5kb2ZmX2luZm8tPnBoeV9iYXNlKSk7 DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoInJkID0gMHglMDh4XG4iLCByZWFkdygodWlu dHB0cl90KSh2YWx1ZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgZGRyX2hhbmRvZmZf aW5mby0+cGh5X2Jhc2UpKSk7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgcHJpbnRmKCJERFIgUEhZIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGVkXG4iKTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0 YXRpYyB2b2lkIHBoeV9pbml0X2VuZ2luZShzdHJ1Y3QgZGRyX2hhbmRvZmYgKmhhbmRvZmYpDQo+ ID4gPiArew0KPiA+ID4gKyAgICAgICB1MzIgaSwgdmFsdWU7DQo+ID4gPiArICAgICAgIHUzMiBo YW5kb2ZmX3RhYmxlW2hhbmRvZmYtPnBoeV9lbmdpbmVfaGFuZG9mZl9sZW5ndGhdOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICBwcmludGYoIkxvYWQgUEhZIEluaXQgRW5naW5lIC4uLlxuIik7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgIC8qIEV4ZWN1dGUgUElFIHByb2R1Y3Rpb24gY29kZSBoYW5k b2ZmICovDQo+ID4gPiArICAgICAgIHNvY2ZwZ2FfaGFuZG9mZl9yZWFkKCh2b2lkICopaGFuZG9m Zi0NCj4gPnBoeV9lbmdpbmVfaGFuZG9mZl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYW5kb2ZmX3RhYmxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodTMyKWhhbmRvZmYtPnBoeV9lbmdpbmVfaGFuZG9mZl9sZW5ndGgpOw0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZG9mZi0+cGh5X2VuZ2luZV9oYW5kb2Zm X2xlbmd0aDsgaSA9IGkgKyAyKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIkhhbmRv ZmYgYWRkcjogMHglOGxseCAiLCBoYW5kb2ZmX3RhYmxlW2ldICsNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICBoYW5kb2ZmLT5waHlfYmFzZSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAg ICAgICAgLyoNCj4gPiA+ICsgICAgICAgICAgICAgICAgKiBDb252ZXJ0IFBIWSBvZGQgb2Zmc2V0 IHRvIGV2ZW4gb2Zmc2V0IHRoYXQgc3VwcG9ydGVkIGJ5DQo+ID4gPiArICAgICAgICAgICAgICAg ICogQVJNIHByb2Nlc3Nvci4NCj4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAg ICAgICAgICAgICB2YWx1ZSA9IGhhbmRvZmZfdGFibGVbaV0gPDwgMTsNCj4gPiA+ICsgICAgICAg ICAgICAgICBkZWJ1ZygiJXM6IEFic29sdXRlIGFkZHI6IDB4JTA4bGx4LCBBUEIgb2Zmc2V0OiAw eCUwOHggIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdmFsdWUgKyBo YW5kb2ZmLT5waHlfYmFzZSwgdmFsdWUpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCJQ SFkgb2Zmc2V0OiAweCUwOHgiLCBoYW5kb2ZmX3RhYmxlW2ldKTsNCj4gPiA+ICsgICAgICAgICAg ICAgICBkZWJ1ZygiIHdyID0gMHglMDh4ICIsIGhhbmRvZmZfdGFibGVbaSArIDFdKTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB3cml0ZXcoaGFuZG9mZl90YWJsZVtpICsgMV0sICh1 aW50cHRyX3QpKHZhbHVlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgaGFuZG9mZi0+ cGh5X2Jhc2UpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygicmQgPSAw eCUwOHhcbiIsIHJlYWR3KCh1aW50cHRyX3QpKHZhbHVlICsNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICBoYW5kb2ZmLT5waHlfYmFzZSkpKTsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICBwcmludGYoIkVuZCBvZiBsb2FkaW5nIFBIWSBJbml0IEVuZ2luZVxuIik7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK2ludCBwb3B1bGF0ZV9kZHJfaGFuZG9mZihzdHJ1 Y3QgZGRyX2hhbmRvZmYgKmhhbmRvZmYpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICBwaHlzX2Fk ZHJfdCBuZXh0X3NlY3Rpb25faGVhZGVyOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBERFIg aGFuZG9mZiAqLw0KPiA+ID4gKyAgICAgICBoYW5kb2ZmLT5tZW1fcmVzZXRfYmFzZSA9DQo+IFNP QzY0X0hBTkRPRkZfRERSX01FTVJFU0VUX0JBU0U7DQo+ID4gPiArICAgICAgIGRlYnVnKCIlczog RERSIG1lbW9yeSByZXNldCBiYXNlID0gMHgleFxuIiwgX19mdW5jX18sDQo+ID4gPiArICAgICAg ICAgICAgICh1MzIpaGFuZG9mZi0+bWVtX3Jlc2V0X2Jhc2UpOw0KPiA+ID4gKyAgICAgICBkZWJ1 ZygiJXM6IEREUiBtZW1vcnkgcmVzZXQgYWRkcmVzcyA9IDB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ ID4gKyAgICAgICAgICAgICByZWFkbChoYW5kb2ZmLT5tZW1fcmVzZXRfYmFzZSkpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAvKiBCZWdpbm5pbmcgb2YgRERSIGNvbnRyb2xsZXIgaGFuZG9mZiAq Lw0KPiA+ID4gKyAgICAgICBoYW5kb2ZmLT5jbnRscl9oYW5kb2ZmX2Jhc2UgPQ0KPiA+IFNPQzY0 X0hBTkRPRkZfRERSX1VNQ1RMMl9TRUNUSU9OOw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiJXM6IGNu dGxyIGhhbmRvZmYgYmFzZSA9IDB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ID4gKyAgICAgICAgICAg ICAodTMyKWhhbmRvZmYtPmNudGxyX2hhbmRvZmZfYmFzZSk7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgIC8qIEdldCAxc3QgRERSIHR5cGUgKi8NCj4gPiA+ICsgICAgICAgaGFuZG9mZi0+Y250bHJf dCA9IGdldF9kZHJfdHlwZShoYW5kb2ZmLT5jbnRscl9oYW5kb2ZmX2Jhc2UgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQzY0X0hBTkRPRkZfRERSX1VN Q1RMMl9UWVBFX09GRlNFVCk7DQo+ID4gPiArICAgICAgIGlmIChoYW5kb2ZmLT5jbnRscl90ID09 IEREUlRZUEVfTFBERFI0XzEgfHwNCj4gPiA+ICsgICAgICAgICAgIGhhbmRvZmYtPmNudGxyX3Qg PT0gRERSVFlQRV9VTktOT1dOKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBX cm9uZyBERFIgaGFuZG9mZiBmb3JtYXQsIHRoZSAxc3QgRERSICIsDQo+IF9fZnVuY19fKTsNCj4g PiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygidHlwZSBtdXN0IGJlIEREUjQgb3IgTFBERFI0XzBc biIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsNCj4gPiA+ICsgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiAxc3QgY250bHIgYmFzZSBwaHlzaWNhbCBh ZGRyZXNzICovDQo+ID4gPiArICAgICAgIGhhbmRvZmYtPmNudGxyX2Jhc2UgPSByZWFkbChoYW5k b2ZmLT5jbnRscl9oYW5kb2ZmX2Jhc2UgKw0KPiA+ID4gKw0KPiBTT0M2NF9IQU5ET0ZGX0REUl9V TUNUTDJfQkFTRV9BRERSX09GRlNFVCk7DQo+ID4gPiArICAgICAgIGRlYnVnKCIlczogY250bHIg YmFzZSA9IDB4JXhcbiIsIF9fZnVuY19fLCAodTMyKWhhbmRvZmYtDQo+ID5jbnRscl9iYXNlKTsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgRERSIGNu dGxyIGhhbmRvZmYgc2VjdGlvbiAqLw0KPiA+ID4gKyAgICAgICBoYW5kb2ZmLT5jbnRscl90b3Rh bF9sZW5ndGggPSByZWFkbChoYW5kb2ZmLT5jbnRscl9oYW5kb2ZmX2Jhc2UgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0M2NF9IQU5ET0ZGX09G RlNFVF9MRU5HVEgpOw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiJXM6IFVtY3RsMiB0b3RhbCBsZW5n dGggaW4gYnl0ZSA9IDB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ID4gKyAgICAgICAgICAgICAodTMy KWhhbmRvZmYtPmNudGxyX3RvdGFsX2xlbmd0aCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8q IEdldCB0aGUgbGVuZ3RoIG9mIHVzZXIgc2V0dGluZyBkYXRhIGluIEREUiBjbnRsciBoYW5kb2Zm IHNlY3Rpb24gKi8NCj4gPiA+ICsgICAgICAgaGFuZG9mZi0+Y250bHJfaGFuZG9mZl9sZW5ndGgg PSBzb2NmcGdhX2dldF9oYW5kb2ZmX3NpemUoKHZvaWQgKikNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRvZmYtPmNudGxyX2hhbmRvZmZf YmFzZSk7DQo+ID4gPiArICAgICAgIGRlYnVnKCIlczogVW1jdGwyIGhhbmRvZmYgbGVuZ3RoIGlu IHdvcmQoMzItYml0KSA9IDB4JXhcbiIsDQo+IF9fZnVuY19fLA0KPiA+ID4gKyAgICAgICAgICAg ICAodTMyKWhhbmRvZmYtPmNudGxyX2hhbmRvZmZfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgLyogV3JvbmcgZm9ybWF0IG9uIHVzZXIgc2V0dGluZyBkYXRhICovDQo+ID4gPiArICAg ICAgIGlmIChoYW5kb2ZmLT5jbnRscl9oYW5kb2ZmX2xlbmd0aCA8IDApIHsNCj4gPiA+ICsgICAg ICAgICAgICAgICBkZWJ1ZygiJXM6IFdyb25nIGZvcm1hdCBvbiB1c2VyIHNldHRpbmcgZGF0YVxu IiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsNCj4g PiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBHZXQgdGhlIG5leHQgaGFu ZG9mZiBzZWN0aW9uIGFkZHJlc3MgKi8NCj4gPiA+ICsgICAgICAgbmV4dF9zZWN0aW9uX2hlYWRl ciA9IGhhbmRvZmYtPmNudGxyX2hhbmRvZmZfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhhbmRvZmYtPmNudGxyX3RvdGFsX2xlbmd0aDsNCj4gPiA+ICsgICAg ICAgZGVidWcoIiVzOiBOZXh0IGhhbmRvZmYgc2VjdGlvbiBoZWFkZXIgbG9jYXRpb24gPSAweCVs bHhcbiIsDQo+IF9fZnVuY19fLA0KPiA+ID4gKyAgICAgICAgICAgICBuZXh0X3NlY3Rpb25faGVh ZGVyKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyoNCj4gPiA+ICsgICAgICAgICogQ2hlY2tp bmcgbmV4dCBzZWN0aW9uIGhhbmRvZmYgaXMgY250bHIgb3IgUEhZLCBhbmQgY2hhbmdpbmcNCj4g PiA+ICsgICAgICAgICogc3Vic2VxdWVudCBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmdseQ0KPiA+ ID4gKyAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgaWYgKHJlYWRsKG5leHRfc2VjdGlvbl9oZWFk ZXIpID09DQo+ID4gU09DNjRfSEFORE9GRl9ERFJfVU1DVEwyX01BR0lDKSB7DQo+ID4gPiArICAg ICAgICAgICAgICAgLyogR2V0IHRoZSBuZXh0IGNudGxyIGhhbmRvZmYgc2VjdGlvbiBhZGRyZXNz ICovDQo+ID4gPiArICAgICAgICAgICAgICAgaGFuZG9mZi0+Y250bHIyX2hhbmRvZmZfYmFzZSA9 IG5leHRfc2VjdGlvbl9oZWFkZXI7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiB1 bWN0bDIgMm5kIGhhbmRvZmYgYmFzZSA9IDB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICh1MzIpaGFuZG9mZi0+Y250bHIyX2hhbmRvZmZfYmFzZSk7DQo+ID4g PiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyogR2V0IDJuZCBERFIgdHlwZSAqLw0KPiA+ID4g KyAgICAgICAgICAgICAgIGhhbmRvZmYtPmNudGxyMl90ID0gZ2V0X2Rkcl90eXBlKGhhbmRvZmYt DQo+ID5jbnRscjJfaGFuZG9mZl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTT0M2NF9IQU5ET0ZGX0REUl9VTUNUTDJfVFlQRV9PRkZTRVQpOw0K PiA+ID4gKyAgICAgICAgICAgICAgIGlmIChoYW5kb2ZmLT5jbnRscjJfdCA9PSBERFJUWVBFX0xQ RERSNF8wIHx8DQo+ID4gPiArICAgICAgICAgICAgICAgICAgIGhhbmRvZmYtPmNudGxyMl90ID09 IEREUlRZUEVfVU5LTk9XTikgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWco IiVzOiBXcm9uZyBERFIgaGFuZG9mZiBmb3JtYXQsIHRoZSAybmQgRERSICIsDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZygidHlwZSBtdXN0IGJlIExQRERSNF8xXG4iKTsNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsNCj4gPiA+ICsgICAgICAgICAgICAg ICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyogMm5kIHVtY3RsMiBiYXNlIHBo eXNpY2FsIGFkZHJlc3MgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBoYW5kb2ZmLT5jbnRscjJf YmFzZSA9DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZWFkbChoYW5kb2ZmLT5jbnRs cjJfaGFuZG9mZl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNP QzY0X0hBTkRPRkZfRERSX1VNQ1RMMl9CQVNFX0FERFJfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAg ICAgICAgICBkZWJ1ZygiJXM6IGNudGxyMiBiYXNlID0gMHgleFxuIiwgX19mdW5jX18sDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgKHUzMiloYW5kb2ZmLT5jbnRscjJfYmFzZSk7DQo+ID4g PiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgMm5k IEREUiB1bWN0bDIgaGFuZG9mZiBzZWN0aW9uICovDQo+ID4gPiArICAgICAgICAgICAgICAgaGFu ZG9mZi0+Y250bHIyX3RvdGFsX2xlbmd0aCA9DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICByZWFkbChoYW5kb2ZmLT5jbnRscjJfaGFuZG9mZl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNPQzY0X0hBTkRPRkZfT0ZGU0VUX0xFTkdUSCk7DQo+ID4gPiAr ICAgICAgICAgICAgICAgZGVidWcoIiVzOiBVbWN0bDJfMm5kIHRvdGFsIGxlbmd0aCBpbiBieXRl ID0gMHgleFxuIiwNCj4gX19mdW5jX18sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgKHUz MiloYW5kb2ZmLT5jbnRscjJfdG90YWxfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg ICAgICAgICAvKg0KPiA+ID4gKyAgICAgICAgICAgICAgICAqIEdldCB0aGUgbGVuZ3RoIG9mIHVz ZXIgc2V0dGluZyBkYXRhIGluIEREUiB1bWN0bDIgaGFuZG9mZg0KPiA+ID4gKyAgICAgICAgICAg ICAgICAqIHNlY3Rpb24NCj4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAg ICAgICAgICBoYW5kb2ZmLT5jbnRscjJfaGFuZG9mZl9sZW5ndGggPQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgc29jZnBnYV9nZXRfaGFuZG9mZl9zaXplKCh2b2lkICopDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZG9mZi0+ Y250bHIyX2hhbmRvZmZfYmFzZSk7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBj bnRscjIgaGFuZG9mZiBsZW5ndGggaW4gd29yZCgzMi1iaXQpID0gMHgleFxuIiwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICh1MzIpaGFuZG9mZi0+Y250bHIyX2hhbmRvZmZfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgICAgICAgICAvKiBXcm9uZyBmb3JtYXQgb24gdXNlciBzZXR0aW5nIGRhdGEgKi8NCj4g PiA+ICsgICAgICAgICAgICAgICBpZiAoaGFuZG9mZi0+Y250bHIyX2hhbmRvZmZfbGVuZ3RoIDwg MCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBXcm9uZyBmb3Jt YXQgb24gdW1jdGwyIHVzZXIgc2V0dGluZyBkYXRhXG4iLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIC1FTk9FWEVDOw0KPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgICAgICAgICAvKiBHZXQgdGhlIG5leHQgaGFuZG9mZiBzZWN0aW9uIGFkZHJlc3Mg Ki8NCj4gPiA+ICsgICAgICAgICAgICAgICBuZXh0X3NlY3Rpb25faGVhZGVyID0gaGFuZG9mZi0+ Y250bHIyX2hhbmRvZmZfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGFuZG9mZi0+Y250bHIyX3RvdGFsX2xlbmd0aDsNCj4gPiA+ICsgICAgICAg ICAgICAgICBkZWJ1ZygiJXM6IE5leHQgaGFuZG9mZiBzZWN0aW9uIGhlYWRlciBsb2NhdGlvbiA9 IDB4JWxseFxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbmV4dF9z ZWN0aW9uX2hlYWRlcik7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg LyogQ2hlY2tpbmcgbmV4dCBzZWN0aW9uIGhhbmRvZmYgaXMgUEhZID8gKi8NCj4gPiA+ICsgICAg ICAgaWYgKHJlYWRsKG5leHRfc2VjdGlvbl9oZWFkZXIpID09DQo+IFNPQzY0X0hBTkRPRkZfRERS X1BIWV9NQUdJQykgew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIEREUiBQSFkgaGFuZG9mZiAq Lw0KPiA+ID4gKyAgICAgICAgICAgICAgIGhhbmRvZmYtPnBoeV9oYW5kb2ZmX2Jhc2UgPSBuZXh0 X3NlY3Rpb25faGVhZGVyOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIlczogUEhZIGhh bmRvZmYgYmFzZSA9IDB4JXhcbiIsIF9fZnVuY19fLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICh1MzIpaGFuZG9mZi0+cGh5X2hhbmRvZmZfYmFzZSk7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgICAgICAgICAgLyogUEhZIGJhc2UgcGh5c2ljYWwgYWRkcmVzcyAqLw0KPiA+ID4gKyAgICAg ICAgICAgICAgIGhhbmRvZmYtPnBoeV9iYXNlID0gcmVhZGwoaGFuZG9mZi0+cGh5X2hhbmRvZmZf YmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09D NjRfSEFORE9GRl9ERFJfUEhZX0JBU0VfT0ZGU0VUKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBk ZWJ1ZygiJXM6IFBIWSBiYXNlID0gMHgleFxuIiwgX19mdW5jX18sDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgKHUzMiloYW5kb2ZmLT5waHlfYmFzZSk7DQo+ID4gPiArDQo+ID4gPiArICAg ICAgICAgICAgICAgLyogR2V0IHRoZSB0b3RhbCBsZW5ndGggb2YgUEhZIGhhbmRvZmYgc2VjdGlv biAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIGhhbmRvZmYtPnBoeV90b3RhbF9sZW5ndGggPSBy ZWFkbChoYW5kb2ZmLQ0KPiA+cGh5X2hhbmRvZmZfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0M2NF9IQU5ET0ZGX09GRlNFVF9M RU5HVEgpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIlczogUEhZIHRvdGFsIGxlbmd0 aCBpbiBieXRlID0gMHgleFxuIiwgX19mdW5jX18sDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgKHUzMiloYW5kb2ZmLT5waHlfdG90YWxfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgICAgICAgICAvKg0KPiA+ID4gKyAgICAgICAgICAgICAgICAqIEdldCB0aGUgbGVuZ3RoIG9m IHVzZXIgc2V0dGluZyBkYXRhIGluIEREUiBQSFkgaGFuZG9mZg0KPiA+ID4gKyAgICAgICAgICAg ICAgICAqIHNlY3Rpb24NCj4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAg ICAgICAgICBoYW5kb2ZmLT5waHlfaGFuZG9mZl9sZW5ndGggPQ0KPiBzb2NmcGdhX2dldF9oYW5k b2ZmX3NpemUoKHZvaWQgKikNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhhbmRvZmYtPnBoeV9oYW5kb2ZmX2Jhc2UpOw0KPiA+ID4gKyAgICAg ICAgICAgICAgIGRlYnVnKCIlczogUEhZIGhhbmRvZmYgbGVuZ3RoIGluIHdvcmQoMzItYml0KSA9 IDB4JXhcbiIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sICh1MzIpaGFu ZG9mZi0+cGh5X2hhbmRvZmZfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAg ICAvKiBXcm9uZyBmb3JtYXQgb24gUEhZIHVzZXIgc2V0dGluZyBkYXRhICovDQo+ID4gPiArICAg ICAgICAgICAgICAgaWYgKGhhbmRvZmYtPnBoeV9oYW5kb2ZmX2xlbmd0aCA8IDApIHsNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIlczogV3JvbmcgZm9ybWF0IG9uIFBIWSB1 c2VyIHNldHRpbmcgZGF0YVxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRVhF QzsNCj4gPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAg ICAgLyogR2V0IHRoZSBuZXh0IGhhbmRvZmYgc2VjdGlvbiBhZGRyZXNzICovDQo+ID4gPiArICAg ICAgICAgICAgICAgbmV4dF9zZWN0aW9uX2hlYWRlciA9IGhhbmRvZmYtPnBoeV9oYW5kb2ZmX2Jh c2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRv ZmYtPnBoeV90b3RhbF9sZW5ndGg7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBO ZXh0IGhhbmRvZmYgc2VjdGlvbiBoZWFkZXIgbG9jYXRpb24gPSAweCVsbHhcbiIsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG5leHRfc2VjdGlvbl9oZWFkZXIpOw0KPiA+ ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIlczogV3Jv bmcgZm9ybWF0IGZvciBERFIgaGFuZG9mZiwgZXhwZWN0IFBIWSIsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgaGFu ZG9mZiBzZWN0aW9uIGFmdGVyIHVtY3RsMiBoYW5kb2ZmIHNlY3Rpb25cbiIpOw0KPiA+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRU5PRVhFQzsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICAvKiBDaGVja2luZyBuZXh0IHNlY3Rpb24gaGFuZG9mZiBpcyBQSFkgaW5p dCBFbmdpbmUgPyAqLw0KPiA+ID4gKyAgICAgICBpZiAocmVhZGwobmV4dF9zZWN0aW9uX2hlYWRl cikgPT0NCj4gPiA+ICsgICAgICAgICAgICAgICBTT0M2NF9IQU5ET0ZGX0REUl9QSFlfSU5JVF9F TkdJTkVfTUFHSUMpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAvKiBERFIgUEhZIEVuZ2luZSBo YW5kb2ZmICovDQo+ID4gPiArICAgICAgICAgICAgICAgaGFuZG9mZi0+cGh5X2VuZ2luZV9oYW5k b2ZmX2Jhc2UgPSBuZXh0X3NlY3Rpb25faGVhZGVyOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRl YnVnKCIlczogUEhZIGluaXQgZW5naW5lIGhhbmRvZmYgYmFzZSA9IDB4JXhcbiIsIF9fZnVuY19f LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICh1MzIpaGFuZG9mZi0+cGh5X2VuZ2luZV9o YW5kb2ZmX2Jhc2UpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIEdldCB0aGUg dG90YWwgbGVuZ3RoIG9mIFBIWSBpbml0IGVuZ2luZSBoYW5kb2ZmIHNlY3Rpb24gKi8NCj4gPiA+ ICsgICAgICAgICAgICAgICBoYW5kb2ZmLT5waHlfZW5naW5lX3RvdGFsX2xlbmd0aCA9DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsKGhhbmRvZmYtPnBoeV9lbmdp bmVfaGFuZG9mZl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU09DNjRfSEFORE9GRl9PRkZTRVRfTEVOR1RIKTsNCj4gPiA+ICsgICAgICAgICAgICAg ICBkZWJ1ZygiJXM6IFBIWSBlbmdpbmUgdG90YWwgbGVuZ3RoIGluIGJ5dGUgPSAweCV4XG4iLCBf X2Z1bmNfXywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAodTMyKWhhbmRvZmYtPnBoeV9l bmdpbmVfdG90YWxfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAvKg0K PiA+ID4gKyAgICAgICAgICAgICAgICAqIEdldCB0aGUgbGVuZ3RoIG9mIHVzZXIgc2V0dGluZyBk YXRhIGluIEREUiBQSFkgaW5pdCBlbmdpbmUNCj4gPiA+ICsgICAgICAgICAgICAgICAgKiBoYW5k b2ZmIHNlY3Rpb24NCj4gPiA+ICsgICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgICAg ICAgICBoYW5kb2ZmLT5waHlfZW5naW5lX2hhbmRvZmZfbGVuZ3RoID0NCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHNvY2ZwZ2FfZ2V0X2hhbmRvZmZfc2l6ZSgodm9pZCAqKQ0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRvZmYtPnBoeV9lbmdp bmVfaGFuZG9mZl9iYXNlKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFBIWSBl bmdpbmUgaGFuZG9mZiBsZW5ndGggaW4gd29yZCgzMi1iaXQpID0NCj4gMHgleFxuIiwNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgKHUzMiloYW5kb2ZmLT5waHlfZW5naW5l X2hhbmRvZmZfbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAvKiBXcm9u ZyBmb3JtYXQgb24gUEhZIGluaXQgZW5naW5lIHNldHRpbmcgZGF0YSAqLw0KPiA+ID4gKyAgICAg ICAgICAgICAgIGlmIChoYW5kb2ZmLT5waHlfZW5naW5lX2hhbmRvZmZfbGVuZ3RoIDwgMCkgew0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBXcm9uZyBmb3JtYXQgb24g UEhZIGluaXQgZW5naW5lICIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygidXNlciBzZXR0 aW5nIGRhdGFcbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9F WEVDOw0KPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsgICAgICAgfSBlbHNlIHsNCj4g PiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFdyb25nIGZvcm1hdCBmb3IgRERSIGhhbmRv ZmYsIGV4cGVjdCBQSFkiLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsN Cj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiIGluaXQgZW5naW5lIGhhbmRvZmYgc2VjdGlv biBhZnRlciBQSFkgaGFuZG9mZlxuIik7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiBz ZWN0aW9uXG4iKTsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VYRUM7DQo+ID4g PiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaGFuZG9mZi0+dHJhaW5faW1lbV9i YXNlID0gaGFuZG9mZi0+cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9UUkFJTl9JTUVNX09GRlNFVDsNCj4gPiA+ ICsgICAgICAgZGVidWcoIiVzOiBQSFkgdHJhaW4gSU1FTSBiYXNlID0gMHgleFxuIiwNCj4gPiA+ ICsgICAgICAgICAgICAgX19mdW5jX18sICh1MzIpaGFuZG9mZi0+dHJhaW5faW1lbV9iYXNlKTsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaGFuZG9mZi0+dHJhaW5fZG1lbV9iYXNlID0gaGFuZG9m Zi0+cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRERSX1BIWV9UUkFJTl9ETUVNX09GRlNFVDsNCj4gPiA+ICsgICAgICAgZGVi dWcoIiVzOiBQSFkgdHJhaW4gRE1FTSBiYXNlID0gMHgleFxuIiwNCj4gPiA+ICsgICAgICAgICAg ICAgX19mdW5jX18sICh1MzIpaGFuZG9mZi0+dHJhaW5fZG1lbV9iYXNlKTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgaGFuZG9mZi0+dHJhaW5faW1lbV9sZW5ndGggPQ0KPiA+IFNPQzY0X0hBTkRP RkZfRERSX1RSQUlOX0lNRU1fTEVOR1RIOw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiJXM6IFBIWSB0 cmFpbiBJTUVNIGxlbmd0aCA9IDB4JXhcbiIsDQo+ID4gPiArICAgICAgICAgICAgIF9fZnVuY19f LCAodTMyKWhhbmRvZmYtPnRyYWluX2ltZW1fbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgaGFuZG9mZi0+dHJhaW5fZG1lbV9sZW5ndGggPQ0KPiA+IFNPQzY0X0hBTkRPRkZfRERSX1RS QUlOX0RNRU1fTEVOR1RIOw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiJXM6IFBIWSB0cmFpbiBETUVN IGxlbmd0aCA9IDB4JXhcbiIsDQo+ID4gPiArICAgICAgICAgICAgIF9fZnVuY19fLCAodTMyKWhh bmRvZmYtPnRyYWluX2RtZW1fbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJu IDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK2ludCBlbmFibGVfZGRyX2Nsb2NrKHN0cnVj dCB1ZGV2aWNlICpkZXYpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICpkZHJf Y2xrOw0KPiA+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBF bmFibGUgY2xvY2sgYmVmb3JlIGluaXQgRERSICovDQo+ID4gPiArICAgICAgIGRkcl9jbGsgPSBk ZXZtX2Nsa19nZXQoZGV2LCAibWVtX2NsayIpOw0KPiA+ID4gKyAgICAgICBpZiAoIUlTX0VSUihk ZHJfY2xrKSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGNsa19lbmFibGUoZGRyX2Ns ayk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlczogRmFpbGVkIHRvIGVuYWJsZSBERFIgY2xvY2tcbiIsIF9f ZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4g PiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAg ICAgICAgICAgIHJldCA9IFBUUl9FUlIoZGRyX2Nsayk7DQo+ID4gPiArICAgICAgICAgICAgICAg ZGVidWcoIiVzOiBGYWlsZWQgdG8gZ2V0IEREUiBjbG9jayBmcm9tIGR0c1xuIiwgX19mdW5jX18p Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgcHJpbnRmKCIlczogRERSIGNsb2NrIGlzIGVuYWJsZWRcbiIs IF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgZGRyX3N0YXJ0X2RmaV9pbml0KHBoeXNfYWRkcl90 IHVtY3RsMl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBk ZHJfdHlwZSB1bWN0bDJfdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCByZXQ7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgIGRlYnVnKCIlczogU3RhcnQgREZJIGluaXRcbiIsIF9fZnVu Y19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogRW5hYmxlIHF1YXNpLWR5bmFtaWMgcHJv Z3JhbWluZyBvZiBjb250cm9sbGVyIHJlZ2lzdGVycyAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRz X2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1NXQ1RMX09GRlNFVCwNCj4gPiBERFI0X1NXQ1RMX1NX X0RPTkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXQgPSBlbmFibGVfcXVhc2lfZHluYW1p Y19yZWdfZ3JwMyh1bWN0bDJfYmFzZSwgdW1jdGwyX3R5cGUpOw0KPiA+ID4gKyAgICAgICBpZiAo cmV0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIC8qIFN0YXJ0IERGSSBpbml0IHNlcXVlbmNlICovDQo+ID4gPiArICAgICAgIHNldGJp dHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfREZJTUlTQ19PRkZTRVQsDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICBERFI0X0RGSU1JU0NfREZJX0lOSVRfU1RBUlQpOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICAvKiBDb21wbGV0ZSBxdWFzaS1keW5hbWljIHJlZ2lzdGVyIHByb2dyYW1taW5n ICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfU1dDVExf T0ZGU0VULA0KPiA+IEREUjRfU1dDVExfU1dfRE9ORSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IC8qIFBvbGxpbmcgcHJvZ3JhbW1pbmcgZG9uZSAqLw0KPiA+ID4gKyAgICAgICByZXQgPSB3YWl0 X2Zvcl9iaXRfbGUzMigoY29uc3Qgdm9pZCAqKSh1bWN0bDJfYmFzZSArDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dTVEFUX09GRlNFVCksDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dTVEFUX1NXX0RPTkVfQUNLLCB0cnVl LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FT1VUXzIwME1TLCBm YWxzZSk7DQo+ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBk ZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLCBfX2Z1bmNfXyk7DQo+ID4gPiAr ICAgICAgICAgICAgICAgZGVidWcoIiBwcm9ncmFtbWluZyBkb25lXG4iKTsNCj4gPiA+ICsgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICtzdGF0aWMgaW50IGRkcl9jaGVja19kZmlfaW5pdF9jb21wbGV0ZShwaHlzX2Fk ZHJfdCB1bWN0bDJfYmFzZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gZGRyX3R5cGUgdW1jdGwyX3R5cGUpDQo+ID4gPiArew0KPiA+ID4gKyAgICAg ICBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBQb2xsaW5nIERGSSBpbml0IGNv bXBsZXRlICovDQo+ID4gPiArICAgICAgIHJldCA9IHdhaXRfZm9yX2JpdF9sZTMyKChjb25zdCB2 b2lkICopKHVtY3RsMl9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRERSNF9ERklTVEFUX09GRlNFVCksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEREUjRfREZJX0lOSVRfQ09NUExFVEUsIHRydWUsDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRJTUVPVVRfMjAwTVMsIGZhbHNlKTsNCj4gPiA+ICsgICAgICAg aWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIlczogVGltZW91dCB3aGls ZSB3YWl0aW5nIGZvciIsIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1Zygi IERGSSBpbml0IGRvbmVcbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgZGVidWcoIiVzOiBERkkgaW5p dCBjb21wbGV0ZWQuXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIEVu YWJsZSBxdWFzaS1keW5hbWljIHByb2dyYW1pbmcgb2YgY29udHJvbGxlciByZWdpc3RlcnMgKi8N Cj4gPiA+ICsgICAgICAgY2xyYml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9TV0NUTF9PRkZT RVQsDQo+ID4gRERSNF9TV0NUTF9TV19ET05FKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0 ID0gZW5hYmxlX3F1YXNpX2R5bmFtaWNfcmVnX2dycDModW1jdGwyX2Jhc2UsIHVtY3RsMl90eXBl KTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g cmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBTdG9wIERGSSBpbml0IHNlcXVlbmNlICov DQo+ID4gPiArICAgICAgIGNscmJpdHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfREZJTUlTQ19P RkZTRVQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFI0X0RGSU1JU0NfREZJX0lOSVRf U1RBUlQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBDb21wbGV0ZSBxdWFzaS1keW5hbWlj IHJlZ2lzdGVyIHByb2dyYW1taW5nICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0 bDJfYmFzZSArIEREUjRfU1dDVExfT0ZGU0VULA0KPiA+IEREUjRfU1dDVExfU1dfRE9ORSk7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgIC8qIFBvbGxpbmcgcHJvZ3JhbW1pbmcgZG9uZSAqLw0KPiA+ ID4gKyAgICAgICByZXQgPSB3YWl0X2Zvcl9iaXRfbGUzMigoY29uc3Qgdm9pZCAqKSh1bWN0bDJf YmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dTVEFU X09GRlNFVCksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dT VEFUX1NXX0RPTkVfQUNLLCB0cnVlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUSU1FT1VUXzIwME1TLCBmYWxzZSk7DQo+ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4g PiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3Ii LCBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiBwcm9ncmFtbWluZyBk b25lXG4iKTsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAg ICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGRlYnVnKCIlczpERFIgcHJvZ3JhbW1pbmcgZG9u ZVxuIiwgX19mdW5jX18pOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGRkcl90cmlnZ2VyX3NkcmFtX2luaXQo cGh5c19hZGRyX3QgdW1jdGwyX2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSBkZHJfdHlwZSB1bWN0bDJfdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArICAg ICAgIGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIEVuYWJsZSBxdWFzaS1keW5h bWljIHByb2dyYW1pbmcgb2YgY29udHJvbGxlciByZWdpc3RlcnMgKi8NCj4gPiA+ICsgICAgICAg Y2xyYml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9TV0NUTF9PRkZTRVQsDQo+ID4gRERSNF9T V0NUTF9TV19ET05FKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0gZW5hYmxlX3F1YXNp X2R5bmFtaWNfcmVnX2dycDModW1jdGwyX2Jhc2UsIHVtY3RsMl90eXBlKTsNCj4gPiA+ICsgICAg ICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICAvKiBVbm1hc2tpbmcgZGZpIGluaXQgY29tcGxldGUgKi8NCj4gPiA+ICsg ICAgICAgc2V0Yml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9ERklNSVNDX09GRlNFVCwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgIEREUjRfREZJTUlTQ19ERklfSU5JVF9DT01QTEVURV9F Tik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIFNvZnR3YXJlIGV4aXQgZnJvbSBzZWxmLXJl ZnJlc2ggKi8NCj4gPiA+ICsgICAgICAgY2xyYml0c19sZTMyKHVtY3RsMl9iYXNlICsgRERSNF9Q V1JDVExfT0ZGU0VULA0KPiA+IEREUjRfUFdSQ1RMX1NFTEZSRUZfU1cpOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICAvKiBDb21wbGV0ZSBxdWFzaS1keW5hbWljIHJlZ2lzdGVyIHByb2dyYW1taW5n ICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfU1dDVExf T0ZGU0VULA0KPiA+IEREUjRfU1dDVExfU1dfRE9ORSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IC8qIFBvbGxpbmcgcHJvZ3JhbW1pbmcgZG9uZSAqLw0KPiA+ID4gKyAgICAgICByZXQgPSB3YWl0 X2Zvcl9iaXRfbGUzMigoY29uc3Qgdm9pZCAqKSh1bWN0bDJfYmFzZSArDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dTVEFUX09GRlNFVCksDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfU1dTVEFUX1NXX0RPTkVfQUNLLCB0cnVl LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FT1VUXzIwME1TLCBm YWxzZSk7DQo+ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBk ZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLCBfX2Z1bmNfXyk7DQo+ID4gPiAr ICAgICAgICAgICAgICAgZGVidWcoIiBwcm9ncmFtbWluZyBkb25lXG4iKTsNCj4gPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIGRlYnVnKCIlczpERFIgcHJvZ3JhbW1pbmcgZG9uZVxuIiwgX19mdW5jX18pOw0KPiA+ ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg aW50IGRkcl9wb3N0X2hhbmRvZmZfY29uZmlnKHBoeXNfYWRkcl90IHVtY3RsMl9iYXNlLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGRkcl90eXBlIHVtY3Rs Ml90eXBlKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IHJldCA9IDA7DQo+ID4gPiArICAg ICAgIHUzMiB2YWx1ZTsNCj4gPiA+ICsgICAgICAgdTMyIHN0YXJ0ID0gZ2V0X3RpbWVyKDApOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBQb2xsaW5nIHVudGlsIFNEUkFNIGVudGVyZWQgbm9y bWFsIG9wZXJhdGluZyBtb2RlICovDQo+ID4gPiArICAgICAgIHZhbHVlID0gcmVhZGwodW1jdGwy X2Jhc2UgKyBERFI0X1NUQVRfT0ZGU0VUKSAmDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg RERSNF9TVEFUX09QRVJBVElOR19NT0RFOw0KPiA+IENhbiBtZXJnZSB0byAiZG8uLndoaWxlIiBs b29wIGJlbG93Lg0KPiANCj4gT2theS4NCj4gDQo+ID4NCj4gPiA+ICsgICAgICAgd2hpbGUgKHZh bHVlICE9IE5PUk1BTF9PUE0pIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAoZ2V0X3RpbWVy KHN0YXJ0KSA+IFRJTUVPVVRfMjAwTVMpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKCIlczogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZygiIEREUiBlbnRlcnMgbm9ybWFsIG9wZXJhdGluZyBtb2RlXG4iKTsNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVRJTUVET1VUOw0KPiA+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRs KHVtY3RsMl9iYXNlICsgRERSNF9TVEFUX09GRlNFVCkgJg0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9TVEFUX09QRVJBVElOR19NT0RFOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAgICAgICAgIHVkZWxheSgxKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBXQVRDSERP R19SRVNFVCgpOw0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHByaW50 ZigiRERSIGVudGVyZWQgbm9ybWFsIG9wZXJhdGluZyBtb2RlXG4iKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgLyogRW5hYmxpbmcgYXV0byByZWZyZXNoICovDQo+ID4gPiArICAgICAgIGNscmJp dHNfbGUzMih1bWN0bDJfYmFzZSArIEREUjRfUkZTSENUTDNfT0ZGU0VULA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgRERSNF9SRlNIQ1RMM19ESVNfQVVUT19SRUZSRVNIKTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgLyogQ2hlY2tpbmcgRUNDIGlzIGVuYWJsZWQ/ICovDQo+ID4gPiArICAg ICAgIHZhbHVlID0gcmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X0VDQ0NGRzBfT0ZGU0VUKSAmDQo+ ID4gRERSNF9FQ0NfTU9ERTsNCj4gPiA+ICsgICAgICAgaWYgKHZhbHVlKSB7DQo+ID4gPiArICAg ICAgICAgICAgICAgcHJpbnRmKCJFQ0MgaXMgZW5hYmxlZFxuIik7DQo+ID4gPiArICAgICAgICAg ICAgICAgcmV0ID0gc2NydWJiZXJfZGRyX2NvbmZpZyh1bWN0bDJfYmFzZSwgdW1jdGwyX3R5cGUp Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIkZhaWxlZCB0byBlbmFibGUgRUNDXG4iKTsNCj4gPiA+ICsgICAgICAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgaW50IGNvbmZpZ3VyZV90cmFpbmluZ19maXJtd2FyZShzdHJ1Y3QgZGRy X2hhbmRvZmYNCj4gKmRkcl9oYW5kb2ZmX2luZm8sDQo+ID4gPiArICAgICAgIGNvbnN0IHZvaWQg KnRyYWluX2ltZW0sIGNvbnN0IHZvaWQgKnRyYWluX2RtZW0pDQo+ID4gPiArew0KPiA+ID4gKyAg ICAgICBpbnQgcmV0ID0gMDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcHJpbnRmKCJDb25maWd1 cmluZyB0cmFpbmluZyBmaXJtd2FyZSAuLi5cbiIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAv KiBSZXNldCBTRFJBTSAqLw0KPiA+ID4gKyAgICAgICB3cml0ZXcoRERSX1BIWV9QUk9URUNUX01F TVJFU0VULA0KPiA+ID4gKyAgICAgICAgICAgICAgKHVpbnRwdHJfdCkoZGRyX2hhbmRvZmZfaW5m by0+cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgRERSX1BIWV9NRU1SRVNFVExfT0ZG U0VUKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIEVuYWJsZSBhY2Nlc3MgdG8gdGhlIFBI WSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMTYo ZGRyX2hhbmRvZmZfaW5mby0+cGh5X2Jhc2UgKw0KPiA+IEREUl9QSFlfQVBCT05MWTBfT0ZGU0VU LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9NSUNST0NPTlRNVVhTRUwpOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBDb3B5IHRyYWluIElNRU0gYmluICovDQo+ID4gPiAr ICAgICAgIG1lbWNweSgodm9pZCAqKWRkcl9oYW5kb2ZmX2luZm8tPnRyYWluX2ltZW1fYmFzZSwg dHJhaW5faW1lbSwNCj4gPiA+ICsgICAgICAgICAgICAgIGRkcl9oYW5kb2ZmX2luZm8tPnRyYWlu X2ltZW1fbGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0gbWVtY21wKCh2b2lk ICopZGRyX2hhbmRvZmZfaW5mby0+dHJhaW5faW1lbV9iYXNlLA0KPiB0cmFpbl9pbWVtLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+dHJhaW5faW1lbV9sZW5n dGgpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVi dWcoIiVzOiBGYWlsZWQgdG8gY29weSB0cmFpbiBJTUVNIGJpbmFyeVxuIiwgX19mdW5jX18pOw0K PiA+ID4gKyAgICAgICAgICAgICAgIC8qIElzb2xhdGUgdGhlIEFQQiBhY2Nlc3MgZnJvbSBpbnRl cm5hbCBDU1JzICovDQo+ID4gPiArICAgICAgICAgICAgICAgc2V0Yml0c19sZTE2KGRkcl9oYW5k b2ZmX2luZm8tPnBoeV9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg RERSX1BIWV9BUEJPTkxZMF9PRkZTRVQsDQo+ID4gRERSX1BIWV9NSUNST0NPTlRNVVhTRUwpOw0K PiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgbWVtY3B5KCh2b2lkICopZGRyX2hhbmRvZmZfaW5mby0+dHJhaW5f ZG1lbV9iYXNlLA0KPiB0cmFpbl9kbWVtLA0KPiA+ID4gKyAgICAgICAgICAgICAgZGRyX2hhbmRv ZmZfaW5mby0+dHJhaW5fZG1lbV9sZW5ndGgpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXQg PSBtZW1jbXAoKHZvaWQgKilkZHJfaGFuZG9mZl9pbmZvLT50cmFpbl9kbWVtX2Jhc2UsDQo+ID4g dHJhaW5fZG1lbSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIGRkcl9oYW5kb2ZmX2luZm8t PnRyYWluX2RtZW1fbGVuZ3RoKTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAg ICAgICAgICAgICBkZWJ1ZygiJXM6IEZhaWxlZCB0byBjb3B5IHRyYWluIERNRU0gYmluYXJ5XG4i LCBfX2Z1bmNfXyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIElzb2xhdGUgdGhlIEFQQiBh Y2Nlc3MgZnJvbSBpbnRlcm5hbCBDU1JzICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUxNihk ZHJfaGFuZG9mZl9pbmZvLT5waHlfYmFzZSArDQo+ID4gRERSX1BIWV9BUEJPTkxZMF9PRkZTRVQs DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFJfUEhZX01JQ1JPQ09OVE1VWFNFTCk7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gK3N0YXRpYyB2b2lkIGNhbGlicmF0aW5nX3NkcmFtKHN0cnVjdCBkZHJfaGFuZG9mZiAqZGRy X2hhbmRvZmZfaW5mbykNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIC8qIEluaXQgbWFpbGJveCBw cm90b2NvbCAtIHNldCAxIHRvIERDVFdSSVRFUFJPVFswXSAqLw0KPiA+ID4gKyAgICAgICBzZXRi aXRzX2xlMTYoZGRyX2hhbmRvZmZfaW5mby0+cGh5X2Jhc2UgKw0KPiA+IEREUl9QSFlfRENUV1JJ VEVQUk9UX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIEREUl9QSFlfRENUV1JJ VEVQUk9UKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogSW5pdCBtYWlsYm94IHByb3RvY29s IC0gc2V0IDEgdG8gVUNUV1JJVEVQUk9UWzBdICovDQo+ID4gPiArICAgICAgIHNldGJpdHNfbGUx NihkZHJfaGFuZG9mZl9pbmZvLT5waHlfYmFzZSArDQo+ID4gRERSX1BIWV9VQ1RXUklURVBST1Rf T0ZGU0VULA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9VQ1RXUklURVBST1Qp Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBSZXNldCBhbmQgc3RhbGxpbmcgQVJDIHByb2Nl c3NvciAqLw0KPiA+ID4gKyAgICAgICBzZXRiaXRzX2xlMTYoZGRyX2hhbmRvZmZfaW5mby0+cGh5 X2Jhc2UgKw0KPiA+IEREUl9QSFlfTUlDUk9SRVNFVF9PRkZTRVQsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICBERFJfUEhZX01JQ1JPUkVTRVRfUkVTRVQgfA0KPiBERFJfUEhZX01JQ1JPUkVT RVRfU1RBTEwpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBSZWxlYXNlIEFSQyBwcm9jZXNz b3IgKi8NCj4gPiA+ICsgICAgICAgY2xyYml0c19sZTE2KGRkcl9oYW5kb2ZmX2luZm8tPnBoeV9i YXNlICsNCj4gPiBERFJfUEhZX01JQ1JPUkVTRVRfT0ZGU0VULA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgRERSX1BIWV9NSUNST1JFU0VUX1JFU0VUKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgLyogU3RhcnRpbmcgUEhZIGZpcm13YXJlIGV4ZWN1dGlvbiAqLw0KPiA+ID4gKyAgICAgICBj bHJiaXRzX2xlMTYoZGRyX2hhbmRvZmZfaW5mby0+cGh5X2Jhc2UgKw0KPiA+IEREUl9QSFlfTUlD Uk9SRVNFVF9PRkZTRVQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFJfUEhZX01JQ1JP UkVTRVRfU1RBTEwpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGdldF9t YWlsKHN0cnVjdCBkZHJfaGFuZG9mZiAqaGFuZG9mZiwgZW51bSBtZXNzYWdlX21vZGUNCj4gbW9k ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgdTMyICptZXNzYWdlX2lkKQ0KPiA+ID4gK3sN Cj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogUG9sbGlu ZyBtYWpvciBtZXNzYWdlcyBmcm9tIFBNVSAqLw0KPiA+ID4gKyAgICAgICByZXQgPSB3YWl0X2Zv cl9iaXRfbGUxNigoY29uc3Qgdm9pZCAqKShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUl9QSFlfVUNUU0hBRE9XUkVHU19PRkZTRVQp LA0KPiA+ID4gKw0KPiBERFJfUEhZX1VDVFNIQURPV1JFR1NfVUNUV1JJVEVQUk9URVNIQURPVywN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIFRJTUVPVVRfMjAw TVMsIGZhbHNlKTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAg ICAgIGRlYnVnKCIlczogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIg bWFqb3IgbWVzc2FnZXMgZnJvbSBQTVVcbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgKm1lc3NhZ2Vf aWQgPSByZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9VQ1RXUklURU9OTFlTSEFET1dfT0ZGU0VUKSk7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGlmIChtb2RlID09IFNUUkVBTUlOR19NRVNTQUdFKQ0K PiA+ID4gKyAgICAgICAgICAgICAgICptZXNzYWdlX2lkIHw9IHJlYWR3KCh1aW50cHRyX3QpKCho YW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRERSX1BIWV9VQ1REQVRXUklURU9OTFlTSEFET1dfT0ZGU0VUKSkpIDw8DQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1pfMTY7DQo+ID4gPiArDQo+ID4g PiArICAgICAgIC8qIEFjayB0aGUgcmVjZWlwdCBvZiB0aGUgbWFqb3IgbWVzc2FnZSAqLw0KPiA+ ID4gKyAgICAgICBjbHJiaXRzX2xlMTYoaGFuZG9mZi0+cGh5X2Jhc2UgKw0KPiBERFJfUEhZX0RD VFdSSVRFUFJPVF9PRkZTRVQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBERFJfUEhZX0RD VFdSSVRFUFJPVCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldCA9IHdhaXRfZm9yX2JpdF9s ZTE2KChjb25zdCB2b2lkICopKGhhbmRvZmYtPnBoeV9iYXNlICsNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9VQ1RTSEFET1dSRUdTX09GRlNFVCksDQo+ID4g PiArDQo+IEREUl9QSFlfVUNUU0hBRE9XUkVHU19VQ1RXUklURVBST1RFU0hBRE9XLA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBUSU1FT1VUXzIwME1TLCBmYWxz ZSk7DQo+ID4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1 ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiIGFjayB0aGUg cmVjZWlwdCBvZiB0aGUgbWFqb3IgbWVzc2FnZSBjb21wbGV0ZWRcbiIpOw0KPiA+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgLyogQ29tcGxldGUgcHJvdG9jb2wgKi8NCj4gPiA+ICsgICAgICAgc2V0Yml0c19sZTE2 KGhhbmRvZmYtPnBoeV9iYXNlICsNCj4gRERSX1BIWV9EQ1RXUklURVBST1RfT0ZGU0VULA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9EQ1RXUklURVBST1QpOw0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0 aWMgaW50IGdldF9tYWlsX3N0cmVhbWluZyhzdHJ1Y3QgZGRyX2hhbmRvZmYgKmhhbmRvZmYsDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1lc3NhZ2VfbW9kZSBtb2Rl LCB1MzIgKmluZGV4KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgKmluZGV4ID0gcmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0+cGh5X2Jh c2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBERFJfUEhZX1VDVFdSSVRFT05MWVNI QURPV19PRkZTRVQpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKG1vZGUgPT0gU1RSRUFN SU5HX01FU1NBR0UpDQo+ID4gPiArICAgICAgICAgICAgICAgKmluZGV4IHw9IHJlYWR3KCh1aW50 cHRyX3QpKChoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEREUl9QSFlfVUNUREFUV1JJVEVPTkxZU0hBRE9XX09GRlNFVCkpKSA8PA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWl8xNjsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgLyogQWNrIHRoZSByZWNlaXB0IG9mIHRoZSBtYWpvciBtZXNzYWdlICovDQo+ID4g PiArICAgICAgIGNscmJpdHNfbGUxNihoYW5kb2ZmLT5waHlfYmFzZSArDQo+IEREUl9QSFlfRENU V1JJVEVQUk9UX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIEREUl9QSFlfRENU V1JJVEVQUk9UKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0gd2FpdF9mb3JfYml0X2xl MTYoKGNvbnN0IHZvaWQgKikoaGFuZG9mZi0+cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBERFJfUEhZX1VDVFNIQURPV1JFR1NfT0ZGU0VUKSwNCj4gPiA+ ICsNCj4gRERSX1BIWV9VQ1RTSEFET1dSRUdTX1VDVFdSSVRFUFJPVEVTSEFET1csDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIFRJTUVPVVRfMjAwTVMsIGZhbHNl KTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVn KCIlczogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciIsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgYWNrIHRoZSBy ZWNlaXB0IG9mIHRoZSBtYWpvciBtZXNzYWdlIGNvbXBsZXRlZFxuIik7DQo+ID4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg ICAgICAvKiBDb21wbGV0ZSBwcm90b2NvbCAqLw0KPiA+ID4gKyAgICAgICBzZXRiaXRzX2xlMTYo aGFuZG9mZi0+cGh5X2Jhc2UgKw0KPiBERFJfUEhZX0RDVFdSSVRFUFJPVF9PRkZTRVQsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICBERFJfUEhZX0RDVFdSSVRFUFJPVCk7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg aW50IGRlY29kZV9zdHJlYW1pbmdfbWVzc2FnZShzdHJ1Y3QgZGRyX2hhbmRvZmYNCj4gKmRkcl9o YW5kb2ZmX2luZm8sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 MzIgKnN0cmVhbWluZ19pbmRleCkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCBpID0gMCwg cmV0Ow0KPiA+ID4gKyAgICAgICB1MzIgdGVtcDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgdGVt cCA9ICpzdHJlYW1pbmdfaW5kZXg7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHdoaWxlIChpIDwg R0VUX0xPV0hXX0RBVEEodGVtcCkpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBnZXRf bWFpbChkZHJfaGFuZG9mZl9pbmZvLCBTVFJFQU1JTkdfTUVTU0FHRSwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmdfaW5kZXgpOw0KPiA+ID4gKyAgICAgICAg ICAgICAgIGlmIChyZXQpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHByaW50ZigiYXJnc1slZF06IDB4JXgg IiwgaSwgKnN0cmVhbWluZ19pbmRleCk7DQo+ID4gPiArICAgICAgICAgICAgICAgaSsrOw0KPiA+ ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHBvbGxfZm9yX3RyYWluaW5nX2NvbXBsZXRlKHN0 cnVjdCBkZHJfaGFuZG9mZg0KPiAqZGRyX2hhbmRvZmZfaW5mbykNCj4gPiA+ICt7DQo+ID4gPiAr ICAgICAgIGludCByZXQ7DQo+ID4gPiArICAgICAgIHUzMiBtZXNzYWdlX2lkID0gMDsNCj4gPiA+ ICsgICAgICAgdTMyIHN0cmVhbWluZ19pbmRleCA9IDA7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IGRvIHsNCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBnZXRfbWFpbChkZHJfaGFuZG9mZl9p bmZvLCBNQUpPUl9NRVNTQUdFLA0KPiAmbWVzc2FnZV9pZCk7DQo+ID4gPiArICAgICAgICAgICAg ICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgIHByaW50ZigiTWFqb3IgbWVzc2FnZSBpZCA9 IDAleFxuIiwgbWVzc2FnZV9pZCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgaWYg KG1lc3NhZ2VfaWQgPT0gRldfU1RSRUFNSU5HX01TR19JRCkgew0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gZ2V0X21haWxfc3RyZWFtaW5nKGRkcl9oYW5kb2ZmX2luZm8sDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RS RUFNSU5HX01FU1NBR0UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnN0cmVhbWluZ19pbmRleCk7DQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJzdHJlYW1pbmcgaW5kZXggMCV4IDogIiwgc3RyZWFtaW5nX2luZGV4KTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9zdHJlYW1pbmdfbWVzc2FnZShkZHJf aGFuZG9mZl9pbmZvLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzdHJlYW1pbmdfaW5kZXgpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4g PiA+ICsgICAgICAgfSB3aGlsZSAoKG1lc3NhZ2VfaWQgIT0gRldfVFJBSU5JTkdfQ09NUExFVEVE X1NUQVQpICYmDQo+ID4gPiArICAgICAgICAgICAgICAobWVzc2FnZV9pZCAhPSBGV19UUkFJTklO R19GQUlMRURfU1RBVCkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAobWVzc2FnZV9pZCA9 PSBGV19UUkFJTklOR19DT01QTEVURURfU1RBVCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHBy aW50ZigiRERSIGZpcm13YXJlIHRyYWluaW5nIGNvbXBsZXRlZFxuIik7DQo+ID4gPiArICAgICAg IH0gZWxzZSBpZiAobWVzc2FnZV9pZCA9PSBGV19UUkFJTklOR19GQUlMRURfU1RBVCkgew0KPiA+ ID4gKyAgICAgICAgICAgICAgIHByaW50ZigiRERSIGZpcm13YXJlIHRyYWluaW5nIGZhaWxlZFxu Iik7DQo+ID4gPiArICAgICAgICAgICAgICAgaGFuZygpOw0KPiA+ID4gKyAgICAgICB9DQo+ID4g PiArDQo+ID4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgdm9pZCBlbmFibGVfcGh5X2Nsa19mb3JfY3NyX2FjY2VzcyhzdHJ1Y3QgZGRyX2hhbmRv ZmYgKmhhbmRvZmYsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGVuYWJsZSkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGlmIChlbmFibGUpIHsN Cj4gPiA+ICsgICAgICAgICAgICAgICAvKiBFbmFibGUgUEhZIGNsayAqLw0KPiA+ID4gKyAgICAg ICAgICAgICAgIHNldGJpdHNfbGUxNigodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUl9QSFlfVUNDTEtIQ0xLRU5BQkxF U19PRkZTRVQpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFJfUEhZX1VD Q0xLSENMS0VOQUJMRVNfVUNDTEtFTiB8DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEREUl9QSFlfVUNDTEtIQ0xLRU5BQkxFU19IQ0xLRU4pOw0KPiA+ID4gKyAgICAgICB9IGVs c2Ugew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIERpc2FibGUgUEhZIGNsayAqLw0KPiA+ID4g KyAgICAgICAgICAgICAgIGNscmJpdHNfbGUxNigodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFz ZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUl9QSFlfVUNDTEtIQ0xL RU5BQkxFU19PRkZTRVQpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFJf UEhZX1VDQ0xLSENMS0VOQUJMRVNfVUNDTEtFTiB8DQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEREUl9QSFlfVUNDTEtIQ0xLRU5BQkxFU19IQ0xLRU4pOw0KPiA+ID4gKyAgICAg ICB9DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBk YXRpbmcgdHJhaW4gcmVzdWx0IHRvIHVtY3RsMiBSQU5LQ1RMIHJlZ2lzdGVyDQo+ICovDQo+ID4g PiArc3RhdGljIHZvaWQgc2V0X2NhbF9yZXNfdG9fcmFua2N0cmwodTMyIHJlZ19hZGRyLCB1MTYg dXBkYXRlX3ZhbHVlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTMyIG1hc2ssIHUzMiBtc2JfbWFzaywgdTMyIHNoaWZ0KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAg ICAgdTMyIHJlZywgdmFsdWU7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJlZyA9IHJlYWRsKCh1 aW50cHRyX3QpcmVnX2FkZHIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBkZWJ1ZygibWF4IHZh bHVlIGRpdmlkZWQgYnkgMiBpcyAweCV4XG4iLCB1cGRhdGVfdmFsdWUpOw0KPiA+ID4gKyAgICAg ICBkZWJ1ZygidW1jbHQyIHJlZ2lzdGVyIDB4JXggdmFsdWUgaXMgMCV4IGJlZm9yZSAiLCByZWdf YWRkciwgcmVnKTsNCj4gPiA+ICsgICAgICAgZGVidWcoInVwZGF0ZSB3aXRoIHRyYWluIHJlc3Vs dFxuIik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHZhbHVlID0gKHJlZyAmIG1hc2spID4+IHNo aWZ0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICB2YWx1ZSArPSB1cGRhdGVfdmFsdWUgKyAzOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiByZWcgdmFsdWUgZ3JlYXRlciB0aGFuIDB4Riwgc2V0 IG9uZSB0byBkaWZmX3Jhbmtfd3JfZ2FwX21zYiAqLw0KPiA+ID4gKyAgICAgICBpZiAodmFsdWUg PiAweEYpDQo+ID4gPiArICAgICAgICAgICAgICAgc2V0Yml0c19sZTMyKCh1MzIgKikodWludHB0 cl90KXJlZ19hZGRyLCBtc2JfbWFzayk7DQo+ID4gPiArICAgICAgIGVsc2UNCj4gPiA+ICsgICAg ICAgICAgICAgICBjbHJiaXRzX2xlMzIoKHUzMiAqKSh1aW50cHRyX3QpcmVnX2FkZHIsIG1zYl9t YXNrKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmVnID0gcmVhZGwoKHVpbnRwdHJfdClyZWdf YWRkcik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IHNoaWZ0KSAm IG1hc2s7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIHVwZGF0ZSByZWdpc3RlciAqLw0KPiA+ ID4gKyAgICAgICB3cml0ZWwoKHJlZyAmICh+bWFzaykpIHwgdmFsdWUsICh1aW50cHRyX3QpcmVn X2FkZHIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZWcgPSByZWFkbCgodWludHB0cl90KXJl Z19hZGRyKTsNCj4gPiA+ICsgICAgICAgZGVidWcoInVtY2x0MiByZWdpc3RlciAweCV4IHZhbHVl IGlzIDAleCBiZWZvcmUgIiwgcmVnX2FkZHIsIHJlZyk7DQo+ID4gPiArICAgICAgIGRlYnVnKCJ1 cGRhdGUgd2l0aCB0cmFpbiByZXN1bHRcbiIpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv KiBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRyYWluIHJlc3VsdCB0byByZWdpc3RlciAq Lw0KPiA+ID4gK3N0YXRpYyB2b2lkIHNldF9jYWxfcmVzX3RvX3JlZyh1MzIgcmVnX2FkZHIsIHUx NiB1cGRhdGVfdmFsdWUsIHUzMg0KPiBtYXNrLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBzaGlmdCkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIHUzMiByZWcsIHZh bHVlOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZWcgPSByZWFkbCgodWludHB0cl90KXJlZ19h ZGRyKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgZGVidWcoIm1heCB2YWx1ZSBkaXZpZGVkIGJ5 IDIgaXMgMHgleFxuIiwgdXBkYXRlX3ZhbHVlKTsNCj4gPiA+ICsgICAgICAgZGVidWcoInVtY2x0 MiByZWdpc3RlciAweCV4IHZhbHVlIGlzIDAleCBiZWZvcmUgIiwgcmVnX2FkZHIsIHJlZyk7DQo+ ID4gPiArICAgICAgIGRlYnVnKCJ1cGRhdGUgd2l0aCB0cmFpbiByZXN1bHRcbiIpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICB2YWx1ZSA9IChyZWcgJiBtYXNrKSA+PiBzaGlmdDsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgdmFsdWUgPSAoKHZhbHVlICsgdXBkYXRlX3ZhbHVlICsgMykgPDwgc2hp ZnQpICYgbWFzazsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogdXBkYXRlIHJlZ2lzdGVyICov DQo+ID4gPiArICAgICAgIHdyaXRlbCgocmVnICYgKH5tYXNrKSkgfCB2YWx1ZSwgKHVpbnRwdHJf dClyZWdfYWRkcik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJlZyA9IHJlYWRsKCh1aW50cHRy X3QpcmVnX2FkZHIpOw0KPiA+ID4gKyAgICAgICBkZWJ1ZygidW1jbHQyIHJlZ2lzdGVyIDB4JXgg dmFsdWUgaXMgMCV4IGJlZm9yZSAiLCByZWdfYWRkciwgcmVnKTsNCj4gPiA+ICsgICAgICAgZGVi dWcoInVwZGF0ZSB3aXRoIHRyYWluIHJlc3VsdFxuIik7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gK3N0YXRpYyB1MTYgZ2V0X21heF90eGRxc2RseXRnMF91eF9wMChzdHJ1Y3QgZGRyX2hhbmRv ZmYgKmhhbmRvZmYsDQo+IHUzMiByZWcsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTggbnVtZGJ5dGUsIHUxNiB1cGRfdmFsKQ0KPiA+ID4gK3sNCj4gPiA+ICsg ICAgICAgdTMyIGJfYWRkcjsNCj4gPiA+ICsgICAgICAgdTE2IHZhbDsNCj4gPiA+ICsgICAgICAg dTggYnl0ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogR2V0dGluZyBtYXggdmFsdWUgZnJv bSBEQllURXggVHhEcXNEbHlUZzBfdXhfcDAgKi8NCj4gPiA+ICsgICAgICAgZm9yIChieXRlID0g MDsgYnl0ZSA8IG51bWRieXRlOyBieXRlKyspIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBiX2Fk ZHIgPSBieXRlIDw8IDEzOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIFR4RHFz RGx5VGcwWzk6Nl0gaXMgdGhlIGNvYXJzZSBkZWxheSAqLw0KPiA+ID4gKyAgICAgICAgICAgICAg IHZhbCA9IChyZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyArIGJfYWRkcikpICYNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9UWERRRExZVEcwX0NPQVJTRV9ERUxBWSkgPj4N Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERSX1BIWV9UWERRRExZVEcwX0NP QVJTRV9ERUxBWV9TSElGVDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFs ID0gbWF4KHZhbCwgdXBkX3ZhbCk7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgcmV0dXJuIHVwZF92YWw7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBp bnQgc2V0X2NhbF9yZXNfdG9fdW1jdGwyKHN0cnVjdCBkZHJfaGFuZG9mZiAqaGFuZG9mZiwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfYWRkcl90IHVtY3RsMl9i YXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBkZHJfdHlw ZSB1bWN0bDJfdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCByZXQ7DQo+ID4gPiAr ICAgICAgIHU4IG51bWRieXRlID0gMHg4Ow0KPiA+ID4gKyAgICAgICB1MTYgdXBkX3ZhbCwgdmFs Ow0KPiA+ID4gKyAgICAgICB1MzIgZHJhbXRtZzJfcmVnX2FkZHIsIHJhbmtjdGxfcmVnX2FkZHIs IHJlZ19hZGRyOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBFbmFibGUgcXVhc2ktZHluYW1p YyBwcm9ncmFtaW5nIG9mIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVycyAqLw0KPiA+ID4gKyAgICAg ICBjbHJiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1NXQ1RMX09GRlNFVCwNCj4gPiBERFI0 X1NXQ1RMX1NXX0RPTkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZXQgPSBlbmFibGVfcXVh c2lfZHluYW1pY19yZWdfZ3JwMyh1bWN0bDJfYmFzZSwgdW1jdGwyX3R5cGUpOw0KPiA+ID4gKyAg ICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgIC8qIEVuYWJsZSBhY2Nlc3MgdG8gdGhlIFBIWSBjb25maWd1cmF0aW9u IHJlZ2lzdGVycyAqLw0KPiA+ID4gKyAgICAgICBjbHJiaXRzX2xlMTYoaGFuZG9mZi0+cGh5X2Jh c2UgKyBERFJfUEhZX0FQQk9OTFkwX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg IEREUl9QSFlfTUlDUk9DT05UTVVYU0VMKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVt Y3RsMl90eXBlID09IEREUlRZUEVfRERSNCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHZhbCA9 IEdFVF9ISUdIQl9EQVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNlDQo+ICsN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9X V18xXzBfT0ZGU0VUKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwZF92YWwg PSBHRVRfTE9XQl9EQVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtDQo+ID5waHlfYmFzZSAr DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9D RERfV1dfMF8xX09GRlNFVCkpKTsNCj4gPiA+ICsgICAgICAgfSBlbHNlIGlmICh1bWN0bDJfdHlw ZSA9PSBERFJUWVBFX0xQRERSNF8wKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgdmFsID0gR0VU X0xPV0JfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9DSEFfV1dfMV8w X09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFsID0gR0VU X0hJR0hCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0NCj4gPnBoeV9iYXNlICsNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9DRERf Q0hBX1dXXzBfMV9PRkZTRVQpKSk7DQo+ID4gPiArICAgICAgIH0gZWxzZSBpZiAodW1jdGwyX3R5 cGUgPT0gRERSVFlQRV9MUEREUjRfMSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IEdF VF9ISUdIQl9EQVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNlDQo+ICsNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9DSEJf V1dfMV8wX09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFs ID0gR0VUX0xPV0JfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLQ0KPiA+cGh5X2Jhc2Ug Kw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNRU1fTUJf Q0REX0NIQl9XV18wXzFfT0ZGU0VUKSkpOw0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4g PiArICAgICAgIHVwZF92YWwgPSBtYXgodmFsLCB1cGRfdmFsKTsNCj4gPiA+ICsgICAgICAgZGVi dWcoIm1heCB2YWx1ZSBpcyAweCV4XG4iLCB1cGRfdmFsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgLyogRGl2aWRlZCBieSB0d28gaXMgcmVxdWlyZWQgd2hlbiBydW5uaW5nIGluIGZyZXEgcmF0 aW8gMToyICovDQo+ID4gPiArICAgICAgIGlmICghKHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9N U1RSX09GRlNFVCkgJg0KPiBERFI0X0ZSRVFfUkFUSU8pKQ0KPiA+ID4gKyAgICAgICAgICAgICAg IHVwZF92YWwgPSBESVZfUk9VTkRfQ0xPU0VTVCh1cGRfdmFsLCAyKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgZGVidWcoIlVwZGF0ZSB0cmFpbiB2YWx1ZSB0byB1bWN0bDINCj4gUkFOS0NUTC5k aWZmX3Jhbmtfd3JfZ2FwXG4iKTsNCj4gPiA+ICsgICAgICAgcmFua2N0bF9yZWdfYWRkciA9IHVt Y3RsMl9iYXNlICsgRERSNF9SQU5LQ1RMX09GRlNFVDsNCj4gPiA+ICsgICAgICAgLyogVXBkYXRl IHRyYWluIHZhbHVlIHRvIHVtY3RsMiBSQU5LQ1RMLmRpZmZfcmFua193cl9nYXAgKi8NCj4gPiA+ ICsgICAgICAgc2V0X2NhbF9yZXNfdG9fcmFua2N0cmwocmFua2N0bF9yZWdfYWRkciwgdXBkX3Zh bCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERSNF9SQU5LQ1RMX0RJ RkZfUkFOS19XUl9HQVAsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERE UjRfUkFOS0NUTF9ESUZGX1JBTktfV1JfR0FQX01TQiwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9SQU5LQ1RMX0RJRkZfUkFOS19XUl9HQVBfU0hJRlQpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiVXBkYXRlIHRyYWluIHZhbHVlIHRvIHVtY3RsMiBE UkFNVE1HMi5XMlJEXG4iKTsNCj4gPiA+ICsgICAgICAgZHJhbXRtZzJfcmVnX2FkZHIgPSB1bWN0 bDJfYmFzZSArIEREUjRfRFJBTVRNRzJfT0ZGU0VUOw0KPiA+ID4gKyAgICAgICAvKiBVcGRhdGUg dHJhaW4gdmFsdWUgdG8gdW1jdGwyIGRyYW10bWcyLndyMnJkICovDQo+ID4gPiArICAgICAgIHNl dF9jYWxfcmVzX3RvX3JlZyhkcmFtdG1nMl9yZWdfYWRkciwgdXBkX3ZhbCwNCj4gPiBERFI0X0RS QU1UTUcyX1dSMlJELCAwKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3RsMl90eXBl ID09IEREUlRZUEVfRERSNCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCJVcGRhdGUg dHJhaW4gdmFsdWUgdG8gdW1jdGwyIERSQU1UTUc5LlcyUkRfU1xuIik7DQo+ID4gPiArICAgICAg ICAgICAgICAgcmVnX2FkZHIgPSB1bWN0bDJfYmFzZSArIEREUjRfRFJBTVRNRzlfT0ZGU0VUOw0K PiA+ID4gKyAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0cmFpbiB2YWx1ZSB0byB1bWN0bDIgZHJh bXRtZzkud3IycmRfcyAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIHNldF9jYWxfcmVzX3RvX3Jl ZyhyZWdfYWRkciwgdXBkX3ZhbCwNCj4gRERSNF9EUkFNVE1HOV9XMlJEX1MsDQo+ID4gMCk7DQo+ ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKHVtY3RsMl90eXBlID09 IEREUlRZUEVfRERSNCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IEdFVF9ISUdIQl9E QVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNlDQo+ICsNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9SUl8xXzBfT0ZGU0VU KSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwZF92YWwgPSBHRVRfTE9XQl9E QVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtDQo+ID5waHlfYmFzZSArDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9DRERfUlJfMF8xX09G RlNFVCkpKTsNCj4gPiA+ICsgICAgICAgfSBlbHNlIGlmICh1bWN0bDJfdHlwZSA9PSBERFJUWVBF X0xQRERSNF8wKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgdmFsID0gR0VUX0xPV0JfREFUQShy ZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9DSEFfUlJfMV8wX09GRlNFVCkpKTsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFsID0gR0VUX0hJR0hCX0RBVEEo cmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0NCj4gPnBoeV9iYXNlICsNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9DRERfQ0hBX1JSXzBfMV9P RkZTRVQpKSk7DQo+ID4gPiArICAgICAgIH0gZWxzZSBpZiAodW1jdGwyX3R5cGUgPT0gRERSVFlQ RV9MUEREUjRfMSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IEdFVF9ISUdIQl9EQVRB KHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNlDQo+ICsNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9DSEJfUlJfMV8wX09GRlNF VCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFsID0gR0VUX0xPV0Jf REFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLQ0KPiA+cGh5X2Jhc2UgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNRU1fTUJfQ0REX0NIQl9SUl8w XzFfT0ZGU0VUKSkpOw0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHVw ZF92YWwgPSBtYXgodmFsLCB1cGRfdmFsKTsNCj4gPiA+ICsgICAgICAgZGVidWcoIm1heCB2YWx1 ZSBpcyAweCV4XG4iLCB1cGRfdmFsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogRGl2aWRl ZCBieSB0d28gaXMgcmVxdWlyZWQgd2hlbiBydW5uaW5nIGluIGZyZXEgcmF0aW8gMToyICovDQo+ ID4gPiArICAgICAgIGlmICghKHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9NU1RSX09GRlNFVCkg Jg0KPiBERFI0X0ZSRVFfUkFUSU8pKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwZF92YWwgPSBE SVZfUk9VTkRfQ0xPU0VTVCh1cGRfdmFsLCAyKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgZGVi dWcoIlVwZGF0ZSB0cmFpbiB2YWx1ZSB0byB1bWN0bDIgUkFOS0NUTC5kaWZmX3JhbmtfcmRfZ2Fw XG4iKTsNCj4gPiA+ICsgICAgICAgLyogVXBkYXRlIHRyYWluIHZhbHVlIHRvIHVtY3RsMiBSQU5L Q1RMLmRpZmZfcmFua19yZF9nYXAgKi8NCj4gPiA+ICsgICAgICAgc2V0X2NhbF9yZXNfdG9fcmFu a2N0cmwocmFua2N0bF9yZWdfYWRkciwgdXBkX3ZhbCwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9SQU5LQ1RMX0RJRkZfUkFOS19SRF9HQVAsDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfUkFOS0NUTF9ESUZGX1JBTktfUkRfR0FQ X01TQiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRERSNF9SQU5LQ1RM X0RJRkZfUkFOS19SRF9HQVBfU0hJRlQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAodW1j dGwyX3R5cGUgPT0gRERSVFlQRV9ERFI0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgdmFsID0g R0VUX0hJR0hCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0+cGh5X2Jhc2UNCj4gKw0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNRU1fTUJfQ0REX1JX XzFfMV9PRkZTRVQpKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgdXBkX3ZhbCA9 IEdFVF9MT1dCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0NCj4gPnBoeV9iYXNlICsN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NE RF9SV18xXzBfT0ZGU0VUKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwZF92 YWwgPSBtYXgodmFsLCB1cGRfdmFsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB2 YWwgPSBHRVRfSElHSEJfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZQ0K PiArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9D RERfUldfMF8xX09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRf dmFsID0gbWF4KHZhbCwgdXBkX3ZhbCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAg dmFsID0gR0VUX0xPV0JfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSAr DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9S V18wXzBfT0ZGU0VUKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwZF92YWwg PSBtYXgodmFsLCB1cGRfdmFsKTsNCj4gPiA+ICsgICAgICAgfSBlbHNlIGlmICh1bWN0bDJfdHlw ZSA9PSBERFJUWVBFX0xQRERSNF8wKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgdmFsID0gR0VU X0xPV0JfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLT5waHlfYmFzZSArDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01CX0NERF9DSEFfUldfMV8x X09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFsID0gR0VU X0hJR0hCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0NCj4gPnBoeV9iYXNlICsNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9DRERf Q0hBX1JXXzFfMF9PRkZTRVQpKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgdXBk X3ZhbCA9IG1heCh2YWwsIHVwZF92YWwpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAg IHZhbCA9IEdFVF9MT1dCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCkoaGFuZG9mZi0+cGh5X2Jhc2Ug Kw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1FTV9NQl9DRERf Q0hBX1JXXzBfMV9PRkZTRVQpKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgdXBk X3ZhbCA9IG1heCh2YWwsIHVwZF92YWwpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAg IHZhbCA9IEdFVF9ISUdIQl9EQVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNl DQo+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01C X0NERF9DSEFfUldfMF8wX09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAg ICB1cGRfdmFsID0gbWF4KHZhbCwgdXBkX3ZhbCk7DQo+ID4gPiArICAgICAgIH0gZWxzZSBpZiAo dW1jdGwyX3R5cGUgPT0gRERSVFlQRV9MUEREUjRfMSkgew0KPiA+ID4gKyAgICAgICAgICAgICAg IHZhbCA9IEdFVF9ISUdIQl9EQVRBKHJlYWR3KCh1aW50cHRyX3QpKGhhbmRvZmYtPnBoeV9iYXNl DQo+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUVNX01C X0NERF9DSEJfUldfMV8xX09GRlNFVCkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAg ICB1cGRfdmFsID0gR0VUX0xPV0JfREFUQShyZWFkdygodWludHB0cl90KShoYW5kb2ZmLQ0KPiA+ cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERNRU1fTUJfQ0REX0NIQl9SV18xXzBfT0ZGU0VUKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICAgICAgICAgIHVwZF92YWwgPSBtYXgodmFsLCB1cGRfdmFsKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgICAgICAgICB2YWwgPSBHRVRfSElHSEJfREFUQShyZWFkdygodWludHB0cl90KShoYW5k b2ZmLT5waHlfYmFzZQ0KPiArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRE1FTV9NQl9DRERfQ0hCX1JXXzBfMV9PRkZTRVQpKSk7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgICAgICAgICAgdXBkX3ZhbCA9IG1heCh2YWwsIHVwZF92YWwpOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICAgICAgICAgIHZhbCA9IEdFVF9MT1dCX0RBVEEocmVhZHcoKHVpbnRwdHJfdCko aGFuZG9mZi0+cGh5X2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRE1FTV9NQl9DRERfQ0hCX1JXXzBfMF9PRkZTRVQpKSk7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgICAgICAgICAgdXBkX3ZhbCA9IG1heCh2YWwsIHVwZF92YWwpOw0KPiA+ID4gKyAgICAg ICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGRlYnVnKCJtYXggdmFsdWUgaXMgMHgleFxuIiwg dXBkX3ZhbCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIC8qIERpdmlkZWQgYnkgdHdvIGlzIHJl cXVpcmVkIHdoZW4gcnVubmluZyBpbiBmcmVxIHJhdGlvIDE6MiAqLw0KPiA+ID4gKyAgICAgICBp ZiAoIShyZWFkbCh1bWN0bDJfYmFzZSArIEREUjRfTVNUUl9PRkZTRVQpICYNCj4gRERSNF9GUkVR X1JBVElPKSkNCj4gPiA+ICsgICAgICAgICAgICAgICB1cGRfdmFsID0gRElWX1JPVU5EX0NMT1NF U1QodXBkX3ZhbCwgMik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGRlYnVnKCJVcGRhdGUgdHJh aW4gdmFsdWUgdG8gdW1jdGwyIGRyYW10bWcyLnJkMndyXG4iKTsNCj4gPiA+ICsgICAgICAgLyog VXBkYXRlIHRyYWluIHZhbHVlIHRvIHVtY3RsMiBkcmFtdG1nMi5yZDJ3ciAqLw0KPiA+ID4gKyAg ICAgICBzZXRfY2FsX3Jlc190b19yZWcoZHJhbXRtZzJfcmVnX2FkZHIsIHVwZF92YWwsDQo+ID4g RERSNF9EUkFNVE1HMl9SRDJXUiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIERE UjRfRFJBTVRNRzJfUkQyV1JfU0hJRlQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBDaGVj a2luZyBFQ0MgaXMgZW5hYmxlZD8sIGxwZGRyNCB1c2luZyBpbmxpbmUgRUNDICovDQo+ID4gPiAr ICAgICAgIHZhbCA9IHJlYWRsKHVtY3RsMl9iYXNlICsgRERSNF9FQ0NDRkcwX09GRlNFVCkgJg0K PiBERFI0X0VDQ19NT0RFOw0KPiA+ID4gKyAgICAgICBpZiAodmFsICYmIHVtY3RsMl90eXBlID09 IEREUlRZUEVfRERSNCkNCj4gPiA+ICsgICAgICAgICAgICAgICBudW1kYnl0ZSA9IDB4OTsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgdXBkX3ZhbCA9IDA7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IC8qIEdldHRpbmcgbWF4IHZhbHVlIGZyb20gREJZVEV4IFR4RHFzRGx5VGcwX3UwX3AwICovDQo+ ID4gPiArICAgICAgIHVwZF92YWwgPSBnZXRfbWF4X3R4ZHFzZGx5dGcwX3V4X3AwKGhhbmRvZmYs DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUl9Q SFlfREJZVEUwX1RYRFFETFlURzBfVTBfUDAsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bWRieXRlLCB1cGRfdmFsKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgLyogR2V0dGluZyBtYXggdmFsdWUgZnJvbSBEQllURXggVHhEcXNEbHlUZzBfdTFf cDAgKi8NCj4gPiA+ICsgICAgICAgdXBkX3ZhbCA9IGdldF9tYXhfdHhkcXNkbHl0ZzBfdXhfcDAo aGFuZG9mZiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRERSX1BIWV9EQllURTBfVFhEUURMWVRHMF9VMV9QMCwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZGJ5dGUsIHVwZF92YWwpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICBkZWJ1ZygiVHhEcXNEbHlUZzAgbWF4IHZhbHVlIGlzIDB4JXhcbiIs IHVwZF92YWwpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBEaXZpZGVkIGJ5IHR3byBpcyBy ZXF1aXJlZCB3aGVuIHJ1bm5pbmcgaW4gZnJlcSByYXRpbyAxOjIgKi8NCj4gPiA+ICsgICAgICAg aWYgKCEocmVhZGwodW1jdGwyX2Jhc2UgKyBERFI0X01TVFJfT0ZGU0VUKSAmDQo+IEREUjRfRlJF UV9SQVRJTykpDQo+ID4gPiArICAgICAgICAgICAgICAgdXBkX3ZhbCA9IERJVl9ST1VORF9DTE9T RVNUKHVwZF92YWwsIDIpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICByZWdfYWRkciA9IHVtY3Rs Ml9iYXNlICsgRERSNF9ERklUTUcxX09GRlNFVDsNCj4gPiA+ICsgICAgICAgLyogVXBkYXRlIHRy YWluIHZhbHVlIHRvIHVtY3RsMiBkZml0bWcxLmRmaV93cmRhdGFfZGVsYXkgKi8NCj4gPiA+ICsg ICAgICAgc2V0X2NhbF9yZXNfdG9fcmVnKHJlZ19hZGRyLCB1cGRfdmFsLA0KPiA+IEREUjRfREZJ VE1HMV9ERklfVF9XUkRBVEFfREVMQVksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBERFI0X0RGSVRNRzFfREZJX1RfV1JEQVRBX1NISUZUKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgLyogQ29tcGxldGUgcXVhc2ktZHluYW1pYyByZWdpc3RlciBwcm9ncmFtbWluZyAqLw0KPiA+ ID4gKyAgICAgICBzZXRiaXRzX2xlMzIodW1jdGwyX2Jhc2UgKyBERFI0X1NXQ1RMX09GRlNFVCwN Cj4gPiBERFI0X1NXQ1RMX1NXX0RPTkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBQb2xs aW5nIHByb2dyYW1taW5nIGRvbmUgKi8NCj4gPiA+ICsgICAgICAgcmV0ID0gd2FpdF9mb3JfYml0 X2xlMzIoKGNvbnN0IHZvaWQgKikodW1jdGwyX2Jhc2UgKw0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBERFI0X1NXU1RBVF9PRkZTRVQpLA0KPiBERFI0X1NXU1RBVF9TV19E T05FX0FDSywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgVElN RU9VVF8yMDBNUywgZmFsc2UpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAg ICAgICAgICAgICAgZGVidWcoIiVzOiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIiwgX19mdW5j X18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIgcHJvZ3JhbW1pbmcgZG9uZVxuIik7 DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogSXNvbGF0ZSB0aGUg QVBCIGFjY2VzcyBmcm9tIGludGVybmFsIENTUnMgKi8NCj4gPiA+ICsgICAgICAgc2V0Yml0c19s ZTE2KGhhbmRvZmYtPnBoeV9iYXNlICsgRERSX1BIWV9BUEJPTkxZMF9PRkZTRVQsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICBERFJfUEhZX01JQ1JPQ09OVE1VWFNFTCk7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRp YyBpbnQgc3RhcnRfZGRyX2NhbGlicmF0aW9uKHN0cnVjdCBkZHJfaGFuZG9mZiAqZGRyX2hhbmRv ZmZfaW5mbykNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCByZXQ7DQo+ID4gPiArDQo+ID4g PiArICAgICAgIC8qIEltcGxlbWVudCAxRCB0cmFpbmluZyBmaXJtd2FyZSAqLw0KPiA+ID4gKyAg ICAgICByZXQgPSBjb25maWd1cmVfdHJhaW5pbmdfZmlybXdhcmUoZGRyX2hhbmRvZmZfaW5mbywN Cj4gPiA+ICsgICAgICAgICAgICAgICAoY29uc3Qgdm9pZA0KPiAqKVNPQzY0X0hBTkRPRkZfRERS X1RSQUlOX0lNRU1fMURfU0VDVElPTiwNCj4gPiA+ICsgICAgICAgICAgICAgICAoY29uc3Qgdm9p ZA0KPiAqKVNPQzY0X0hBTkRPRkZfRERSX1RSQUlOX0RNRU1fMURfU0VDVElPTik7DQo+ID4gPiAr ICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IEZhaWxl ZCB0byBjb25maWd1cmUgMUQgdHJhaW5pbmcgZmlybXdhcmVcbiIsDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7 DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgY2FsaWJyYXRpbmdfc2Ry YW0oZGRyX2hhbmRvZmZfaW5mbyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldCA9IHBvbGxf Zm9yX3RyYWluaW5nX2NvbXBsZXRlKGRkcl9oYW5kb2ZmX2luZm8pOw0KPiA+ID4gKyAgICAgICBp ZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBGYWlsZWQgdG8gZ2V0 IEZXIHRyYWluaW5nIGNvbXBsZXRlZFxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAvKiBVcGRhdGluZyB0cmFpbmluZyByZXN1bHQg dG8gRERSIGNvbnRyb2xsZXIgKi8NCj4gPiA+ICsgICAgICAgaWYgKGRkcl9oYW5kb2ZmX2luZm8t PmNudGxyX3QgPT0gRERSVFlQRV9ERFI0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0g c2V0X2NhbF9yZXNfdG9fdW1jdGwyKGRkcl9oYW5kb2ZmX2luZm8sDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkcl9oYW5kb2ZmX2luZm8tPmNudGxy X2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRkcl9oYW5kb2ZmX2luZm8tPmNudGxyX3QpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIlczogRmFpbGVkIHRv IHVwZGF0ZSB0cmFpbiByZXN1bHQgdG8gIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJE RFIgY29udHJvbGxlclxuIik7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0Ow0KPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICAvKiBJbXBsZW1lbnQgMkQgdHJhaW5pbmcgZmlybXdhcmUgKi8NCj4gPiA+ ICsgICAgICAgcmV0ID0gY29uZmlndXJlX3RyYWluaW5nX2Zpcm13YXJlKGRkcl9oYW5kb2ZmX2lu Zm8sDQo+ID4gPiArICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQNCj4gKilTT0M2NF9IQU5ET0ZG X0REUl9UUkFJTl9JTUVNXzJEX1NFQ1RJT04sDQo+ID4gPiArICAgICAgICAgICAgICAgKGNvbnN0 IHZvaWQNCj4gKilTT0M2NF9IQU5ET0ZGX0REUl9UUkFJTl9ETUVNXzJEX1NFQ1RJT04pOw0KPiA+ ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkgew0K PiA+IFdoeSBuZWVkIDIgY2hlY2tpbmcgZm9yICJyZXQiPw0KPiANCj4gR29vZCBjYXRjaCAhISBJ IHRoaW5rIHRoaXMgd2FzIGFjY2lkZW50bHkgZHVwbGljYXRlZA0KPiANCj4gPg0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBGYWlsZWQgdG8gdXBkYXRlIHRyYWluIHJl c3VsdCB0byAiLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18p Ow0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkREUiBjb250cm9sbGVyXG4i KTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGNh bGlicmF0aW5nX3NkcmFtKGRkcl9oYW5kb2ZmX2luZm8pOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICByZXQgPSBwb2xsX2Zvcl90cmFpbmluZ19jb21wbGV0ZShkZHJfaGFuZG9mZl9pbmZvKTsNCj4g PiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IEZh aWxlZCB0byBnZXQgRlcgdHJhaW5pbmcgY29tcGxldGVkXG4iLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIHJldDsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBpbml0X2NvbnRyb2xsZXIoc3Ry dWN0IGRkcl9oYW5kb2ZmICpkZHJfaGFuZG9mZl9pbmZvLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdTMyICp1c2VyX2JhY2t1cCwgdTMyICp1c2VyX2JhY2t1cF8ybmQpDQo+ID4g PiArew0KPiA+ID4gKyAgICAgICBpbnQgcmV0ID0gMDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg aWYgKGRkcl9oYW5kb2ZmX2luZm8tPmNudGxyX3QgPT0gRERSVFlQRV9ERFI0ICB8fA0KPiA+ID4g KyAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+Y250bHJfdCA9PSBERFJUWVBFX0xQRERSNF8w KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSAxc3QgRERSIGNvbnRyb2xs ZXIgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBpbml0X3VtY3RsMihkZHJfaGFuZG9m Zl9pbmZvLT5jbnRscl9oYW5kb2ZmX2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+Y250bHJfYmFzZSwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZHJfaGFuZG9mZl9pbmZvLT5jbnRscl90LA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkcl9oYW5kb2ZmX2luZm8tPmNu dGxyX2hhbmRvZmZfbGVuZ3RoLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVzZXJfYmFja3VwKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IEZhaWxlZCB0byBpbmlsaWFsaXpl IGZpcnN0IGNvbnRyb2xsZXJcbiIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0K PiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICBpZiAoZGRyX2hhbmRvZmZfaW5mby0+Y250bHIyX3QgPT0gRERSVFlQRV9MUEREUjRf MSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgMm5kIEREUiBjb250cm9s bGVyICovDQo+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0gaW5pdF91bWN0bDIoZGRyX2hhbmRv ZmZfaW5mby0+Y250bHIyX2hhbmRvZmZfYmFzZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZHJfaGFuZG9mZl9pbmZvLT5jbnRscjJfYmFzZSwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHJfaGFuZG9mZl9pbmZvLT5jbnRscjJfdCwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHJfaGFuZG9mZl9pbmZv LT5jbnRscjJfaGFuZG9mZl9sZW5ndGgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXNlcl9iYWNrdXBfMm5kKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0 KQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBGYWlsZWQgdG8gaW5p bGlhbGl6ZSAybmQgY29udHJvbGxlclxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IGRmaV9p bml0KHN0cnVjdCBkZHJfaGFuZG9mZiAqZGRyX2hhbmRvZmZfaW5mbykNCj4gPiA+ICt7DQo+ID4g PiArICAgICAgIGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldCA9IGRkcl9zdGFy dF9kZmlfaW5pdChkZHJfaGFuZG9mZl9pbmZvLT5jbnRscl9iYXNlLA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGRyX2hhbmRvZmZfaW5mby0+Y250bHJfdCk7DQo+ID4g PiArICAgICAgIGlmIChyZXQpDQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKGRkcl9oYW5kb2ZmX2luZm8tPmNudGxyMl90ID09IERE UlRZUEVfTFBERFI0XzEpDQo+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0gZGRyX3N0YXJ0X2Rm aV9pbml0KGRkcl9oYW5kb2ZmX2luZm8tPmNudGxyMl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHJfaGFuZG9mZl9pbmZvLT5jbnRscjJfdCk7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0K PiA+ID4gK3N0YXRpYyBpbnQgY2hlY2tfZGZpX2luaXQoc3RydWN0IGRkcl9oYW5kb2ZmICpoYW5k b2ZmKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgcmV0ID0gZGRyX2NoZWNrX2RmaV9pbml0X2NvbXBsZXRlKGhhbmRvZmYtPmNudGxyX2Jh c2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k b2ZmLT5jbnRscl90KTsNCj4gPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBpZiAoaGFuZG9mZi0+Y250 bHIyX3QgPT0gRERSVFlQRV9MUEREUjRfMSkNCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSBk ZHJfY2hlY2tfZGZpX2luaXRfY29tcGxldGUoaGFuZG9mZi0+Y250bHIyX2Jhc2UsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRvZmYt PmNudGxyMl90KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICt9 DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCB0cmlnZ2VyX3NkcmFtX2luaXQoc3RydWN0IGRk cl9oYW5kb2ZmICpoYW5kb2ZmKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IHJldDsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgcmV0ID0gZGRyX3RyaWdnZXJfc2RyYW1faW5pdChoYW5kb2Zm LT5jbnRscl9iYXNlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhhbmRvZmYtPmNudGxyX3QpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGlmIChoYW5kb2Zm LT5jbnRscjJfdCA9PSBERFJUWVBFX0xQRERSNF8xKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHJl dCA9IGRkcl90cmlnZ2VyX3NkcmFtX2luaXQoaGFuZG9mZi0+Y250bHIyX2Jhc2UsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kb2ZmLT5jbnRs cjJfdCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgZGRyX3Bvc3RfY29uZmlnKHN0cnVjdCBkZHJfaGFuZG9m ZiAqaGFuZG9mZikNCj4gPiA+ICt7DQo+ID4gPiArICAgICAgIGludCByZXQ7DQo+ID4gPiArDQo+ ID4gPiArICAgICAgIHJldCA9IGRkcl9wb3N0X2hhbmRvZmZfY29uZmlnKGhhbmRvZmYtPmNudGxy X2Jhc2UsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRv ZmYtPmNudGxyX3QpOw0KPiA+ID4gKyAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGlmIChoYW5kb2ZmLT5jbnRs cjJfdCA9PSBERFJUWVBFX0xQRERSNF8xKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGRk cl9wb3N0X2hhbmRvZmZfY29uZmlnKGhhbmRvZmYtPmNudGxyMl9iYXNlLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRvZmYtPmNudGxyMl90 KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIGJvb2wgaXNfZGRyX3JldGVudGlvbl9lbmFibGVkKHUzMiBib290X3Nj cmF0Y2hfY29sZDBfcmVnKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgcmV0dXJuIGJvb3Rfc2Ny YXRjaF9jb2xkMF9yZWcgJg0KPiA+ID4gKyAgICAgICAgICAgICAgQUxUX1NZU01HUl9TQ1JBVENI X1JFR18wX0REUl9SRVRFTlRJT05fTUFTSzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3Rh dGljIGJvb2wgaXNfZGRyX2JpdHN0cmVhbV9zaGFfbWF0Y2hpbmcodTMyDQo+IGJvb3Rfc2NyYXRj aF9jb2xkMF9yZWcpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICByZXR1cm4gYm9vdF9zY3JhdGNo X2NvbGQwX3JlZyAmDQo+ID4gQUxUX1NZU01HUl9TQ1JBVENIX1JFR18wX0REUl9TSEFfTUFTSzsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGVudW0gcmVzZXRfdHlwZSBnZXRfcmVz ZXRfdHlwZSh1MzIgYm9vdF9zY3JhdGNoX2NvbGQwX3JlZykNCj4gPiA+ICt7DQo+ID4gPiArICAg ICAgIHJldHVybiAoYm9vdF9zY3JhdGNoX2NvbGQwX3JlZyAmDQo+ID4gPiArICAgICAgICAgICAg ICAgQUxUX1NZU01HUl9TQ1JBVENIX1JFR18wX0REUl9SRVNFVF9UWVBFX01BU0spID4+DQo+ID4g PiArICAgICAgICAgICAgICAgQUxUX1NZU01HUl9TQ1JBVENIX1JFR18wX0REUl9SRVNFVF9UWVBF X1NISUZUOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2b2lkIHJlc2V0X3R5cGVfZGVidWdf cHJpbnQodTMyIGJvb3Rfc2NyYXRjaF9jb2xkMF9yZWcpDQo+ID4gPiArew0KPiA+ID4gKyAgICAg ICBzd2l0Y2ggKGdldF9yZXNldF90eXBlKGJvb3Rfc2NyYXRjaF9jb2xkMF9yZWcpKSB7DQo+ID4g PiArICAgICAgIGNhc2UgUE9SX1JFU0VUOg0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIl czogUE9SIGlzIHRyaWdnZXJlZFxuIiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAg IGJyZWFrOw0KPiA+ID4gKyAgICAgICBjYXNlIFdBUk1fUkVTRVQ6DQo+ID4gPiArICAgICAgICAg ICAgICAgZGVidWcoIiVzOiBXYXJtIHJlc2V0IGlzIHRyaWdnZXJlZFxuIiwgX19mdW5jX18pOw0K PiA+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAgICBjYXNlIENPTERfUkVT RVQ6DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBDb2xkIHJlc2V0IGlzIHRyaWdn ZXJlZFxuIiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4g KyAgICAgICBkZWZhdWx0Og0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIlczogSW52YWxp ZCByZXNldCB0eXBlXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICt9DQo+ ID4gPiArDQo+ID4gPiArYm9vbCBpc19kZHJfaW5pdCh2b2lkKQ0KPiA+ID4gK3sNCj4gPiA+ICsg ICAgICAgdTMyIHJlZyA9IHJlYWRsKHNvY2ZwZ2FfZ2V0X3N5c21ncl9hZGRyKCkgKw0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgU1lTTUdSX1NPQzY0X0JPT1RfU0NSQVRDSF9DT0xEMCk7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJlc2V0X3R5cGVfZGVidWdfcHJpbnQocmVnKTsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgaWYgKGdldF9yZXNldF90eXBlKHJlZykgPT0gUE9SX1JFU0VU KSB7DQo+ID4gPiArICAgICAgICAgICAgICAgZGVidWcoIiVzOiBERFIgaW5pdCBpcyByZXF1aXJl ZFxuIiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ ID4gKyAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIGlmIChnZXRfcmVzZXRfdHlwZShy ZWcpID09IFdBUk1fUkVTRVQpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IERE UiBpbml0IGlzIHNraXBwZWRcbiIsIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgaWYg KGdldF9yZXNldF90eXBlKHJlZykgPT0gQ09MRF9SRVNFVCkgew0KPiA+ID4gKyAgICAgICAgICAg ICAgIGlmIChpc19kZHJfcmV0ZW50aW9uX2VuYWJsZWQocmVnKSAmJg0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICBpc19kZHJfYml0c3RyZWFtX3NoYV9tYXRjaGluZyhyZWcpKSB7DQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IEREUiByZXRlbnRpb24gYml0IGlzIHNl dFxuIiwgX19mdW5jX18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVz OiBNYXRjaGluZyBpbiBERFIgYmlzdHJlYW1cbiIsIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGRlYnVnKCIlczogRERSIGluaXQgaXMgc2tpcHBlZFxuIiwgX19mdW5j X18pOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4g KyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICBkZWJ1ZygiJXM6IEREUiBpbml0IGlzIHJlcXVpcmVkXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiAr ICAgICAgIHJldHVybiB0cnVlOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtpbnQgc2RyYW1f bW1yX2luaXRfZnVsbChzdHJ1Y3QgdWRldmljZSAqZGV2KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAg ICAgdTMyIHVzZXJfYmFja3VwWzJdLCB1c2VyX2JhY2t1cF8ybmRbMl07DQo+ID4gPiArICAgICAg IGludCByZXQ7DQo+ID4gPiArICAgICAgIHN0cnVjdCBiZF9pbmZvIGJkOw0KPiA+ID4gKyAgICAg ICBzdHJ1Y3QgZGRyX2hhbmRvZmYgZGRyX2hhbmRvZmZfaW5mbzsNCj4gPiA+ICsgICAgICAgc3Ry dWN0IGFsdGVyYV9zZHJhbV9wcml2ICpwcml2ID0gZGV2X2dldF9wcml2KGRldik7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgIHByaW50ZigiQ2hlY2tpbmcgU0RSQU0gY29uZmlndXJhdGlvbiBpbiBw cm9ncmVzcyAuLi5cbiIpOw0KPiA+ID4gKyAgICAgICByZXQgPSBwb3B1bGF0ZV9kZHJfaGFuZG9m ZigmZGRyX2hhbmRvZmZfaW5mbyk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkgew0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBGYWlsZWQgdG8gcG9wdWxh dGUgRERSIGhhbmRvZmZcbiIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogU2V0IHRoZSBN UEZFIE5vQyBtdXggdG8gY29ycmVjdCBERFIgY29udHJvbGxlciB0eXBlICovDQo+ID4gPiArICAg ICAgIHVzZV9kZHI0KGRkcl9oYW5kb2ZmX2luZm8uY250bHJfdCk7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIGlmIChpc19kZHJfaW5pdCgpKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgcHJpbnRm KCJTRFJBTSBpbml0IGluIHByb2dyZXNzIC4uLlxuIik7DQo+ID4gPiArDQo+ID4gPiArICAgICAg ICAgICAgICAgLyoNCj4gPiA+ICsgICAgICAgICAgICAgICAgKiBQb2xsaW5nIHJlc2V0IGNvbXBs ZXRlLCBtdXN0IGJlIGhpZ2ggdG8gZW5zdXJlIEREUg0KPiBzdWJzeXN0ZW0NCj4gPiA+ICsgICAg ICAgICAgICAgICAgKiBpbiBjb21wbGV0ZSByZXNldCBzdGF0ZSBiZWZvcmUgaW5pdCBERFIgY2xv Y2sgYW5kIEREUg0KPiA+ID4gKyAgICAgICAgICAgICAgICAqIGNvbnRyb2xsZXINCj4gPiA+ICsg ICAgICAgICAgICAgICAgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICByZXQgPSB3YWl0X2Zvcl9i aXRfbGUzMigoY29uc3Qgdm9pZCAqKSgodWludHB0cl90KShyZWFkbA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZHJfaGFuZG9mZl9pbmZvLm1lbV9yZXNl dF9iYXNlKSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TUVNX1JTVF9NR1JfU1RBVFVTKSksDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUVNX1JTVF9NR1JfU1RBVFVTX1JFU0VUX0NPTVBMRVRFLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIFRJTUVPVVRfMjAwTVMs IGZhbHNlKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZygiJXM6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IiLCBf X2Z1bmNfXyk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiIHJlc2V0IGNv bXBsZXRlIGRvbmVcbiIpOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsNCj4gPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAg ICAgcmV0ID0gZW5hYmxlX2Rkcl9jbG9jayhkZXYpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlm IChyZXQpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGluaXRfY29udHJvbGxlcigmZGRyX2hhbmRv ZmZfaW5mbywgdXNlcl9iYWNrdXAsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVzZXJfYmFja3VwXzJuZCk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKHJl dCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiVzOiBGYWlsZWQgdG8g aW5pbGlhbGl6ZSBERFIgY29udHJvbGxlclxuIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQo+ID4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg ICAgICAgIC8qIFJlbGVhc2UgdGhlIGNvbnRyb2xsZXIgZnJvbSByZXNldCAqLw0KPiA+ID4gKyAg ICAgICAgICAgICAgIHNldGJpdHNfbGUzMigodWludHB0cl90KQ0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVhZGwoZGRyX2hhbmRvZmZfaW5mby5tZW1fcmVzZXRfYmFzZSkg Kw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1fUlNUX01HUl9TVEFUVVMp LA0KPiBNRU1fUlNUX01HUl9TVEFUVVNfQVhJX1JTVA0KPiA+IHwNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTUVNX1JTVF9NR1JfU1RBVFVTX0NPTlRST0xMRVJfUlNUIHwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1JTVF9NR1JfU1RBVFVTX1JFU0VU X0NPTVBMRVRFKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmludGYoIkREUiBj b250cm9sbGVyIGNvbmZpZ3VyYXRpb24gaXMgY29tcGxldGVkXG4iKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIEREUiBQSFkgKi8NCj4gPiA+ICsgICAgICAg ICAgICAgICByZXQgPSBpbml0X3BoeSgmZGRyX2hhbmRvZmZfaW5mbyk7DQo+ID4gPiArICAgICAg ICAgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVidWco IiVzOiBGYWlsZWQgdG8gaW5pbGlhbGl6ZSBERFIgUEhZXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAgICAgICAgICAg IH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICBlbmFibGVfcGh5X2Nsa19mb3JfY3Ny X2FjY2VzcygmZGRyX2hhbmRvZmZfaW5mbywgdHJ1ZSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAg ICAgICAgICAgcmV0ID0gc3RhcnRfZGRyX2NhbGlicmF0aW9uKCZkZHJfaGFuZG9mZl9pbmZvKTsN Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICBkZWJ1ZygiJXM6IEZhaWxlZCB0byBjYWxpYnJhdGUgRERSXG4iLCBfX2Z1bmNfXyk7 DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICBlbmFibGVfcGh5X2Ns a19mb3JfY3NyX2FjY2VzcygmZGRyX2hhbmRvZmZfaW5mbywgZmFsc2UpOw0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICAgICAgICAgIC8qIFJlc2V0IEFSQyBwcm9jZXNzb3Igd2hlbiBubyB1c2luZyBm b3Igc2VjdXJpdHkgcHVycG9zZSAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIHNldGJpdHNfbGUx NihkZHJfaGFuZG9mZl9pbmZvLnBoeV9iYXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRERSX1BIWV9NSUNST1JFU0VUX09GRlNFVCwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSX1BIWV9NSUNST1JFU0VUX1JFU0VUKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgICAgICAgICAvKiBERFIgZnJlcSBzZXQgdG8gc3VwcG9ydCBERFI0LTMyMDAgKi8N Cj4gPiA+ICsgICAgICAgICAgICAgICBwaHlfaW5pdF9lbmdpbmUoJmRkcl9oYW5kb2ZmX2luZm8p Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGRmaV9pbml0KCZkZHJfaGFu ZG9mZl9pbmZvKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KQ0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAg ICAgICByZXQgPSBjaGVja19kZmlfaW5pdCgmZGRyX2hhbmRvZmZfaW5mbyk7DQo+ID4gPiArICAg ICAgICAgICAgICAgaWYgKHJldCkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0gdHJpZ2dlcl9zZHJh bV9pbml0KCZkZHJfaGFuZG9mZl9pbmZvKTsNCj4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0 KQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgICAgICAgICByZXQgPSBkZHJfcG9zdF9jb25maWcoJmRkcl9oYW5kb2ZmX2lu Zm8pOw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIC8q IFJlc3RvcmUgdXNlciBzZXR0aW5ncyAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCh1 c2VyX2JhY2t1cFswXSwgZGRyX2hhbmRvZmZfaW5mby5jbnRscl9iYXNlICsNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgRERSNF9QV1JDVExfT0ZGU0VUKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgICAgICAgICBpZiAoZGRyX2hhbmRvZmZfaW5mby5jbnRscjJfdCA9PSBERFJUWVBFX0xQ RERSNF8wKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0Yml0c19sZTMyKGRkcl9o YW5kb2ZmX2luZm8uY250bHJfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRERSNF9JTklUMF9PRkZTRVQsIHVzZXJfYmFja3VwWzFdKTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAoZGRyX2hhbmRvZmZfaW5mby5jbnRscjJfdCA9PSBE RFJUWVBFX0xQRERSNF8xKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0 b3JlIHVzZXIgc2V0dGluZ3MgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl bCh1c2VyX2JhY2t1cF8ybmRbMF0sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGRyX2hhbmRvZmZfaW5mby5jbnRscjJfYmFzZSArDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRERSNF9QV1JDVExfT0ZGU0VUKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHNldGJpdHNfbGUzMihkZHJfaGFuZG9mZl9pbmZvLmNudGxyMl9i YXNlICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERFI0X0lO SVQwX09GRlNFVCwgdXNlcl9iYWNrdXBfMm5kWzFdKTsNCj4gPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyogRW5hYmxlIGlucHV0IHRyYWZmaWMg cGVyIHBvcnQgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBzZXRiaXRzX2xlMzIoZGRyX2hhbmRv ZmZfaW5mby5jbnRscl9iYXNlICsNCj4gRERSNF9QQ1RSTDBfT0ZGU0VULA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBERFI0X1BDVFJMMF9QT1JUX0VOKTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgICAgICAgICBpZiAoZGRyX2hhbmRvZmZfaW5mby5jbnRscjJfdCA9PSBERFJU WVBFX0xQRERSNF8xKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUg aW5wdXQgdHJhZmZpYyBwZXIgcG9ydCAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c2V0Yml0c19sZTMyKGRkcl9oYW5kb2ZmX2luZm8uY250bHIyX2Jhc2UgKw0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEREUjRfUENUUkwwX09GRlNFVCwgRERSNF9Q Q1RSTDBfUE9SVF9FTik7DQo+ID4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAgICAgICAgIHByaW50ZigiRERSIGluaXQgc3VjY2Vzc1xuIik7DQo+ID4gPiArICAg ICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgLyogR2V0IGJhbmsgY29uZmlndXJhdGlvbiBm cm9tIGRldmljZXRyZWUgKi8NCj4gPiA+ICsgICAgICAgcmV0ID0gZmR0ZGVjX2RlY29kZV9yYW1f c2l6ZShnZC0+ZmR0X2Jsb2IsIE5VTEwsIDAsIE5VTEwsDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBoeXNfc2l6ZV90ICopJmdkLT5yYW1fc2l6ZSwgJmJkKTsN Cj4gPiA+ICsgICAgICAgaWYgKHJldCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGRlYnVnKCIl czogRmFpbGVkIHRvIGRlY29kZSBtZW1vcnkgbm9kZVxuIiwgIF9fZnVuY19fKTsNCj4gPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgcHJpbnRmKCJERFI6ICVsbGQgTWlCXG4iLCBnZC0+cmFtX3NpemUgPj4gMjApOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICBwcml2LT5pbmZvLmJhc2UgPSBiZC5iaV9kcmFtWzBdLnN0 YXJ0Ow0KPiA+ID4gKyAgICAgICBwcml2LT5pbmZvLnNpemUgPSBnZC0+cmFtX3NpemU7DQo+ID4g PiArDQo+ID4gPiArICAgICAgIHNkcmFtX3NpemVfY2hlY2soJmJkKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgc2RyYW1fc2V0X2ZpcmV3YWxsKCZiZCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAg IHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Rkci9hbHRl cmEvc2RyYW1fc29jNjQuYw0KPiA+IGIvZHJpdmVycy9kZHIvYWx0ZXJhL3NkcmFtX3NvYzY0LmMN Cj4gPiA+IGluZGV4IGNjNjU2ZGI5N2MuLmQ2YmFhYzI0MTAgMTAwNjQ0DQo+ID4gPiAtLS0gYS9k cml2ZXJzL2Rkci9hbHRlcmEvc2RyYW1fc29jNjQuYw0KPiA+ID4gKysrIGIvZHJpdmVycy9kZHIv YWx0ZXJhL3NkcmFtX3NvYzY0LmMNCj4gPiA+IEBAIC0xMDAsMTIgKzEwMCwxNCBAQCBpbnQgZW1p Zl9yZXNldChzdHJ1Y3QgYWx0ZXJhX3NkcmFtX3BsYXQgKnBsYXQpDQo+ID4gPiAgICAgICAgIHJl dHVybiAwOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiArI2lmICFJU19FTkFCTEVEKENPTkZJR19U QVJHRVRfU09DRlBHQV9ONVgpDQo+ID4gPiAgaW50IHBvbGxfaG1jX2Nsb2NrX3N0YXR1cyh2b2lk KQ0KPiA+ID4gIHsNCj4gPiA+ICAgICAgICAgcmV0dXJuIHdhaXRfZm9yX2JpdF9sZTMyKChjb25z dCB2b2lkICopKHNvY2ZwZ2FfZ2V0X3N5c21ncl9hZGRyKCkNCj4gKw0KPiA+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU1lTTUdSX1NPQzY0X0hNQ19DTEspLA0KPiA+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTTUdSX0hNQ19DTEtfU1RBVFVTX01TSywg dHJ1ZSwgMTAwMCwgZmFsc2UpOw0KPiA+ID4gIH0NCj4gPiA+ICsjZW5kaWYNCj4gPiA+DQo+ID4g PiAgdm9pZCBzZHJhbV9jbGVhcl9tZW0ocGh5c19hZGRyX3QgYWRkciwgcGh5c19zaXplX3Qgc2l6 ZSkNCj4gPiA+ICB7DQo+ID4gPiBAQCAtMjQ5LDExICsyNTEsNzggQEAgcGh5c19zaXplX3Qgc2Ry YW1fY2FsY3VsYXRlX3NpemUoc3RydWN0DQo+ID4gYWx0ZXJhX3NkcmFtX3BsYXQgKnBsYXQpDQo+ ID4gPiAgICAgICAgIHJldHVybiBzaXplOw0KPiA+ID4gIH0NCj4gPiA+DQo+ID4gPiArdm9pZCBz ZHJhbV9zZXRfZmlyZXdhbGwoc3RydWN0IGJkX2luZm8gKmJkKQ0KPiA+ID4gK3sNCj4gPiA+ICsg ICAgICAgdTMyIGk7DQo+ID4gPiArICAgICAgIHBoeXNfc2l6ZV90IHZhbHVlOw0KPiA+ID4gKyAg ICAgICB1MzIgbG93ZXIsIHVwcGVyOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBmb3IgKGkgPSAw OyBpIDwgQ09ORklHX05SX0RSQU1fQkFOS1M7IGkrKykgew0KPiA+ID4gKyAgICAgICAgICAgICAg IGlmICghYmQtPmJpX2RyYW1baV0uc2l6ZSkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIHZhbHVlID0gYmQtPmJp X2RyYW1baV0uc3RhcnQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgLyogS2VlcCBm aXJzdCAxTUIgb2YgU0RSQU0gbWVtb3J5IHJlZ2lvbiBhcyBzZWN1cmUgcmVnaW9uDQo+IHdoZW4N Cj4gPiA+ICsgICAgICAgICAgICAgICAgKiB1c2luZyBBVEYgZmxvdywgd2hlcmUgdGhlIEFURiBj b2RlIGlzIGxvY2F0ZWQuDQo+ID4gPiArICAgICAgICAgICAgICAgICovDQo+ID4gPiArICAgICAg ICAgICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklHX1NQTF9BVEYpICYmIGkgPT0gMCkNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IFNaXzFNOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAgICAgICAgIC8qIFNldHRpbmcgbm9uLXNlY3VyZSBNUFUgcmVnaW9uIGJhc2UgYW5k IGJhc2UgZXh0ZW5kZWQgKi8NCj4gPiA+ICsgICAgICAgICAgICAgICBsb3dlciA9IGxvd2VyXzMy X2JpdHModmFsdWUpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwcGVyID0gdXBwZXJfMzJfYml0 cyh2YWx1ZSk7DQo+ID4gPiArICAgICAgICAgICAgICAgRldfTVBVX0REUl9TQ1JfV1JJVEVMKGxv d2VyLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGV19NUFVf RERSX1NDUl9NUFVSRUdJT04wQUREUl9CQVNFICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGkgKiA0ICogc2l6ZW9mKHUzMikpKTsNCj4gPiA+ICsgICAgICAg ICAgICAgICBGV19NUFVfRERSX1NDUl9XUklURUwodXBwZXIgJiAweGZmLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGV19NUFVfRERSX1NDUl9NUFVSRUdJT04w QUREUl9CQVNFRVhUICsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGkgKiA0ICogc2l6ZW9mKHUzMikpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAg ICAvKiBTZXR0aW5nIG5vbi1zZWN1cmUgTm9uLU1QVSByZWdpb24gYmFzZSBhbmQgYmFzZSBleHRl bmRlZA0KPiAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIEZXX01QVV9ERFJfU0NSX1dSSVRFTChs b3dlciwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRldfTVBV X0REUl9TQ1JfTk9OTVBVUkVHSU9OMEFERFJfQkFTRQ0KPiArDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChpICogNCAqIHNpemVvZih1MzIpKSk7DQo+ID4gPiAr ICAgICAgICAgICAgICAgRldfTVBVX0REUl9TQ1JfV1JJVEVMKHVwcGVyICYgMHhmZiwNCj4gPiA+ ICsNCj4gRldfTVBVX0REUl9TQ1JfTk9OTVBVUkVHSU9OMEFERFJfQkFTRUVYVA0KPiA+ICsNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgKiA0ICogc2l6ZW9m KHUzMikpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAvKiBTZXR0aW5nIG5vbi1z ZWN1cmUgTVBVIGxpbWl0IGFuZCBsaW1pdCBleHRleGRlZCAqLw0KPiA+ID4gKyAgICAgICAgICAg ICAgIHZhbHVlID0gYmQtPmJpX2RyYW1baV0uc3RhcnQgKyBiZC0+YmlfZHJhbVtpXS5zaXplIC0g MTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICBsb3dlciA9IGxvd2VyXzMyX2JpdHMo dmFsdWUpOw0KPiA+ID4gKyAgICAgICAgICAgICAgIHVwcGVyID0gdXBwZXJfMzJfYml0cyh2YWx1 ZSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgRldfTVBVX0REUl9TQ1JfV1JJVEVM KGxvd2VyLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGV19N UFVfRERSX1NDUl9NUFVSRUdJT04wQUREUl9MSU1JVCArDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpICogNCAqIHNpemVvZih1MzIpKSk7DQo+ID4gPiArICAg ICAgICAgICAgICAgRldfTVBVX0REUl9TQ1JfV1JJVEVMKHVwcGVyICYgMHhmZiwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRldfTVBVX0REUl9TQ1JfTVBVUkVH SU9OMEFERFJfTElNSVRFWFQgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaSAqIDQgKiBzaXplb2YodTMyKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg ICAgICAgIC8qIFNldHRpbmcgbm9uLXNlY3VyZSBOb24tTVBVIGxpbWl0IGFuZCBsaW1pdCBleHRl eGRlZCAqLw0KPiA+ID4gKyAgICAgICAgICAgICAgIEZXX01QVV9ERFJfU0NSX1dSSVRFTChsb3dl ciwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRldfTVBVX0RE Ul9TQ1JfTk9OTVBVUkVHSU9OMEFERFJfTElNSVQNCj4gKw0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaSAqIDQgKiBzaXplb2YodTMyKSkpOw0KPiA+ID4gKyAg ICAgICAgICAgICAgIEZXX01QVV9ERFJfU0NSX1dSSVRFTCh1cHBlciAmIDB4ZmYsDQo+ID4gPiAr DQo+IEZXX01QVV9ERFJfU0NSX05PTk1QVVJFR0lPTjBBRERSX0xJTUlURVhUDQo+ID4gKw0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSAqIDQgKiBzaXplb2Yo dTMyKSkpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIEZXX01QVV9ERFJfU0NSX1dS SVRFTChCSVQoaSkgfCBCSVQoaSArIDgpLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGV19NUFVfRERSX1NDUl9FTl9TRVQpOw0KPiA+ID4gKyAgICAgICB9DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gIHN0YXRpYyBpbnQgYWx0ZXJhX3NkcmFtX29mX3RvX3Bs YXQoc3RydWN0IHVkZXZpY2UgKmRldikNCj4gPiA+ICB7DQo+ID4gPiAgICAgICAgIHN0cnVjdCBh bHRlcmFfc2RyYW1fcGxhdCAqcGxhdCA9IGRldl9nZXRfcGxhdChkZXYpOw0KPiA+ID4gICAgICAg ICBmZHRfYWRkcl90IGFkZHI7DQo+ID4gPg0KPiA+ID4gKyAgICAgICAvKiBUaGVzZSByZWdzIGlu Zm8gYXJlIHBhcnQgb2YgRERSIGhhbmRvZmYgaW4gYml0c3RyZWFtICovDQo+ID4gPiArI2lmIElT X0VOQUJMRUQoQ09ORklHX1RBUkdFVF9TT0NGUEdBX041WCkNCj4gPiA+ICsgICAgICAgcmV0dXJu IDA7DQo+ID4gPiArI2VuZGlmDQo+ID4gPiArDQo+ID4gPiAgICAgICAgIGFkZHIgPSBkZXZfcmVh ZF9hZGRyX2luZGV4KGRldiwgMCk7DQo+ID4gPiAgICAgICAgIGlmIChhZGRyID09IEZEVF9BRERS X1RfTk9ORSkNCj4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiA+IEBA IC0zMTQsNiArMzgzLDcgQEAgc3RhdGljIHN0cnVjdCByYW1fb3BzIGFsdGVyYV9zZHJhbV9vcHMg PSB7DQo+ID4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCB1ZGV2aWNlX2lkIGFsdGVyYV9zZHJhbV9p ZHNbXSA9IHsNCj4gPiA+ICAgICAgICAgeyAuY29tcGF0aWJsZSA9ICJhbHRyLHNkci1jdGwtczEw IiB9LA0KPiA+ID4gICAgICAgICB7IC5jb21wYXRpYmxlID0gImludGVsLHNkci1jdGwtYWdpbGV4 IiB9LA0KPiA+ID4gKyAgICAgICB7IC5jb21wYXRpYmxlID0gImludGVsLHNkci1jdGwtbjV4IiB9 LA0KPiA+ID4gICAgICAgICB7IC8qIHNlbnRpbmVsICovIH0NCj4gPiA+ICB9Ow0KPiA+ID4NCj4g PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Rkci9hbHRlcmEvc2RyYW1fc29jNjQuaA0KPiA+IGIv ZHJpdmVycy9kZHIvYWx0ZXJhL3NkcmFtX3NvYzY0LmgNCj4gPiA+IGluZGV4IDhhZjBhZmM0MTAu Ljc0NjBmOGMyMjAgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL2Rkci9hbHRlcmEvc2RyYW1f c29jNjQuaA0KPiA+ID4gKysrIGIvZHJpdmVycy9kZHIvYWx0ZXJhL3NkcmFtX3NvYzY0LmgNCj4g PiA+IEBAIC0xODAsNiArMTgwLDcgQEAgaW50IGVtaWZfcmVzZXQoc3RydWN0IGFsdGVyYV9zZHJh bV9wbGF0ICpwbGF0KTsNCj4gPiA+ICBpbnQgcG9sbF9obWNfY2xvY2tfc3RhdHVzKHZvaWQpOw0K PiA+ID4gIHZvaWQgc2RyYW1fY2xlYXJfbWVtKHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfc2l6ZV90 IHNpemUpOw0KPiA+ID4gIHZvaWQgc2RyYW1faW5pdF9lY2NfYml0cyhzdHJ1Y3QgYmRfaW5mbyAq YmQpOw0KPiA+ID4gK3ZvaWQgc2RyYW1fc2V0X2ZpcmV3YWxsKHN0cnVjdCBiZF9pbmZvICpiZCk7 DQo+ID4gPiAgdm9pZCBzZHJhbV9zaXplX2NoZWNrKHN0cnVjdCBiZF9pbmZvICpiZCk7DQo+ID4g PiAgcGh5c19zaXplX3Qgc2RyYW1fY2FsY3VsYXRlX3NpemUoc3RydWN0IGFsdGVyYV9zZHJhbV9w bGF0ICpwbGF0KTsNCj4gPiA+ICBpbnQgc2RyYW1fbW1yX2luaXRfZnVsbChzdHJ1Y3QgdWRldmlj ZSAqZGV2KTsNCj4gPiA+IC0tDQo+ID4gPiAyLjE5LjANCj4gPiA+DQo=