From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from cpanel.siel.si (cpanel.siel.si [46.19.9.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 974EA3B78E; Fri, 29 Mar 2024 07:58:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=46.19.9.99 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711699135; cv=none; b=MkovHR/X4byqRCurghL970pc/5M3e4bu0KzR3ZIxulps34PwYaWY96Cag10mV9Nkd7aqUe+PoBzEi91EecWEEYYFv1jt8jpHYmkxPlhLbrLuq/428y2IAfnUsPhMW9TmGMpcnh3hqkx2z44ROmNbRw++aoYvwdubZrZkh6sg6yI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711699135; c=relaxed/simple; bh=yBqdFYWJ7meNuEn1L+kQXqFNRWSolH3SOPxtgfU/HK8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=uEeliS1vbSc9qhFXoZFUH47Il+JsyRDEHvBykRLbDPawxgSQMOD9671IRIYnjycZGLsF8P7GwhRSPYZq4MHNk7Oq53/TVoxOL08uI6hHj8k4gFtTEO64aLwyiBs4IORfhZPWdL1GbwP1WwNK5Jdrjip/N5HfZd+inEtFlDrNZsY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=norik.com; spf=pass smtp.mailfrom=norik.com; dkim=pass (2048-bit key) header.d=norik.com header.i=@norik.com header.b=cvhrZWSP; arc=none smtp.client-ip=46.19.9.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=norik.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=norik.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=norik.com header.i=@norik.com header.b="cvhrZWSP" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=norik.com; s=default; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=VB+uYV6z1osfsY3qvVmgNrhkcULtGFhdn5kc4Qzej/U=; b=cvhrZWSPR+Yv98T3SACOGJoTbj /92sDiJPAIdKFqbQpQFDxMGds6Uuaeq2/bq2G7ogYz0lhvXlUFmMJYmVfB24YK2oxkIoBS7oGwP6H f3SuFIA1xiz8tK2pps/Xz9w3rPTyNkw2YAbbCzeQ8vOaQ7ZX10a5GJmpvcPmkmExS522ncxG91xoJ 6ztsz0ABBW+TDQ/u4xJw9f+6TjnMnq8uEmQ87toUtLjaes0+PPk9H0of8LUj1k2xnDYqVQKh41Ojh ykIg9heBPjNsW++47JxBTJmOqRwi/aXWC3zLxoe10Zr/eWzPhKJuxbmCypAq/3ojpIWAypOqgLykp 28fVe3nQ==; Received: from 89-212-21-243.static.t-2.net ([89.212.21.243]:57518 helo=[192.168.69.116]) by cpanel.siel.si with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96.2) (envelope-from ) id 1rq78Q-009wAj-2G; Fri, 29 Mar 2024 08:58:46 +0100 Message-ID: Date: Fri, 29 Mar 2024 08:58:42 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [Upstream] [PATCH 0/2] i.MX93 ADC calibration settings Content-Language: en-US To: Jonathan Cameron Cc: Andrej Picej , Jonathan Cameron , devicetree@vger.kernel.org, conor+dt@kernel.org, lars@metafoo.de, krzysztof.kozlowski+dt@linaro.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, festevam@gmail.com, s.hauer@pengutronix.de, upstream@lists.phytec.de, linux-kernel@vger.kernel.org, haibo.chen@nxp.com, kernel@pengutronix.de, shawnguo@kernel.org, robh@kernel.org, linux-arm-kernel@lists.infradead.org References: <20240320100407.1639082-1-andrej.picej@norik.com> <20240324135559.1640551d@jic23-huawei> <3423ea96-859d-4c4b-a9a7-e0d9c3c00727@norik.com> <44ac8977-cf98-46a5-be15-1bec330c6a2e@norik.com> <20240325144555.00002d16@Huawei.com> From: Primoz Fiser Organization: Norik systems d.o.o. In-Reply-To: <20240325144555.00002d16@Huawei.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel.siel.si X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - norik.com X-Get-Message-Sender-Via: cpanel.siel.si: authenticated_id: primoz.fiser@norik.com X-Authenticated-Sender: cpanel.siel.si: primoz.fiser@norik.com X-Source: X-Source-Args: X-Source-Dir: Hi Jonathan, On 25. 03. 24 15:45, Jonathan Cameron wrote: > On Mon, 25 Mar 2024 09:55:23 +0100 > Primoz Fiser wrote: > >> Hi Jonathan, >> >> On 25. 03. 24 09:32, Andrej Picej wrote: >>> Hi Jonathan, >>> >>> On 24. 03. 24 14:55, Jonathan Cameron wrote: >>>> On Wed, 20 Mar 2024 11:04:04 +0100 >>>> Andrej Picej wrote: >>>> >>>>> Hi all, >>>>> >>>>> we had some problems with failing ADC calibration on the i.MX93 boards. >>>>> Changing default calibration settings fixed this. The board where this >>>>> patches are useful is not yet upstream but will be soon (hopefully). >>>> >>>> Tell us more.  My initial instinct is that this shouldn't be board >>>> specific. >>>> What's the trade off we are making here?  Time vs precision of >>>> calibration or >>>> something else?  If these are set to a level by default that doesn't work >>>> for our board, maybe we should just change them for all devices? >>>> >> >> The imx93_adc driver is quite new. >> >> If you look at line #162, you will find a comment by the original author: >> >>> /* >>> * TODO: we use the default TSAMP/NRSMPL/AVGEN in MCR, >>> * can add the setting of these bit if need in future. >>> */ >> >> URL: >> https://github.com/torvalds/linux/blob/master/drivers/iio/adc/imx93_adc.c#L162 >> >> So, for most use-cases the default setting should work, but why not make >> them configurable? >> >> So this patch-series just implement what was missing from the beginning >> / was planned for later. > Hi Primoz, > > I doubt anyone reviewed the comment closely enough to say if what it was > suggesting was sensible or not, so the fact it was listed as a todo > doesn't directly impact this discussion. I agree. However on the other hand, since we stumbled upon a use-case that requires adjusting the driver provided default settings of the i.MX93 ADC, this TODO to us is and was a clear indication from the original author that the driver needs little TLC. Anyhow, a stance from the author/NXP would be highly welcoming in this situation. BR, Primoz > >> >> BR, >> Primoz >> >> >>> >>> So we have two different boards with the same SoC. On one, the >>> calibration works with the default values, on the second one the >>> calibration fails, which makes the ADC unusable. What the ADC lines >>> measure differ between the boards though. But the implementation is >>> nothing out of the ordinary. >>> >>> We tried different things but the only thing that helped is to use >>> different calibration properties. We tried deferring the probe and >>> calibration until later boot and after boot, but it did not help. >>> >>> In the Reference Manual [1] (chapter 72.5.1) it is written: >>> >>>> 4. Configure desired calibration settings (default values kept for >>>> highest accuracy maximum time). >>> >>> So your assumption is correct, longer calibration time (more averaging >>> samples) -> higher precision. The default values go for a high accuracy. >>> And since we use a NRSMPL (Number of Averaging Samples) of 32 instead of >>> default 512, we reduce the accuracy so the calibration values pass the >>> internal defined limits. > > Ouch. Let me try to dig into this. Is this effectively relaxing the > constraints? I guess because a value that is perhaps always biased one way > is considered within bounds if those acceptable bounds are wider because > of lower precision? > > I was assuming it was the other way around and the device had fixed constraint > limits and you needed to take more samples due to higher noise. Seems the > opposite is true here and that worries me. > > I'll definitely need input from NXP on this as a workaround and their > strong support to consider it. > >>> >>> I'm not sure that changing default values is the right solution here. We >>> saw default values work with one of the boards. And since the NXP kept >>> these values adjustable I think there is a reason behind it. > > I'd assume trade off between time and calibration precision, not the > sort of use I think you are describing. > >>> >>> Note: When I say one of the boards I mean one board form. So same board >>> version, but different HW. > > Superficially I'm struggling to not see this as broken hardware that it > is out of expected tolerances in some fashion. Maybe I misunderstood > the issue. > > Jonathan > >>> >>> Best regards, >>> Andrej >>> >>> [1] i.MX 93 Applications Processor Reference Manual, Rev. 4, 12/2023 >>> _______________________________________________ >>> upstream mailing list >>> upstream@lists.phytec.de >>> http://lists.phytec.de/cgi-bin/mailman/listinfo/upstream >> >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- Primoz Fiser | phone: +386-41-390-545 | ---------------------------------------------------------| Norik systems d.o.o. | https://www.norik.com | Your embedded software partner | email: info@norik.com | Slovenia, EU | phone: +386-41-540-545 | 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 8F434C6FD1F for ; Fri, 29 Mar 2024 07:59:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GEAGfiE6EcQ0qYtRgxOKPMEPQEz+ihjuACiYNevbPjI=; b=qTlzl4X+7v1QL6 1t2Hz29ehlQjD5fwSqs6MDDeKIk1o0XJU+kZFLyK4BEDP4zAboy97v6miuWs4iO+v8BXGJ2ZmJfx6 QMQnVYcYb6pCUs3uR1lYFSQvhUDnBSIgKhmNYflJBENhj5KCKvgdLsU1qZtb1Pq0+vtMnMgoqSrMJ OXU2q14BmezNeAM4PdIp5MslBv33ii0iAaCcrnV0UD+JxUn6Cit1dxGCOCV7E3pR+twYaqDlWlOle bgulEaHIlU52BicbydMWqVoWOBLp5cy9ZwI6nMkVsRv7A59qYNF0MtPfa5q2gvz7ScfAnJvtDOoTK e0wBP+ooIB6ysItugUfQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq78Z-0000000HFER-3fVd; Fri, 29 Mar 2024 07:58:55 +0000 Received: from cpanel.siel.si ([46.19.9.99]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rq78V-0000000HFCv-3miM for linux-arm-kernel@lists.infradead.org; Fri, 29 Mar 2024 07:58:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=norik.com; s=default; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=VB+uYV6z1osfsY3qvVmgNrhkcULtGFhdn5kc4Qzej/U=; b=cvhrZWSPR+Yv98T3SACOGJoTbj /92sDiJPAIdKFqbQpQFDxMGds6Uuaeq2/bq2G7ogYz0lhvXlUFmMJYmVfB24YK2oxkIoBS7oGwP6H f3SuFIA1xiz8tK2pps/Xz9w3rPTyNkw2YAbbCzeQ8vOaQ7ZX10a5GJmpvcPmkmExS522ncxG91xoJ 6ztsz0ABBW+TDQ/u4xJw9f+6TjnMnq8uEmQ87toUtLjaes0+PPk9H0of8LUj1k2xnDYqVQKh41Ojh ykIg9heBPjNsW++47JxBTJmOqRwi/aXWC3zLxoe10Zr/eWzPhKJuxbmCypAq/3ojpIWAypOqgLykp 28fVe3nQ==; Received: from 89-212-21-243.static.t-2.net ([89.212.21.243]:57518 helo=[192.168.69.116]) by cpanel.siel.si with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96.2) (envelope-from ) id 1rq78Q-009wAj-2G; Fri, 29 Mar 2024 08:58:46 +0100 Message-ID: Date: Fri, 29 Mar 2024 08:58:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [Upstream] [PATCH 0/2] i.MX93 ADC calibration settings Content-Language: en-US To: Jonathan Cameron Cc: Andrej Picej , Jonathan Cameron , devicetree@vger.kernel.org, conor+dt@kernel.org, lars@metafoo.de, krzysztof.kozlowski+dt@linaro.org, imx@lists.linux.dev, linux-iio@vger.kernel.org, festevam@gmail.com, s.hauer@pengutronix.de, upstream@lists.phytec.de, linux-kernel@vger.kernel.org, haibo.chen@nxp.com, kernel@pengutronix.de, shawnguo@kernel.org, robh@kernel.org, linux-arm-kernel@lists.infradead.org References: <20240320100407.1639082-1-andrej.picej@norik.com> <20240324135559.1640551d@jic23-huawei> <3423ea96-859d-4c4b-a9a7-e0d9c3c00727@norik.com> <44ac8977-cf98-46a5-be15-1bec330c6a2e@norik.com> <20240325144555.00002d16@Huawei.com> From: Primoz Fiser Organization: Norik systems d.o.o. In-Reply-To: <20240325144555.00002d16@Huawei.com> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cpanel.siel.si X-AntiAbuse: Original Domain - lists.infradead.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - norik.com X-Get-Message-Sender-Via: cpanel.siel.si: authenticated_id: primoz.fiser@norik.com X-Authenticated-Sender: cpanel.siel.si: primoz.fiser@norik.com X-Source: X-Source-Args: X-Source-Dir: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240329_005852_530275_515A8E04 X-CRM114-Status: GOOD ( 27.73 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSm9uYXRoYW4sCgpPbiAyNS4gMDMuIDI0IDE1OjQ1LCBKb25hdGhhbiBDYW1lcm9uIHdyb3Rl Ogo+IE9uIE1vbiwgMjUgTWFyIDIwMjQgMDk6NTU6MjMgKzAxMDAKPiBQcmltb3ogRmlzZXIgPHBy aW1vei5maXNlckBub3Jpay5jb20+IHdyb3RlOgo+IAo+PiBIaSBKb25hdGhhbiwKPj4KPj4gT24g MjUuIDAzLiAyNCAwOTozMiwgQW5kcmVqIFBpY2VqIHdyb3RlOgo+Pj4gSGkgSm9uYXRoYW4sCj4+ Pgo+Pj4gT24gMjQuIDAzLiAyNCAxNDo1NSwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZTogIAo+Pj4+ IE9uIFdlZCwgMjAgTWFyIDIwMjQgMTE6MDQ6MDQgKzAxMDAKPj4+PiBBbmRyZWogUGljZWogPGFu ZHJlai5waWNlakBub3Jpay5jb20+IHdyb3RlOgo+Pj4+ICAKPj4+Pj4gSGkgYWxsLAo+Pj4+Pgo+ Pj4+PiB3ZSBoYWQgc29tZSBwcm9ibGVtcyB3aXRoIGZhaWxpbmcgQURDIGNhbGlicmF0aW9uIG9u IHRoZSBpLk1YOTMgYm9hcmRzLgo+Pj4+PiBDaGFuZ2luZyBkZWZhdWx0IGNhbGlicmF0aW9uIHNl dHRpbmdzIGZpeGVkIHRoaXMuIFRoZSBib2FyZCB3aGVyZSB0aGlzCj4+Pj4+IHBhdGNoZXMgYXJl IHVzZWZ1bCBpcyBub3QgeWV0IHVwc3RyZWFtIGJ1dCB3aWxsIGJlIHNvb24gKGhvcGVmdWxseSku ICAKPj4+Pgo+Pj4+IFRlbGwgdXMgbW9yZS7CoCBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQg dGhpcyBzaG91bGRuJ3QgYmUgYm9hcmQKPj4+PiBzcGVjaWZpYy4KPj4+PiBXaGF0J3MgdGhlIHRy YWRlIG9mZiB3ZSBhcmUgbWFraW5nIGhlcmU/wqAgVGltZSB2cyBwcmVjaXNpb24gb2YKPj4+PiBj YWxpYnJhdGlvbiBvcgo+Pj4+IHNvbWV0aGluZyBlbHNlP8KgIElmIHRoZXNlIGFyZSBzZXQgdG8g YSBsZXZlbCBieSBkZWZhdWx0IHRoYXQgZG9lc24ndCB3b3JrCj4+Pj4gZm9yIG91ciBib2FyZCwg bWF5YmUgd2Ugc2hvdWxkIGp1c3QgY2hhbmdlIHRoZW0gZm9yIGFsbCBkZXZpY2VzPwo+Pj4+ICAK Pj4KPj4gVGhlIGlteDkzX2FkYyBkcml2ZXIgaXMgcXVpdGUgbmV3Lgo+Pgo+PiBJZiB5b3UgbG9v ayBhdCBsaW5lICMxNjIsIHlvdSB3aWxsIGZpbmQgYSBjb21tZW50IGJ5IHRoZSBvcmlnaW5hbCBh dXRob3I6Cj4+Cj4+PiAJLyoKPj4+IAkgKiBUT0RPOiB3ZSB1c2UgdGhlIGRlZmF1bHQgVFNBTVAv TlJTTVBML0FWR0VOIGluIE1DUiwKPj4+IAkgKiBjYW4gYWRkIHRoZSBzZXR0aW5nIG9mIHRoZXNl IGJpdCBpZiBuZWVkIGluIGZ1dHVyZS4KPj4+IAkgKi8gIAo+Pgo+PiBVUkw6Cj4+IGh0dHBzOi8v Z2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9kcml2ZXJzL2lpby9hZGMvaW14 OTNfYWRjLmMjTDE2Mgo+Pgo+PiBTbywgZm9yIG1vc3QgdXNlLWNhc2VzIHRoZSBkZWZhdWx0IHNl dHRpbmcgc2hvdWxkIHdvcmssIGJ1dCB3aHkgbm90IG1ha2UKPj4gdGhlbSBjb25maWd1cmFibGU/ Cj4+Cj4+IFNvIHRoaXMgcGF0Y2gtc2VyaWVzIGp1c3QgaW1wbGVtZW50IHdoYXQgd2FzIG1pc3Np bmcgZnJvbSB0aGUgYmVnaW5uaW5nCj4+IC8gd2FzIHBsYW5uZWQgZm9yIGxhdGVyLgo+IEhpIFBy aW1veiwKPiAKPiBJIGRvdWJ0IGFueW9uZSByZXZpZXdlZCB0aGUgY29tbWVudCBjbG9zZWx5IGVu b3VnaCB0byBzYXkgaWYgd2hhdCBpdCB3YXMKPiBzdWdnZXN0aW5nIHdhcyBzZW5zaWJsZSBvciBu b3QsIHNvIHRoZSBmYWN0IGl0IHdhcyBsaXN0ZWQgYXMgYSB0b2RvCj4gZG9lc24ndCBkaXJlY3Rs eSBpbXBhY3QgdGhpcyBkaXNjdXNzaW9uLgoKSSBhZ3JlZS4KCkhvd2V2ZXIgb24gdGhlIG90aGVy IGhhbmQsIHNpbmNlIHdlIHN0dW1ibGVkIHVwb24gYSB1c2UtY2FzZSB0aGF0CnJlcXVpcmVzIGFk anVzdGluZyB0aGUgZHJpdmVyIHByb3ZpZGVkIGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIGkuTVg5 MwpBREMsIHRoaXMgVE9ETyB0byB1cyBpcyBhbmQgd2FzIGEgY2xlYXIgaW5kaWNhdGlvbiBmcm9t IHRoZSBvcmlnaW5hbAphdXRob3IgdGhhdCB0aGUgZHJpdmVyIG5lZWRzIGxpdHRsZSBUTEMuCgpB bnlob3csIGEgc3RhbmNlIGZyb20gdGhlIGF1dGhvci9OWFAgd291bGQgYmUgaGlnaGx5IHdlbGNv bWluZyBpbiB0aGlzCnNpdHVhdGlvbi4KCkJSLApQcmltb3oKCgo+IAo+Pgo+PiBCUiwKPj4gUHJp bW96Cj4+Cj4+Cj4+Pgo+Pj4gU28gd2UgaGF2ZSB0d28gZGlmZmVyZW50IGJvYXJkcyB3aXRoIHRo ZSBzYW1lIFNvQy4gT24gb25lLCB0aGUKPj4+IGNhbGlicmF0aW9uIHdvcmtzIHdpdGggdGhlIGRl ZmF1bHQgdmFsdWVzLCBvbiB0aGUgc2Vjb25kIG9uZSB0aGUKPj4+IGNhbGlicmF0aW9uIGZhaWxz LCB3aGljaCBtYWtlcyB0aGUgQURDIHVudXNhYmxlLiBXaGF0IHRoZSBBREMgbGluZXMKPj4+IG1l YXN1cmUgZGlmZmVyIGJldHdlZW4gdGhlIGJvYXJkcyB0aG91Z2guIEJ1dCB0aGUgaW1wbGVtZW50 YXRpb24gaXMKPj4+IG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeS4KPj4+Cj4+PiBXZSB0cmll ZCBkaWZmZXJlbnQgdGhpbmdzIGJ1dCB0aGUgb25seSB0aGluZyB0aGF0IGhlbHBlZCBpcyB0byB1 c2UKPj4+IGRpZmZlcmVudCBjYWxpYnJhdGlvbiBwcm9wZXJ0aWVzLiBXZSB0cmllZCBkZWZlcnJp bmcgdGhlIHByb2JlIGFuZAo+Pj4gY2FsaWJyYXRpb24gdW50aWwgbGF0ZXIgYm9vdCBhbmQgYWZ0 ZXIgYm9vdCwgYnV0IGl0IGRpZCBub3QgaGVscC4KPj4+Cj4+PiBJbiB0aGUgUmVmZXJlbmNlIE1h bnVhbCBbMV0gKGNoYXB0ZXIgNzIuNS4xKSBpdCBpcyB3cml0dGVuOgo+Pj4gICAKPj4+PiA0LiBD b25maWd1cmUgZGVzaXJlZCBjYWxpYnJhdGlvbiBzZXR0aW5ncyAoZGVmYXVsdCB2YWx1ZXMga2Vw dCBmb3IKPj4+PiBoaWdoZXN0IGFjY3VyYWN5IG1heGltdW0gdGltZSkuICAKPj4+Cj4+PiBTbyB5 b3VyIGFzc3VtcHRpb24gaXMgY29ycmVjdCwgbG9uZ2VyIGNhbGlicmF0aW9uIHRpbWUgKG1vcmUg YXZlcmFnaW5nCj4+PiBzYW1wbGVzKSAtPiBoaWdoZXIgcHJlY2lzaW9uLiBUaGUgZGVmYXVsdCB2 YWx1ZXMgZ28gZm9yIGEgaGlnaCBhY2N1cmFjeS4KPj4+IEFuZCBzaW5jZSB3ZSB1c2UgYSBOUlNN UEwgKE51bWJlciBvZiBBdmVyYWdpbmcgU2FtcGxlcykgb2YgMzIgaW5zdGVhZCBvZgo+Pj4gZGVm YXVsdCA1MTIsIHdlIHJlZHVjZSB0aGUgYWNjdXJhY3kgc28gdGhlIGNhbGlicmF0aW9uIHZhbHVl cyBwYXNzIHRoZQo+Pj4gaW50ZXJuYWwgZGVmaW5lZCBsaW1pdHMuCj4gCj4gT3VjaC4gIExldCBt ZSB0cnkgdG8gZGlnIGludG8gdGhpcy4gSXMgdGhpcyBlZmZlY3RpdmVseSByZWxheGluZyB0aGUK PiBjb25zdHJhaW50cz8gSSBndWVzcyBiZWNhdXNlIGEgdmFsdWUgdGhhdCBpcyBwZXJoYXBzIGFs d2F5cyBiaWFzZWQgb25lIHdheQo+IGlzIGNvbnNpZGVyZWQgd2l0aGluIGJvdW5kcyBpZiB0aG9z ZSBhY2NlcHRhYmxlIGJvdW5kcyBhcmUgd2lkZXIgYmVjYXVzZQo+IG9mIGxvd2VyIHByZWNpc2lv bj8KPiAKPiBJIHdhcyBhc3N1bWluZyBpdCB3YXMgdGhlIG90aGVyIHdheSBhcm91bmQgYW5kIHRo ZSBkZXZpY2UgaGFkIGZpeGVkIGNvbnN0cmFpbnQKPiBsaW1pdHMgYW5kIHlvdSBuZWVkZWQgdG8g dGFrZSBtb3JlIHNhbXBsZXMgZHVlIHRvIGhpZ2hlciBub2lzZS4gU2VlbXMgdGhlCj4gb3Bwb3Np dGUgaXMgdHJ1ZSBoZXJlIGFuZCB0aGF0IHdvcnJpZXMgbWUuCj4gCj4gSSdsbCBkZWZpbml0ZWx5 IG5lZWQgaW5wdXQgZnJvbSBOWFAgb24gdGhpcyBhcyBhIHdvcmthcm91bmQgYW5kIHRoZWlyCj4g c3Ryb25nIHN1cHBvcnQgdG8gY29uc2lkZXIgaXQuCj4gCj4+Pgo+Pj4gSSdtIG5vdCBzdXJlIHRo YXQgY2hhbmdpbmcgZGVmYXVsdCB2YWx1ZXMgaXMgdGhlIHJpZ2h0IHNvbHV0aW9uIGhlcmUuIFdl Cj4+PiBzYXcgZGVmYXVsdCB2YWx1ZXMgd29yayB3aXRoIG9uZSBvZiB0aGUgYm9hcmRzLiBBbmQg c2luY2UgdGhlIE5YUCBrZXB0Cj4+PiB0aGVzZSB2YWx1ZXMgYWRqdXN0YWJsZSBJIHRoaW5rIHRo ZXJlIGlzIGEgcmVhc29uIGJlaGluZCBpdC4KPiAKPiBJJ2QgYXNzdW1lIHRyYWRlIG9mZiBiZXR3 ZWVuIHRpbWUgYW5kIGNhbGlicmF0aW9uIHByZWNpc2lvbiwgbm90IHRoZQo+IHNvcnQgb2YgdXNl IEkgdGhpbmsgeW91IGFyZSBkZXNjcmliaW5nLgo+IAo+Pj4KPj4+IE5vdGU6IFdoZW4gSSBzYXkg b25lIG9mIHRoZSBib2FyZHMgSSBtZWFuIG9uZSBib2FyZCBmb3JtLiBTbyBzYW1lIGJvYXJkCj4+ PiB2ZXJzaW9uLCBidXQgZGlmZmVyZW50IEhXLgo+IAo+IFN1cGVyZmljaWFsbHkgSSdtIHN0cnVn Z2xpbmcgdG8gbm90IHNlZSB0aGlzIGFzIGJyb2tlbiBoYXJkd2FyZSB0aGF0IGl0Cj4gaXMgb3V0 IG9mIGV4cGVjdGVkIHRvbGVyYW5jZXMgaW4gc29tZSBmYXNoaW9uLiAgTWF5YmUgSSBtaXN1bmRl cnN0b29kCj4gdGhlIGlzc3VlLgo+IAo+IEpvbmF0aGFuCj4gCj4+Pgo+Pj4gQmVzdCByZWdhcmRz LAo+Pj4gQW5kcmVqCj4+Pgo+Pj4gWzFdIGkuTVggOTMgQXBwbGljYXRpb25zIFByb2Nlc3NvciBS ZWZlcmVuY2UgTWFudWFsLCBSZXYuIDQsIDEyLzIwMjMKPj4+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiB1cHN0cmVhbSBtYWlsaW5nIGxpc3QKPj4+ IHVwc3RyZWFtQGxpc3RzLnBoeXRlYy5kZQo+Pj4gaHR0cDovL2xpc3RzLnBoeXRlYy5kZS9jZ2kt YmluL21haWxtYW4vbGlzdGluZm8vdXBzdHJlYW0gIAo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdAo+PiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCj4g CgotLSAKUHJpbW96IEZpc2VyICAgICAgICAgICAgICAgICAgICB8IHBob25lOiArMzg2LTQxLTM5 MC01NDUKPHRlbDorMzg2LTQxLTM5MC01NDU+IHwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfApOb3JpayBzeXN0ZW1zIGQuby5vLiAgICAg ICAgICAgIHwgaHR0cHM6Ly93d3cubm9yaWsuY29tCjxodHRwczovL3d3dy5ub3Jpay5jb20+ICB8 CllvdXIgZW1iZWRkZWQgc29mdHdhcmUgcGFydG5lciAgfCBlbWFpbDogaW5mb0Bub3Jpay5jb20K PG1haWx0bzppbmZvQG5vcmlrLmNvbT4gfApTbG92ZW5pYSwgRVUgICAgICAgICAgICAgICAgICAg IHwgcGhvbmU6ICszODYtNDEtNTQwLTU0NQo8dGVsOiszODYtNDEtNTQwLTU0NT4gfAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK