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=-16.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 06C97C07E9B for ; Mon, 19 Jul 2021 20:39:00 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BCCD461002 for ; Mon, 19 Jul 2021 20:38:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BCCD461002 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=roeck-us.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=5qa05SghH62vpauV46OEzOyNhdOyTKsmu01qvn9zR0c=; b=mYLTwhkY4QikmyXO8dzDohLTDN cq/1vbph6A4zvhsVPEJ1nApCFHT/L+ZUVqdiY5UgzWGR4yAc52HghLRMdC0x0wVTlTrwmwaRKFg/A pmvoT4Ln1CN3P2gEki6S1tZrqGOfKck5sWDeo2n3MJXGAMWiWOmPBD2NUsZg9v7V7XNEkaBVFdvDc IgGNxojLxC07khPjTZtWtNdn+ExdI1ddjjIMAwZ6/VRNXb43jlh8KgavfZliNRmqe4vXzP2FCNmkv lsYbxU6dukLLTnqDWShcDwwVUDzCzZi9YZUc1tHO1sC6ce6ebMXRVJ1xtnTUH4CnWOhj3BcXoivfo 8lqM1Wug==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m5a0c-00BHPt-R9; Mon, 19 Jul 2021 20:37:03 +0000 Received: from mail-ot1-x330.google.com ([2607:f8b0:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m5a0X-00BHOC-8G for linux-arm-kernel@lists.infradead.org; Mon, 19 Jul 2021 20:37:00 +0000 Received: by mail-ot1-x330.google.com with SMTP id b24-20020a9d60d80000b02904d14e47202cso2110004otk.4 for ; Mon, 19 Jul 2021 13:36:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=gZG5QTTbDUE4xpcECJviTidl2M8zGKRu7+yQIhUAxE0=; b=ipVGO4c4liPqEMay7hoj0UwxzhbsBPyLKAF89ouSZnKBB0PD1DTQxrG/RohTohqo3g QMB3soOnsExwThBV++plqG9FrC3fxsk55RqM101mt5XVyhsTTFFpQQn/wLdtLkhyBMG+ sro9B68FzsmIpqha1L4om8Cl1EK3X7PfLrE/aMEaZB7SxUrAMLUHq0eooTswj9kawI+v EmVnK1Jp1XIfpkYNq1LFJaahLmD/Z9//f9hMZ5elywLtmjD3GrtfWp4zZbv86YNRTYUX esPKOKty0B+sjpO9og3ocFM2peuAa/KlOLUuAmYYIdRqaGr3de9nj82srw+GRpKPZ+Sa 48BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:subject:to:cc:references:from:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=gZG5QTTbDUE4xpcECJviTidl2M8zGKRu7+yQIhUAxE0=; b=S/D874qwDnH13m9Dpc4ElEL7Y/chSMdN/vxIesh7POy+K3R2jw3di+D+i6Ag8C0UvZ AhsQq1K7XaGRz7J/Y6njThv0GUI2hA42cIXyxVsLr0jUaKUv+hDWVsyFbr4yZcZTbRl7 lrF7pT/hpILF5mP1iLbdtfgG3G0HDCLl/7KUlQt8HcFK0FuO368+cqVWUhomaXZSrFFl CBaT++GXyFYp7JnJkEglokz46e/rLdEOx7yDz3eOFSqrIS163zog/Pt6snmS1Pq453lo eAUOmfc6jbofWJPpqwvQMCyy4myJZ746+50zx1aSueXAbt0LF+ZKlEE3wJmxxozfhrdc 9rHg== X-Gm-Message-State: AOAM533lig/gbocDbLS4Yy+uo0U5l1rUyAK35ohLpNB4ZLpMQ/wvnG1I TB8q/74EDG6S1zpYqDOLPXE= X-Google-Smtp-Source: ABdhPJx/RqTfz2fkHBeIMZhhtif5abFutFlPhflj+Vm5+DywSKD6zjDbYm2Wbb/+jfEkdU8NwJ9DWw== X-Received: by 2002:a05:6830:23a7:: with SMTP id m7mr1407802ots.17.1626727015480; Mon, 19 Jul 2021 13:36:55 -0700 (PDT) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id c11sm3828659otm.37.2021.07.19.13.36.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Jul 2021 13:36:55 -0700 (PDT) Subject: Re: [PATCH 12/14] hwmon: peci: Add dimmtemp driver To: "Winiarska, Iwona" Cc: "corbet@lwn.net" , "jae.hyun.yoo@linux.intel.com" , "linux-hwmon@vger.kernel.org" , "Lutomirski, Andy" , "Luck, Tony" , "andrew@aj.id.au" , "andriy.shevchenko@linux.intel.com" , "mchehab@kernel.org" , "jdelvare@suse.com" , "linux-kernel@vger.kernel.org" , "mingo@redhat.com" , "devicetree@vger.kernel.org" , "tglx@linutronix.de" , "linux-aspeed@lists.ozlabs.org" , "linux-doc@vger.kernel.org" , "yazen.ghannam@amd.com" , "robh+dt@kernel.org" , "openbmc@lists.ozlabs.org" , "gregkh@linuxfoundation.org" , "joel@jms.id.au" , "linux-arm-kernel@lists.infradead.org" , "pierre-louis.bossart@linux.intel.com" , "x86@kernel.org" , "bp@alien8.de" References: <20210712220447.957418-1-iwona.winiarska@intel.com> <20210712220447.957418-13-iwona.winiarska@intel.com> <20210715175602.GA3043224@roeck-us.net> <282c092ec55034bde13c23b90516c2d543f0400d.camel@intel.com> From: Guenter Roeck Message-ID: <25c9c595-de7f-5229-cec8-ab28e9e3ac49@roeck-us.net> Date: Mon, 19 Jul 2021 13:36:52 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <282c092ec55034bde13c23b90516c2d543f0400d.camel@intel.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210719_133657_369148_B6350EE0 X-CRM114-Status: GOOD ( 23.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gNy8xOS8yMSAxOjMxIFBNLCBXaW5pYXJza2EsIEl3b25hIHdyb3RlOgo+IE9uIFRodSwgMjAy MS0wNy0xNSBhdCAxMDo1NiAtMDcwMCwgR3VlbnRlciBSb2VjayB3cm90ZToKPj4gT24gVHVlLCBK dWwgMTMsIDIwMjEgYXQgMTI6MDQ6NDVBTSArMDIwMCwgSXdvbmEgV2luaWFyc2thIHdyb3RlOgo+ Pj4gQWRkIHBlY2ktZGltbXRlbXAgZHJpdmVyIGZvciBEaWdpdGFsIFRoZXJtYWwgU2Vuc29yIChE VFMpIHRoZXJtYWwKPj4+IHJlYWRpbmdzIG9mIERJTU1zIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlh IHRoZSBwcm9jZXNzb3IgUEVDSSBpbnRlcmZhY2UuCj4+Pgo+Pj4gVGhlIG1haW4gdXNlIGNhc2Ug Zm9yIHRoZSBkcml2ZXIgKGFuZCBQRUNJIGludGVyZmFjZSkgaXMgb3V0LW9mLWJhbmQKPj4+IG1h bmFnZW1lbnQsIHdoZXJlIHdlJ3JlIGFibGUgdG8gb2J0YWluIHRoZSBEVFMgcmVhZGluZ3MgZnJv bSBhbiBleHRlcm5hbAo+Pj4gZW50aXR5IGNvbm5lY3RlZCB3aXRoIFBFQ0ksIGUuZy4gQk1DIG9u IHNlcnZlciBwbGF0Zm9ybXMuCj4+Pgo+Pj4gQ28tZGV2ZWxvcGVkLWJ5OiBKYWUgSHl1biBZb28g PGphZS5oeXVuLnlvb0BsaW51eC5pbnRlbC5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBKYWUgSHl1 biBZb28gPGphZS5oeXVuLnlvb0BsaW51eC5pbnRlbC5jb20+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBJ d29uYSBXaW5pYXJza2EgPGl3b25hLndpbmlhcnNrYUBpbnRlbC5jb20+Cj4+PiBSZXZpZXdlZC1i eTogUGllcnJlLUxvdWlzIEJvc3NhcnQgPHBpZXJyZS1sb3Vpcy5ib3NzYXJ0QGxpbnV4LmludGVs LmNvbT4KPj4+IC0tLQo+Pj4gIMKgZHJpdmVycy9od21vbi9wZWNpL0tjb25maWfCoMKgwqAgfMKg IDEzICsKPj4+ICDCoGRyaXZlcnMvaHdtb24vcGVjaS9NYWtlZmlsZcKgwqAgfMKgwqAgMiArCj4+ PiAgwqBkcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYyB8IDUwOCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+PiAgwqAzIGZpbGVzIGNoYW5nZWQsIDUyMyBpbnNlcnRpb25z KCspCj4+PiAgwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1w LmMKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wZWNpL0tjb25maWcgYi9kcml2 ZXJzL2h3bW9uL3BlY2kvS2NvbmZpZwo+Pj4gaW5kZXggZTEwZWVkNjhkNzBhLi5mMmQ1N2VmYTUw OGIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2h3bW9uL3BlY2kvS2NvbmZpZwo+Pj4gKysrIGIv ZHJpdmVycy9od21vbi9wZWNpL0tjb25maWcKPj4+IEBAIC0xNCw1ICsxNCwxOCBAQCBjb25maWcg U0VOU09SU19QRUNJX0NQVVRFTVAKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgVGhpcyBkcml2ZXIg Y2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCj4+PiAgwqDC oMKgwqDCoMKgwqDCoMKgIHdpbGwgYmUgY2FsbGVkIHBlY2ktY3B1dGVtcC4KPj4+ICAgCj4+PiAr Y29uZmlnIFNFTlNPUlNfUEVDSV9ESU1NVEVNUAo+Pj4gK8KgwqDCoMKgwqDCoMKgdHJpc3RhdGUg IlBFQ0kgRElNTSB0ZW1wZXJhdHVyZSBtb25pdG9yaW5nIGNsaWVudCIKPj4+ICvCoMKgwqDCoMKg wqDCoGRlcGVuZHMgb24gUEVDSQo+Pj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IFNFTlNPUlNfUEVD SQo+Pj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IFBFQ0lfQ1BVCj4+PiArwqDCoMKgwqDCoMKgwqBo ZWxwCj4+PiArwqDCoMKgwqDCoMKgwqDCoCBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3Vw cG9ydCBmb3IgdGhlIGdlbmVyaWMgSW50ZWwgUEVDSSBod21vbgo+Pj4gK8KgwqDCoMKgwqDCoMKg wqAgZHJpdmVyIHdoaWNoIHByb3ZpZGVzIERpZ2l0YWwgVGhlcm1hbCBTZW5zb3IgKERUUykgdGhl cm1hbCByZWFkaW5ncwo+Pj4gb2YKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIERJTU0gY29tcG9uZW50 cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgcHJvY2Vzc29yIFBFQ0kKPj4+IGludGVyZmFj ZS4KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1 aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAg d2lsbCBiZSBjYWxsZWQgcGVjaS1kaW1tdGVtcC4KPj4+ICsKPj4+ICDCoGNvbmZpZyBTRU5TT1JT X1BFQ0kKPj4+ICDCoMKgwqDCoMKgwqDCoMKgdHJpc3RhdGUKPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2h3bW9uL3BlY2kvTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL3BlY2kvTWFrZWZpbGUKPj4+ IGluZGV4IGU4YTBhZGE1YWIxZi4uMTkxY2ZhMDIyN2YzIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVy cy9od21vbi9wZWNpL01ha2VmaWxlCj4+PiArKysgYi9kcml2ZXJzL2h3bW9uL3BlY2kvTWFrZWZp bGUKPj4+IEBAIC0xLDUgKzEsNyBAQAo+Pj4gIMKgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5Cj4+PiAgIAo+Pj4gIMKgcGVjaS1jcHV0ZW1wLXkgOj0gY3B1dGVtcC5vCj4+ PiArcGVjaS1kaW1tdGVtcC15IDo9IGRpbW10ZW1wLm8KPj4+ICAgCj4+PiAgwqBvYmotJChDT05G SUdfU0VOU09SU19QRUNJX0NQVVRFTVApwqDCoMKgwqDCoCs9IHBlY2ktY3B1dGVtcC5vCj4+PiAr b2JqLSQoQ09ORklHX1NFTlNPUlNfUEVDSV9ESU1NVEVNUCnCoMKgwqDCoCs9IHBlY2ktZGltbXRl bXAubwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vcGVjaS9kaW1tdGVtcC5jIGIvZHJp dmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBp bmRleCAwMDAwMDAwMDAwMDAuLjJmY2I4NjA3MTM3YQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysr IGIvZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmMKPj4+IEBAIC0wLDAgKzEsNTA4IEBACj4+ PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+Pj4gKy8vIENvcHly aWdodCAoYykgMjAxOC0yMDIxIEludGVsIENvcnBvcmF0aW9uCj4+PiArCj4+PiArI2luY2x1ZGUg PGxpbnV4L2F1eGlsaWFyeV9idXMuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4K Pj4+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2h3bW9u Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3BlY2kuaD4KPj4+ICsjaW5jbHVkZSA8bGlu dXgvcGVjaS1jcHUuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvdW5pdHMuaD4KPj4+ICsjaW5jbHVk ZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3g4Ni9pbnRlbC1mYW1p bHkuaD4KPj4+ICsKPj4+ICsjaW5jbHVkZSAiY29tbW9uLmgiCj4+PiArCj4+PiArI2RlZmluZSBE SU1NX01BU0tfQ0hFQ0tfREVMQVlfSklGRklFU8KgwqBtc2Vjc190b19qaWZmaWVzKDUwMDApCj4+ PiArI2RlZmluZSBESU1NX01BU0tfQ0hFQ0tfUkVUUllfTUFYwqDCoMKgwqDCoMKgNjAgLyogNjAg eCA1IHNlY3MgPSA1IG1pbnV0ZXMgKi8KPj4+ICsKPj4+ICsvKiBNYXggbnVtYmVyIG9mIGNoYW5u ZWwgcmFua3MgYW5kIERJTU0gaW5kZXggcGVyIGNoYW5uZWwgKi8KPj4+ICsjZGVmaW5lIENIQU5f UkFOS19NQVhfT05fSFNYwqDCoMKgOAo+Pj4gKyNkZWZpbmUgRElNTV9JRFhfTUFYX09OX0hTWMKg wqDCoMKgMwo+Pj4gKyNkZWZpbmUgQ0hBTl9SQU5LX01BWF9PTl9CRFjCoMKgwqA0Cj4+PiArI2Rl ZmluZSBESU1NX0lEWF9NQVhfT05fQkRYwqDCoMKgwqAzCj4+PiArI2RlZmluZSBDSEFOX1JBTktf TUFYX09OX0JEWETCoMKgMgo+Pj4gKyNkZWZpbmUgRElNTV9JRFhfTUFYX09OX0JEWETCoMKgwqAy Cj4+PiArI2RlZmluZSBDSEFOX1JBTktfTUFYX09OX1NLWMKgwqDCoDYKPj4+ICsjZGVmaW5lIERJ TU1fSURYX01BWF9PTl9TS1jCoMKgwqDCoDIKPj4+ICsjZGVmaW5lIENIQU5fUkFOS19NQVhfT05f SUNYwqDCoMKgOAo+Pj4gKyNkZWZpbmUgRElNTV9JRFhfTUFYX09OX0lDWMKgwqDCoMKgMgo+Pj4g KyNkZWZpbmUgQ0hBTl9SQU5LX01BWF9PTl9JQ1hEwqDCoDQKPj4+ICsjZGVmaW5lIERJTU1fSURY X01BWF9PTl9JQ1hEwqDCoMKgMgo+Pj4gKwo+Pj4gKyNkZWZpbmUgQ0hBTl9SQU5LX01BWMKgwqDC oMKgwqDCoMKgwqDCoMKgQ0hBTl9SQU5LX01BWF9PTl9IU1gKPj4+ICsjZGVmaW5lIERJTU1fSURY X01BWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBESU1NX0lEWF9NQVhfT05fSFNYCj4+PiArI2RlZmlu ZSBESU1NX05VTVNfTUFYwqDCoMKgwqDCoMKgwqDCoMKgwqAoQ0hBTl9SQU5LX01BWCAqIERJTU1f SURYX01BWCkKPj4+ICsKPj4+ICsjZGVmaW5lIENQVV9TRUdfTUFTS8KgwqDCoMKgwqDCoMKgwqDC oMKgwqBHRU5NQVNLKDIzLCAxNikKPj4+ICsjZGVmaW5lIEdFVF9DUFVfU0VHKHgpwqDCoMKgwqDC oMKgwqDCoMKgKCgoeCkgJiBDUFVfU0VHX01BU0spID4+IDE2KQo+Pj4gKyNkZWZpbmUgQ1BVX0JV U19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soNywgMCkKPj4+ICsjZGVmaW5lIEdF VF9DUFVfQlVTKHgpwqDCoMKgwqDCoMKgwqDCoMKgKCh4KSAmIENQVV9CVVNfTUFTSykKPj4+ICsK Pj4+ICsjZGVmaW5lIERJTU1fVEVNUF9NQVjCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0soMTUs IDgpCj4+PiArI2RlZmluZSBESU1NX1RFTVBfQ1JJVMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0so MjMsIDE2KQo+Pj4gKyNkZWZpbmUgR0VUX1RFTVBfTUFYKHgpwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAoKCh4KSAmIERJTU1fVEVNUF9NQVgpID4+IDgpCj4+PiArI2RlZmluZSBHRVRf VEVNUF9DUklUKHgpwqDCoMKgwqDCoMKgwqAoKCh4KSAmIERJTU1fVEVNUF9DUklUKSA+PiAxNikK Pj4+ICsKPj4+ICtzdHJ1Y3QgZGltbV9pbmZvIHsKPj4+ICvCoMKgwqDCoMKgwqDCoGludCBjaGFu X3JhbmtfbWF4Owo+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IGRpbW1faWR4X21heDsKPj4+ICvCoMKg wqDCoMKgwqDCoHU4IG1pbl9wZWNpX3JldmlzaW9uOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0 IHBlY2lfZGltbXRlbXAgewo+Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBlY2lfZGV2aWNlICpw ZWNpX2RldjsKPj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldjsKPj4+ICvCoMKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgKm5hbWU7Cj4+PiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1 Y3QgZGltbV9pbmZvICpnZW5faW5mbzsKPj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZWxheWVk X3dvcmsgZGV0ZWN0X3dvcms7Cj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGVjaV9zZW5zb3Jf ZGF0YSB0ZW1wW0RJTU1fTlVNU19NQVhdOwo+Pj4gK8KgwqDCoMKgwqDCoMKgbG9uZyB0ZW1wX21h eFtESU1NX05VTVNfTUFYXTsKPj4+ICvCoMKgwqDCoMKgwqDCoGxvbmcgdGVtcF9jcml0W0RJTU1f TlVNU19NQVhdOwo+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldHJ5X2NvdW50Owo+Pj4gK8KgwqDC oMKgwqDCoMKgY2hhciAqKmRpbW10ZW1wX2xhYmVsOwo+Pj4gK8KgwqDCoMKgwqDCoMKgREVDTEFS RV9CSVRNQVAoZGltbV9tYXNrLCBESU1NX05VTVNfTUFYKTsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0 YXRpYyB1OCBfX2RpbW1fdGVtcCh1MzIgcmVnLCBpbnQgZGltbV9vcmRlcikKPj4+ICt7Cj4+PiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gKHJlZyA+PiAoZGltbV9vcmRlciAqIDgpKSAmIDB4ZmY7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ2V0X2RpbW1fdGVtcChzdHJ1Y3QgcGVjaV9kaW1t dGVtcCAqcHJpdiwgaW50IGRpbW1fbm8pCj4+PiArewo+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IGRp bW1fb3JkZXIgPSBkaW1tX25vICUgcHJpdi0+Z2VuX2luZm8tPmRpbW1faWR4X21heDsKPj4+ICvC oMKgwqDCoMKgwqDCoGludCBjaGFuX3JhbmsgPSBkaW1tX25vIC8gcHJpdi0+Z2VuX2luZm8tPmRp bW1faWR4X21heDsKPj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwZWNpX2RldmljZSAqcGVjaV9k ZXYgPSBwcml2LT5wZWNpX2RldjsKPj4+ICvCoMKgwqDCoMKgwqDCoHU4IGNwdV9zZWcsIGNwdV9i dXMsIGRldiwgZnVuYzsKPj4+ICvCoMKgwqDCoMKgwqDCoHU2NCBvZmZzZXQ7Cj4+PiArwqDCoMKg wqDCoMKgwqB1MzIgZGF0YTsKPj4+ICvCoMKgwqDCoMKgwqDCoHUxNiByZWc7Cj4+PiArwqDCoMKg wqDCoMKgwqBpbnQgcmV0Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwZWNpX3NlbnNv cl9uZWVkX3VwZGF0ZSgmcHJpdi0+dGVtcFtkaW1tX25vXSkpCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBw ZWNpX3Bjc19yZWFkKHBlY2lfZGV2LCBQRUNJX1BDU19ERFJfRElNTV9URU1QLCBjaGFuX3Jhbmss Cj4+PiAmZGF0YSk7Cj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+PiArCj4+Cj4+IFNpbWlsYXIgdG8gdGhl IGNwdSBkcml2ZXIsIHRoZSBsYWNrIG9mIG11dGV4IHByb3RlY3Rpb24gbmVlZHMgdG8gYmUgZXhw bGFpbmVkLgo+Pgo+IAo+IFN1cmUsIGl0IHdpbGwgYmUgY29uc2lzdGVudCBmb3IgdGhlIHR3byBk cml2ZXJzLgo+IAo+Pj4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+dGVtcFtkaW1tX25vXS52YWx1ZSA9 IF9fZGltbV90ZW1wKGRhdGEsIGRpbW1fb3JkZXIpICoKPj4+IE1JTExJREVHUkVFX1BFUl9ERUdS RUU7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKHBlY2lfZGV2LT5pbmZvLm1vZGVs KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqBjYXNlIElOVEVMX0ZBTTZfSUNFTEFLRV9YOgo+Pj4gK8Kg wqDCoMKgwqDCoMKgY2FzZSBJTlRFTF9GQU02X0lDRUxBS0VfRDoKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBwZWNpX2VwX3BjaV9sb2NhbF9yZWFkKHBlY2lfZGV2LCAw LCAxMywgMCwgMiwgMHhkNCwKPj4+ICZkYXRhKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAocmV0IHx8ICEoZGF0YSAmIEJJVCgzMSkpKQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsgLyogVXNlIGRlZmF1bHQgb3Ig cHJldmlvdXMgdmFsdWUgKi8KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQgPSBwZWNpX2VwX3BjaV9sb2NhbF9yZWFkKHBlY2lfZGV2LCAwLCAxMywgMCwgMiwgMHhk MCwKPj4+ICZkYXRhKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0 KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVh azsgLyogVXNlIGRlZmF1bHQgb3IgcHJldmlvdXMgdmFsdWUgKi8KPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjcHVfc2VnID0gR0VUX0NQVV9TRUcoZGF0YSk7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3B1X2J1cyA9IEdFVF9DUFVfQlVTKGRhdGEp Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogRGV2aWNlIDI2LCBPZmZzZXQgMjI0ZTA6IElNQyAw IGNoYW5uZWwgMCAtPiByYW5rIDAKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBEZXZpY2UgMjYsIE9mZnNldCAyNjRlMDogSU1DIDAgY2hhbm5lbCAxIC0+IHJhbmsgMQo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAyNywgT2Zmc2V0IDIyNGUw OiBJTUMgMSBjaGFubmVsIDAgLT4gcmFuayAyCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogRGV2aWNlIDI3LCBPZmZzZXQgMjY0ZTA6IElNQyAxIGNoYW5uZWwgMSAtPiByYW5r IDMKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjgsIE9mZnNl dCAyMjRlMDogSU1DIDIgY2hhbm5lbCAwIC0+IHJhbmsgNAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIERldmljZSAyOCwgT2Zmc2V0IDI2NGUwOiBJTUMgMiBjaGFubmVsIDEg LT4gcmFuayA1Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogRGV2aWNlIDI5 LCBPZmZzZXQgMjI0ZTA6IElNQyAzIGNoYW5uZWwgMCAtPiByYW5rIDYKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjksIE9mZnNldCAyNjRlMDogSU1DIDMgY2hh bm5lbCAxIC0+IHJhbmsgNwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldiA9IDB4MWEgKyBjaGFuX3Jhbmsg LyAyOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mZnNldCA9IDB4MjI0ZTAg KyBkaW1tX29yZGVyICogNDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo Y2hhbl9yYW5rICUgMikKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgb2Zmc2V0ICs9IDB4NDAwMDsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBwZWNpX21taW9fcmVhZChwZWNpX2RldiwgMCwgY3B1X3NlZywgY3B1 X2J1cywgZGV2LCAwLAo+Pj4gb2Zmc2V0LCAmZGF0YSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwcml2LT50ZW1wX21heFtkaW1tX25vXSA9IEdFVF9URU1QX01BWChkYXRhKSAq Cj4+PiBNSUxMSURFR1JFRV9QRVJfREVHUkVFOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHByaXYtPnRlbXBfY3JpdFtkaW1tX25vXSA9IEdFVF9URU1QX0NSSVQoZGF0YSkgKgo+ Pj4gTUlMTElERUdSRUVfUEVSX0RFR1JFRTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPj4+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSU5URUxfRkFNNl9TS1lM QUtFX1g6Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTAsIEZ1bmN0aW9uIDI6IElNQyAwIGNo YW5uZWwgMCAtPiByYW5rIDAKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBE ZXZpY2UgMTAsIEZ1bmN0aW9uIDY6IElNQyAwIGNoYW5uZWwgMSAtPiByYW5rIDEKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTEsIEZ1bmN0aW9uIDI6IElNQyAw IGNoYW5uZWwgMiAtPiByYW5rIDIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBEZXZpY2UgMTIsIEZ1bmN0aW9uIDI6IElNQyAxIGNoYW5uZWwgMCAtPiByYW5rIDMKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTIsIEZ1bmN0aW9uIDY6IElN QyAxIGNoYW5uZWwgMSAtPiByYW5rIDQKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBEZXZpY2UgMTMsIEZ1bmN0aW9uIDI6IElNQyAxIGNoYW5uZWwgMiAtPiByYW5rIDUKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXYgPSAxMCArIGNoYW5fcmFuayAvIDMgKiAyICsgKGNoYW5fcmFuayAl IDMgPT0gMiA/IDEgOiAwKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmdW5j ID0gY2hhbl9yYW5rICUgMyA9PSAxID8gNiA6IDI7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmVnID0gMHgxMjAgKyBkaW1tX29yZGVyICogNDsKPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBwZWNpX3BjaV9sb2NhbF9yZWFkKHBlY2lfZGV2 LCAyLCBkZXYsIGZ1bmMsIHJlZywgJmRhdGEpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChyZXQpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcHJpdi0+dGVtcF9tYXhbZGltbV9ub10gPSBHRVRfVEVNUF9NQVgoZGF0YSkgKgo+Pj4g TUlMTElERUdSRUVfUEVSX0RFR1JFRTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwcml2LT50ZW1wX2NyaXRbZGltbV9ub10gPSBHRVRfVEVNUF9DUklUKGRhdGEpICoKPj4+IE1J TExJREVHUkVFX1BFUl9ERUdSRUU7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqBjYXNlIElOVEVMX0ZBTTZfQlJPQURXRUxM X0Q6Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTAsIEZ1bmN0aW9uIDI6IElNQyAwIGNoYW5u ZWwgMCAtPiByYW5rIDAKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZp Y2UgMTAsIEZ1bmN0aW9uIDY6IElNQyAwIGNoYW5uZWwgMSAtPiByYW5rIDEKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTIsIEZ1bmN0aW9uIDI6IElNQyAxIGNo YW5uZWwgMCAtPiByYW5rIDIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBE ZXZpY2UgMTIsIEZ1bmN0aW9uIDY6IElNQyAxIGNoYW5uZWwgMSAtPiByYW5rIDMKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXYgPSAxMCArIGNoYW5fcmFuayAvIDIgKiAyOwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZ1bmMgPSAoY2hhbl9yYW5rICUgMikgPyA2IDogMjsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWcgPSAweDEyMCArIGRpbW1fb3JkZXIgKiA0Owo+ Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IHBlY2lfcGNpX2xv Y2FsX3JlYWQocGVjaV9kZXYsIDIsIGRldiwgZnVuYywgcmVnLCAmZGF0YSk7Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcml2LT50ZW1wX21heFtkaW1tX25vXSA9IEdFVF9URU1Q X01BWChkYXRhKSAqCj4+PiBNSUxMSURFR1JFRV9QRVJfREVHUkVFOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHByaXYtPnRlbXBfY3JpdFtkaW1tX25vXSA9IEdFVF9URU1QX0NS SVQoZGF0YSkgKgo+Pj4gTUlMTElERUdSRUVfUEVSX0RFR1JFRTsKPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4+ICvCoMKgwqDCoMKgwqDCoGNhc2UgSU5U RUxfRkFNNl9IQVNXRUxMX1g6Cj4+PiArwqDCoMKgwqDCoMKgwqBjYXNlIElOVEVMX0ZBTTZfQlJP QURXRUxMX1g6Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjAsIEZ1bmN0aW9uIDA6IElNQyAw IGNoYW5uZWwgMCAtPiByYW5rIDAKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBEZXZpY2UgMjAsIEZ1bmN0aW9uIDE6IElNQyAwIGNoYW5uZWwgMSAtPiByYW5rIDEKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjEsIEZ1bmN0aW9uIDA6IElN QyAwIGNoYW5uZWwgMiAtPiByYW5rIDIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBEZXZpY2UgMjEsIEZ1bmN0aW9uIDE6IElNQyAwIGNoYW5uZWwgMyAtPiByYW5rIDMKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjMsIEZ1bmN0aW9uIDA6 IElNQyAxIGNoYW5uZWwgMCAtPiByYW5rIDQKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBEZXZpY2UgMjMsIEZ1bmN0aW9uIDE6IElNQyAxIGNoYW5uZWwgMSAtPiByYW5rIDUK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMjQsIEZ1bmN0aW9u IDA6IElNQyAxIGNoYW5uZWwgMiAtPiByYW5rIDYKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBEZXZpY2UgMjQsIEZ1bmN0aW9uIDE6IElNQyAxIGNoYW5uZWwgMyAtPiByYW5r IDcKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXYgPSAyMCArIGNoYW5fcmFuayAvIDIgKyBjaGFuX3Jhbmsg LyA0Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZ1bmMgPSBjaGFuX3Jhbmsg JSAyOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZyA9IDB4MTIwICsgZGlt bV9vcmRlciAqIDQ7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gcGVjaV9wY2lfbG9jYWxfcmVhZChwZWNpX2RldiwgMSwgZGV2LCBmdW5jLCByZWcsICZkYXRh KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+Pj4g Kwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaXYtPnRlbXBfbWF4W2RpbW1f bm9dID0gR0VUX1RFTVBfTUFYKGRhdGEpICoKPj4+IE1JTExJREVHUkVFX1BFUl9ERUdSRUU7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpdi0+dGVtcF9jcml0W2RpbW1fbm9d ID0gR0VUX1RFTVBfQ1JJVChkYXRhKSAqCj4+PiBNSUxMSURFR1JFRV9QRVJfREVHUkVFOwo+Pj4g Kwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+Pj4gK8KgwqDCoMKg wqDCoMKgZGVmYXVsdDoKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LUVPUE5PVFNVUFA7Cj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKg wqBwZWNpX3NlbnNvcl9tYXJrX3VwZGF0ZWQoJnByaXYtPnRlbXBbZGltbV9ub10pOwo+Pj4gKwo+ Pj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg ZGltbXRlbXBfcmVhZF9zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW51bSBo d21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwg Y29uc3QgY2hhciAqKnN0cikKPj4+ICt7Cj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGVjaV9k aW1tdGVtcCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+Pj4gKwo+Pj4gK8KgwqDCoMKg wqDCoMKgaWYgKGF0dHIgIT0gaHdtb25fdGVtcF9sYWJlbCkKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVPUE5PVFNVUFA7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKg wqAqc3RyID0gKGNvbnN0IGNoYXIgKilwcml2LT5kaW1tdGVtcF9sYWJlbFtjaGFubmVsXTsKPj4+ ICsKPj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50IGRpbW10ZW1wX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90 eXBlcyB0eXBlLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpCj4+PiArewo+Pj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBnZXRfZGltbV90ZW1wKHByaXYsIGNoYW5uZWwpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgaWYg KHJldCkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+Pj4g Kwo+Pj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChhdHRyKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqBj YXNlIGh3bW9uX3RlbXBfaW5wdXQ6Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KnZhbCA9IHByaXYtPnRlbXBbY2hhbm5lbF0udmFsdWU7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqBjYXNlIGh3bW9uX3RlbXBfbWF4 Ogo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2YWwgPSBwcml2LT50ZW1wX21h eFtjaGFubmVsXTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4+ ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25fdGVtcF9jcml0Ogo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCp2YWwgPSBwcml2LT50ZW1wX2NyaXRbY2hhbm5lbF07Cj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+PiArwqDCoMKgwqDCoMKgwqBkZWZh dWx0Ogo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU9QTk9UU1VQ UDsKPj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAw Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdW1vZGVfdCBkaW1tdGVtcF9pc192aXNpYmxlKGNv bnN0IHZvaWQgKmRhdGEsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzCj4+PiB0eXBlLAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1MzIgYXR0ciwgaW50IGNoYW5uZWwpCj4+PiArewo+Pj4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYgPSBkYXRhOwo+Pj4gKwo+Pj4gK8KgwqDC oMKgwqDCoMKgaWYgKHRlc3RfYml0KGNoYW5uZWwsIHByaXYtPmRpbW1fbWFzaykpCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA0NDQ7Cj4+PiArCj4+PiArwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBo d21vbl9vcHMgcGVjaV9kaW1tdGVtcF9vcHMgPSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAuaXNfdmlz aWJsZSA9IGRpbW10ZW1wX2lzX3Zpc2libGUsCj4+PiArwqDCoMKgwqDCoMKgwqAucmVhZF9zdHJp bmcgPSBkaW1tdGVtcF9yZWFkX3N0cmluZywKPj4+ICvCoMKgwqDCoMKgwqDCoC5yZWFkID0gZGlt bXRlbXBfcmVhZCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgY2hlY2tfcG9wdWxhdGVk X2RpbW1zKHN0cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2KQo+Pj4gK3sKPj4+ICvCoMKgwqDCoMKg wqDCoGludCBjaGFuX3JhbmtfbWF4ID0gcHJpdi0+Z2VuX2luZm8tPmNoYW5fcmFua19tYXg7Cj4+ PiArwqDCoMKgwqDCoMKgwqBpbnQgZGltbV9pZHhfbWF4ID0gcHJpdi0+Z2VuX2luZm8tPmRpbW1f aWR4X21heDsKPj4+ICvCoMKgwqDCoMKgwqDCoGludCBjaGFuX3JhbmssIGRpbW1faWR4LCByZXQ7 Cj4+PiArwqDCoMKgwqDCoMKgwqB1NjQgZGltbV9tYXNrID0gMDsKPj4+ICvCoMKgwqDCoMKgwqDC oHUzMiBwY3M7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBmb3IgKGNoYW5fcmFuayA9IDA7IGNo YW5fcmFuayA8IGNoYW5fcmFua19tYXg7IGNoYW5fcmFuaysrKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gcGVjaV9wY3NfcmVhZChwcml2LT5wZWNpX2RldiwgUEVD SV9QQ1NfRERSX0RJTU1fVEVNUCwKPj4+IGNoYW5fcmFuaywgJnBjcyk7Cj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBPdmVyYWxsLCB3ZSBleHBlY3QgZWl0aGVyIHN1Y2Nl c3Mgb3IgLUVJTlZBTCBpbgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBESU1NIGlzIHBvcHVsYXRl ZCBvcgo+Pj4gbm90Lgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBGb3IgYW55dGhpbmcgZWxzZSAtIHdlIGZhbGwgYmFjayB0byBkZWZlcmluZyB0 aGUKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICog ZGV0ZWN0aW9uIHRvIGJlIHBlcmZvcm1lZCBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUuCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09IC1F SU5WQUwpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+Pgo+PiBlbHNlIGFmdGVyIGNvbnRpbnVlIGlzIHVu bmVjZXNzYXJ5Lgo+Pgo+IAo+IE9rLgo+IAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQUdBSU47Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZvciAoZGltbV9pZHggPSAwOyBkaW1tX2lkeCA8IGRpbW1faWR4X21h eDsgZGltbV9pZHgrKykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKF9fZGltbV90ZW1wKHBjcywgZGltbV9pZHgpKQo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGltbV9t YXNrIHw9IEJJVChjaGFuX3JhbmsgKiBkaW1tX2lkeF9tYXggKwo+Pj4gZGltbV9pZHgpOwo+Pj4g K8KgwqDCoMKgwqDCoMKgfQo+Pj4gK8KgwqDCoMKgwqDCoMKgLyoKPj4+ICvCoMKgwqDCoMKgwqDC oCAqIEl0J3MgcG9zc2libGUgdGhhdCBtZW1vcnkgdHJhaW5pbmcgaXMgbm90IGRvbmUgeWV0LiBJ biB0aGlzIGNhc2Ugd2UKPj4+ICvCoMKgwqDCoMKgwqDCoCAqIGRlZmVyIHRoZSBkZXRlY3Rpb24g dG8gYmUgcGVyZm9ybWVkIGF0IGEgbGF0ZXIgcG9pbnQgaW4gdGltZS4KPj4+ICvCoMKgwqDCoMKg wqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkaW1tX21hc2spCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQUdBSU47Cj4+PiArCj4+PiArwqDCoMKgwqDC oMKgwqBkZXZfZGJnKHByaXYtPmRldiwgIlNjYW5uZWQgcG9wdWxhdGVkIERJTU1zOiAlI2xseFxu IiwgZGltbV9tYXNrKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoGJpdG1hcF9mcm9tX3U2NChw cml2LT5kaW1tX21hc2ssIGRpbW1fbWFzayk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBjcmVhdGVfZGltbV90ZW1wX2xhYmVs KHN0cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2LCBpbnQgY2hhbikKPj4+ICt7Cj4+PiArwqDCoMKg wqDCoMKgwqBpbnQgcmFuayA9IGNoYW4gLyBwcml2LT5nZW5faW5mby0+ZGltbV9pZHhfbWF4Owo+ Pj4gK8KgwqDCoMKgwqDCoMKgaW50IGlkeCA9IGNoYW4gJSBwcml2LT5nZW5faW5mby0+ZGltbV9p ZHhfbWF4Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+ZGltbXRlbXBfbGFiZWxbY2hh bl0gPSBkZXZtX2thc3ByaW50Zihwcml2LT5kZXYsIEdGUF9LRVJORUwsCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRElNTSAlYyVkIiwgJ0EnICsgcmFu aywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlkeCAr IDEpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwcml2LT5kaW1tdGVtcF9sYWJlbFtjaGFuXSkK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPj4+ICsK Pj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgY29u c3QgdTMyIHBlY2lfZGltbXRlbXBfdGVtcF9jaGFubmVsX2NvbmZpZ1tdID0gewo+Pj4gK8KgwqDC oMKgwqDCoMKgWzAgLi4uIERJTU1fTlVNU19NQVggLSAxXSA9IEhXTU9OX1RfTEFCRUwgfCBIV01P Tl9UX0lOUFVUIHwKPj4+IEhXTU9OX1RfTUFYIHwgSFdNT05fVF9DUklULAo+Pj4gK8KgwqDCoMKg wqDCoMKgMAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFu bmVsX2luZm8gcGVjaV9kaW1tdGVtcF90ZW1wX2NoYW5uZWwgPSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAudHlwZSA9IGh3bW9uX3RlbXAsCj4+PiArwqDCoMKgwqDCoMKgwqAuY29uZmlnID0gcGVjaV9k aW1tdGVtcF90ZW1wX2NoYW5uZWxfY29uZmlnLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKnBlY2lfZGltbXRlbXBfdGVtcF9pbmZvW10g PSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAmcGVjaV9kaW1tdGVtcF90ZW1wX2NoYW5uZWwsCj4+PiAr wqDCoMKgwqDCoMKgwqBOVUxMCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGh3bW9uX2NoaXBfaW5mbyBwZWNpX2RpbW10ZW1wX2NoaXBfaW5mbyA9IHsKPj4+ICvCoMKgwqDC oMKgwqDCoC5vcHMgPSAmcGVjaV9kaW1tdGVtcF9vcHMsCj4+PiArwqDCoMKgwqDCoMKgwqAuaW5m byA9IHBlY2lfZGltbXRlbXBfdGVtcF9pbmZvLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGlu dCBjcmVhdGVfZGltbV90ZW1wX2luZm8oc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYpCj4+PiAr ewo+Pj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCwgaSwgY2hhbm5lbHM7Cj4+PiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBj aGVja19wb3B1bGF0ZWRfZGltbXMocHJpdik7Cj4+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09 IC1FQUdBSU4pIHsKPj4KPj4gVGhlIG9ubHkgZXJyb3IgcmV0dXJuZWQgYnkgY2hlY2tfcG9wdWxh dGVkX2RpbW1zKCkgaXMgLUVBR0FJTi4gQ2hlY2tpbmcgZm9yCj4+IHNwZWNpZmljYWxseSB0aGlz IGVycm9yIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtYXkgYmUgb3RoZXIgKGlnbm9yZWQpCj4+ IGVycm9ycy4gVGhlIHJlYWRlciBoYXMgdG8gZXhhbWluZSBjaGVja19wb3B1bGF0ZWRfZGltbXMo KSB0byBmaW5kIG91dAo+PiB0aGF0IC1FQUdBSU4gaXMgaW5kZWVkIHRoZSBvbmx5IHBvc3NpYmxl IGVycm9yLiBUbyBhdm9pZCBjb25mdXNpb24sIHBsZWFzZQo+PiBvbmx5IGNoZWNrIGZvciByZXQg aGVyZS4KPj4KPiAKPiBNYWtlcyBzZW5zZS4KPiAKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAocHJpdi0+cmV0cnlfY291bnQgPCBESU1NX01BU0tfQ0hFQ0tfUkVUUllfTUFY KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNj aGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZGV0ZWN0X3dvcmssCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBESU1NX01BU0tfQ0hFQ0tfREVMQVlfSklGRklFUyk7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaXYtPnJldHJ5 X2NvdW50Kys7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRldl9kYmcocHJpdi0+ZGV2LCAiRGVmZXJyZWQgcG9wdWxhdGluZyBESU1NIHRlbXAKPj4+ IGluZm9cbiIpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Owo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPj4+ ICsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfaW5mbyhwcml2LT5kZXYs ICJUaW1lb3V0IHBvcHVsYXRpbmcgRElNTSB0ZW1wIGluZm9cbiIpOwo+Pgo+PiBJZiB0aGlzIHJl dHVybnMgYW4gZXJyb3IsIHRoZSBtZXNzYWdlIG5lZWRzIHRvIGJlIGRldl9lcnIoKS4KPj4KPiAK PiBXZSBuZWVkIHRvIGNoZWNrIGVhY2ggQ1BVLCBidXQgaXQncyBjb21wbGV0ZWx5IGxlZ2FsIHRo YXQgb25seSBvbmUgcHJvY2Vzc29yIGluCj4gdGhlIHN5c3RlbXMgaGFzIHBvcHVsYXRlZCBESU1N cy4KPiBJJ2QgcHJlZmVyIHRvIGtlZXAgZGV2X2luZm8oKSBvciBtYXliZSBldmVuIGRvd25ncmFk ZSBpdCB0byBkZXZfZGJnKCkuCj4gCgpJZiB0aGlzIGlzIG5vdCBhbiBlcnJvciwgdGhlcmUgc2hv dWxkIGJlIG5vIG1lc3NhZ2UuLi4uCgo+IFRoYW5rIHlvdQo+IC1Jd29uYQo+IAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRVRJTUVET1VUOwoKYW5kIG5vIGVycm9y IGVpdGhlci4KCkd1ZW50ZXIKCj4+PiArwqDCoMKgwqDCoMKgwqB9Cj4+PiArCj4+PiArwqDCoMKg wqDCoMKgwqBjaGFubmVscyA9IHByaXYtPmdlbl9pbmZvLT5jaGFuX3JhbmtfbWF4ICogcHJpdi0+ Z2VuX2luZm8tCj4+Pj4gZGltbV9pZHhfbWF4Owo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgcHJp di0+ZGltbXRlbXBfbGFiZWwgPSBkZXZtX2t6YWxsb2MocHJpdi0+ZGV2LCBjaGFubmVscyAqIHNp emVvZihjaGFyCj4+PiAqKSwgR0ZQX0tFUk5FTCk7Cj4+PiArwqDCoMKgwqDCoMKgwqBpZiAoIXBy aXYtPmRpbW10ZW1wX2xhYmVsKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiAtRU5PTUVNOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgZm9yX2VhY2hfc2V0X2JpdChp LCBwcml2LT5kaW1tX21hc2ssIERJTU1fTlVNU19NQVgpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXQgPSBjcmVhdGVfZGltbV90ZW1wX2xhYmVsKHByaXYsIGkpOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+PiArwqDCoMKg wqDCoMKgwqB9Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBkZXYgPSBkZXZtX2h3bW9uX2Rldmlj ZV9yZWdpc3Rlcl93aXRoX2luZm8ocHJpdi0+ZGV2LCBwcml2LT5uYW1lLAo+Pj4gcHJpdiwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcGVjaV9kaW1tdGVt cF9jaGlwX2luZm8sCj4+PiBOVUxMKTsKPj4+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZGV2 KSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIocHJpdi0+ZGV2 LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZVxuIik7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoZGV2KTsKPj4+ICvCoMKgwqDCoMKgwqDC oH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoGRldl9kYmcocHJpdi0+ZGV2LCAiJXM6IHNlbnNv ciAnJXMnXG4iLCBkZXZfbmFtZShkZXYpLCBwcml2LT5uYW1lKTsKPj4+ICsKPj4+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBjcmVhdGVfZGlt bV90ZW1wX2luZm9fZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+PiArewo+Pj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYgPSBjb250YWluZXJfb2Yo dG9fZGVsYXllZF93b3JrKHdvcmspLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgcGVjaV9kaW1tdGVtcCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV0ZWN0X3dvcmspOwo+Pj4gK8KgwqDCoMKgwqDCoMKgaW50 IHJldDsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGNyZWF0ZV9kaW1tX3RlbXBfaW5m byhwcml2KTsKPj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgJiYgcmV0ICE9IC1FQUdBSU4pCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2RiZyhwcml2LT5kZXYsICJGYWls ZWQgdG8gcG9wdWxhdGUgRElNTSB0ZW1wIGluZm9cbiIpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgaW50IHBlY2lfZGltbXRlbXBfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmFkZXYs IGNvbnN0IHN0cnVjdAo+Pj4gYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpCj4+PiArewo+Pj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gJmFkZXYtPmRldjsKPj4+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBwZWNpX2RldmljZSAqcGVjaV9kZXYgPSB0b19wZWNpX2RldmljZShkZXYt PnBhcmVudCk7Cj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGVjaV9kaW1tdGVtcCAqcHJpdjsK Pj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBwcml2 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4+PiArwqDC oMKgwqDCoMKgwqBpZiAoIXByaXYpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqBwcml2LT5uYW1lID0gZGV2 bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAicGVjaV9kaW1tdGVtcC5jcHUlZCIsCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGVjaV9kZXYtPmluZm8uc29ja2V0X2lkKTsKPj4+ICvCoMKgwqDCoMKgwqDC oGlmICghcHJpdi0+bmFtZSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gLUVOT01FTTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoGRldl9zZXRfZHJ2ZGF0YShkZXYs IHByaXYpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgcHJpdi0+ZGV2ID0gZGV2Owo+Pj4gK8KgwqDCoMKg wqDCoMKgcHJpdi0+cGVjaV9kZXYgPSBwZWNpX2RldjsKPj4+ICvCoMKgwqDCoMKgwqDCoHByaXYt Pmdlbl9pbmZvID0gKGNvbnN0IHN0cnVjdCBkaW1tX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7Cj4+ PiArCj4+PiArwqDCoMKgwqDCoMKgwqBJTklUX0RFTEFZRURfV09SSygmcHJpdi0+ZGV0ZWN0X3dv cmssIGNyZWF0ZV9kaW1tX3RlbXBfaW5mb19kZWxheWVkKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKg wqDCoHJldCA9IGNyZWF0ZV9kaW1tX3RlbXBfaW5mbyhwcml2KTsKPj4+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQgJiYgcmV0ICE9IC1FQUdBSU4pIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBwb3B1bGF0ZSBESU1NIHRlbXAgaW5mb1xu Iik7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4+ICvC oMKgwqDCoMKgwqDCoH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBwZWNpX2RpbW10ZW1wX3JlbW92ZShzdHJ1Y3QgYXV4aWxp YXJ5X2RldmljZSAqYWRldikKPj4+ICt7Cj4+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGVjaV9k aW1tdGVtcCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmYWRldi0+ZGV2KTsKPj4+ICsKPj4+ICvC oMKgwqDCoMKgwqDCoGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZGV0ZWN0X3dvcmsp Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRpbW1faW5mbyBkaW1tX2hz eCA9IHsKPj4+ICvCoMKgwqDCoMKgwqDCoC5jaGFuX3JhbmtfbWF4wqDCoD0gQ0hBTl9SQU5LX01B WF9PTl9IU1gsCj4+PiArwqDCoMKgwqDCoMKgwqAuZGltbV9pZHhfbWF4wqDCoMKgPSBESU1NX0lE WF9NQVhfT05fSFNYLAo+Pj4gK8KgwqDCoMKgwqDCoMKgLm1pbl9wZWNpX3JldmlzaW9uID0gMHgz MCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGltbV9pbmZvIGRpbW1f YmR4ID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgLmNoYW5fcmFua19tYXjCoMKgPSBDSEFOX1JBTktf TUFYX09OX0JEWCwKPj4+ICvCoMKgwqDCoMKgwqDCoC5kaW1tX2lkeF9tYXjCoMKgwqA9IERJTU1f SURYX01BWF9PTl9CRFgsCj4+PiArwqDCoMKgwqDCoMKgwqAubWluX3BlY2lfcmV2aXNpb24gPSAw eDMwLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkaW1tX2luZm8gZGlt bV9iZHhkID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgLmNoYW5fcmFua19tYXjCoMKgPSBDSEFOX1JB TktfTUFYX09OX0JEWEQsCj4+PiArwqDCoMKgwqDCoMKgwqAuZGltbV9pZHhfbWF4wqDCoMKgPSBE SU1NX0lEWF9NQVhfT05fQkRYRCwKPj4+ICvCoMKgwqDCoMKgwqDCoC5taW5fcGVjaV9yZXZpc2lv biA9IDB4MzAsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRpbW1faW5m byBkaW1tX3NreCA9IHsKPj4+ICvCoMKgwqDCoMKgwqDCoC5jaGFuX3JhbmtfbWF4wqDCoD0gQ0hB Tl9SQU5LX01BWF9PTl9TS1gsCj4+PiArwqDCoMKgwqDCoMKgwqAuZGltbV9pZHhfbWF4wqDCoMKg PSBESU1NX0lEWF9NQVhfT05fU0tYLAo+Pj4gK8KgwqDCoMKgwqDCoMKgLm1pbl9wZWNpX3Jldmlz aW9uID0gMHgzMCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGltbV9p bmZvIGRpbW1faWN4ID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgLmNoYW5fcmFua19tYXjCoMKgPSBD SEFOX1JBTktfTUFYX09OX0lDWCwKPj4+ICvCoMKgwqDCoMKgwqDCoC5kaW1tX2lkeF9tYXjCoMKg wqA9IERJTU1fSURYX01BWF9PTl9JQ1gsCj4+PiArwqDCoMKgwqDCoMKgwqAubWluX3BlY2lfcmV2 aXNpb24gPSAweDQwLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkaW1t X2luZm8gZGltbV9pY3hkID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgLmNoYW5fcmFua19tYXjCoMKg PSBDSEFOX1JBTktfTUFYX09OX0lDWEQsCj4+PiArwqDCoMKgwqDCoMKgwqAuZGltbV9pZHhfbWF4 wqDCoMKgPSBESU1NX0lEWF9NQVhfT05fSUNYRCwKPj4+ICvCoMKgwqDCoMKgwqDCoC5taW5fcGVj aV9yZXZpc2lvbiA9IDB4NDAsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGF1eGlsaWFyeV9kZXZpY2VfaWQgcGVjaV9kaW1tdGVtcF9pZHNbXSA9IHsKPj4+ICvCoMKgwqDC oMKgwqDCoHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubmFtZSA9ICJwZWNp X2NwdS5kaW1tdGVtcC5oc3giLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5k cml2ZXJfZGF0YSA9IChrZXJuZWxfdWxvbmdfdCkmZGltbV9oc3gsCj4+PiArwqDCoMKgwqDCoMKg wqB9LAo+Pj4gK8KgwqDCoMKgwqDCoMKgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC5uYW1lID0gInBlY2lfY3B1LmRpbW10ZW1wLmJkeCIsCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSZkaW1tX2JkeCwK Pj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+PiArwqDCoMKgwqDCoMKgwqB7Cj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWUgPSAicGVjaV9jcHUuZGltbXRlbXAuYmR4ZCIsCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91 bG9uZ190KSZkaW1tX2JkeGQsCj4+PiArwqDCoMKgwqDCoMKgwqB9LAo+Pj4gK8KgwqDCoMKgwqDC oMKgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gInBlY2lfY3B1 LmRpbW10ZW1wLnNreCIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmRyaXZl cl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSZkaW1tX3NreCwKPj4+ICvCoMKgwqDCoMKgwqDCoH0s Cj4+PiArwqDCoMKgwqDCoMKgwqB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Lm5hbWUgPSAicGVjaV9jcHUuZGltbXRlbXAuaWN4IiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25nX3QpJmRpbW1faWN4LAo+Pj4g K8KgwqDCoMKgwqDCoMKgfSwKPj4+ICvCoMKgwqDCoMKgwqDCoHsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAubmFtZSA9ICJwZWNpX2NwdS5kaW1tdGVtcC5pY3hkIiwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZHJpdmVyX2RhdGEgPSAoa2VybmVsX3Vsb25n X3QpJmRpbW1faWN4ZCwKPj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+PiArwqDCoMKgwqDCoMKgwqB7 IH0KPj4+ICt9Owo+Pj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCBwZWNpX2RpbW10 ZW1wX2lkcyk7Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHBlY2lf ZGltbXRlbXBfZHJpdmVyID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgLnByb2JlwqDCoMKgwqDCoMKg wqDCoMKgwqA9IHBlY2lfZGltbXRlbXBfcHJvYmUsCj4+PiArwqDCoMKgwqDCoMKgwqAucmVtb3Zl wqDCoMKgwqDCoMKgwqDCoMKgPSBwZWNpX2RpbW10ZW1wX3JlbW92ZSwKPj4+ICvCoMKgwqDCoMKg wqDCoC5pZF90YWJsZcKgwqDCoMKgwqDCoMKgPSBwZWNpX2RpbW10ZW1wX2lkcywKPj4+ICt9Owo+ Pj4gKwo+Pj4gK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHBlY2lfZGltbXRlbXBfZHJpdmVyKTsK Pj4+ICsKPj4+ICtNT0RVTEVfQVVUSE9SKCJKYWUgSHl1biBZb28gPGphZS5oeXVuLnlvb0BsaW51 eC5pbnRlbC5jb20+Iik7Cj4+PiArTU9EVUxFX0FVVEhPUigiSXdvbmEgV2luaWFyc2thIDxpd29u YS53aW5pYXJza2FAaW50ZWwuY29tPiIpOwo+Pj4gK01PRFVMRV9ERVNDUklQVElPTigiUEVDSSBk aW1tdGVtcCBkcml2ZXIiKTsKPj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4+PiArTU9EVUxF X0lNUE9SVF9OUyhQRUNJX0NQVSk7Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=