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=unavailable 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 533B6C4338F for ; Thu, 29 Jul 2021 14:09:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AE736054E for ; Thu, 29 Jul 2021 14:09:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238914AbhG2OJ6 (ORCPT ); Thu, 29 Jul 2021 10:09:58 -0400 Received: from mga05.intel.com ([192.55.52.43]:52894 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238953AbhG2OIT (ORCPT ); Thu, 29 Jul 2021 10:08:19 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10060"; a="298470829" X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; d="scan'208";a="298470829" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jul 2021 07:03:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,278,1620716400"; d="scan'208";a="507175462" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by FMSMGA003.fm.intel.com with ESMTP; 29 Jul 2021 07:03:37 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) 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.10; Thu, 29 Jul 2021 07:03:34 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Thu, 29 Jul 2021 07:03:34 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.172) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Thu, 29 Jul 2021 07:03:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AWaZwWLyDTybvAK+hlccWaujexQvoyhGxdjMYBHy7Tj7QSfF2DuRXnKcfJuJe+vjRT9ljazmDIcEK6Ze54Pr4Q/ioUzvxlhTmMIoQ6aU32+f9t7OWjvdBpr0UJfdC1XHZCKSWvf/++0mAHKcz3/IP9QBgUzqNi3gbnopdjMTevartuh7U70ccGFficO4zSEeLK0tGpkUcmfQ+yVABAdZpy9IaHgXoza54zZHWA52UtddHdOLVJDeGWGu5RfaMwk1TltttJ3fwN3RSB75nytQ70rWJiKUhH6kq/j2xvTYe9WchLZXopd8FpPIy9/zuU+yHcYd36L6BqXQq7XJY4TNkg== 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=oar32Jh6PBEFuVYeihoE48BUEn2eBXf1uY0YuY1aN+0=; b=BdarOv/F0Db/b+LuSOOf7BzBoPqssfNVqvgJwIBMECsanVmTiFeTtXR/kaIdhr4z6uSuNXkgNQRMRlQgu00qE/gQ2n6/ZfaODwOOs2wXamYhOIuQqPhuE5c1whvW/94M3ocDihVvLcd+i2iVAOvpFAhF9pTGWHUj83rXDqzWLOxBnLN9Ds6q4nc6IW1XQwYrMtDOGQjNKiHI5l3UQFCvAQQ7h71kCOTRZcFCHpKbK4SbQ7kYdC81WKxbGLkU1QCM5pZyAdowf9JqZk6kL62iUwenzCrEz2qoaImubqoZhdbYsRjzmn1xU030Hi3thsT7YyLJUcQTyc24jOJg0hBsmw== 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=oar32Jh6PBEFuVYeihoE48BUEn2eBXf1uY0YuY1aN+0=; b=EI1h5sHhHEMhm3jJOgc5o0Vivd0UsHiZDkMYsLacomc2KIAYczLJ8KeAjbzcgjomafxy0YJpVFS5T8NEU8pvTmi+xshkEYRkNEFruuB3jJ0nsfe80iB+a+Pn569RsQZACyv7gXt8mQEr10dPl/gHlK7uvmHHBAgtLoPlmVnap/g= Received: from SN6PR11MB2589.namprd11.prod.outlook.com (2603:10b6:805:53::12) by SA2PR11MB5196.namprd11.prod.outlook.com (2603:10b6:806:119::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.17; Thu, 29 Jul 2021 14:03:28 +0000 Received: from SN6PR11MB2589.namprd11.prod.outlook.com ([fe80::6e:364a:dc09:3d35]) by SN6PR11MB2589.namprd11.prod.outlook.com ([fe80::6e:364a:dc09:3d35%5]) with mapi id 15.20.4373.021; Thu, 29 Jul 2021 14:03:28 +0000 From: "Winiarska, Iwona" To: "zweiss@equinix.com" CC: "corbet@lwn.net" , "jae.hyun.yoo@linux.intel.com" , "Lutomirski, Andy" , "linux-hwmon@vger.kernel.org" , "Luck, Tony" , "andrew@aj.id.au" , "mchehab@kernel.org" , "jdelvare@suse.com" , "linux-kernel@vger.kernel.org" , "mingo@redhat.com" , "devicetree@vger.kernel.org" , "tglx@linutronix.de" , "linux@roeck-us.net" , "linux-aspeed@lists.ozlabs.org" , "linux-doc@vger.kernel.org" , "yazen.ghannam@amd.com" , "robh+dt@kernel.org" , "openbmc@lists.ozlabs.org" , "bp@alien8.de" , "linux-arm-kernel@lists.infradead.org" , "pierre-louis.bossart@linux.intel.com" , "andriy.shevchenko@linux.intel.com" , "x86@kernel.org" , "gregkh@linuxfoundation.org" Subject: Re: [PATCH 07/14] peci: Add peci-aspeed controller driver Thread-Topic: [PATCH 07/14] peci: Add peci-aspeed controller driver Thread-Index: AQHXd2rgJ2vtBAF9sEOGUwpyjZOFA6tWmaeAgAN8hIA= Date: Thu, 29 Jul 2021 14:03:28 +0000 Message-ID: References: <20210712220447.957418-1-iwona.winiarska@intel.com> <20210712220447.957418-8-iwona.winiarska@intel.com> <20210727084901.GQ8018@packtop> In-Reply-To: <20210727084901.GQ8018@packtop> Accept-Language: en-US, pl-PL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.40.3 (3.40.3-1.fc34) authentication-results: equinix.com; dkim=none (message not signed) header.d=none;equinix.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d6e0a73f-00ae-4381-e22b-08d95299a431 x-ms-traffictypediagnostic: SA2PR11MB5196: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: XO3KuYuHi209iP/4Xs2aycZIpBxe4FQ5UBVPlwAxhC/N17jJVCjJesq4wH2DJDC35TOj/vJxBgZK+zKyEf90ivvigMGVTODoq6bxdrGmufO7A2euvFAR8q+ROh0JnuGRNfUg/jwBJ2j8T8erBX+LiGXghNczlAssj2vhLWnv4okzS78vBXtO1udfFGiw9Xwyi9XT+JosDKqJWRVtCR6bNtO+Y5luz1HEaNunQKCJqdE19/M3ebsy2cMIX59GoqHX9Kr5SH11AbzGWMDefWmph/6ZIHbn5ZSthc13ub0KhnN55QOvzv1eDNT2doJXOSMv6EgdcvZxEZLpesh4ndC8fLmvZ+7AW+p9Lcb+FwozE0GOekIocQM6iufI1YB7K5wC6hCGMlIfZwDZR4o580ErptPHWv7Iysjp1uIz9mLwBo9y5x6eY5uai1tzOSEW5fN/S/E2O+wM1G2h8jLkJ6/VsZ59iHQXnT1hEl0eG+av6k6UQXsbM0JhGs8VhAcYZlFQum9mgq3WNmDGVAt07XUFSftNf+ZXdri6/wv0iFnkjEjotgWVd2jSAIwM2zOC70KTB47kawTgFHQnnxbr/n555R9wfJgIP70aqR/lGv6MTqY7LBgMjSMJ+bqjq4TuR/sXYD1CTKGxAwAHo+APFE4m8Q4up0z4vZL0NtM2xtJt3JoNsgUH4S++wJMz8NeqJ+AXnjF/SY5NJfGQ3vFKwFxebA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2589.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(66556008)(66446008)(36756003)(64756008)(54906003)(26005)(86362001)(66946007)(316002)(38070700005)(76116006)(91956017)(71200400001)(66476007)(186003)(2616005)(4326008)(6916009)(30864003)(19627235002)(2906002)(7416002)(122000001)(6512007)(6506007)(83380400001)(8676002)(8936002)(5660300002)(6486002)(508600001)(38100700002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VzlYS00yS1ljVVozR2gwUEh0OUo2RTgzZjR5cXkyVnl3d3d1dHdGOFVVZm5O?= =?utf-8?B?QlJMSzRKa2hUaUJpclc4VkQ3MmtVeEFxWXovRy83STdZUWNUNE5oUENacE5i?= =?utf-8?B?WjFQdjVsRmV4WXZjOWRZSllNakdLZkJLaU9SSjBuRy9EUFFrL25oR0MzNnpx?= =?utf-8?B?d3FDanR0QTRXNVMrTXYzUDNTU2g1bzJXYUk5Y0Vwb1hDdGNZdy84eEZDNXpH?= =?utf-8?B?cWMwOE9XMDdIT1UzejBta1dUNGp0d25aUGEzSDBybC93NUg4Y01XWFIwcUdv?= =?utf-8?B?MTBxaXp3ZVArZFNsYUxDZEZQcC9HazlTTCtCYVBXN2d5cWN5OVBVOGhHdC84?= =?utf-8?B?WE9BcTEwQTZCbFhERlhFaE5HT1ZLUGZqNmhXTzlUV254YjVkZEJabDlTUkF1?= =?utf-8?B?QllPUGZ6VitQakVvUVgxSHhWYzZYVWxDTExmdWRLYitBMkhhbEpHNlhCUVpS?= =?utf-8?B?MnBoWUs5N1JoR1BMRHVWV2NrZSsrb2pNYzJkdHlSMTdQMTJjNVpBL3pYMlQ2?= =?utf-8?B?cDZyaDZab0ZPN3F3RTR3bUNSMlgwODlXQ1FEdHBxSTdzcEFZaWR2eWxnM0t5?= =?utf-8?B?VGhCZEkwbW56Nk9HZGlQQm5KdTVsR2ljcTZnMjd5RG11UWIweSt5bVlrNmR2?= =?utf-8?B?SmN0QWltODhyYTF1Wis4c0tOWHRGQU4vdlV3VmtRNHA0QzhVK1dYallQak91?= =?utf-8?B?ZlQvZnJlZ2xmbTlKZGVFSEUrb3kxdHpkRU5UMlhmaURLekdZeE5KTEdHWTAv?= =?utf-8?B?ZDlkT0ROVUpORndBd1cwRG9hZmNtdzgrYXlRc0tIRDY2SjVuNC9RMFgzQktp?= =?utf-8?B?OTFLTnZjOVRoM1hZMXcrdmE4L2pYY2hCTXdLNE15K09kYWVaRVpRSlhhRnBv?= =?utf-8?B?YmVVdWNZM0MzQW1GdzNMN3VDbU5MNjdUR0hUQlEzZ2J3MnRjYlZoWnlOZzhE?= =?utf-8?B?Y1MvM2xDbE5KbTdBeFZPWi9yYkxyRWtRS2tmOTlycWVGN2l1ZUFkRThnZDJh?= =?utf-8?B?c2k4YVZUN01CWmxTMmNGVjZkVXd1MGRjR0oydG4zQURtZUorbm9aY1Jhdlpz?= =?utf-8?B?SUs4eWJsbk5ZR3dYVnhiU3AyY1FFSE01eTZvdWxXU1N1MzM2dGRKUGEyTmhK?= =?utf-8?B?bFk3Q1Y2aUhLNXFOTFpFQk5odklSeitkWmNJbUhkTHByVGFuNUs0dUxsQitC?= =?utf-8?B?SCtmTjY5cWdSclN2NGtnckROSHVSUmlBMUlsZ0pPVVlTWVRacVZJUkNzOUp6?= =?utf-8?B?ZlRRSHNiRXFtKzllRDVXKy84SFVjV1habVg0UmhyWThqbm02UTZnV1RmR1R3?= =?utf-8?B?Z0VwVUVKNERhckYrdlZJTXFGVUVFNy9wOSt4VWl4cUQyQ3I5dFJHQVQxOWFB?= =?utf-8?B?eWNYOEs3M3ZDVHBhRmIycVZUdmlPZXlIR2JLNmExaW9Jcms0aEZhVTNaY2VK?= =?utf-8?B?Qm1ZMXRObU1TVE5yME5jMG1JZ0hnbW5mZEJOZElaMU1uSDNPWlpZTXh2YkNL?= =?utf-8?B?S1BQSWRXZ3p4REdPU2NWUEtpa0dESk9RVkJqb3ZVcHpIT3Nod2NqYTJSOFdj?= =?utf-8?B?ejU0RGFMcjVmYjc4Z1RNTjZlOHYySVdzaTJhRWdFV3dsdjZseFowMFZ4UXU5?= =?utf-8?B?THNBdDNJNTR4ME01VFhaOU1adHBXMmdWdW1OWklwR1pDMURXbkVnd2psdC9W?= =?utf-8?B?cFBFK1ZjcGVaY2dVZVFsa2hVeERSYVp5M29BWmpBdHVwQWZMb2FaUWU2OEFE?= =?utf-8?B?TVN1aVVRK05IcWoxd3dTU2Zqd1NwWkRlK1RhN2I0amIyY3daeTJORlZWTFZa?= =?utf-8?B?Vk83Tjg2NGdrZFpiRlNPUT09?= Content-Type: text/plain; charset="utf-8" Content-ID: <265C9CF7FFA9DF45943C8AF84EA0C96B@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2589.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6e0a73f-00ae-4381-e22b-08d95299a431 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jul 2021 14:03:28.5973 (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: NcsQz53E0/JMkn/XyZaQGfxJTKGbGYkd+t6gF0InJJalxkHXHZh2dZ1KHTnsC1a2b4O5oQd8ebTI59/UXhchdk2lrRi3Qs+UHhH63iabkac= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5196 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVHVlLCAyMDIxLTA3LTI3IGF0IDA4OjQ5ICswMDAwLCBaZXYgV2Vpc3Mgd3JvdGU6Cj4gT24g TW9uLCBKdWwgMTIsIDIwMjEgYXQgMDU6MDQ6NDBQTSBDRFQsIEl3b25hIFdpbmlhcnNrYSB3cm90 ZToKPiA+IEZyb206IEphZSBIeXVuIFlvbyA8amFlLmh5dW4ueW9vQGxpbnV4LmludGVsLmNvbT4K PiA+IAo+ID4gQVNQRUVEIEFTVDI0eHgvQVNUMjV4eC9BU1QyNnh4IFNvQ3Mgc3VwcG9ydHMgdGhl IFBFQ0kgZWxlY3RyaWNhbAo+ID4gaW50ZXJmYWNlIChhLmsuYSBQRUNJIHdpcmUpLgo+ID4gCj4g PiBTaWduZWQtb2ZmLWJ5OiBKYWUgSHl1biBZb28gPGphZS5oeXVuLnlvb0BsaW51eC5pbnRlbC5j b20+Cj4gPiBDby1kZXZlbG9wZWQtYnk6IEl3b25hIFdpbmlhcnNrYSA8aXdvbmEud2luaWFyc2th QGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEl3b25hIFdpbmlhcnNrYSA8aXdvbmEud2lu aWFyc2thQGludGVsLmNvbT4KPiA+IFJldmlld2VkLWJ5OiBQaWVycmUtTG91aXMgQm9zc2FydCA8 cGllcnJlLWxvdWlzLmJvc3NhcnRAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiBNQUlOVEFJ TkVSU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgOSArCj4gPiBkcml2ZXJzL3BlY2kvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgNiArCj4gPiBkcml2ZXJzL3BlY2kvTWFrZWZpbGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsKPiA+IGRyaXZlcnMvcGVjaS9jb250cm9s bGVyL0tjb25maWfCoMKgwqDCoMKgwqAgfMKgIDEyICsKPiA+IGRyaXZlcnMvcGVjaS9jb250cm9s bGVyL01ha2VmaWxlwqDCoMKgwqDCoCB8wqDCoCAzICsKPiA+IGRyaXZlcnMvcGVjaS9jb250cm9s bGVyL3BlY2ktYXNwZWVkLmMgfCA1MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+IDYg ZmlsZXMgY2hhbmdlZCwgNTM0IGluc2VydGlvbnMoKykKPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3BlY2kvY29udHJvbGxlci9LY29uZmlnCj4gPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wZWNpL2NvbnRyb2xsZXIvTWFrZWZpbGUKPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3BlY2kvY29udHJvbGxlci9wZWNpLWFzcGVlZC5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4gPiBpbmRleCA0NzQxMWUyYjYzMzYuLjRiYTg3NGFm YTJmYSAxMDA2NDQKPiA+IC0tLSBhL01BSU5UQUlORVJTCj4gPiArKysgYi9NQUlOVEFJTkVSUwo+ ID4gQEAgLTI4NjUsNiArMjg2NSwxNSBAQCBTOsKgwqDCoMKgwqDCoMKgTWFpbnRhaW5lZAo+ID4g RjrCoMKgwqDCoMKgwqBEb2N1bWVudGF0aW9uL2h3bW9uL2FzYzc2MjEucnN0Cj4gPiBGOsKgwqDC oMKgwqDCoGRyaXZlcnMvaHdtb24vYXNjNzYyMS5jCj4gPiAKPiA+ICtBU1BFRUQgUEVDSSBDT05U Uk9MTEVSCj4gPiArTTrCoMKgwqDCoMKgSXdvbmEgV2luaWFyc2thIDxpd29uYS53aW5pYXJza2FA aW50ZWwuY29tPgo+ID4gK006wqDCoMKgwqDCoEphZSBIeXVuIFlvbyA8amFlLmh5dW4ueW9vQGxp bnV4LmludGVsLmNvbT4KPiA+ICtMOsKgwqDCoMKgwqBsaW51eC1hc3BlZWRAbGlzdHMub3psYWJz Lm9yZ8KgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQo+ID4gK0w6wqDCoMKgwqDCoG9w ZW5ibWNAbGlzdHMub3psYWJzLm9yZ8KgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQo+ ID4gK1M6wqDCoMKgwqDCoFN1cHBvcnRlZAo+ID4gK0Y6wqDCoMKgwqDCoERvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy9wZWNpL3BlY2ktYXNwZWVkLnlhbWwKPiA+ICtGOsKgwqDCoMKg wqBkcml2ZXJzL3BlY2kvY29udHJvbGxlci9wZWNpLWFzcGVlZC5jCj4gPiArCj4gPiBBU1BFRUQg UElOQ1RSTCBEUklWRVJTCj4gPiBNOsKgwqDCoMKgwqDCoEFuZHJldyBKZWZmZXJ5IDxhbmRyZXdA YWouaWQuYXU+Cj4gPiBMOsKgwqDCoMKgwqDCoGxpbnV4LWFzcGVlZEBsaXN0cy5vemxhYnMub3Jn wqAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9wZWNpL0tjb25maWcgYi9kcml2ZXJzL3BlY2kvS2NvbmZpZwo+ID4gaW5kZXggNjAxY2MzYzNj ODUyLi4wZDBlZTgwMDk3MTMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BlY2kvS2NvbmZpZwo+ ID4gKysrIGIvZHJpdmVycy9wZWNpL0tjb25maWcKPiA+IEBAIC0xMiwzICsxMiw5IEBAIG1lbnVj b25maWcgUEVDSQo+ID4gCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqAgVGhpcyBzdXBwb3J0IGlzIGFs c28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgIHdpbGwgYmUgY2FsbGVkIHBlY2kuCj4gPiArCj4gPiAraWYgUEVDSQo+ID4gKwo+ ID4gK3NvdXJjZSAiZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvS2NvbmZpZyIKPiA+ICsKPiA+ICtl bmRpZiAjIFBFQ0kKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlY2kvTWFrZWZpbGUgYi9kcml2 ZXJzL3BlY2kvTWFrZWZpbGUKPiA+IGluZGV4IDJiYjJmNTFiY2RhNy4uNjIxYTk5M2UzMDZhIDEw MDY0NAo+ID4gLS0tIGEvZHJpdmVycy9wZWNpL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJzL3Bl Y2kvTWFrZWZpbGUKPiA+IEBAIC0zLDMgKzMsNiBAQAo+ID4gIyBDb3JlIGZ1bmN0aW9uYWxpdHkK PiA+IHBlY2kteSA6PSBjb3JlLm8gc3lzZnMubwo+ID4gb2JqLSQoQ09ORklHX1BFQ0kpICs9IHBl Y2kubwo+ID4gKwo+ID4gKyMgSGFyZHdhcmUgc3BlY2lmaWMgYnVzIGRyaXZlcnMKPiA+ICtvYmot eSArPSBjb250cm9sbGVyLwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGVjaS9jb250cm9sbGVy L0tjb25maWcKPiA+IGIvZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvS2NvbmZpZwo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOGRkYmU0OTQ2NzdmCj4gPiAt LS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL3BlY2kvY29udHJvbGxlci9LY29uZmlnCj4g PiBAQCAtMCwwICsxLDEyIEBACj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5Cj4gPiArCj4gPiArY29uZmlnIFBFQ0lfQVNQRUVECj4gPiArwqDCoMKgwqDCoMKgwqB0 cmlzdGF0ZSAiQVNQRUVEIFBFQ0kgc3VwcG9ydCIKPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMg b24gQVJDSF9BU1BFRUQgfHwgQ09NUElMRV9URVNUCj4gPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRz IG9uIE9GCj4gPiArwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIEhBU19JT01FTQo+ID4gK8KgwqDC oMKgwqDCoMKgaGVscAo+ID4gK8KgwqDCoMKgwqDCoMKgwqAgRW5hYmxlIHRoaXMgZHJpdmVyIGlm IHlvdSB3YW50IHRvIHN1cHBvcnQgQVNQRUVEIFBFQ0kgY29udHJvbGxlci4KPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgIFRoaXMgZHJpdmVyIGNhbiBiZSBhbHNvIGJ1aWxkIGFzIGEgbW9kdWxl LiBJZiBzbywgdGhlIG1vZHVsZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqAgd2lsbCBiZSBjYWxsZWQg cGVjaS1hc3BlZWQuCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvTWFr ZWZpbGUKPiA+IGIvZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvTWFrZWZpbGUKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjAyMmMyOGVmMWJmMAo+ID4gLS0t IC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvTWFrZWZpbGUKPiA+ IEBAIC0wLDAgKzEsMyBAQAo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQo+ID4gKwo+ID4gK29iai0kKENPTkZJR19QRUNJX0FTUEVFRCnCoMKgwqDCoMKgwqArPSBw ZWNpLWFzcGVlZC5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZWNpL2NvbnRyb2xsZXIvcGVj aS1hc3BlZWQuYwo+ID4gYi9kcml2ZXJzL3BlY2kvY29udHJvbGxlci9wZWNpLWFzcGVlZC5jCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi44ODhiNDYzODNl YTQKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvcGVjaS9jb250cm9sbGVyL3Bl Y2ktYXNwZWVkLmMKPiA+IEBAIC0wLDAgKzEsNTAxIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ID4gKy8vIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFT UEVFRCBUZWNobm9sb2d5IEluYy4KPiA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMSBJbnRl bCBDb3Jwb3JhdGlvbgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9qaWZm aWVzLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wZWNpLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+ID4gKwo+ ID4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gPiArCj4gPiArLyogQVNQRUVEIFBFQ0kg UmVnaXN0ZXJzICovCj4gPiArLyogQ29udHJvbCBSZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgQVNQ RUVEX1BFQ0lfQ1RSTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDAwCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfQ1RSTF9TQU1QTElOR19NQVNLwqDC oMKgwqDCoMKgwqBHRU5NQVNLKDE5LCAxNikKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9D VFJMX1JFQURfTU9ERV9NQVNLwqDCoMKgwqDCoMKgR0VOTUFTSygxMywgMTIpCj4gPiArI2RlZmlu ZcKgwqAgQVNQRUVEX1BFQ0lfQ1RSTF9SRUFEX01PREVfQ09VTlTCoMKgwqDCoMKgQklUKDEyKQo+ ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0NUUkxfUkVBRF9NT0RFX0RCR8KgwqDCoMKgwqDC oMKgQklUKDEzKQo+IAo+IE5pdHBpY2s6IG1pZ2h0IGJlIG5pY2UgdG8ga2VlcCB0aGluZ3MgaW4g YSBjb25zaXN0ZW50IGRlc2NlbmRpbmcgb3JkZXIKPiBoZXJlICgxMyB0aGVuIDEyKS4KPiAKClN1 cmUsIEknbGwgY2hhbmdlIGl0IGluIHYyLgoKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9D VFJMX0NMS19TT1VSQ0VfTUFTS8KgwqDCoMKgwqBCSVQoMTEpCj4gCj4gX01BU0sgc3VmZml4IHNl ZW1zIG91dCBvZiBwbGFjZSBvbiB0aGlzIG9uZS4KCkFjay4KCj4gCj4gPiArI2RlZmluZcKgwqAg QVNQRUVEX1BFQ0lfQ1RSTF9DTEtfRElWX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoEdFTk1BU0soMTAsIDgpCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfQ1RSTF9JTlZF UlRfT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURf UEVDSV9DVFJMX0lOVkVSVF9JTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNikKPiA+ICsjZGVm aW5lwqDCoCBBU1BFRURfUEVDSV9DVFJMX0JVU19DT05URU5UX0VOwqDCoMKgwqDCoMKgQklUKDUp Cj4gCj4gSXQgKmlzKiBhbHJlYWR5IGtpbmQgb2YgYSBsb25nIG1hY3JvIG5hbWUsIGJ1dCBhYmJy ZXZpYXRpbmcgImNvbnRlbnRpb24iCj4gdG8gImNvbnRlbnQiIHNlZW1zIGEgYml0IGNvbmZ1c2lu ZzsgSSdkIHN1Z2dlc3Qga2VlcGluZyB0aGUgZXh0cmEgdGhyZWUKPiBjaGFyYWN0ZXJzIChvciBt YXliZSBkcm9wIHRoZSBfRU4gc3VmZml4IGlmIHlvdSB3YW50IHRvIGF2b2lkIG1ha2luZyBpdAo+ IGV2ZW4gbG9uZ2VyKS4KPiAKCllvdSdyZSByaWdodCAtIGl0J2xsIGJlIHJlbmFtZWQgcHJvcGVy bHkgaW4gdjIuCgo+ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0NUUkxfUEVDSV9FTsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lf Q1RSTF9QRUNJX0NMS19FTsKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQo+ID4gKwo+ID4gKy8qIFRp bWluZyBOZWdvdGlhdGlvbiBSZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgQVNQRUVEX1BFQ0lfVElN SU5HX05FR09USUFUSU9OwqDCoMKgwqDCoMKgwqDCoMKgMHgwNAo+ID4gKyNkZWZpbmXCoMKgIEFT UEVFRF9QRUNJX1RJTUlOR19NRVNTQUdFX01BU0vCoMKgwqDCoMKgwqBHRU5NQVNLKDE1LCA4KQo+ ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX1RJTUlOR19BRERSRVNTX01BU0vCoMKgwqDCoMKg wqBHRU5NQVNLKDcsIDApCj4gPiArCj4gPiArLyogQ29tbWFuZCBSZWdpc3RlciAqLwo+ID4gKyNk ZWZpbmUgQVNQRUVEX1BFQ0lfQ01EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDgKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURf UEVDSV9DTURfUElOX01PTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMzEpCj4gPiAr I2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfQ01EX1NUU19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBHRU5NQVNLKDI3LCAyNCkKPiA+ICsjZGVmaW5lwqDCoMKgwqAgQVNQRUVEX1BFQ0lfQ01E X1NUU19BRERSX1RfTkVHT8KgwqDCoMKgMHgzCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lf Q01EX0lETEVfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgIChBU1BFRURfUEVDSV9DTURfU1RTX01BU0sgfCBBU1BFRURfUEVDSV9DTURfUElOX01PTikK PiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9DTURfRklSRcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoMCkKPiA+ICsKPiA+ICsvKiBSZWFkL1dyaXRlIExlbmd0aCBSZWdp c3RlciAqLwo+ID4gKyNkZWZpbmUgQVNQRUVEX1BFQ0lfUldfTEVOR1RIwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwYwo+ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0FX X0ZDU19FTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJ VCgzMSkKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9SRUFEX0xFTl9NQVNLwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyMywgMTYpCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BF Q0lfV1JJVEVfTEVOX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygxNSwgOCkKPiA+ ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9UQUdFVF9BRERSX01BU0vCoMKgwqDCoMKgwqDCoMKg wqDCoEdFTk1BU0soNywgMCkKPiAKPiBzL1RBR0VUL1RBUkdFVC8KPiAKCkFjay4KCj4gPiArCj4g PiArLyogRXhwZWN0ZWQgRkNTIERhdGEgUmVnaXN0ZXIgKi8KPiA+ICsjZGVmaW5lIEFTUEVFRF9Q RUNJX0VYUF9GQ1PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxMAo+ ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0VYUF9SRUFEX0ZDU19NQVNLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5NQVNLKDIzLCAxNikKPiA+ICsjZGVmaW5lwqDCoCBBU1BF RURfUEVDSV9FWFBfQVdfRkNTX0FVVE9fTUFTS8KgwqDCoMKgwqBHRU5NQVNLKDE1LCA4KQo+ID4g KyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0VYUF9XUklURV9GQ1NfTUFTS8KgwqDCoMKgwqDCoMKg R0VOTUFTSyg3LCAwKQo+ID4gKwo+ID4gKy8qIENhcHR1cmVkIEZDUyBEYXRhIFJlZ2lzdGVyICov Cj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9DQVBfRkNTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MTQKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVDSV9DQVBfUkVB RF9GQ1NfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFTSygyMywgMTYp Cj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfQ0FQX1dSSVRFX0ZDU19NQVNLwqDCoMKgwqDC oMKgwqBHRU5NQVNLKDcsIDApCj4gPiArCj4gPiArLyogSW50ZXJydXB0IFJlZ2lzdGVyICovCj4g PiArI2RlZmluZSBBU1BFRURfUEVDSV9JTlRfQ1RSTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgxOAo+ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX1RJTUlOR19ORUdP X1NFTF9NQVNLwqDCoMKgwqDCoEdFTk1BU0soMzEsIDMwKQo+ID4gKyNkZWZpbmXCoMKgwqDCoCBB U1BFRURfUEVDSV8xU1RfQklUX09GX0FERFJfTkVHT8KgwqDCoDAKPiA+ICsjZGVmaW5lwqDCoMKg wqAgQVNQRUVEX1BFQ0lfMk5EX0JJVF9PRl9BRERSX05FR0/CoMKgwqAxCj4gPiArI2RlZmluZcKg wqDCoMKgIEFTUEVFRF9QRUNJX01FU1NBR0VfTkVHT8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAyCj4g PiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfSU5UX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgR0VOTUFTSyg0LCAwKQo+ID4gKyNkZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0lO VF9CVVNfVElNRU9VVMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpCj4gPiArI2RlZmluZcKgwqAg QVNQRUVEX1BFQ0lfSU5UX0JVU19DT05ORUNUwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMykKPiAK PiBzL0NPTk5FQ1QvQ09OVEVOVElPTi8KCkFjay4KCj4gCj4gPiArI2RlZmluZcKgwqAgQVNQRUVE X1BFQ0lfSU5UX1dfRkNTX0JBRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyKQo+ID4gKyNk ZWZpbmXCoMKgIEFTUEVFRF9QRUNJX0lOVF9XX0ZDU19BQk9SVMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDEpCj4gPiArI2RlZmluZcKgwqAgQVNQRUVEX1BFQ0lfSU5UX0NNRF9ET05FwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkKPiA+ICsKPiA+ICsvKiBJbnRlcnJ1cHQgU3RhdHVzIFJl Z2lzdGVyICovCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9JTlRfU1RTwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MWMKPiA+ICsjZGVmaW5lwqDCoCBBU1BFRURfUEVD SV9JTlRfVElNSU5HX1JFU1VMVF9NQVNLwqDCoMKgR0VOTUFTSygyOSwgMTYpCj4gPiArwqDCoMKg wqDCoMKgwqDCoCAvKiBiaXRzWzQuLjBdOiBTYW1lIGJpdCBmaWVsZHMgaW4gdGhlICdJbnRlcnJ1 cHQgUmVnaXN0ZXInICovCj4gPiArCj4gPiArLyogUngvVHggRGF0YSBCdWZmZXIgUmVnaXN0ZXJz ICovCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9XX0RBVEEwwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4MjAKPiA+ICsjZGVmaW5lIEFTUEVFRF9QRUNJX1dfREFUQTHC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyNAo+ID4gKyNkZWZpbmUg QVNQRUVEX1BFQ0lfV19EQVRBMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDI4Cj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9XX0RBVEEzwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MmMKPiA+ICsjZGVmaW5lIEFTUEVFRF9QRUNJX1JfREFU QTDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzMAo+ID4gKyNkZWZp bmUgQVNQRUVEX1BFQ0lfUl9EQVRBMcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAweDM0Cj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9SX0RBVEEywqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MzgKPiA+ICsjZGVmaW5lIEFTUEVFRF9QRUNJX1Jf REFUQTPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzYwo+ID4gKyNk ZWZpbmUgQVNQRUVEX1BFQ0lfV19EQVRBNMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDQwCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9XX0RBVEE1wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NDQKPiA+ICsjZGVmaW5lIEFTUEVFRF9QRUNJ X1dfREFUQTbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg0OAo+ID4g KyNkZWZpbmUgQVNQRUVEX1BFQ0lfV19EQVRBN8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAweDRjCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9SX0RBVEE0wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NTAKPiA+ICsjZGVmaW5lIEFTUEVFRF9Q RUNJX1JfREFUQTXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg1NAo+ ID4gKyNkZWZpbmUgQVNQRUVEX1BFQ0lfUl9EQVRBNsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDU4Cj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9SX0RBVEE3wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NWMKPiA+ICsjZGVmaW5lwqDCoCBB U1BFRURfUEVDSV9EQVRBX0JVRl9TSVpFX01BWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMzIKPiA+ICsKPiA+ICsvKiBUaW1pbmcgTmVnb3RpYXRpb24gKi8KPiA+ICsjZGVmaW5lIEFT UEVFRF9QRUNJX1JEX1NBTVBMSU5HX1BPSU5UX0RFRkFVTFTCoMKgOAo+ID4gKyNkZWZpbmUgQVNQ RUVEX1BFQ0lfUkRfU0FNUExJTkdfUE9JTlRfTUFYwqDCoMKgwqDCoMKgKEJJVCg0KSAtIDEpCj4g PiArI2RlZmluZSBBU1BFRURfUEVDSV9DTEtfRElWX0RFRkFVTFTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAwCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9DTEtfRElWX01BWMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChCSVQoMykgLSAxKQo+ID4gKyNkZWZp bmUgQVNQRUVEX1BFQ0lfTVNHX1RJTUlOR19ERUZBVUxUwqDCoMKgwqDCoMKgwqDCoMKgMQo+ID4g KyNkZWZpbmUgQVNQRUVEX1BFQ0lfTVNHX1RJTUlOR19NQVjCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoChCSVQoOCkgLSAxKQo+ID4gKyNkZWZpbmUgQVNQRUVEX1BFQ0lfQUREUl9USU1JTkdfREVG QVVMVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMQo+ID4gKyNkZWZpbmUgQVNQRUVE X1BFQ0lfQUREUl9USU1JTkdfTUFYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKEJJVCg4KSAtIDEp Cj4gPiArCj4gPiArLyogVGltZW91dCAqLwo+ID4gKyNkZWZpbmUgQVNQRUVEX1BFQ0lfSURMRV9D SEVDS19USU1FT1VUX1VTwqDCoMKgwqDCoMKgKDUwICogVVNFQ19QRVJfTVNFQykKPiA+ICsjZGVm aW5lIEFTUEVFRF9QRUNJX0lETEVfQ0hFQ0tfSU5URVJWQUxfVVPCoMKgwqDCoMKgKDEwICogVVNF Q19QRVJfTVNFQykKPiA+ICsjZGVmaW5lIEFTUEVFRF9QRUNJX0NNRF9USU1FT1VUX01TX0RFRkFV TFTCoMKgwqDCoMKgKDEwMDApCj4gPiArI2RlZmluZSBBU1BFRURfUEVDSV9DTURfVElNRU9VVF9N U19NQVjCoMKgwqDCoMKgwqDCoMKgwqAoMTAwMCkKPiA+ICsKPiA+ICtzdHJ1Y3QgYXNwZWVkX3Bl Y2kgewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBlY2lfY29udHJvbGxlciBjb250cm9sbGVy Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Owo+ID4gK8KgwqDCoMKgwqDC oMKgdm9pZCBfX2lvbWVtICpiYXNlOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xr Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKPiA+ICvCoMKg wqDCoMKgwqDCoGludCBpcnE7Cj4gPiArwqDCoMKgwqDCoMKgwqBzcGlubG9ja190IGxvY2s7IC8q IHRvIHN5bmMgY29tcGxldGlvbiBzdGF0dXMgaGFuZGxpbmcgKi8KPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBjb21wbGV0aW9uIHhmZXJfY29tcGxldGU7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIg c3RhdHVzOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGNtZF90aW1lb3V0X21zOwo+ID4gK8KgwqDC oMKgwqDCoMKgdTMyIG1zZ190aW1pbmc7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgYWRkcl90aW1p bmc7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgcmRfc2FtcGxpbmdfcG9pbnQ7Cj4gPiArwqDCoMKg wqDCoMKgwqB1MzIgY2xrX2RpdjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGFzcGVlZF9wZWNpICp0b19hc3BlZWRfcGVjaShzdHJ1Y3QgcGVjaV9jb250cm9sbGVyICph KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YoYSwgc3RydWN0 IGFzcGVlZF9wZWNpLCBjb250cm9sbGVyKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg YXNwZWVkX3BlY2lfaW5pdF9yZWdzKHN0cnVjdCBhc3BlZWRfcGVjaSAqcHJpdikKPiA+ICt7Cj4g PiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgdmFsID0g RklFTERfUFJFUChBU1BFRURfUEVDSV9DVFJMX0NMS19ESVZfTUFTSywKPiA+IEFTUEVFRF9QRUNJ X0NMS19ESVZfREVGQVVMVCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB2YWwgfD0gQVNQRUVEX1BFQ0lf Q1RSTF9QRUNJX0NMS19FTjsKPiA+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbCh2YWwsIHByaXYtPmJh c2UgKyBBU1BFRURfUEVDSV9DVFJMKTsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qCj4gPiArwqDCoMKg wqDCoMKgwqAgKiBUaW1pbmcgbmVnb3RpYXRpb24gcGVyaW9kIHNldHRpbmcuCj4gPiArwqDCoMKg wqDCoMKgwqAgKiBUaGUgdW5pdCBvZiB0aGUgcHJvZ3JhbW1lZCB2YWx1ZSBpcyA0IHRpbWVzIG9m IFBFQ0kgY2xvY2sgcGVyaW9kLgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDC oMKgwqB2YWwgPSBGSUVMRF9QUkVQKEFTUEVFRF9QRUNJX1RJTUlOR19NRVNTQUdFX01BU0ssIHBy aXYtPm1zZ190aW1pbmcpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdmFsIHw9IEZJRUxEX1BSRVAoQVNQ RUVEX1BFQ0lfVElNSU5HX0FERFJFU1NfTUFTSywgcHJpdi0KPiA+ID5hZGRyX3RpbWluZyk7Cj4g PiArwqDCoMKgwqDCoMKgwqB3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgQVNQRUVEX1BFQ0lfVElN SU5HX05FR09USUFUSU9OKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIENsZWFyIGludGVy cnVwdHMgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBBU1BF RURfUEVDSV9JTlRfU1RTKSB8Cj4gPiBBU1BFRURfUEVDSV9JTlRfTUFTSzsKPiAKPiBUaGlzIHNo b3VsZCBiZSAmIGluc3RlYWQgb2YgfCwgSSdtIGd1ZXNzaW5nPwo+IAoKSSBiZWxpZXZlIHRoZSBp ZGVhIGlzIHRvIHVuY29uZGl0aW9uYWxseSBjbGVhciBhbGwga25vd24gaW50ZXJydXB0IHN0YXR1 cyBiaXRzLAooaXJyZWxldmFudCBvZiB3aGF0IHZhbHVlIGlzIGFscmVhZHkgc2V0IGluIHJlZ3Mp LCBhbmQgdGhlIEhXIGV4cGVjdHMgdGhhdCB0aGlzCmlzIGRvbmUgYnkgd3JpdGluZyAxIHRvIGNv cnJlc3BvbmRpbmcgYml0cy4KCj4gPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwodmFsLCBwcml2LT5i YXNlICsgQVNQRUVEX1BFQ0lfSU5UX1NUUyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBT ZXQgdGltaW5nIG5lZ290aWF0aW9uIG1vZGUgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCj4gPiAr wqDCoMKgwqDCoMKgwqB2YWwgPSBGSUVMRF9QUkVQKEFTUEVFRF9QRUNJX1RJTUlOR19ORUdPX1NF TF9NQVNLLAo+ID4gQVNQRUVEX1BFQ0lfMVNUX0JJVF9PRl9BRERSX05FR08pOwo+ID4gK8KgwqDC oMKgwqDCoMKgdmFsIHw9IEFTUEVFRF9QRUNJX0lOVF9NQVNLOwo+ID4gK8KgwqDCoMKgwqDCoMKg d3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIEFTUEVFRF9QRUNJX0lOVF9DVFJMKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHZhbCA9IEZJRUxEX1BSRVAoQVNQRUVEX1BFQ0lfQ1RSTF9TQU1QTElO R19NQVNLLCBwcml2LQo+ID4gPnJkX3NhbXBsaW5nX3BvaW50KTsKPiA+ICvCoMKgwqDCoMKgwqDC oHZhbCB8PSBGSUVMRF9QUkVQKEFTUEVFRF9QRUNJX0NUUkxfQ0xLX0RJVl9NQVNLLCBwcml2LT5j bGtfZGl2KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCB8PSBBU1BFRURfUEVDSV9DVFJMX1BFQ0lf RU47Cj4gPiArwqDCoMKgwqDCoMKgwqB2YWwgfD0gQVNQRUVEX1BFQ0lfQ1RSTF9QRUNJX0NMS19F TjsKPiA+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBBU1BFRURfUEVD SV9DVFJMKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSBpbnQgYXNwZWVkX3BlY2lf Y2hlY2tfaWRsZShzdHJ1Y3QgYXNwZWVkX3BlY2kgKnByaXYpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgdTMyIGNtZF9zdHMgPSByZWFkbChwcml2LT5iYXNlICsgQVNQRUVEX1BFQ0lfQ01EKTsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChGSUVMRF9HRVQoQVNQRUVEX1BFQ0lfQ01EX1NU U19NQVNLLCBjbWRfc3RzKSA9PQo+ID4gQVNQRUVEX1BFQ0lfQ01EX1NUU19BRERSX1RfTkVHTykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhc3BlZWRfcGVjaV9pbml0X3JlZ3Mo cHJpdik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0 KHByaXYtPmJhc2UgKyBBU1BFRURfUEVDSV9DTUQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbWRfc3RzLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIShjbWRfc3RzICYgQVNQRUVEX1BFQ0lfQ01EX0lETEVfTUFTSyksCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBU1BFRURfUEVDSV9JRExFX0NIRUNLX0lOVEVSVkFMX1VTLAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNQ RUVEX1BFQ0lfSURMRV9DSEVDS19USU1FT1VUX1VTKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludCBhc3BlZWRfcGVjaV94ZmVyKHN0cnVjdCBwZWNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIs Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1OCBhZGRyLCBzdHJ1Y3QgcGVjaV9yZXF1ZXN0ICpyZXEpCj4gPiArewo+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGFzcGVlZF9wZWNpICpwcml2ID0gdG9fYXNwZWVkX3BlY2koY29udHJvbGxl cik7Cj4gPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0ID0gbXNl Y3NfdG9famlmZmllcyhwcml2LQo+ID4gPmNtZF90aW1lb3V0X21zKTsKPiA+ICvCoMKgwqDCoMKg wqDCoHUzMiBwZWNpX2hlYWQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHJlcS0+dHgubGVuID4gQVNQRUVEX1BFQ0lfREFUQV9CVUZfU0la RV9NQVggfHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXEtPnJ4LmxlbiA+IEFTUEVFRF9Q RUNJX0RBVEFfQlVGX1NJWkVfTUFYKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogQ2hlY2sgY29tbWFu ZCBzdHMgYW5kIGJ1cyBpZGxlIHN0YXRlICovCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBhc3Bl ZWRfcGVjaV9jaGVja19pZGxlKHByaXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0OyAvKiAtRVRJTUVET1VU ICovCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9j aywgZmxhZ3MpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVpbml0X2NvbXBsZXRpb24oJnByaXYtPnhm ZXJfY29tcGxldGUpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcGVjaV9oZWFkID0gRklFTERf UFJFUChBU1BFRURfUEVDSV9UQUdFVF9BRERSX01BU0ssIGFkZHIpIHwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChBU1BFRURfUEVDSV9XUklURV9M RU5fTUFTSywgcmVxLT50eC5sZW4pIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgRklFTERfUFJFUChBU1BFRURfUEVDSV9SRUFEX0xFTl9NQVNLLCByZXEtPnJ4Lmxl bik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwocGVjaV9oZWFkLCBwcml2LT5iYXNl ICsgQVNQRUVEX1BFQ0lfUldfTEVOR1RIKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoG1lbWNw eV90b2lvKHByaXYtPmJhc2UgKyBBU1BFRURfUEVDSV9XX0RBVEEwLCByZXEtPnR4LmJ1ZiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxLT50eC5sZW4gPiAxNiA/ IDE2IDogcmVxLT50eC5sZW4pOwo+IAo+IG1pbihyZXEtPnR4LmxlbiwgMTYpIGZvciB0aGUgdGhp cmQgYXJndW1lbnQgdGhlcmUgbWlnaHQgYmUgYSBiaXQKPiBjbGVhcmVyLgoKQWNrLgoKPiAKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXEtPnR4LmxlbiA+IDE2KQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1lbWNweV90b2lvKHByaXYtPmJhc2UgKyBBU1BFRURfUEVDSV9XX0RB VEE0LCByZXEtPnR4LmJ1ZiArCj4gPiAxNiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+dHgubGVuIC0gMTYpOwo+ID4gKwo+ID4g K8KgwqDCoMKgwqDCoMKgZGV2X2RiZyhwcml2LT5kZXYsICJIRUFEIDogMHglMDh4XG4iLCBwZWNp X2hlYWQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIlRYIDogIiwg RFVNUF9QUkVGSVhfTk9ORSwgcmVxLT50eC5idWYsIHJlcS0KPiA+ID50eC5sZW4pOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+c3RhdHVzID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoHdy aXRlbChBU1BFRURfUEVDSV9DTURfRklSRSwgcHJpdi0+YmFzZSArIEFTUEVFRF9QRUNJX0NNRCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBm bGFncyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9u X2ludGVycnVwdGlibGVfdGltZW91dCgmcHJpdi0KPiA+ID54ZmVyX2NvbXBsZXRlLCB0aW1lb3V0 KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 ID09IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHByaXYt PmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgYSByZXNwb25zZSFcbiIpOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRVRJTUVET1VUOwo+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxv Y2ssIGZsYWdzKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHdyaXRlbCgwLCBwcml2LT5iYXNl ICsgQVNQRUVEX1BFQ0lfQ01EKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChwcml2LT5z dGF0dXMgIT0gQVNQRUVEX1BFQ0lfSU5UX0NNRF9ET05FKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3Mp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmcocHJpdi0+ZGV2LCAi Tm8gdmFsaWQgcmVzcG9uc2UhXG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVJTzsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoG1lbWNweV9mcm9taW8ocmVxLT5yeC5idWYsIHByaXYtPmJhc2UgKyBB U1BFRURfUEVDSV9SX0RBVEEwLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmVxLT5yeC5sZW4gPiAxNiA/IDE2IDogcmVxLT5yeC5sZW4pOwo+IAo+IExpa2V3 aXNlLCBtaW4ocmVxLT5yeC5sZW4sIDE2KSBoZXJlLgoKQWNrLgoKPiAKPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXEtPnJ4LmxlbiA+IDE2KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1lbWNweV9mcm9taW8ocmVxLT5yeC5idWYgKyAxNiwgcHJpdi0+YmFzZSArCj4gPiBBU1BF RURfUEVDSV9SX0RBVEE0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcS0+cngubGVuIC0gMTYpOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIlJYIDogIiwgRFVNUF9QUkVGSVhfTk9ORSwg cmVxLT5yeC5idWYsIHJlcS0KPiA+ID5yeC5sZW4pOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBhc3BlZWRfcGVj aV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGFzcGVlZF9wZWNpICpwcml2ID0gYXJnOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMy IHN0YXR1czsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwaW5fbG9jaygmcHJpdi0+bG9jayk7 Cj4gPiArwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSByZWFkbChwcml2LT5iYXNlICsgQVNQRUVEX1BF Q0lfSU5UX1NUUyk7Cj4gPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoc3RhdHVzLCBwcml2LT5iYXNl ICsgQVNQRUVEX1BFQ0lfSU5UX1NUUyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBwcml2LT5zdGF0dXMg fD0gKHN0YXR1cyAmIEFTUEVFRF9QRUNJX0lOVF9NQVNLKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoC8qCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBJbiBtb3N0IGNhc2VzLCBpbnRlcnJ1cHQgYml0 cyB3aWxsIGJlIHNldCBvbmUgYnkgb25lIGJ1dCBhbHNvCj4gPiBub3RlCj4gPiArwqDCoMKgwqDC oMKgwqAgKiB0aGF0IG11bHRpcGxlIGludGVycnVwdCBiaXRzIGNvdWxkIGJlIHNldCBhdCB0aGUg c2FtZSB0aW1lLgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo c3RhdHVzICYgQVNQRUVEX1BFQ0lfSU5UX0JVU19USU1FT1VUKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0+ZGV2LAo+ID4gIkFTUEVF RF9QRUNJX0lOVF9CVVNfVElNRU9VVFxuIik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo c3RhdHVzICYgQVNQRUVEX1BFQ0lfSU5UX0JVU19DT05ORUNUKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0+ZGV2LAo+ID4gIkFTUEVF RF9QRUNJX0lOVF9CVVNfQ09OTkVDVFxuIik7Cj4gCj4gcy9DT05ORUNUL0NPTlRFTlRJT04vIGhl cmUgdG9vIChpbiB0aGUgbWVzc2FnZSBzdHJpbmcpLgoKQWNrLgoKPiAKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChzdGF0dXMgJiBBU1BFRURfUEVDSV9JTlRfV19GQ1NfQkFEKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9kYmdfcmF0ZWxpbWl0ZWQocHJpdi0+ZGV2 LAo+ID4gIkFTUEVFRF9QRUNJX0lOVF9XX0ZDU19CQURcbiIpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKHN0YXR1cyAmIEFTUEVFRF9QRUNJX0lOVF9XX0ZDU19BQk9SVCkKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnX3JhdGVsaW1pdGVkKHByaXYtPmRldiwK PiA+ICJBU1BFRURfUEVDSV9JTlRfV19GQ1NfQUJPUlRcbiIpOwo+IAo+IEJ1cyBjb250ZW50aW9u IGNhbiBvZiBjb3Vyc2UgYXJpc2UgbGVnaXRpbWF0ZWx5LCBhbmQgSSBzdXBwb3NlIGFuCj4gb2Zm bGluZSBob3N0IENQVSBtaWdodCByZXN1bHQgaW4gYSB0aW1lb3V0LCBzbyBkYmcgc2VlbXMgZmlu ZSBmb3IgdGhvc2UKPiAodGhvdWdoIGFzIERhbiBzdWdnZXN0cywgbWFraW5nIHNvbWUgY291bnRl cnMgYXZhaWxhYmxlIHNlZW1zIGxpa2UgYQo+IGdvb2QgaWRlYSwgZXNwZWNpYWxseSBmb3IgY29u dGVudGlvbikuwqAgQXJlIHRoZSBGQ1MgZXJyb3IgY2FzZXMKPiBzaWduaWZpY2FudCBlbm91Z2gg dG8gd2FycmFudCBzb21ldGhpbmcgbGVzcyBsaWtlbHkgdG8gZ28gdW5ub3RpY2VkCj4gdGhvdWdo P8KgIChlLmcuIGRldl93YXJuX3JhdGVsaW1pdGVkKCkgb3Igc29tZXRoaW5nPykKCkl0J3Mgc2lt aWxhciBzdG9yeSBmb3IgRkNTIGVycm9ycyAoY2FuIG9jY3VyIGxlZ2l0aW1hdGVseSkuCldlIGNh biBoaXQgQVNQRUVEX1BFQ0lfSU5UX1dfRkNTX0JBRCBpbiBjb21wbGV0ZWx5IHZhbGlkIHNjZW5h cmlvcywgZS5nLgp1bnN1Y2Nlc3NmdWwgZGV0ZWN0IGR1cmluZyByZXNjYW4uCkluIGNhc2Ugb2Yg QVNQRUVEX1BFQ0lfSU5UX1dfRkNTX0FCT1JUIC0gY2FsbGVyIGNhbiBoaXQgdGhpcyBieSBwcm92 aWRpbmcgZS5nLgptYWxmb3JtZWQgY29tbWFuZC4gU2luY2Ugd2UgZG8gcmV0dXJuIC1FSU8gaW4g dGhpcyBjYXNlLCBjYWxsZXIgY2FuIHByaW50IGl0cwpvd24gbG9nLiBJbiBvdGhlciB3b3Jkcywg aXQncyBub3QgYWx3YXlzIGFuIGVycm9yIGNvbmRpdGlvbiBpbiBwZWNpLWFzcGVlZCAob3IKSFcp LiBNb3Jlb3ZlciwgaWYgd2UgZXZlciBleHBvc2UgbW9yZSBkaXJlY3QgUEVDSSBhY2Nlc3MgdG8g dXNlcnNwYWNlIChwZWNpZGV2LApvciBzb21ldGhpbmcgc2ltaWxhcikgdGhpcyB3YXJuIHdvdWxk IGJlIHVzZXIgdHJpZ2dlcmFibGUuCgpJIHdvdWxkIHByZWZlciB0byBrZWVwIHRoaXMgYXQgZGVi dWcgbGV2ZWwgZm9yIG5vdy4KCj4gCj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gK8Kg wqDCoMKgwqDCoMKgICogQWxsIGNvbW1hbmRzIHNob3VsZCBiZSBlbmRlZCB1cCB3aXRoIGEgQVNQ RUVEX1BFQ0lfSU5UX0NNRF9ET05FCj4gPiBiaXQKPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHNldCBl dmVuIGluIGFuIGVycm9yIGNhc2UuCj4gPiArwqDCoMKgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChzdGF0dXMgJiBBU1BFRURfUEVDSV9JTlRfQ01EX0RPTkUpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGxldGUoJnByaXYtPnhmZXJfY29tcGxldGUpOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIElSUV9IQU5ETEVEOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdm9pZCBfX3Nhbml0aXplX2Nsb2NrX2RpdmlkZXIoc3RydWN0IGFzcGVlZF9wZWNpICpw cml2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBjbGtfZGl2Owo+ID4gK8KgwqDCoMKg wqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldmljZV9wcm9w ZXJ0eV9yZWFkX3UzMihwcml2LT5kZXYsICJjbG9jay1kaXZpZGVyIiwKPiA+ICZjbGtfZGl2KTsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjbGtfZGl2ID0gQVNQRUVEX1BFQ0lfQ0xLX0RJVl9ERUZBVUxUOwo+ID4gK8KgwqDC oMKgwqDCoMKgfSBlbHNlIGlmIChjbGtfZGl2ID4gQVNQRUVEX1BFQ0lfQ0xLX0RJVl9NQVgpIHsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfd2Fybihwcml2LT5kZXYsICJJ bnZhbGlkIGNsb2NrLWRpdmlkZXI6ICV1LCBVc2luZwo+ID4gZGVmYXVsdDogJXVcbiIsCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjbGtfZGl2LCBB U1BFRURfUEVDSV9DTEtfRElWX0RFRkFVTFQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNsa19kaXYgPSBBU1BFRURfUEVDSV9DTEtfRElWX0RFRkFVTFQ7Cj4gPiAr wqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBwcml2LT5jbGtfZGl2ID0g Y2xrX2RpdjsKPiA+ICt9Cj4gPiArCj4gCj4gVGhlIG5hbWluZyBvZiB0aGVzZSBfX3Nhbml0aXpl XyooKSBmdW5jdGlvbnMgaXMgYSBiaXQgaW5jb25zaXN0ZW50IHdpdGgKPiB0aGUgcmVzdCBvZiB0 aGUgZHJpdmVyIC0tIHRob3VnaCBnaXZlbiBob3cgc2ltaWxhciB0aGV5IGFsbCBsb29rLCBjb3Vs ZAo+IHRoZXkgaW5zdGVhZCBiZSByZWZhY3RvcmVkIGludG8gYSBzaW5nbGUgaGVscGVyIGZ1bmN0 aW9uIHRha2luZwo+IHByb3BlcnR5LW5hbWUsIGRlZmF1bHQtdmFsdWUsIGFuZCBtYXgtdmFsdWUg cGFyYW1ldGVycz8KCllvdSdyZSByaWdodCAtIHdlIGNhbiBoYXZlIGEgc2luZ2xlIGhlbHBlci4K ClJlZ2FyZGluZyBuYW1pbmcsIHRoZSBpZGVhIHdhcyB0byBoYXZlIGEgc2ltcGxlICJpbm5lciIg aGVscGVyIGZ1bmN0aW9uIHRvIGJlCmNhbGxlZCBieSB0aGUgbW9yZSBhcHByb3ByaWF0ZWx5IG5h bWVkIGFzcGVlZF9wZWNpX2RldmljZV9wcm9wZXJ0eV9zYW5pdGl6ZSgpLgoKRG8geW91IHRoaW5r IEkgc2hvdWxkIHVzZSAiYXNwZWVkX3BlY2lfIiBwcmVmaXggaW4gdGhpcyBmdW5jdGlvbiBuYW1l IG9yIGp1c3QKcmVtb3ZlICJfXyIgYW5kIG5hbWUgaXQgInNhbml0aXplX3Byb3BlcnR5KCkiPwoK PiAKPiA+ICtzdGF0aWMgdm9pZCBfX3Nhbml0aXplX21zZ190aW1pbmcoc3RydWN0IGFzcGVlZF9w ZWNpICpwcml2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBtc2dfdGltaW5nOwo+ID4g K8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRl dmljZV9wcm9wZXJ0eV9yZWFkX3UzMihwcml2LT5kZXYsICJtc2ctdGltaW5nIiwKPiA+ICZtc2df dGltaW5nKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBtc2dfdGltaW5nID0gQVNQRUVEX1BFQ0lfTVNHX1RJTUlOR19ERUZB VUxUOwo+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChtc2dfdGltaW5nID4gQVNQRUVEX1BF Q0lfTVNHX1RJTUlOR19NQVgpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk ZXZfd2Fybihwcml2LT5kZXYsICJJbnZhbGlkIG1zZy10aW1pbmcgOiAldSwgVXNlIGRlZmF1bHQg Ogo+ID4gJXVcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBtc2dfdGltaW5nLCBBU1BFRURfUEVDSV9NU0dfVElNSU5HX0RFRkFVTFQpOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZ190aW1pbmcgPSBBU1BFRURf UEVDSV9NU0dfVElNSU5HX0RFRkFVTFQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBwcml2LT5tc2dfdGltaW5nID0gbXNnX3RpbWluZzsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQgX19zYW5pdGl6ZV9hZGRyX3RpbWluZyhzdHJ1Y3QgYXNwZWVkX3Bl Y2kgKnByaXYpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGFkZHJfdGltaW5nOwo+ID4g K8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRl dmljZV9wcm9wZXJ0eV9yZWFkX3UzMihwcml2LT5kZXYsICJhZGRyLXRpbWluZyIsCj4gPiAmYWRk cl90aW1pbmcpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGFkZHJfdGltaW5nID0gQVNQRUVEX1BFQ0lfQUREUl9USU1JTkdf REVGQVVMVDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoYWRkcl90aW1pbmcgPiBBU1BF RURfUEVDSV9BRERSX1RJTUlOR19NQVgpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfd2Fybihwcml2LT5kZXYsICJJbnZhbGlkIGFkZHItdGltaW5nIDogJXUsIFVzZSBk ZWZhdWx0IDoKPiA+ICV1XG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWRkcl90aW1pbmcsIEFTUEVFRF9QRUNJX0FERFJfVElNSU5HX0RFRkFV TFQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFkZHJfdGltaW5n ID0gQVNQRUVEX1BFQ0lfQUREUl9USU1JTkdfREVGQVVMVDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0K PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHByaXYtPmFkZHJfdGltaW5nID0gYWRkcl90aW1pbmc7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fc2FuaXRpemVfcmRfc2FtcGxpbmdfcG9p bnQoc3RydWN0IGFzcGVlZF9wZWNpICpwcml2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHUz MiByZF9zYW1wbGluZ19wb2ludDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIocHJpdi0+ZGV2 LCAicmQtc2FtcGxpbmctcG9pbnQiLAo+ID4gJnJkX3NhbXBsaW5nX3BvaW50KTsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZF9zYW1wbGluZ19wb2ludCA9IEFTUEVFRF9QRUNJX1JEX1NBTVBMSU5HX1BPSU5UX0RFRkFVTFQ7 Cj4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKHJkX3NhbXBsaW5nX3BvaW50ID4gQVNQRUVE X1BFQ0lfUkRfU0FNUExJTkdfUE9JTlRfTUFYKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZGV2X3dhcm4ocHJpdi0+ZGV2LCAiSW52YWxpZCByZC1zYW1wbGluZy1wb2ludDog JXUsIFVzZQo+ID4gZGVmYXVsdCA6ICV1XG4iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmRfc2FtcGxpbmdfcG9pbnQsCj4gPiBBU1BFRURfUEVD SV9SRF9TQU1QTElOR19QT0lOVF9ERUZBVUxUKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZF9zYW1wbGluZ19wb2ludCA9IEFTUEVFRF9QRUNJX1JEX1NBTVBMSU5H X1BPSU5UX0RFRkFVTFQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBwcml2LT5yZF9zYW1wbGluZ19wb2ludCA9IHJkX3NhbXBsaW5nX3BvaW50Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBfX3Nhbml0aXplX2NtZF90aW1lb3V0KHN0cnVjdCBhc3Bl ZWRfcGVjaSAqcHJpdikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgdGltZW91dDsKPiA+ ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBk ZXZpY2VfcHJvcGVydHlfcmVhZF91MzIocHJpdi0+ZGV2LCAiY21kLXRpbWVvdXQtbXMiLAo+ID4g JnRpbWVvdXQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHRpbWVvdXQgPSBBU1BFRURfUEVDSV9DTURfVElNRU9VVF9NU19E RUZBVUxUOwo+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICh0aW1lb3V0ID4gQVNQRUVEX1BF Q0lfQ01EX1RJTUVPVVRfTVNfTUFYIHx8IHRpbWVvdXQgPT0gMCkKPiA+IHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfd2Fybihwcml2LT5kZXYsICJJbnZhbGlkIGNtZC10 aW1lb3V0LW1zOiAldSwgVXNlCj4gPiBkZWZhdWx0OiAldVxuIiwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpbWVvdXQsIEFTUEVFRF9QRUNJX0NN RF9USU1FT1VUX01TX0RFRkFVTFQpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHRpbWVvdXQgPSBBU1BFRURfUEVDSV9DTURfVElNRU9VVF9NU19ERUZBVUxUOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+Y21kX3RpbWVv dXRfbXMgPSB0aW1lb3V0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhc3BlZWRfcGVj aV9kZXZpY2VfcHJvcGVydHlfc2FuaXRpemUoc3RydWN0IGFzcGVlZF9wZWNpICpwcml2KQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoF9fc2FuaXRpemVfY2xvY2tfZGl2aWRlcihwcml2KTsKPiA+ ICvCoMKgwqDCoMKgwqDCoF9fc2FuaXRpemVfbXNnX3RpbWluZyhwcml2KTsKPiA+ICvCoMKgwqDC oMKgwqDCoF9fc2FuaXRpemVfYWRkcl90aW1pbmcocHJpdik7Cj4gPiArwqDCoMKgwqDCoMKgwqBf X3Nhbml0aXplX3JkX3NhbXBsaW5nX3BvaW50KHByaXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgX19z YW5pdGl6ZV9jbWRfdGltZW91dChwcml2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQg YXNwZWVkX3BlY2lfZGlzYWJsZV9jbGsodm9pZCAqZGF0YSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDC oMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0YSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgYXNwZWVkX3BlY2lfaW5pdF9jdHJsKHN0cnVjdCBhc3BlZWRfcGVjaSAqcHJpdikKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg cHJpdi0+Y2xrID0gZGV2bV9jbGtfZ2V0KHByaXYtPmRldiwgTlVMTCk7Cj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoSVNfRVJSKHByaXYtPmNsaykpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi0+ZGV2LCBQVFJfRVJSKHByaXYtPmNsayks ICJGYWlsZWQKPiA+IHRvIGdldCBjbGsgc291cmNlXG4iKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGspOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIo cHJpdi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjbG9ja1xuIik7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChwcml2LT5k ZXYsIGFzcGVlZF9wZWNpX2Rpc2FibGVfY2xrLAo+ID4gcHJpdi0+Y2xrKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGFzcGVlZF9wZWNpX2RldmljZV9wcm9wZXJ0 eV9zYW5pdGl6ZShwcml2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGFzcGVlZF9wZWNpX2lu aXRfcmVncyhwcml2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgaW50IGFzcGVlZF9wZWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFzcGVlZF9wZWNp ICpwcml2Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tF Uk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIXByaXYpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBw cml2LT5kZXYgPSAmcGRldi0+ZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgZGV2X3NldF9kcnZkYXRh KHByaXYtPmRldiwgcHJpdik7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBwcml2LT5iYXNlID0g ZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKElTX0VSUihwcml2LT5iYXNlKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gUFRSX0VSUihwcml2LT5iYXNlKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHByaXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gPiArwqDCoMKgwqDCoMKg wqBpZiAoIXByaXYtPmlycSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcHJpdi0+aXJxOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2bV9yZXF1ZXN0 X2lycSgmcGRldi0+ZGV2LCBwcml2LT5pcnEsCj4gPiBhc3BlZWRfcGVjaV9pcnFfaGFuZGxlciwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDAsICJwZWNpLWFzcGVlZC1pcnEiLCBwcml2KTsKPiAKPiBNaWdodCBhcyB3ZWxsIGRy b3AgdGhlICItaXJxIiBzdWZmaXggaGVyZT/CoCAoU2VlbXMgYSBiaXQgcmVkdW5kYW50LCBhbmQK PiBhIHF1aWNrIGdsYW5jZSB0aHJvdWdoIC9wcm9jL2ludGVycnVwdHMgb24gdGhlIHN5c3RlbXMg SSBoYXZlIGF0IGhhbmQKPiBkb2Vzbid0IHNob3cgYW55dGhpbmcgZWxzZSBmb2xsb3dpbmcgdGhh dCBjb252ZW50aW9uLikKCkknbGwgcmVtb3ZlIGl0LgoKVGhhbmsgeW91Ci1Jd29uYQoKPiAKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGluaXRfY29tcGxldGlvbigm cHJpdi0+eGZlcl9jb21wbGV0ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzcGluX2xvY2tfaW5pdCgm cHJpdi0+bG9jayk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBwcml2LT5jb250cm9sbGVyLnhm ZXIgPSBhc3BlZWRfcGVjaV94ZmVyOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+cnN0 ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChJU19FUlIocHJpdi0+cnN0KSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoJnBkZXYtPmRldiwgIk1pc3Npbmcgb3IgaW52YWxpZCByZXNldCBj b250cm9sbGVyCj4gPiBlbnRyeVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIFBUUl9FUlIocHJpdi0+cnN0KTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICvC oMKgwqDCoMKgwqDCoHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi0+cnN0KTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFzcGVlZF9wZWNpX2luaXRfY3RybChwcml2KTsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBwZWNpX2NvbnRyb2xs ZXJfYWRkKCZwcml2LT5jb250cm9sbGVyLCBwcml2LT5kZXYpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IGFzcGVlZF9wZWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhc3BlZWRfcGVjaSAqcHJpdiA9IGRl dl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHBlY2lf Y29udHJvbGxlcl9yZW1vdmUoJnByaXYtPmNvbnRyb2xsZXIpOwo+ID4gK8KgwqDCoMKgwqDCoMKg cmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cnN0KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBhc3BlZWRfcGVjaV9vZl90YWJsZVtdID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgeyAuY29t cGF0aWJsZSA9ICJhc3BlZWQsYXN0MjQwMC1wZWNpIiwgfSwKPiA+ICvCoMKgwqDCoMKgwqDCoHsg LmNvbXBhdGlibGUgPSAiYXNwZWVkLGFzdDI1MDAtcGVjaSIsIH0sCj4gPiArwqDCoMKgwqDCoMKg wqB7IC5jb21wYXRpYmxlID0gImFzcGVlZCxhc3QyNjAwLXBlY2kiLCB9LAo+ID4gK8KgwqDCoMKg wqDCoMKgeyB9Cj4gPiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhc3BlZWRfcGVj aV9vZl90YWJsZSk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXNw ZWVkX3BlY2lfZHJpdmVyID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgLnByb2JlwqAgPSBhc3BlZWRf cGVjaV9wcm9iZSwKPiA+ICvCoMKgwqDCoMKgwqDCoC5yZW1vdmUgPSBhc3BlZWRfcGVjaV9yZW1v dmUsCj4gPiArwqDCoMKgwqDCoMKgwqAuZHJpdmVyID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC5uYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAicGVjaS1hc3BlZWQiLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IGFzcGVl ZF9wZWNpX29mX3RhYmxlLAo+ID4gK8KgwqDCoMKgwqDCoMKgfSwKPiA+ICt9Owo+ID4gK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIoYXNwZWVkX3BlY2lfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVf QVVUSE9SKCJSeWFuIENoZW4gPHJ5YW5fY2hlbkBhc3BlZWR0ZWNoLmNvbT4iKTsKPiA+ICtNT0RV TEVfQVVUSE9SKCJKYWUgSHl1biBZb28gPGphZS5oeXVuLnlvb0BsaW51eC5pbnRlbC5jb20+Iik7 Cj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBU1BFRUQgUEVDSSBkcml2ZXIiKTsKPiA+ICtNT0RV TEVfTElDRU5TRSgiR1BMIik7Cj4gPiArTU9EVUxFX0lNUE9SVF9OUyhQRUNJKTsKPiA+IC0tIAo+ ID4gMi4zMS4xCgo=