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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2C08C43334 for ; Tue, 12 Jul 2022 10:33:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229617AbiGLKdA (ORCPT ); Tue, 12 Jul 2022 06:33:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229591AbiGLKc7 (ORCPT ); Tue, 12 Jul 2022 06:32:59 -0400 Received: from mail-qk1-x733.google.com (mail-qk1-x733.google.com [IPv6:2607:f8b0:4864:20::733]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A965CADEAE; Tue, 12 Jul 2022 03:32:54 -0700 (PDT) Received: by mail-qk1-x733.google.com with SMTP id z11so4417083qkz.13; Tue, 12 Jul 2022 03:32:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :content-transfer-encoding:user-agent:mime-version; bh=6lAF6LDB+qQ5jWaXDgGW5IohSrJKEi9uYsdO6ETaGqA=; b=k1JO6slhy7SD4PITHhtZdcH7VtW7yLmQnUscLfU+nSMpUGC2eZUpcPs6TaUE4jSLDC HXBlFadk4mg8wGcskpMaAtQVmr5mM43Ayih4h5cL9bIDzwnvU3nr00MZ2WgdFCUB4Thv eQwFbxBDIlxBv284uwtxykjNG0DmzEgnuZrf4UUvxy1GIiB2UJMqnTlZO78pMaBotpPW HW+XEz/MXeAAVHyaQ5OA6NJFe+9u8RuJDOjt14XukbgzNe4O6Q7+8ri5RpOPlQkLqfl+ jRqOIBErnavXAyh3WVP/lt7PnFrvQEgjAMS9x2RIeW6tL8jrpgGAOTlRKFcS1J2zzaU9 TEaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:content-transfer-encoding:user-agent:mime-version; bh=6lAF6LDB+qQ5jWaXDgGW5IohSrJKEi9uYsdO6ETaGqA=; b=E7WmMCcqkt1GlGxKxnwKDsosqhkPwIRNbgavcDz1hZqndZ71TnCCJRcCeU0LCmRULx 6l8kYpmA0lek+njX2gKQWCMH9K6YUYmFIDlxCySgSMKoy5c2HeDIDIZiTgMAtZicg9qP XhE4NhNizRTkNDU/w9VGuJdq3l0QVYPAJCrivKYI53/cGa8/U0C65ZZJxFBsfupImdrf d+SpnFqkB0/DhFw2w7kPmCchXKGYiRqnb6qm8/0KxRc9vHEKNnOZeuHHcqQ/hzwZCmJz w+zSiwq7NRf56RW1dGwpofrV5ORZgEoBQWK3VDJgGawnzdgI7nRvtrQUJM0niSjmM+Xx SLqg== X-Gm-Message-State: AJIora8GbiadAD9ttm/QSlZ5QRGdTJYOuHc2Mu0azLx+RS02UyluHkjF t364Z6D/p+lnZc8jqkxC28Q= X-Google-Smtp-Source: AGRyM1tQtNn8VEJYjN/ew+9DnXKfcGdTzLO789tLCIPULIOKIVinljGG+Arn9jBSSZFKGPKG+LUwWw== X-Received: by 2002:ae9:e913:0:b0:6b5:9d07:7954 with SMTP id x19-20020ae9e913000000b006b59d077954mr2859967qkf.700.1657621973704; Tue, 12 Jul 2022 03:32:53 -0700 (PDT) Received: from p200300f6ef036f005de6a4d0d791ed01.dip0.t-ipconnect.de (p200300f6ef036f005de6a4d0d791ed01.dip0.t-ipconnect.de. [2003:f6:ef03:6f00:5de6:a4d0:d791:ed01]) by smtp.gmail.com with ESMTPSA id z19-20020a05622a029300b00316a384447fsm7220019qtw.16.2022.07.12.03.32.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jul 2022 03:32:53 -0700 (PDT) Message-ID: Subject: Re: [PATCH v2 13/15] iio: adc: stm32-adc: convert to device properties From: Nuno =?ISO-8859-1?Q?S=E1?= To: Fabrice Gasnier , Nuno =?ISO-8859-1?Q?S=E1?= , linux-arm-msm@vger.kernel.org, openbmc@lists.ozlabs.org, linux-renesas-soc@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-imx@nxp.com, linux-mips@vger.kernel.org, Lad Prabhakar , linux-iio@vger.kernel.org, chrome-platform@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com Cc: Andy Gross , Nicolas Ferre , Benson Leung , Matthias Brugger , Tomer Maimon , Zhang Rui , "Rafael J. Wysocki" , Eugen Hristev , Sascha Hauer , Alexandre Belloni , Benjamin Fair , Nancy Yuen , Jishnu Prakash , Christophe Branchereau , Avi Fishman , Tali Perry , Michael Hennerich , Miquel Raynal , Claudiu Beznea , Lars-Peter Clausen , Thara Gopinath , Cai Huoqing , Fabio Estevam , Olivier Moysan , Shawn Guo , Haibo Chen , Arnd Bergmann , Daniel Lezcano , Patrick Venture , Amit Kucheria , Maxime Coquelin , Lorenzo Bianconi , Paul Cercueil , Andy Shevchenko , Alexandre Torgue , Gwendal Grignou , Bjorn Andersson , Saravanan Sekar , Guenter Roeck , Jonathan Cameron , Pengutronix Kernel Team , Linus Walleij Date: Tue, 12 Jul 2022 12:33:48 +0200 In-Reply-To: References: <20220711123835.811358-1-nuno.sa@analog.com> <20220711123835.811358-14-nuno.sa@analog.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.3 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org SGkgRmFicmljZSwKCk5pY2UgdGhhdCBzb21lb25lIGluIFNUIGlzIGxvb2tpbmcgYXQgdGhpcyBv bmUgOikKCk9uIE1vbiwgMjAyMi0wNy0xMSBhdCAxNjowNCArMDIwMCwgRmFicmljZSBHYXNuaWVy IHdyb3RlOgo+IE9uIDcvMTEvMjIgMTQ6MzgsIE51bm8gU8OhIHdyb3RlOgo+ID4gTWFrZSB0aGUg Y29udmVyc2lvbiB0byBmaXJtd2FyZSBhZ25vc3RpYyBkZXZpY2UgcHJvcGVydGllcy4gQXMgcGFy dAo+ID4gb2YKPiA+IHRoZSBjb252ZXJzaW9uIHRoZSBJSU8gaW5rZXJuIGludGVyZmFjZSAnb2Zf eGxhdGUoKScgaXMgYWxzbwo+ID4gY29udmVydGVkIHRvCj4gPiAnZndub2RlX3hsYXRlKCknLiBU aGUgZ29hbCBpcyB0byBjb21wbGV0ZWx5IGRyb3AgJ29mX3hsYXRlJyBhbmQKPiA+IGhlbmNlIE9G Cj4gPiBkZXBlbmRlbmNpZXMgZnJvbSBJSU8uCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IE51bm8g U8OhIDxudW5vLnNhQGFuYWxvZy5jb20+Cj4gPiAtLS0KPiA+IMKgZHJpdmVycy9paW8vYWRjL3N0 bTMyLWFkYy5jIHwgMTIxICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4gPiAtLS0t Cj4gPiDCoDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkK PiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9zdG0zMi1hZGMuYyBiL2RyaXZl cnMvaWlvL2FkYy9zdG0zMi0KPiA+IGFkYy5jCj4gPiBpbmRleCAzOTg1ZmU5NzI4OTIuLmU1NTg1 OTExM2RmOCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaWlvL2FkYy9zdG0zMi1hZGMuYwo+ID4g KysrIGIvZHJpdmVycy9paW8vYWRjL3N0bTMyLWFkYy5jCj4gPiBAQCAtMjEsMTEgKzIxLDExIEBA Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC9pby5oPgo+ID4gwqAjaW5jbHVkZSA8bGludXgvaW9wb2xs Lmg+Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv bW9kX2RldmljZXRhYmxlLmg+Cj4gPiDCoCNpbmNsdWRlIDxsaW51eC9udm1lbS1jb25zdW1lci5o Pgo+ID4gwqAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiDCoCNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gPiAtI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPiAtI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5o Pgo+ID4gwqAKPiA+IMKgI2luY2x1ZGUgInN0bTMyLWFkYy1jb3JlLmgiCj4gPiDCoAo+ID4gQEAg LTE1MzAsOCArMTUzMCw4IEBAIHN0YXRpYyBpbnQgc3RtMzJfYWRjX3VwZGF0ZV9zY2FuX21vZGUo c3RydWN0Cj4gPiBpaW9fZGV2ICppbmRpb19kZXYsCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiA+IMKgfQo+ID4gwqAKPiA+IC1zdGF0aWMgaW50IHN0bTMyX2FkY19vZl94bGF0ZShz dHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBvZl9waGFuZGxlX2Fy Z3MKPiA+ICppaW9zcGVjKQo+ID4gK3N0YXRpYyBpbnQgc3RtMzJfYWRjX2Z3bm9kZV94bGF0ZShz dHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0Cj4gPiBm d25vZGVfcmVmZXJlbmNlX2FyZ3MgKmlpb3NwZWMpCj4gPiDCoHsKPiA+IMKgwqDCoMKgwqDCoMKg wqBpbnQgaTsKPiA+IMKgCj4gPiBAQCAtMTU4NSw3ICsxNTg1LDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBpaW9faW5mbwo+ID4gc3RtMzJfYWRjX2lpb19pbmZvID0gewo+ID4gwqDCoMKgwqDCoMKg wqDCoC5od2ZpZm9fc2V0X3dhdGVybWFyayA9IHN0bTMyX2FkY19zZXRfd2F0ZXJtYXJrLAo+ID4g wqDCoMKgwqDCoMKgwqDCoC51cGRhdGVfc2Nhbl9tb2RlID0gc3RtMzJfYWRjX3VwZGF0ZV9zY2Fu X21vZGUsCj4gPiDCoMKgwqDCoMKgwqDCoMKgLmRlYnVnZnNfcmVnX2FjY2VzcyA9IHN0bTMyX2Fk Y19kZWJ1Z2ZzX3JlZ19hY2Nlc3MsCj4gPiAtwqDCoMKgwqDCoMKgwqAub2ZfeGxhdGUgPSBzdG0z Ml9hZGNfb2ZfeGxhdGUsCj4gPiArwqDCoMKgwqDCoMKgwqAuZndub2RlX3hsYXRlID0gc3RtMzJf YWRjX2Z3bm9kZV94bGF0ZSwKPiA+IMKgfTsKPiA+IMKgCj4gPiDCoHN0YXRpYyB1bnNpZ25lZCBp bnQgc3RtMzJfYWRjX2RtYV9yZXNpZHVlKHN0cnVjdCBzdG0zMl9hZGMgKmFkYykKPiA+IEBAIC0x NzgyLDE0ICsxNzgyLDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlY19leHRf aW5mbwo+ID4gc3RtMzJfYWRjX2V4dF9pbmZvW10gPSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKge30s Cj4gPiDCoH07Cj4gPiDCoAo+ID4gLXN0YXRpYyBpbnQgc3RtMzJfYWRjX29mX2dldF9yZXNvbHV0 aW9uKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCj4gPiArc3RhdGljIGludCBzdG0zMl9hZGNf ZndfZ2V0X3Jlc29sdXRpb24oc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKPiA+IMKgewo+ID4g LcKgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gaW5kaW9fZGV2LT5kZXYu b2Zfbm9kZTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbmRpb19k ZXYtPmRldjsKPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3RtMzJfYWRjICphZGMgPSBpaW9f cHJpdihpbmRpb19kZXYpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCBpOwo+ID4g wqDCoMKgwqDCoMKgwqDCoHUzMiByZXM7Cj4gPiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKG9m X3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJhc3NpZ25lZC1yZXNvbHV0aW9uLWJpdHMiLAo+ID4g JnJlcykpCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRl diwgImFzc2lnbmVkLXJlc29sdXRpb24tCj4gPiBiaXRzIiwgJnJlcykpCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcyA9IGFkYy0+Y2ZnLT5hZGNfaW5mby0+cmVzb2x1dGlv bnNbMF07Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBhZGMtPmNm Zy0+YWRjX2luZm8tPm51bV9yZXM7IGkrKykKPiA+IEBAIC0xODczLDExICsxODczLDExIEBAIHN0 YXRpYyB2b2lkIHN0bTMyX2FkY19jaGFuX2luaXRfb25lKHN0cnVjdAo+ID4gaWlvX2RldiAqaW5k aW9fZGV2LAo+ID4gwqAKPiA+IMKgc3RhdGljIGludCBzdG0zMl9hZGNfZ2V0X2xlZ2FjeV9jaGFu X2NvdW50KHN0cnVjdCBpaW9fZGV2Cj4gPiAqaW5kaW9fZGV2LCBzdHJ1Y3Qgc3RtMzJfYWRjICph ZGMpCj4gPiDCoHsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9 IGluZGlvX2Rldi0+ZGV2Lm9mX25vZGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaW5kaW9fZGV2LT5kZXY7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IHN0bTMyX2FkY19pbmZvICphZGNfaW5mbyA9IGFkYy0+Y2ZnLT5hZGNfaW5mbzsKPiA+IMKgwqDC oMKgwqDCoMKgwqBpbnQgbnVtX2NoYW5uZWxzID0gMCwgcmV0Owo+ID4gwqAKPiA+IC3CoMKgwqDC oMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X2NvdW50X3UzMl9lbGVtcyhub2RlLCAic3QsYWRjLWNo YW5uZWxzIik7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZpY2VfcHJvcGVydHlfY291bnRf dTMyKGRldiwgInN0LGFkYy1jaGFubmVscyIpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQg PiBhZGNfaW5mby0+bWF4X2NoYW5uZWxzKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiQmFkIHN0LGFkYy1jaGFubmVscz9cbiIp Owo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ IEBAIC0xODg1LDggKzE4ODUsOCBAQCBzdGF0aWMgaW50Cj4gPiBzdG0zMl9hZGNfZ2V0X2xlZ2Fj eV9jaGFuX2NvdW50KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHN0cnVjdAo+ID4gc3RtCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG51bV9jaGFubmVscyArPSByZXQ7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqAKPiA+IC3CoMKgwqDCoMKgwqDCoHJldCA9IG9mX3By b3BlcnR5X2NvdW50X2VsZW1zX29mX3NpemUobm9kZSwgInN0LGFkYy1kaWZmLQo+ID4gY2hhbm5l bHMiLAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdAo+ ID4gc3RtMzJfYWRjX2RpZmZfY2hhbm5lbCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogZWFjaCBz dCxhZGMtZGlmZi1jaGFubmVscyBpcyBhIGdyb3VwIG9mIDIgdTMyICovCj4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBkZXZpY2VfcHJvcGVydHlfY291bnRfdTY0KGRldiwgInN0LGFkYy1kaWZmLQo+ ID4gY2hhbm5lbHMiKTsKCkFyZSB5b3UgZmluZSB3aXRoIHRoaXMgY2hhbmdlIChzdGlsbCBkb2Vz IG5vdCBoYXZlIGFueSByZWZlcmVuY2UgdG8gdGhlCnRhcmdldCBzdHJ1Y3QgYnV0IHRoZSBjb21t ZW50IG1pZ2h0IGJlIGhlbHBmdWwgYW5kIHRoZXJlJ3Mgbm8gbWFnaWMgMik/Cgo+ID4gwqDCoMKg wqDCoMKgwqDCoGlmIChyZXQgPiBhZGNfaW5mby0+bWF4X2NoYW5uZWxzKSB7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiQmFkIHN0 LGFkYy1kaWZmLQo+ID4gY2hhbm5lbHM/XG4iKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiBAQCAtMTg5Niw3ICsxODk2LDcgQEAgc3RhdGlj IGludAo+ID4gc3RtMzJfYWRjX2dldF9sZWdhY3lfY2hhbl9jb3VudChzdHJ1Y3QgaWlvX2RldiAq aW5kaW9fZGV2LCBzdHJ1Y3QKPiA+IHN0bQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0KPiA+IMKgCj4g PiDCoMKgwqDCoMKgwqDCoMKgLyogT3B0aW9uYWwgc2FtcGxlIHRpbWUgaXMgcHJvdmlkZWQgZWl0 aGVyIGZvciBlYWNoLCBvciBhbGwKPiA+IGNoYW5uZWxzICovCj4gPiAtwqDCoMKgwqDCoMKgwqBy ZXQgPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMobm9kZSwgInN0LG1pbi1zYW1wbGUtCj4g PiB0aW1lLW5zZWNzIik7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZpY2VfcHJvcGVydHlf Y291bnRfdTMyKGRldiwgInN0LG1pbi1zYW1wbGUtdGltZS0KPiA+IG5zZWNzIik7Cj4gPiDCoMKg wqDCoMKgwqDCoMKgaWYgKHJldCA+IDEgJiYgcmV0ICE9IG51bV9jaGFubmVscykgewo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIklu dmFsaWQgc3QsbWluLXNhbXBsZS0KPiA+IHRpbWUtbnNlY3NcbiIpOwo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IEBAIC0xOTA3LDIxICsxOTA3 LDIwIEBAIHN0YXRpYyBpbnQKPiA+IHN0bTMyX2FkY19nZXRfbGVnYWN5X2NoYW5fY291bnQoc3Ry dWN0IGlpb19kZXYgKmluZGlvX2Rldiwgc3RydWN0Cj4gPiBzdG0KPiA+IMKgCj4gPiDCoHN0YXRp YyBpbnQgc3RtMzJfYWRjX2xlZ2FjeV9jaGFuX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rl diwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzdG0zMl9hZGMgKmFkYywKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGlpb19jaGFuX3NwZWMKPiA+ICpjaGFubmVscykKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGlpb19jaGFuX3NwZWMKPiA+ICpjaGFubmVscywKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaW50IG5jaGFucykKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0 IGRldmljZV9ub2RlICpub2RlID0gaW5kaW9fZGV2LT5kZXYub2Zfbm9kZTsKPiA+IMKgwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3Qgc3RtMzJfYWRjX2luZm8gKmFkY19pbmZvID0gYWRjLT5jZmct PmFkY19pbmZvOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBzdG0zMl9hZGNfZGlmZl9jaGFu bmVsIGRpZmZbU1RNMzJfQURDX0NIX01BWF07Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmaW5kaW9fZGV2LT5kZXY7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgdTMyIG51bV9k aWZmID0gYWRjLT5udW1fZGlmZjsKPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnQgc2l6ZSA9IG51bV9k aWZmICogc2l6ZW9mKCpkaWZmKSAvIHNpemVvZih1MzIpOwo+ID4gLcKgwqDCoMKgwqDCoMKgaW50 IHNjYW5faW5kZXggPSAwLCB2YWwsIHJldCwgaTsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBw cm9wZXJ0eSAqcHJvcDsKPiA+IC3CoMKgwqDCoMKgwqDCoGNvbnN0IF9fYmUzMiAqY3VyOwo+ID4g LcKgwqDCoMKgwqDCoMKgdTMyIHNtcCA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbnQgc2Nhbl9p bmRleCA9IDAsIHJldCwgaTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBzbXAgPSAwLCBuc21wcywg c21wc1tTVE0zMl9BRENfQ0hfTUFYXSwKPiA+IGNoYW5zW1NUTTMyX0FEQ19DSF9NQVhdOwo+ID4g wqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAobnVtX2RpZmYpIHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShub2RlLCAi c3QsYWRjLQo+ID4gZGlmZi1jaGFubmVscyIsCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAodTMyICopZGlmZiwKPiA+IHNpemUpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShkZXYs ICJzdCxhZGMtCj4gPiBkaWZmLWNoYW5uZWxzIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHUzMiAqKWRpZmYsCj4gPiBzaXplKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmaW5kaW9fZGV2LT5kZXYs ICJGYWlsZWQgdG8gZ2V0Cj4gPiBkaWZmIGNoYW5uZWxzICVkXG4iLCByZXQpOwo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ IEBAIC0xOTQyLDMyICsxOTQxLDUxIEBAIHN0YXRpYyBpbnQKPiA+IHN0bTMyX2FkY19sZWdhY3lf Y2hhbl9pbml0KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDCoAo+ID4gLcKgwqDC oMKgwqDCoMKgb2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKG5vZGUsICJzdCxhZGMtY2hhbm5lbHMi LCBwcm9wLAo+ID4gY3VyLCB2YWwpIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAodmFsID49IGFkY19pbmZvLT5tYXhfY2hhbm5lbHMpIHsKPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmaW5kaW9fZGV2LT5kZXYs ICJJbnZhbGlkIGNoYW5uZWwKPiA+ICVkXG4iLCB2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KGRldiwgInN0LGFkYy0KPiA+IGNoYW5u ZWxzIiwgY2hhbnMsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmNoYW5zKTsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkg PCBuY2hhbnM7IGkrKykgewo+IAo+IEhpIE51bm8sCj4gCj4gVGhlcmUncyBhbiBlbmRsZXNzIGxv b3AgaXNzdWUgaGVyZSBkdWUgdG8gdGhlIHR3byBmb3IgbG9vcHMgYXJlIHVzaW5nCj4gdGhlIHNh bWUgaW5kZXggJ2knLiAoUGxlYXNlIGxvb2sgYXQgbXkgZWFybGllciBjb21tZW50cyBpbiB2MSkK PiAKCk91Y2guLi4gCgpSZWdhcmRpbmcgeW91ciB2MSBjb21tZW50cyAodGhhdCBmb3Igc29tZSBy ZWFzb24gSSBtaXNzZWQpLCBJIGRvIG5vdAp0aGluayB0aGVyZSdzIGFueSBoZWxwZXIgbGlrZSAi b2ZfcHJvcGVydHlfZm9yX2VhY2hfdTMyKCkiLiBGb3Igbm93IHdlCmhhdmUgdG8gbGl2ZSB3aXRo IHRoaXMuLi4KCj4gZm9yIChpID0gMDsgaSA8IG5jaGFuczsgaSsrKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoC4uLgo+IMKgwqDCoMKgwqDCoMKgwqAvLyBIZXJlIGkgZ2V0cyBjbGVhcmVkLCBudW1fZGlm ZiBtYXkgdmFyeSAoZXhhbXBsZSB3aXRoIDAKPiBoZXJlKQo+IMKgwqDCoMKgwqDCoMKgwqBmb3Ig KGkgPSAwOyBpIDwgbnVtX2RpZmY7IGkrKykgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLi4uCj4gwqDCoMKgwqDCoMKgwqDCoH0KPiAKPiDCoMKgwqDCoMKgwqDCoMKgc3RtMzJf YWRjX2NoYW5faW5pdF9vbmUoLi4gJmNoYW5uZWxzW3NjYW5faW5kZXhdLi4KPiBzY2FuX2luZGV4 Li4pCj4gCj4gwqDCoMKgwqDCoMKgwqDCoHNjYW5faW5kZXgrKzsgLy8gU3RpbGwsIHNjYW4gaW5k ZXggZ2V0cyBpbmNyZW1lbnRlZAo+IGluZGVmaW5pdGx5Cj4gfQo+IAo+IFRoZXJlJ3MgYW4gb3V0 IG9mIGJvdWRhcnkgc2l0dWF0aW9uIHdpdGggc2Nhbl9pbmRleCBhYm92ZSwgd2ljaCBlbmRzLQo+ IHVwCj4gaW4gY3Jhc2hpbmcgaW4gc3RtMzJfYWRjX2NoYW5faW5pdF9vbmUoKS4KPiAKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hhbnNbaV0gPj0gYWRjX2luZm8tPm1h eF9jaGFubmVscykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZXJyKCZpbmRpb19kZXYtPmRldiwgIkludmFsaWQgY2hhbm5lbAo+ID4gJWRc biIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjaGFuc1tpXSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyogQ2hhbm5lbCBjYW4ndCBiZSBjb25maWd1cmVkIGJvdGggYXMgc2luZ2xlLWVuZGVkCj4g PiAmIGRpZmYgKi8KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChpID0g MDsgaSA8IG51bV9kaWZmOyBpKyspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZhbCA9PSBkaWZmW2ldLnZpbnApIHsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAiY2hhbm5lbAo+ID4gJWQgbWlzY29uZmlndXJlZFxuIizC oMKgdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKGNoYW5zW2ldID09IGRpZmZbaV0udmlucCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmaW5k aW9fZGV2LT5kZXYsICJjaGFubmVsCj4gPiAlZCBtaXNjb25maWd1cmVkXG4iLMKgwqBjaGFuc1tp XSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdG0zMl9hZGNfY2hh bl9pbml0X29uZShpbmRpb19kZXYsCj4gPiAmY2hhbm5lbHNbc2Nhbl9pbmRleF0sIHZhbCwKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAwLCBzY2FuX2luZGV4LCBmYWxzZSk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RtMzJfYWRjX2NoYW5faW5pdF9vbmUoaW5kaW9fZGV2 LAo+ID4gJmNoYW5uZWxzW3NjYW5faW5kZXhdLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNo YW5zW2ldLCAwLCBzY2FuX2luZGV4LAo+ID4gZmFsc2UpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzY2FuX2luZGV4Kys7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqAK PiA+ICvCoMKgwqDCoMKgwqDCoG5zbXBzID0gZGV2aWNlX3Byb3BlcnR5X2NvdW50X3UzMihkZXYs ICJzdCxtaW4tc2FtcGxlLXRpbWUtCj4gPiBuc2VjcyIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KG5zbXBzKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG5zbXBzID49 IG5jaGFucykKPiAKPiBuaXQ6IGlmIChuc21wcyA+IG5jaGFucykKPiAKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbnNtcHMgPSBuY2hhbnM7Cj4gPiAr Cj4gCj4gVGhlcmUncyBhIGJpdCBvZiByZWR1bmRhbmN5IGluIGNoZWNraW5nIG5zbXBzLAo+ICJz dCxtaW4tc2FtcGxlLXRpbWUtbnNlY3MiIGlzIGFscmVhZHkgc2FuaXRpemVkIGluCj4gc3RtMzJf YWRjX2dldF9sZWdhY3lfY2hhbl9jb3VudCgpOgo+IAo+IC8qIE9wdGlvbmFsIHNhbXBsZSB0aW1l IGlzIHByb3ZpZGVkIGVpdGhlciBmb3IgZWFjaCwgb3IgYWxsIGNoYW5uZWxzCj4gKi8KPiByZXQg PSBkZXZpY2VfcHJvcGVydHlfY291bnRfdTMyKGRldiwgInN0LG1pbi1zYW1wbGUtdGltZS1uc2Vj cyIpOwo+IGlmIChyZXQgPiAxICYmIHJldCAhPSBudW1fY2hhbm5lbHMpIHsKPiDCoMKgwqDCoMKg wqDCoMKgZGV2X2VyciguLi4KPiAKPiBTbyBqdXN0IHNoYXJpbmcgbXkgdGhvdWdodHMgaGVyZToK PiAtIE1heWJlIHRoaXMgY291bGQgYmUgZHJvcHBlZCA/Cj4gwqAgKFRoaW5raW5nIGxvdWRseSkg VGhlIGVhcmxpZXN0IHRoaXMgZ2V0cyBzYW5pdGl6ZWQsIHRoZSBsZXNzIHVuLQo+IG5lZWRlZAo+ IGluaXRpYWxpc2F0aW9ucyBoYXBwZW4gYmVmb3JlIGZhaWxpbmc/Cj4gLSBPciB0aGUgZWFybGll ciBjaGVjayBjb3VsZCBiZSBtb3ZlZCBoZXJlID8KPiAKPiBJJ3ZlIG5vIHN0cm9uZyBvcGluaW9u Lgo+IAoKQWhoLCBkaWRuJ3Qgbm90aWNlZCB0aGUgZmlyc3QgY2FsbCB0byAnZGV2aWNlX3Byb3Bl cnR5X2NvdW50X3UzMihkZXYsCiJzdCxtaW4tc2FtcGxlLXRpbWUtbnNlY3MiKScuIFNvIEkgZG8g YWdyZWUgd2l0aCB5b3UgdGhhdCB3ZSBzaG91bGQKYmFpbCBhcyBzb29uIGFzIHBvc3NpYmxlIGJ1 dCBJJ20gYWxzbyBub3QgYSBiaWcgZmFuIG9mIGNhbGxpbmcKZGV2aWNlX3Byb3BlcnR5X2NvdW50 X3UzMigpIGZvciB0aGUgc2FtZSBwdXJwb3NlLiBTbyBJIHdvdWxkIHN1Z2dlc3Q6CgoxKSBZb3Vy IG9wdGlvbiAyLgoyKSBPcHRpb24gMSBidXQgd2Ugd291bGQgc3RvcmUgJ25zbXBzJyBpbiB0aGUg Zmlyc3QgY2FsbCAobWFraW5nIGl0IGEKbWVtYmVyIG9mIHN0cnVjdCBzdG0zMl9hZGMpIGFuZCB0 aGVuIHVzZSBpdCBoZXJlIGFjY29yZGluZ2x5LgoKVGhvdWdodD8KCj4gQmVzdCBSZWdhcmRzLAo+ IEZhYnJpY2UKPiAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkZXZp Y2VfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkoZGV2LCAic3QsbWluLQo+ID4gc2FtcGxlLXRpbWUt bnNlY3MiLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzbXBzLCBuc21wcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJl dCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+IMKgwqDCoMKgwqDCoMKgwqBm b3IgKGkgPSAwOyBpIDwgc2Nhbl9pbmRleDsgaSsrKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoC8qCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogVXNp bmcgb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgoKSwgc21wIHZhbHVlCj4gPiB3aWxsIG9ubHkg YmUKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBtb2RpZmllZCBpZiB2YWxp ZCB1MzIgdmFsdWUgY2FuIGJlIGRlY29kZWQuIFRoaXMKPiA+IGFsbG93cyB0bwo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGdldCBlaXRoZXIgbm8gdmFsdWUsIDEgc2hhcmVk IHZhbHVlIGZvciBhbGwKPiA+IGluZGV4ZXMsIG9yIG9uZQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIHZhbHVlIHBlciBjaGFubmVsLgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIFRoaXMgY2hlY2sgaXMgdXNlZCB3aXRoIHRoZSBhYm92ZSBsb2dpYyBz byB0aGF0Cj4gPiBzbXAgdmFsdWUKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiB3aWxsIG9ubHkgYmUgbW9kaWZpZWQgaWYgdmFsaWQgdTMyIHZhbHVlIGNhbiBiZQo+ID4gZGVj b2RlZC4gVGhpcwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGFsbG93cyB0 byBnZXQgZWl0aGVyIG5vIHZhbHVlLCAxIHNoYXJlZCB2YWx1ZQo+ID4gZm9yIGFsbCBpbmRleGVz LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIG9yIG9uZSB2YWx1ZSBwZXIg Y2hhbm5lbC4gVGhlIHBvaW50IGlzIHRvIGhhdmUKPiA+IHRoZSBzYW1lCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICogYmVoYXZpb3IgYXMgJ29mX3Byb3BlcnR5X3JlYWRfdTMy X2luZGV4KCknLgo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChu b2RlLCAic3QsbWluLXNhbXBsZS0KPiA+IHRpbWUtbnNlY3MiLCBpLCAmc21wKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaSA8IG5zbXBzKQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbXAgPSBzbXBzW2ldOwo+ID4gwqAK ClJlZ2FyZGluZyB5b3VyIGNvbW1lbnQgb24gdjEsIEkgd291bGQgcHJlZmVyIHRvIGtlZXAgdGhp cyBhcy1pcy4gSQp0aGluayBpdCdzIGVub3VnaCB0b2dldGhlciB3aXRoIHRoZSBjb21tZW50LiBD YW4gY2hhbmdlIGl0IHRob3VnaCBpZgp5b3UgZmVsbCB0b28gc3Ryb25nIGFib3V0IGl0IDopCgpU aGFua3MhCi0gTnVubyBTw6EKCg==