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 DD3E2C433EF for ; Tue, 1 Feb 2022 13:52:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238909AbiBANwM (ORCPT ); Tue, 1 Feb 2022 08:52:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230073AbiBANwM (ORCPT ); Tue, 1 Feb 2022 08:52:12 -0500 Received: from relay11.mail.gandi.net (relay11.mail.gandi.net [IPv6:2001:4b98:dc4:8::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3368AC061714; Tue, 1 Feb 2022 05:52:11 -0800 (PST) Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 64B9B100002; Tue, 1 Feb 2022 13:52:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1643723529; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9wWj1va3LmxR7uptoK225JjVfSAKX5gP2e5O2jvKmFs=; b=FolHXnBTaVk5XuRbTsW0DHX9gYw9CMcJbrjgFF4wiTfKl2KYiL7HuQbhq7Mi+UDXj6jrPl m4SZGAaMeRPJyg51mND/9QvniCge/K1OBcfJPLVBHrbtWqwxXYrBVltNvhbhPyUQumb6Sj fUkh89Orf94sEUL+u8UBtI5MFRzHhtcQc7fS5/GNJqbeGa5+ZrvKzbJgnhx22Hk8agp20O FeTPGPilihUAJRzFPeZbCyu9Kz9BLq7AshbdfvQdgakW6JGpJ00dnlMzdSi2dCsTxn/TrD g4iipY2XrNCbpMEc4VBMcBcT1IGszN4Vn6x0Q9XaC8+FGNrKp/XZC6KPr/vJUg== Date: Tue, 1 Feb 2022 14:52:04 +0100 From: Miquel Raynal To: Konrad Dybcio Cc: Sricharan Ramabadhran , Manivannan Sadhasivam , pragalla@codeaurora.org, ~postmarketos/upstreaming@lists.sr.ht, martin.botka@somainline.org, angelogioacchino.delregno@somainline.org, marijn.suijten@somainline.org, jamipkettunen@somainline.org, Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, mdalam@codeaurora.org Subject: Re: [PATCH] mtd: nand: raw: qcom_nandc: Don't clear_bam_transaction on READID Message-ID: <20220201145204.54646475@xps13> In-Reply-To: <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> References: <20220113184427.2259509-1-konrad.dybcio@somainline.org> <20220114082718.32a2fc83@xps13> <20220126111613.3ab0021e@xps13> <20220126103316.GA212068@thinkpad> <20220126114200.4cc3c21b@xps13> <0a8d6550-aa19-0af1-abae-66bf34c91ea8@somainline.org> <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Hi Konrad, konrad.dybcio@somainline.org wrote on Mon, 31 Jan 2022 20:54:12 +0100: > On 31/01/2022 15:13, Sricharan Ramabadhran wrote: > > Hi Konrad, > > > > On 1/31/2022 3:39 PM, Konrad Dybcio wrote: =20 > >> > >> On 28/01/2022 18:50, Sricharan Ramabadhran wrote: =20 > >>> Hi Konrad, > >>> > >>> On 1/28/2022 9:55 AM, Sricharan Ramabadhran wrote: =20 > >>>> Hi Miquel, > >>>> > >>>> On 1/26/2022 4:12 PM, Miquel Raynal wrote: =20 > >>>>> Hi Mani, > >>>>> > >>>>> mani@kernel.org wrote on Wed, 26 Jan 2022 16:03:16 +0530: > >>>>> =20 > >>>>>> On Wed, Jan 26, 2022 at 11:16:13AM +0100, Miquel Raynal wrote: =20 > >>>>>>> Hello, > >>>>>>> > >>>>>>> miquel.raynal@bootlin.com wrote on Fri, 14 Jan 2022 08:27:18 +010= 0: =20 > >>>>>>>> Hi Konrad, > >>>>>>>> > >>>>>>>> konrad.dybcio@somainline.org wrote on Thu, 13 Jan 2022 19:44:26 = >>>>>>>> +0100: =20 > >>>>>>>>> While I have absolutely 0 idea why and how, running >>>>>>>>> c= lear_bam_transaction > >>>>>>>>> when READID is issued makes the DMA totally clog up and refuse = >>>>>>>>> to function > >>>>>>>>> at all on mdm9607. In fact, it is so bad that all the data >>>>= >>>>> gets garbled > >>>>>>>>> and after a short while in the nand probe flow, the CPU >>>>>>>= >> decides that > >>>>>>>>> sepuku is the only option. > >>>>>>>>> > >>>>>>>>> Removing _READID from the if condition makes it work like a >>>= >>>>>> charm, I can > >>>>>>>>> read data and mount partitions without a problem. > >>>>>>>>> > >>>>>>>>> Signed-off-by: Konrad Dybcio > >>>>>>>>> --- > >>>>>>>>> This is totally just an observation which took me an inhumane >= >>>>>>>> amount of > >>>>>>>>> debug prints to find.. perhaps there's a better reason behind >= >>>>>>>> this, but > >>>>>>>>> I can't seem to find any answers.. Therefore, this is a BIG RFC= ! =20 > >>>>>>>> I'm adding two people from codeaurora who worked a lot on this >= >>>>>>> driver. > >>>>>>>> Hopefully they will have an idea :) =20 > >>>>>>> Sadre, I've spent a significant amount of time reviewing your >>>= >>>> patches, > >>>>>>> now it's your turn to not take a month to answer to your peers > >>>>>>> proposals. > >>>>>>> > >>>>>>> Please help reviewing this patch. =20 > >>>>>> Sorry. I was hoping that Qcom folks would chime in as I don't >>>>= >> have any idea > >>>>>> about the mdm9607 platform. It could be that the mail server >>>>>= > migration from > >>>>>> codeaurora to quicinc put a barrier here. > >>>>>> > >>>>>> Let me ping them internally. =20 > >>>>> Oh, ok, I didn't know. Thanks! =20 > >>>> > >>>> =C2=A0=C2=A0 Sorry Miquel, somehow we did not get this email in our = inbox. > >>>> =C2=A0=C2=A0 Thanks to Mani for pinging us, we will test this up tod= ay and >>>> get back. > >>>> =20 > >>> =C2=A0 =C2=A0 =C2=A0 While we could not reproduce this issue on our i= pq boards (do >>> not have a mdm9607 right now) and > >>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 issue does not look any obvious. > >>> =C2=A0 =C2=A0 =C2=A0 can you please give the debug logs that you did = for the above >>> stage by stage ? =20 > >> > >> I won't have access to the board for about two weeks, sorry. > >> > >> When I get to it, I'll surely try to send you the logs, though there > >> > >> wasn't much more than just something jumping to who-knows-where > >> > >> after clear_bam_transaction was called, resulting in values >> associa= ted with > >> > >> the NAND being all zeroed out in pr_err/_debug/etc. > >> > >> =20 > > =C2=A0=C2=A0=C2=A0 Ok sure. So was the READID command itself failing (o= r) the > subsequent one ? > > =C2=A0=C2=A0 We can check which parameter reset by the clear_bam_transa= ction is > causing the > > =C2=A0=C2=A0 failure.=C2=A0 Meanwhile, looping in Pradeep who has acces= s to the > board, so in a better > > =C2=A0=C2=A0 position to debug. =20 >=20 > I'm sorry I have so few details on hand, and no kernel tree (no access to= that machine either, for now). >=20 >=20 > I will try to describe to the best of my abilities what I recall. >=20 >=20 > My methodology of making sure things don't go haywire was to print the oo= b size >=20 > of our NAND basically every two lines of code (yes, i was very desperate = at one point), >=20 > as that was zeroed out when *the bug* happened, This does look like a pointer error at some point and some kernel data has been corrupted very badly by the driver. > leading to a kernel bug/panic/stall >=20 > (can't recall what exactly it was, but it said something along the lines = of "no support for >=20 > oob size 0" and then it didn't fail graceully, leading to some bad jumps = and ultimately >=20 > a dead platform..) >=20 >=20 > after hours of digging, I found out that everything goes fine until clear= _bam_transaction is called, Do you remember if this function was called for the first time when this happened? > after that gets executed every nand op starts reading all zeroes (for exa= mple in JEDEC ID check) >=20 > so I added the changes from this patch, and things magically started work= ing... My suspicion is >=20 > that the underlying FIFO isn't fully drained (is it a FIFO on 9607? bah, = i work on too many socs at once) I don't see it in the list of supported devices, what's the exact compatible used? >=20 > and this function only makes Linux think it is, without actually draining= it, and the leftover >=20 > commands get executed with some parts of them getting overwritten, result= ing in the >=20 > famous garbage in - garbage out situation, but that's only a guesstimate.. I would bet for a non allocated bam-ish pointer that is reset to zero in the clear_bam_transaction() helper. Can you get your hands on the board again? It would be nice to check if the allocation always occurs before use, and if yes on how much bytes. If the pointer is not dangling, then perhaps something else smashes that pointer. > Do note this somehow worked fine on 5.11 and then broke on 5.12/13. I wen= t as far as replacing most >=20 > of the kernel with the updated/downgraded parts via git checkout (i tried= many combinations), >=20 > to no avail.. I even tried different compilers and optimization levels, t= hinking it could have been >=20 > a codegen issue, but no luck either. >=20 >=20 > I.. do understand this email is a total mess to read, as much as it was t= o write, but >=20 > without access to my code and the machine itself I can't give you solid d= etails, and >=20 > the fact this situation is far from ordinary doesn't help either.. >=20 >=20 > The latest (ancient, not quite pretty, but probably working if my memory = is correct) version of my patches >=20 > for the mdm9607 is available at [1], I will push the new revision after I= get access to the workstation. >=20 >=20 > Konrad >=20 >=20 > [1] https://github.com/SoMainline/linux/commits/konrad/pinemodem >=20 >=20 > > > > Regards, > > =C2=A0=C2=A0 Sricharan > > > > =20 Thanks, Miqu=C3=A8l 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 6DCE9C433EF for ; Tue, 1 Feb 2022 13:53:07 +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:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eTU+NsFTFocKN1hOd3XSp+BTarkodPClg7cxZrR6Fss=; b=MAhK3x1gwlbNeR OuaBQ8orYkqyPZPrRhBdjquG8JX/LvvKNexxKTusf4FG3vWC0EiaOyMWo9B5lj6KCE9dC8ZxZTnaj gwS8zvVjauDQ2cz2onEZSMs5ICD6kZ90Y1CRSl85aMIfSSMm8gwDcjvU2UuSvKfnheL8QQSwfKPPT X9ydw0p/gQfs7jS8zoWsaLCMEjZrNRqLRvWp3WzDhndYzwF/0ZAZKbKOPa36BkU7fMsUL8v3FvU+K NxDNXywnp0Z1jJ8ox6ZgjHoF7R1dwph7fH5Igd+DZBn3uKAYh9F/d3wxH/Ijw8Ge4YCDplwhDn+4W ZZ5ABmxO3zAov6XhSWIQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nEta0-00CMsO-Jq; Tue, 01 Feb 2022 13:52:20 +0000 Received: from relay11.mail.gandi.net ([2001:4b98:dc4:8::231]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nEtZw-00CMrW-U8 for linux-mtd@lists.infradead.org; Tue, 01 Feb 2022 13:52:19 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 64B9B100002; Tue, 1 Feb 2022 13:52:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1643723529; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9wWj1va3LmxR7uptoK225JjVfSAKX5gP2e5O2jvKmFs=; b=FolHXnBTaVk5XuRbTsW0DHX9gYw9CMcJbrjgFF4wiTfKl2KYiL7HuQbhq7Mi+UDXj6jrPl m4SZGAaMeRPJyg51mND/9QvniCge/K1OBcfJPLVBHrbtWqwxXYrBVltNvhbhPyUQumb6Sj fUkh89Orf94sEUL+u8UBtI5MFRzHhtcQc7fS5/GNJqbeGa5+ZrvKzbJgnhx22Hk8agp20O FeTPGPilihUAJRzFPeZbCyu9Kz9BLq7AshbdfvQdgakW6JGpJ00dnlMzdSi2dCsTxn/TrD g4iipY2XrNCbpMEc4VBMcBcT1IGszN4Vn6x0Q9XaC8+FGNrKp/XZC6KPr/vJUg== Date: Tue, 1 Feb 2022 14:52:04 +0100 From: Miquel Raynal To: Konrad Dybcio Cc: Sricharan Ramabadhran , Manivannan Sadhasivam , pragalla@codeaurora.org, ~postmarketos/upstreaming@lists.sr.ht, martin.botka@somainline.org, angelogioacchino.delregno@somainline.org, marijn.suijten@somainline.org, jamipkettunen@somainline.org, Richard Weinberger , Vignesh Raghavendra , linux-mtd@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, mdalam@codeaurora.org Subject: Re: [PATCH] mtd: nand: raw: qcom_nandc: Don't clear_bam_transaction on READID Message-ID: <20220201145204.54646475@xps13> In-Reply-To: <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> References: <20220113184427.2259509-1-konrad.dybcio@somainline.org> <20220114082718.32a2fc83@xps13> <20220126111613.3ab0021e@xps13> <20220126103316.GA212068@thinkpad> <20220126114200.4cc3c21b@xps13> <0a8d6550-aa19-0af1-abae-66bf34c91ea8@somainline.org> <12cad24a-fa2f-9a82-cf43-241a0a6fe4f6@somainline.org> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220201_055217_327589_208BE3FE X-CRM114-Status: GOOD ( 49.06 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgS29ucmFkLAoKa29ucmFkLmR5YmNpb0Bzb21haW5saW5lLm9yZyB3cm90ZSBvbiBNb24sIDMx IEphbiAyMDIyIDIwOjU0OjEyICswMTAwOgoKPiBPbiAzMS8wMS8yMDIyIDE1OjEzLCBTcmljaGFy YW4gUmFtYWJhZGhyYW4gd3JvdGU6Cj4gPiBIaSBLb25yYWQsCj4gPgo+ID4gT24gMS8zMS8yMDIy IDM6MzkgUE0sIEtvbnJhZCBEeWJjaW8gd3JvdGU6ICAKPiA+Pgo+ID4+IE9uIDI4LzAxLzIwMjIg MTg6NTAsIFNyaWNoYXJhbiBSYW1hYmFkaHJhbiB3cm90ZTogIAo+ID4+PiBIaSBLb25yYWQsCj4g Pj4+Cj4gPj4+IE9uIDEvMjgvMjAyMiA5OjU1IEFNLCBTcmljaGFyYW4gUmFtYWJhZGhyYW4gd3Jv dGU6ICAKPiA+Pj4+IEhpIE1pcXVlbCwKPiA+Pj4+Cj4gPj4+PiBPbiAxLzI2LzIwMjIgNDoxMiBQ TSwgTWlxdWVsIFJheW5hbCB3cm90ZTogIAo+ID4+Pj4+IEhpIE1hbmksCj4gPj4+Pj4KPiA+Pj4+ PiBtYW5pQGtlcm5lbC5vcmcgd3JvdGUgb24gV2VkLCAyNiBKYW4gMjAyMiAxNjowMzoxNiArMDUz MDoKPiA+Pj4+PiAgCj4gPj4+Pj4+IE9uIFdlZCwgSmFuIDI2LCAyMDIyIGF0IDExOjE2OjEzQU0g KzAxMDAsIE1pcXVlbCBSYXluYWwgd3JvdGU6ICAKPiA+Pj4+Pj4+IEhlbGxvLAo+ID4+Pj4+Pj4K PiA+Pj4+Pj4+IG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20gd3JvdGUgb24gRnJpLCAxNCBKYW4g MjAyMiAwODoyNzoxOCArMDEwMDogIAo+ID4+Pj4+Pj4+IEhpIEtvbnJhZCwKPiA+Pj4+Pj4+Pgo+ ID4+Pj4+Pj4+IGtvbnJhZC5keWJjaW9Ac29tYWlubGluZS5vcmcgd3JvdGUgb24gVGh1LCAxMyBK YW4gMjAyMiAxOTo0NDoyNiA+Pj4+Pj4+PiArMDEwMDogIAo+ID4+Pj4+Pj4+PiBXaGlsZSBJIGhh dmUgYWJzb2x1dGVseSAwIGlkZWEgd2h5IGFuZCBob3csIHJ1bm5pbmcgPj4+Pj4+Pj4+IGNsZWFy X2JhbV90cmFuc2FjdGlvbgo+ID4+Pj4+Pj4+PiB3aGVuIFJFQURJRCBpcyBpc3N1ZWQgbWFrZXMg dGhlIERNQSB0b3RhbGx5IGNsb2cgdXAgYW5kIHJlZnVzZSA+Pj4+Pj4+Pj4gdG8gZnVuY3Rpb24K PiA+Pj4+Pj4+Pj4gYXQgYWxsIG9uIG1kbTk2MDcuIEluIGZhY3QsIGl0IGlzIHNvIGJhZCB0aGF0 IGFsbCB0aGUgZGF0YSA+Pj4+Pj4+Pj4gZ2V0cyBnYXJibGVkCj4gPj4+Pj4+Pj4+IGFuZCBhZnRl ciBhIHNob3J0IHdoaWxlIGluIHRoZSBuYW5kIHByb2JlIGZsb3csIHRoZSBDUFUgPj4+Pj4+Pj4+ IGRlY2lkZXMgdGhhdAo+ID4+Pj4+Pj4+PiBzZXB1a3UgaXMgdGhlIG9ubHkgb3B0aW9uLgo+ID4+ Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBSZW1vdmluZyBfUkVBRElEIGZyb20gdGhlIGlmIGNvbmRpdGlv biBtYWtlcyBpdCB3b3JrIGxpa2UgYSA+Pj4+Pj4+Pj4gY2hhcm0sIEkgY2FuCj4gPj4+Pj4+Pj4+ IHJlYWQgZGF0YSBhbmQgbW91bnQgcGFydGl0aW9ucyB3aXRob3V0IGEgcHJvYmxlbS4KPiA+Pj4+ Pj4+Pj4KPiA+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogS29ucmFkIER5YmNpbyA8a29ucmFkLmR5 YmNpb0Bzb21haW5saW5lLm9yZz4KPiA+Pj4+Pj4+Pj4gLS0tCj4gPj4+Pj4+Pj4+IFRoaXMgaXMg dG90YWxseSBqdXN0IGFuIG9ic2VydmF0aW9uIHdoaWNoIHRvb2sgbWUgYW4gaW5odW1hbmUgPj4+ Pj4+Pj4+IGFtb3VudCBvZgo+ID4+Pj4+Pj4+PiBkZWJ1ZyBwcmludHMgdG8gZmluZC4uIHBlcmhh cHMgdGhlcmUncyBhIGJldHRlciByZWFzb24gYmVoaW5kID4+Pj4+Pj4+PiB0aGlzLCBidXQKPiA+ Pj4+Pj4+Pj4gSSBjYW4ndCBzZWVtIHRvIGZpbmQgYW55IGFuc3dlcnMuLiBUaGVyZWZvcmUsIHRo aXMgaXMgYSBCSUcgUkZDISAgCj4gPj4+Pj4+Pj4gSSdtIGFkZGluZyB0d28gcGVvcGxlIGZyb20g Y29kZWF1cm9yYSB3aG8gd29ya2VkIGEgbG90IG9uIHRoaXMgPj4+Pj4+Pj4gZHJpdmVyLgo+ID4+ Pj4+Pj4+IEhvcGVmdWxseSB0aGV5IHdpbGwgaGF2ZSBhbiBpZGVhIDopICAKPiA+Pj4+Pj4+IFNh ZHJlLCBJJ3ZlIHNwZW50IGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUgcmV2aWV3aW5nIHlv dXIgPj4+Pj4+PiBwYXRjaGVzLAo+ID4+Pj4+Pj4gbm93IGl0J3MgeW91ciB0dXJuIHRvIG5vdCB0 YWtlIGEgbW9udGggdG8gYW5zd2VyIHRvIHlvdXIgcGVlcnMKPiA+Pj4+Pj4+IHByb3Bvc2Fscy4K PiA+Pj4+Pj4+Cj4gPj4+Pj4+PiBQbGVhc2UgaGVscCByZXZpZXdpbmcgdGhpcyBwYXRjaC4gIAo+ ID4+Pj4+PiBTb3JyeS4gSSB3YXMgaG9waW5nIHRoYXQgUWNvbSBmb2xrcyB3b3VsZCBjaGltZSBp biBhcyBJIGRvbid0ID4+Pj4+PiBoYXZlIGFueSBpZGVhCj4gPj4+Pj4+IGFib3V0IHRoZSBtZG05 NjA3IHBsYXRmb3JtLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBtYWlsIHNlcnZlciA+Pj4+Pj4gbWln cmF0aW9uIGZyb20KPiA+Pj4+Pj4gY29kZWF1cm9yYSB0byBxdWljaW5jIHB1dCBhIGJhcnJpZXIg aGVyZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gTGV0IG1lIHBpbmcgdGhlbSBpbnRlcm5hbGx5LiAgCj4g Pj4+Pj4gT2gsIG9rLCBJIGRpZG4ndCBrbm93LiBUaGFua3MhICAKPiA+Pj4+Cj4gPj4+PiDCoMKg IFNvcnJ5IE1pcXVlbCwgc29tZWhvdyB3ZSBkaWQgbm90IGdldCB0aGlzIGVtYWlsIGluIG91ciBp bmJveC4KPiA+Pj4+IMKgwqAgVGhhbmtzIHRvIE1hbmkgZm9yIHBpbmdpbmcgdXMsIHdlIHdpbGwg dGVzdCB0aGlzIHVwIHRvZGF5IGFuZCA+Pj4+IGdldCBiYWNrLgo+ID4+Pj4gIAo+ID4+PiDCoCDC oCDCoCBXaGlsZSB3ZSBjb3VsZCBub3QgcmVwcm9kdWNlIHRoaXMgaXNzdWUgb24gb3VyIGlwcSBi b2FyZHMgKGRvID4+PiBub3QgaGF2ZSBhIG1kbTk2MDcgcmlnaHQgbm93KSBhbmQKPiA+Pj4gwqDC oMKgwqDCoMKgIGlzc3VlIGRvZXMgbm90IGxvb2sgYW55IG9idmlvdXMuCj4gPj4+IMKgIMKgIMKg IGNhbiB5b3UgcGxlYXNlIGdpdmUgdGhlIGRlYnVnIGxvZ3MgdGhhdCB5b3UgZGlkIGZvciB0aGUg YWJvdmUgPj4+IHN0YWdlIGJ5IHN0YWdlID8gIAo+ID4+Cj4gPj4gSSB3b24ndCBoYXZlIGFjY2Vz cyB0byB0aGUgYm9hcmQgZm9yIGFib3V0IHR3byB3ZWVrcywgc29ycnkuCj4gPj4KPiA+PiBXaGVu IEkgZ2V0IHRvIGl0LCBJJ2xsIHN1cmVseSB0cnkgdG8gc2VuZCB5b3UgdGhlIGxvZ3MsIHRob3Vn aCB0aGVyZQo+ID4+Cj4gPj4gd2Fzbid0IG11Y2ggbW9yZSB0aGFuIGp1c3Qgc29tZXRoaW5nIGp1 bXBpbmcgdG8gd2hvLWtub3dzLXdoZXJlCj4gPj4KPiA+PiBhZnRlciBjbGVhcl9iYW1fdHJhbnNh Y3Rpb24gd2FzIGNhbGxlZCwgcmVzdWx0aW5nIGluIHZhbHVlcyA+PiBhc3NvY2lhdGVkIHdpdGgK PiA+Pgo+ID4+IHRoZSBOQU5EIGJlaW5nIGFsbCB6ZXJvZWQgb3V0IGluIHByX2Vyci9fZGVidWcv ZXRjLgo+ID4+Cj4gPj4gIAo+ID4gwqDCoMKgIE9rIHN1cmUuIFNvIHdhcyB0aGUgUkVBRElEIGNv bW1hbmQgaXRzZWxmIGZhaWxpbmcgKG9yKSB0aGUgPiBzdWJzZXF1ZW50IG9uZSA/Cj4gPiDCoMKg IFdlIGNhbiBjaGVjayB3aGljaCBwYXJhbWV0ZXIgcmVzZXQgYnkgdGhlIGNsZWFyX2JhbV90cmFu c2FjdGlvbiBpcyA+IGNhdXNpbmcgdGhlCj4gPiDCoMKgIGZhaWx1cmUuwqAgTWVhbndoaWxlLCBs b29waW5nIGluIFByYWRlZXAgd2hvIGhhcyBhY2Nlc3MgdG8gdGhlID4gYm9hcmQsIHNvIGluIGEg YmV0dGVyCj4gPiDCoMKgIHBvc2l0aW9uIHRvIGRlYnVnLiAgCj4gCj4gSSdtIHNvcnJ5IEkgaGF2 ZSBzbyBmZXcgZGV0YWlscyBvbiBoYW5kLCBhbmQgbm8ga2VybmVsIHRyZWUgKG5vIGFjY2VzcyB0 byB0aGF0IG1hY2hpbmUgZWl0aGVyLCBmb3Igbm93KS4KPiAKPiAKPiBJIHdpbGwgdHJ5IHRvIGRl c2NyaWJlIHRvIHRoZSBiZXN0IG9mIG15IGFiaWxpdGllcyB3aGF0IEkgcmVjYWxsLgo+IAo+IAo+ IE15IG1ldGhvZG9sb2d5IG9mIG1ha2luZyBzdXJlIHRoaW5ncyBkb24ndCBnbyBoYXl3aXJlIHdh cyB0byBwcmludCB0aGUgb29iIHNpemUKPiAKPiBvZiBvdXIgTkFORCBiYXNpY2FsbHkgZXZlcnkg dHdvIGxpbmVzIG9mIGNvZGUgKHllcywgaSB3YXMgdmVyeSBkZXNwZXJhdGUgYXQgb25lIHBvaW50 KSwKPiAKPiBhcyB0aGF0IHdhcyB6ZXJvZWQgb3V0IHdoZW4gKnRoZSBidWcqIGhhcHBlbmVkLAoK VGhpcyBkb2VzIGxvb2sgbGlrZSBhIHBvaW50ZXIgZXJyb3IgYXQgc29tZSBwb2ludCBhbmQgc29t ZSBrZXJuZWwgZGF0YQpoYXMgYmVlbiBjb3JydXB0ZWQgdmVyeSBiYWRseSBieSB0aGUgZHJpdmVy LgoKPiBsZWFkaW5nIHRvIGEga2VybmVsIGJ1Zy9wYW5pYy9zdGFsbAo+IAo+IChjYW4ndCByZWNh bGwgd2hhdCBleGFjdGx5IGl0IHdhcywgYnV0IGl0IHNhaWQgc29tZXRoaW5nIGFsb25nIHRoZSBs aW5lcyBvZiAibm8gc3VwcG9ydCBmb3IKPiAKPiBvb2Igc2l6ZSAwIiBhbmQgdGhlbiBpdCBkaWRu J3QgZmFpbCBncmFjZXVsbHksIGxlYWRpbmcgdG8gc29tZSBiYWQganVtcHMgYW5kIHVsdGltYXRl bHkKPiAKPiBhIGRlYWQgcGxhdGZvcm0uLikKPiAKPiAKPiBhZnRlciBob3VycyBvZiBkaWdnaW5n LCBJIGZvdW5kIG91dCB0aGF0IGV2ZXJ5dGhpbmcgZ29lcyBmaW5lIHVudGlsIGNsZWFyX2JhbV90 cmFuc2FjdGlvbiBpcyBjYWxsZWQsCgpEbyB5b3UgcmVtZW1iZXIgaWYgdGhpcyBmdW5jdGlvbiB3 YXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuCnRoaXMgaGFwcGVuZWQ/Cgo+IGFmdGVy IHRoYXQgZ2V0cyBleGVjdXRlZCBldmVyeSBuYW5kIG9wIHN0YXJ0cyByZWFkaW5nIGFsbCB6ZXJv ZXMgKGZvciBleGFtcGxlIGluIEpFREVDIElEIGNoZWNrKQo+IAo+IHNvIEkgYWRkZWQgdGhlIGNo YW5nZXMgZnJvbSB0aGlzIHBhdGNoLCBhbmQgdGhpbmdzIG1hZ2ljYWxseSBzdGFydGVkIHdvcmtp bmcuLi4gTXkgc3VzcGljaW9uIGlzCj4gCj4gdGhhdCB0aGUgdW5kZXJseWluZyBGSUZPIGlzbid0 IGZ1bGx5IGRyYWluZWQgKGlzIGl0IGEgRklGTyBvbiA5NjA3PyBiYWgsIGkgd29yayBvbiB0b28g bWFueSBzb2NzIGF0IG9uY2UpCgpJIGRvbid0IHNlZSBpdCBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0 ZWQgZGV2aWNlcywgd2hhdCdzIHRoZSBleGFjdApjb21wYXRpYmxlIHVzZWQ/Cgo+IAo+IGFuZCB0 aGlzIGZ1bmN0aW9uIG9ubHkgbWFrZXMgTGludXggdGhpbmsgaXQgaXMsIHdpdGhvdXQgYWN0dWFs bHkgZHJhaW5pbmcgaXQsIGFuZCB0aGUgbGVmdG92ZXIKPiAKPiBjb21tYW5kcyBnZXQgZXhlY3V0 ZWQgd2l0aCBzb21lIHBhcnRzIG9mIHRoZW0gZ2V0dGluZyBvdmVyd3JpdHRlbiwgcmVzdWx0aW5n IGluIHRoZQo+IAo+IGZhbW91cyBnYXJiYWdlIGluIC0gZ2FyYmFnZSBvdXQgc2l0dWF0aW9uLCBi dXQgdGhhdCdzIG9ubHkgYSBndWVzc3RpbWF0ZS4uCgpJIHdvdWxkIGJldCBmb3IgYSBub24gYWxs b2NhdGVkIGJhbS1pc2ggcG9pbnRlciB0aGF0IGlzIHJlc2V0IHRvIHplcm8KaW4gdGhlIGNsZWFy X2JhbV90cmFuc2FjdGlvbigpIGhlbHBlci4KCkNhbiB5b3UgZ2V0IHlvdXIgaGFuZHMgb24gdGhl IGJvYXJkIGFnYWluPwpJdCB3b3VsZCBiZSBuaWNlIHRvIGNoZWNrIGlmIHRoZSBhbGxvY2F0aW9u IGFsd2F5cyBvY2N1cnMgYmVmb3JlIHVzZSwKYW5kIGlmIHllcyBvbiBob3cgbXVjaCBieXRlcy4K CklmIHRoZSBwb2ludGVyIGlzIG5vdCBkYW5nbGluZywgdGhlbiBwZXJoYXBzIHNvbWV0aGluZyBl bHNlIHNtYXNoZXMKdGhhdCBwb2ludGVyLgoKPiBEbyBub3RlIHRoaXMgc29tZWhvdyB3b3JrZWQg ZmluZSBvbiA1LjExIGFuZCB0aGVuIGJyb2tlIG9uIDUuMTIvMTMuIEkgd2VudCBhcyBmYXIgYXMg cmVwbGFjaW5nIG1vc3QKPiAKPiBvZiB0aGUga2VybmVsIHdpdGggdGhlIHVwZGF0ZWQvZG93bmdy YWRlZCBwYXJ0cyB2aWEgZ2l0IGNoZWNrb3V0IChpIHRyaWVkIG1hbnkgY29tYmluYXRpb25zKSwK PiAKPiB0byBubyBhdmFpbC4uIEkgZXZlbiB0cmllZCBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBv cHRpbWl6YXRpb24gbGV2ZWxzLCB0aGlua2luZyBpdCBjb3VsZCBoYXZlIGJlZW4KPiAKPiBhIGNv ZGVnZW4gaXNzdWUsIGJ1dCBubyBsdWNrIGVpdGhlci4KPiAKPiAKPiBJLi4gZG8gdW5kZXJzdGFu ZCB0aGlzIGVtYWlsIGlzIGEgdG90YWwgbWVzcyB0byByZWFkLCBhcyBtdWNoIGFzIGl0IHdhcyB0 byB3cml0ZSwgYnV0Cj4gCj4gd2l0aG91dCBhY2Nlc3MgdG8gbXkgY29kZSBhbmQgdGhlIG1hY2hp bmUgaXRzZWxmIEkgY2FuJ3QgZ2l2ZSB5b3Ugc29saWQgZGV0YWlscywgYW5kCj4gCj4gdGhlIGZh Y3QgdGhpcyBzaXR1YXRpb24gaXMgZmFyIGZyb20gb3JkaW5hcnkgZG9lc24ndCBoZWxwIGVpdGhl ci4uCj4gCj4gCj4gVGhlIGxhdGVzdCAoYW5jaWVudCwgbm90IHF1aXRlIHByZXR0eSwgYnV0IHBy b2JhYmx5IHdvcmtpbmcgaWYgbXkgbWVtb3J5IGlzIGNvcnJlY3QpIHZlcnNpb24gb2YgbXkgcGF0 Y2hlcwo+IAo+IGZvciB0aGUgbWRtOTYwNyBpcyBhdmFpbGFibGUgYXQgWzFdLCBJIHdpbGwgcHVz aCB0aGUgbmV3IHJldmlzaW9uIGFmdGVyIEkgZ2V0IGFjY2VzcyB0byB0aGUgd29ya3N0YXRpb24u Cj4gCj4gCj4gS29ucmFkCj4gCj4gCj4gWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9Tb01haW5saW5l L2xpbnV4L2NvbW1pdHMva29ucmFkL3BpbmVtb2RlbQo+IAo+IAo+ID4KPiA+IFJlZ2FyZHMsCj4g PiDCoMKgIFNyaWNoYXJhbgo+ID4KPiA+ICAKCgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlz Y3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1tdGQvCg==