From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1EEB8CD for ; Tue, 12 Dec 2023 10:26:07 -0800 (PST) Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-28ad848d9b4so174643a91.2 for ; Tue, 12 Dec 2023 10:26:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702405566; x=1703010366; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9lX++N5VCWclr3d1h9X3xvVDF9stHF9vZ8hPgWWAfgI=; b=pZv2WIonn41tKs0284CMPqGy5d2YK+1rxu5mrHx4L/U7nJc4WLOus8XN22nGoQ0BPO Pa7QRVEYr3j7f9bbnUANnkJYIu/Mqy7lbiQXRFyb0+Ngn4TC7pZyWqP9YznERcL7Ew1S zrPh1efVi7sW52ZQGXlnmKFUxrTZS1p6SvcBAtvLjt3lJS30P19JAL8L8QBm7VRbQL5q xNRNf8QIL7lrVtHFsaKeOWdaTyuGohoU2LxKXb/XsXnfQ0QgyNB9PvwlF6MCRvH4/8N9 5RFK/8yFyM/9aA/1mrKBO4ruKYJ1y1/XYICbqldr87DmJ14lB76SMtMYi1zBkitJVam9 Bl5A== X-Gm-Message-State: AOJu0Yx7oZDu8fOPapQsS7B/o2z3eRGru5+peRdPnSxBiBQkvEv8eM+I qFjvfXPc4bogtkn1sVoYg0iiRw== X-Google-Smtp-Source: AGHT+IHXCRJ5ZJEeDDrwJnt6AcXXLGoPeX/dvnSsoC0qb9tX2LLEt4DQy55A5U2kLu55LSGfolR+qA== X-Received: by 2002:a17:90a:f30e:b0:286:a2a3:1e4f with SMTP id ca14-20020a17090af30e00b00286a2a31e4fmr3120316pjb.64.1702405566516; Tue, 12 Dec 2023 10:26:06 -0800 (PST) Received: from localhost (75-172-121-199.tukw.qwest.net. [75.172.121.199]) by smtp.gmail.com with ESMTPSA id q30-20020a17090a17a100b0028ac663af16sm1585825pja.23.2023.12.12.10.26.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 10:26:05 -0800 (PST) From: Kevin Hilman To: =?utf-8?Q?Th=C3=A9o?= Lebrun , Roger Quadros , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Chen , Pawel Laszczak , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , "Vardhan, Vibhore" Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?utf-8?Q?Gr=C3=A9gory?= Clement , Thomas Petazzoni Subject: Re: [PATCH 3/6] usb: cdns3-ti: add suspend/resume procedures for J7200 In-Reply-To: References: <20231113-j7200-usb-suspend-v1-0-ad1ee714835c@bootlin.com> <20231113-j7200-usb-suspend-v1-3-ad1ee714835c@bootlin.com> <5080372b-1f48-4cbc-a6c4-8689c28983cb@kernel.org> <3e00b2ad-b58f-4b09-9230-683c58d3bb92@kernel.org> <7h34wxfmwn.fsf@baylibre.com> <7hil5odtwl.fsf@baylibre.com> Date: Tue, 12 Dec 2023 10:26:05 -0800 Message-ID: <7h7cljcm6a.fsf@baylibre.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Th=C3=A9o Lebrun writes: > Hello, > > On Sun Nov 26, 2023 at 11:36 PM CET, Kevin Hilman wrote: >> Th=C3=A9o Lebrun writes: >> > On Wed Nov 22, 2023 at 11:23 PM CET, Kevin Hilman wrote: >> >> Th=C3=A9o Lebrun writes: >> >> The point is to signal to the power domain the device is in that it c= an >> >> power on/off. These IP blocks are (re)used on many different SoCs, so >> >> the driver should not make any assumptions about what power domain it= is >> >> in (if any.) >> > >> > On my platform, when the device is attached to the PD it gets turned o= n. >> > That feels logical to me: if a driver is not RPM aware it "just works". >> >> It "just works"... until the domain gets turned off. >> >> > Are there platforms where RPM must get enabled for the attached >> > power-domains to be turned on? >> >> Yes, but but more importantly, there are platforms where RPM must get >> enabled for the power domain to *stay* on. For example, the power >> domain might get turned on due to devices probing etc, but as soon as >> all the RPM-enabled drivers drop their refcount, the domain will turn >> off. If there is a device in that domain with a non-RPM enabled driver, >> that device will be powered off anc cause a crash. > > OK, that makes sense, thanks for taking the time to explain. This topic > makes me see two things that I feel are close to being bugs. I'd be > curious to get your view on both. TL;DR; they are features, not bugs. ;) > - If a device does not use RPM but its children do, it might get its > associated power-domain turned off. That forces every single driver > that want to stay alive to enable & increment RPM. > > What I naively expect: a genpd with a device attached to it that is > not using RPM should mean that it should not be powered off at > runtime_suspend. Benefit: no RPM calls in drivers that do not use > it, and the behavior is that the genpd associated stays alive "as > expected". Your expectation makes sense, but unfortunately, that's not how RPM was designed. Also remember that we don't really want specific device drivers to know which PM domain they are in, or whether they are in a PM domain at all. The same IP block can be integrated in different ways across different SoCs, even within the same SoC family, and we want the device driver to just work.=20=20 For that to work well, any driver that might be in any PM domain should add RPM calls. > - If a device uses RPM & has a refcount strictly positive, its > associated power-domain gets turned off either way at suspend_noirq. > That feels non-intuitive as well. > > What I naively expect: check for RPM refcounts of attached devices > when doing suspend_noirq of power-domains. Benefit: control of what > power-domains do from attached devices is done through the RPM API. I agree that this is non-intuitive from an RPM PoV, but remember that RPM was added on top of existing system-wide suspend support. And from a system-wide suspend PoV, it might be non-intuitive that a driver thinks it should be active (non-zero refcount) when user just requested a system-wide suspend. Traditionally, when a user requests a system-wide suspend, they expect the whole system to shut down. On real SoCs in real products, power management is not so black and white, and I fully understand that, and personally, I'm definitely open to not forcing RPM-active devices off in suspend, but that would require changes to core code, and remove some assumptions of core code that would need to be validated/tested. Kevin 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 99020C4332F for ; Tue, 12 Dec 2023 18:26:41 +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:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HlkZjM4eW4DUdmBTn2FuxCLXKsfaMnqNWN0RVyH+Xhs=; b=khVB7d9abMoNHK UkVM83uQUXJqT/Kgf7k/Gte3G+7/Q+5q3WVxHxMZdWXYZEaVgd5weduj1xq+ZT4n1Ia2Uli0OO/cD 9S7CsKPEJiLuva+Kd5CJvh5JsOJlo0oBXf8uqOxZunRiM761xuqeIZKPNs7B145XAp5IGGMsBtGtH koscHTlABY6B8OnBWiA7dxdK1saeyZy+80B3PG+4ysqkuS4yS9J9i+5QGxwR3/avyIcL3GecgFie+ f2eg5UnoXrGvHTC80ti1+lzAcWFR2DVh0hoPTEqrYkRKRHWUSvl/DPMwrhqN0Xq8pNcdOPvJmhNH4 qBDhbQNN80LblG/6vNGQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rD7SO-00CUm4-11; Tue, 12 Dec 2023 18:26:12 +0000 Received: from mail-pj1-f54.google.com ([209.85.216.54]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rD7SL-00CUld-02 for linux-arm-kernel@lists.infradead.org; Tue, 12 Dec 2023 18:26:10 +0000 Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-28ac11407cfso406660a91.1 for ; Tue, 12 Dec 2023 10:26:07 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702405566; x=1703010366; h=content-transfer-encoding:mime-version:message-id:date:references :in-reply-to:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9lX++N5VCWclr3d1h9X3xvVDF9stHF9vZ8hPgWWAfgI=; b=tExUt0yVbsNxuK40mXUQE/Ny/ZooEC69DOVax8VsEjbDYvNB+iIAe/uthQCRV9MxDA I4riyeuzojenM71g9hwrP/bqgja9CUrIcFhDZ+AugC/a9cNjIrZnLe0y5Ox0798SlBp8 ir7Sy2bT/7zjU36H9Gtgx8OuHEcumBGZ/GRXuXXccZbE6/zIiiHmmy1Xr9ig6+KpS2C1 DPgNnynW57DytlNtXY8oFnZQy5p7U7cRmbSUWnTO/aCP1XcHMkUhVoOazEiUI5Lnky6A vBvZmq/fklBgYyCYYMmMXGvh1U4rbbR1frvBBK03DotwQH3Aszu25b9ntchFgm8Um/Le 0ptA== X-Gm-Message-State: AOJu0YzXWbg/e6XGkCKvREntDZL5ASLmchQAkGiN9DBKsHn8dtGDMjJn YJy5krosxE410ARR2JoCOLNCoQ== X-Google-Smtp-Source: AGHT+IHXCRJ5ZJEeDDrwJnt6AcXXLGoPeX/dvnSsoC0qb9tX2LLEt4DQy55A5U2kLu55LSGfolR+qA== X-Received: by 2002:a17:90a:f30e:b0:286:a2a3:1e4f with SMTP id ca14-20020a17090af30e00b00286a2a31e4fmr3120316pjb.64.1702405566516; Tue, 12 Dec 2023 10:26:06 -0800 (PST) Received: from localhost (75-172-121-199.tukw.qwest.net. [75.172.121.199]) by smtp.gmail.com with ESMTPSA id q30-20020a17090a17a100b0028ac663af16sm1585825pja.23.2023.12.12.10.26.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 10:26:05 -0800 (PST) From: Kevin Hilman To: =?utf-8?Q?Th=C3=A9o?= Lebrun , Roger Quadros , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Chen , Pawel Laszczak , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , "Vardhan, Vibhore" Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?utf-8?Q?Gr=C3=A9gory?= Clement , Thomas Petazzoni Subject: Re: [PATCH 3/6] usb: cdns3-ti: add suspend/resume procedures for J7200 In-Reply-To: References: <20231113-j7200-usb-suspend-v1-0-ad1ee714835c@bootlin.com> <20231113-j7200-usb-suspend-v1-3-ad1ee714835c@bootlin.com> <5080372b-1f48-4cbc-a6c4-8689c28983cb@kernel.org> <3e00b2ad-b58f-4b09-9230-683c58d3bb92@kernel.org> <7h34wxfmwn.fsf@baylibre.com> <7hil5odtwl.fsf@baylibre.com> Date: Tue, 12 Dec 2023 10:26:05 -0800 Message-ID: <7h7cljcm6a.fsf@baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231212_102609_071945_682E3C5A X-CRM114-Status: GOOD ( 30.42 ) 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 VGjDqW8gTGVicnVuIDx0aGVvLmxlYnJ1bkBib290bGluLmNvbT4gd3JpdGVzOgoKPiBIZWxsbywK Pgo+IE9uIFN1biBOb3YgMjYsIDIwMjMgYXQgMTE6MzYgUE0gQ0VULCBLZXZpbiBIaWxtYW4gd3Jv dGU6Cj4+IFRow6lvIExlYnJ1biA8dGhlby5sZWJydW5AYm9vdGxpbi5jb20+IHdyaXRlczoKPj4g PiBPbiBXZWQgTm92IDIyLCAyMDIzIGF0IDExOjIzIFBNIENFVCwgS2V2aW4gSGlsbWFuIHdyb3Rl Ogo+PiA+PiBUaMOpbyBMZWJydW4gPHRoZW8ubGVicnVuQGJvb3RsaW4uY29tPiB3cml0ZXM6Cj4+ ID4+IFRoZSBwb2ludCBpcyB0byBzaWduYWwgdG8gdGhlIHBvd2VyIGRvbWFpbiB0aGUgZGV2aWNl IGlzIGluIHRoYXQgaXQgY2FuCj4+ID4+IHBvd2VyIG9uL29mZi4gIFRoZXNlIElQIGJsb2NrcyBh cmUgKHJlKXVzZWQgb24gbWFueSBkaWZmZXJlbnQgU29Dcywgc28KPj4gPj4gdGhlIGRyaXZlciBz aG91bGQgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHdoYXQgcG93ZXIgZG9tYWluIGl0 IGlzCj4+ID4+IGluIChpZiBhbnkuKQo+PiA+Cj4+ID4gT24gbXkgcGxhdGZvcm0sIHdoZW4gdGhl IGRldmljZSBpcyBhdHRhY2hlZCB0byB0aGUgUEQgaXQgZ2V0cyB0dXJuZWQgb24uCj4+ID4gVGhh dCBmZWVscyBsb2dpY2FsIHRvIG1lOiBpZiBhIGRyaXZlciBpcyBub3QgUlBNIGF3YXJlIGl0ICJq dXN0IHdvcmtzIi4KPj4KPj4gSXQgImp1c3Qgd29ya3MiLi4uIHVudGlsIHRoZSBkb21haW4gZ2V0 cyB0dXJuZWQgb2ZmLgo+Pgo+PiA+IEFyZSB0aGVyZSBwbGF0Zm9ybXMgd2hlcmUgUlBNIG11c3Qg Z2V0IGVuYWJsZWQgZm9yIHRoZSBhdHRhY2hlZAo+PiA+IHBvd2VyLWRvbWFpbnMgdG8gYmUgdHVy bmVkIG9uPwo+Pgo+PiBZZXMsIGJ1dCBidXQgbW9yZSBpbXBvcnRhbnRseSwgdGhlcmUgYXJlIHBs YXRmb3JtcyB3aGVyZSBSUE0gbXVzdCBnZXQKPj4gZW5hYmxlZCBmb3IgdGhlIHBvd2VyIGRvbWFp biB0byAqc3RheSogb24uICBGb3IgZXhhbXBsZSwgdGhlIHBvd2VyCj4+IGRvbWFpbiBtaWdodCBn ZXQgdHVybmVkIG9uIGR1ZSB0byBkZXZpY2VzIHByb2JpbmcgZXRjLCBidXQgYXMgc29vbiBhcwo+ PiBhbGwgdGhlIFJQTS1lbmFibGVkIGRyaXZlcnMgZHJvcCB0aGVpciByZWZjb3VudCwgdGhlIGRv bWFpbiB3aWxsIHR1cm4KPj4gb2ZmLiAgSWYgdGhlcmUgaXMgYSBkZXZpY2UgaW4gdGhhdCBkb21h aW4gd2l0aCBhIG5vbi1SUE0gZW5hYmxlZCBkcml2ZXIsCj4+IHRoYXQgZGV2aWNlIHdpbGwgYmUg cG93ZXJlZCBvZmYgYW5jIGNhdXNlIGEgY3Jhc2guCj4KPiBPSywgdGhhdCBtYWtlcyBzZW5zZSwg dGhhbmtzIGZvciB0YWtpbmcgdGhlIHRpbWUgdG8gZXhwbGFpbi4gVGhpcyB0b3BpYwo+IG1ha2Vz IG1lIHNlZSB0d28gdGhpbmdzIHRoYXQgSSBmZWVsIGFyZSBjbG9zZSB0byBiZWluZyBidWdzLiBJ J2QgYmUKPiBjdXJpb3VzIHRvIGdldCB5b3VyIHZpZXcgb24gYm90aC4KClRMO0RSOyB0aGV5IGFy ZSBmZWF0dXJlcywgbm90IGJ1Z3MuICA7KQoKPiAgLSBJZiBhIGRldmljZSBkb2VzIG5vdCB1c2Ug UlBNIGJ1dCBpdHMgY2hpbGRyZW4gZG8sIGl0IG1pZ2h0IGdldCBpdHMKPiAgICBhc3NvY2lhdGVk IHBvd2VyLWRvbWFpbiB0dXJuZWQgb2ZmLiBUaGF0IGZvcmNlcyBldmVyeSBzaW5nbGUgZHJpdmVy Cj4gICAgdGhhdCB3YW50IHRvIHN0YXkgYWxpdmUgdG8gZW5hYmxlICYgaW5jcmVtZW50IFJQTS4K Pgo+ICAgIFdoYXQgSSBuYWl2ZWx5IGV4cGVjdDogYSBnZW5wZCB3aXRoIGEgZGV2aWNlIGF0dGFj aGVkIHRvIGl0IHRoYXQgaXMKPiAgICBub3QgdXNpbmcgUlBNIHNob3VsZCBtZWFuIHRoYXQgaXQg c2hvdWxkIG5vdCBiZSBwb3dlcmVkIG9mZiBhdAo+ICAgIHJ1bnRpbWVfc3VzcGVuZC4gQmVuZWZp dDogbm8gUlBNIGNhbGxzIGluIGRyaXZlcnMgdGhhdCBkbyBub3QgdXNlCj4gICAgaXQsIGFuZCB0 aGUgYmVoYXZpb3IgaXMgdGhhdCB0aGUgZ2VucGQgYXNzb2NpYXRlZCBzdGF5cyBhbGl2ZSAiYXMK PiAgICBleHBlY3RlZCIuCgpZb3VyIGV4cGVjdGF0aW9uIG1ha2VzIHNlbnNlLCBidXQgdW5mb3J0 dW5hdGVseSwgdGhhdCdzIG5vdCBob3cgUlBNIHdhcwpkZXNpZ25lZC4KCkFsc28gcmVtZW1iZXIg dGhhdCB3ZSBkb24ndCByZWFsbHkgd2FudCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycyB0byBrbm93 CndoaWNoIFBNIGRvbWFpbiB0aGV5IGFyZSBpbiwgb3Igd2hldGhlciB0aGV5IGFyZSBpbiBhIFBN IGRvbWFpbiBhdAphbGwuIFRoZSBzYW1lIElQIGJsb2NrIGNhbiBiZSBpbnRlZ3JhdGVkIGluIGRp ZmZlcmVudCB3YXlzIGFjcm9zcwpkaWZmZXJlbnQgU29DcywgZXZlbiB3aXRoaW4gdGhlIHNhbWUg U29DIGZhbWlseSwgYW5kIHdlIHdhbnQgdGhlIGRldmljZQpkcml2ZXIgdG8ganVzdCB3b3JrLiAg CgpGb3IgdGhhdCB0byB3b3JrIHdlbGwsIGFueSBkcml2ZXIgdGhhdCBtaWdodCBiZSBpbiBhbnkg UE0gZG9tYWluIHNob3VsZAphZGQgUlBNIGNhbGxzLgoKPiAgLSBJZiBhIGRldmljZSB1c2VzIFJQ TSAmIGhhcyBhIHJlZmNvdW50IHN0cmljdGx5IHBvc2l0aXZlLCBpdHMKPiAgICBhc3NvY2lhdGVk IHBvd2VyLWRvbWFpbiBnZXRzIHR1cm5lZCBvZmYgZWl0aGVyIHdheSBhdCBzdXNwZW5kX25vaXJx Lgo+ICAgIFRoYXQgZmVlbHMgbm9uLWludHVpdGl2ZSBhcyB3ZWxsLgo+Cj4gICAgV2hhdCBJIG5h aXZlbHkgZXhwZWN0OiBjaGVjayBmb3IgUlBNIHJlZmNvdW50cyBvZiBhdHRhY2hlZCBkZXZpY2Vz Cj4gICAgd2hlbiBkb2luZyBzdXNwZW5kX25vaXJxIG9mIHBvd2VyLWRvbWFpbnMuIEJlbmVmaXQ6 IGNvbnRyb2wgb2Ygd2hhdAo+ICAgIHBvd2VyLWRvbWFpbnMgZG8gZnJvbSBhdHRhY2hlZCBkZXZp Y2VzIGlzIGRvbmUgdGhyb3VnaCB0aGUgUlBNIEFQSS4KCkkgYWdyZWUgdGhhdCB0aGlzIGlzIG5v bi1pbnR1aXRpdmUgZnJvbSBhbiBSUE0gUG9WLCBidXQgcmVtZW1iZXIgdGhhdApSUE0gd2FzIGFk ZGVkIG9uIHRvcCBvZiBleGlzdGluZyBzeXN0ZW0td2lkZSBzdXNwZW5kIHN1cHBvcnQuICBBbmQg ZnJvbQphIHN5c3RlbS13aWRlIHN1c3BlbmQgUG9WLCBpdCBtaWdodCBiZSBub24taW50dWl0aXZl IHRoYXQgYSBkcml2ZXIKdGhpbmtzIGl0IHNob3VsZCBiZSBhY3RpdmUgKG5vbi16ZXJvIHJlZmNv dW50KSB3aGVuIHVzZXIganVzdCByZXF1ZXN0ZWQKYSBzeXN0ZW0td2lkZSBzdXNwZW5kLiAgVHJh ZGl0aW9uYWxseSwgd2hlbiBhIHVzZXIgcmVxdWVzdHMgYQpzeXN0ZW0td2lkZSBzdXNwZW5kLCB0 aGV5IGV4cGVjdCB0aGUgd2hvbGUgc3lzdGVtIHRvIHNodXQgZG93bi4KCk9uIHJlYWwgU29DcyBp biByZWFsIHByb2R1Y3RzLCBwb3dlciBtYW5hZ2VtZW50IGlzIG5vdCBzbyBibGFjayBhbmQKd2hp dGUsIGFuZCBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhhdCwgYW5kIHBlcnNvbmFsbHksIEknbSBkZWZp bml0ZWx5IG9wZW4KdG8gbm90IGZvcmNpbmcgUlBNLWFjdGl2ZSBkZXZpY2VzIG9mZiBpbiBzdXNw ZW5kLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlCmNoYW5nZXMgdG8gY29yZSBjb2RlLCBhbmQgcmVt b3ZlIHNvbWUgYXNzdW1wdGlvbnMgb2YgY29yZSBjb2RlIHRoYXQKd291bGQgbmVlZCB0byBiZSB2 YWxpZGF0ZWQvdGVzdGVkLgoKS2V2aW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK