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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 369EDC433F5 for ; Tue, 5 Oct 2021 22:44:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 190C161211 for ; Tue, 5 Oct 2021 22:44:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231658AbhJEWqh (ORCPT ); Tue, 5 Oct 2021 18:46:37 -0400 Received: from foss.arm.com ([217.140.110.172]:36998 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230113AbhJEWqg (ORCPT ); Tue, 5 Oct 2021 18:46:36 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 601336D; Tue, 5 Oct 2021 15:44:45 -0700 (PDT) Received: from [192.168.122.166] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7633C3F66F; Tue, 5 Oct 2021 15:44:44 -0700 (PDT) Subject: Re: [PATCH v3 3/4] PCI/ACPI: Add Broadcom bcm2711 MCFG quirk To: =?UTF-8?Q?Pali_Roh=c3=a1r?= , bhelgaas@google.com Cc: linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, nsaenz@kernel.org, rjw@rjwysocki.net, lenb@kernel.org, robh@kernel.org, kw@linux.com, f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20210826071557.29239-1-jeremy.linton@arm.com> <20210826071557.29239-4-jeremy.linton@arm.com> <20211005200227.ltl6owwksfn7l4xx@pali> From: Jeremy Linton Message-ID: <8cdc1b1a-7ea0-da3e-e6f1-2ae3f4c057db@arm.com> Date: Tue, 5 Oct 2021 17:44:35 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20211005200227.ltl6owwksfn7l4xx@pali> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hi, On 10/5/21 3:02 PM, Pali Rohár wrote: > On Thursday 26 August 2021 02:15:56 Jeremy Linton wrote: >> Now that there is a bcm2711 quirk, it needs to be enabled when the >> MCFG is missing. Use an ACPI namespace _DSD property >> "linux-ecam-quirk-id" as an alternative to the MCFG OEM. >> >> Signed-off-by: Jeremy Linton >> Acked-by: Florian Fainelli >> Acked-by: Bjorn Helgaas >> --- >> drivers/acpi/pci_mcfg.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/drivers/acpi/pci_mcfg.c b/drivers/acpi/pci_mcfg.c >> index 53cab975f612..04c517418365 100644 >> --- a/drivers/acpi/pci_mcfg.c >> +++ b/drivers/acpi/pci_mcfg.c >> @@ -169,6 +169,9 @@ static struct mcfg_fixup mcfg_quirks[] = { >> ALTRA_ECAM_QUIRK(1, 13), >> ALTRA_ECAM_QUIRK(1, 14), >> ALTRA_ECAM_QUIRK(1, 15), >> + >> + { "bc2711", "", 0, 0, MCFG_BUS_ANY, &bcm2711_pcie_ops, >> + DEFINE_RES_MEM(0xFD500000, 0xA000) }, > > Hello! > > According to discussion described in email [1], adding a new MCFG quirk > (like above) into kernel requires adding some errata entry for > documenting buggy HW. > > But this patch series does not introduce any new errata entry. Nor did the quirk following that email, which was merged. Presumably because I'm not sure anyone can predict the future, and some of the points in that posting were made simply to fill gaps in the arguments around why the SMC is/was a better plan. The final point about requiring a MCFG is also flies in the face of the fact that there is an Arm/Pci Standardized way to deal with these problems which is supported by other OS's running on these platforms and it requires that MFCG is missing. The idea that MCFG will magically appear for only Linux and contain relevant info (like the non even power of two cfg region on this SoC) is a bit wishful. I'm certainly in no place to claim future PCIe compliance for Broadcom's SoC's, nor its lifecycle. I'm betting few people submitting Linux patches are, particularly for mostly community supported projects like the RPi4/CM4/ACPI port. I'm more than happy to hack/tweak future problems with this code, and possibly even extend it if needed. Thats about the extent of what I can do. Thanks, > > Bjorn, could you look at how to properly document these "hw bugs"? > I guess there would be lot of more requests for adding MCFG quirks as > now according to [1], doors are open for them. And it is possible that > after more years nobody would be able to maintain these quirks if would > not be properly documented. > > [1] - https://lore.kernel.org/linux-pci/20210325131231.GA18590@e121166-lin.cambridge.arm.com/ > >> }; >> >> static char mcfg_oem_id[ACPI_OEM_ID_SIZE]; >> @@ -198,8 +201,22 @@ static void pci_mcfg_apply_quirks(struct acpi_pci_root *root, >> u16 segment = root->segment; >> struct resource *bus_range = &root->secondary; >> struct mcfg_fixup *f; >> + const char *soc; >> int i; >> >> + /* >> + * This may be a machine with a PCI/SMC conduit, which means it doesn't >> + * have an MCFG. Use an ACPI namespace definition instead. >> + */ >> + if (!fwnode_property_read_string(acpi_fwnode_handle(root->device), >> + "linux-ecam-quirk-id", &soc)) { >> + if (strlen(soc) != ACPI_OEM_ID_SIZE) >> + dev_err(&root->device->dev, "ECAM quirk should be %d characters\n", >> + ACPI_OEM_ID_SIZE); >> + else >> + memcpy(mcfg_oem_id, soc, ACPI_OEM_ID_SIZE); >> + } >> + >> for (i = 0, f = mcfg_quirks; i < ARRAY_SIZE(mcfg_quirks); i++, f++) { >> if (pci_mcfg_quirk_matches(f, segment, bus_range)) { >> if (f->cfgres.start) >> -- >> 2.31.1 >> 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AB2CBC433EF for ; Tue, 5 Oct 2021 22:46:56 +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 7D60E61074 for ; Tue, 5 Oct 2021 22:46:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 7D60E61074 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=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=FSfciDtypSyFqZorREnwRirBnfE86X372293WhwUgaE=; b=lUwC7BaTkQxPbP1eeRlPbOAMkU Dlv0MB8SpfFNVf1uc0Qh6AHDwbHGuU5yIbTnMRiqI2faMdkmKr8StX/8g2YY9COlz+Lrx982H5KdQ EzNUC3XW5J4NZ1CysLUcuyb2S7bqETeDY5PQQ9NNTUrPDrpZe3NLrepe55iTG5/YSE20iPrlWObrZ dTUbjaOu8KSjtIy5izuadkIBDFfI0palep/ytkv53hUqMmDrO0TdlJKPsfGLkmmZI3Uequ8tkv6nk UZhw7qfi2lzP/1GyibAq6ubhkusysujAdmeik6syikadO/ONIZGUeeIZ75mghyM9IRuD3j6tVdXxG xVsD0pbg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXtB6-00C7VJ-Ir; Tue, 05 Oct 2021 22:44:52 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXtB2-00C7Tt-60; Tue, 05 Oct 2021 22:44:50 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 601336D; Tue, 5 Oct 2021 15:44:45 -0700 (PDT) Received: from [192.168.122.166] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7633C3F66F; Tue, 5 Oct 2021 15:44:44 -0700 (PDT) Subject: Re: [PATCH v3 3/4] PCI/ACPI: Add Broadcom bcm2711 MCFG quirk To: =?UTF-8?Q?Pali_Roh=c3=a1r?= , bhelgaas@google.com Cc: linux-pci@vger.kernel.org, lorenzo.pieralisi@arm.com, nsaenz@kernel.org, rjw@rjwysocki.net, lenb@kernel.org, robh@kernel.org, kw@linux.com, f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rpi-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20210826071557.29239-1-jeremy.linton@arm.com> <20210826071557.29239-4-jeremy.linton@arm.com> <20211005200227.ltl6owwksfn7l4xx@pali> From: Jeremy Linton Message-ID: <8cdc1b1a-7ea0-da3e-e6f1-2ae3f4c057db@arm.com> Date: Tue, 5 Oct 2021 17:44:35 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20211005200227.ltl6owwksfn7l4xx@pali> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211005_154448_351573_60824A5B X-CRM114-Status: GOOD ( 27.99 ) 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 SGksCgpPbiAxMC81LzIxIDM6MDIgUE0sIFBhbGkgUm9ow6FyIHdyb3RlOgo+IE9uIFRodXJzZGF5 IDI2IEF1Z3VzdCAyMDIxIDAyOjE1OjU2IEplcmVteSBMaW50b24gd3JvdGU6Cj4+IE5vdyB0aGF0 IHRoZXJlIGlzIGEgYmNtMjcxMSBxdWlyaywgaXQgbmVlZHMgdG8gYmUgZW5hYmxlZCB3aGVuIHRo ZQo+PiBNQ0ZHIGlzIG1pc3NpbmcuIFVzZSBhbiBBQ1BJIG5hbWVzcGFjZSBfRFNEIHByb3BlcnR5 Cj4+ICJsaW51eC1lY2FtLXF1aXJrLWlkIiBhcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgTUNGRyBP RU0uCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEplcmVteSBMaW50b24gPGplcmVteS5saW50b25AYXJt LmNvbT4KPj4gQWNrZWQtYnk6IEZsb3JpYW4gRmFpbmVsbGkgPGYuZmFpbmVsbGlAZ21haWwuY29t Pgo+PiBBY2tlZC1ieTogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4KPj4gLS0t Cj4+ICAgZHJpdmVycy9hY3BpL3BjaV9tY2ZnLmMgfCAxNyArKysrKysrKysrKysrKysrKwo+PiAg IDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2FjcGkvcGNpX21jZmcuYyBiL2RyaXZlcnMvYWNwaS9wY2lfbWNmZy5jCj4+IGluZGV4IDUz Y2FiOTc1ZjYxMi4uMDRjNTE3NDE4MzY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2FjcGkvcGNp X21jZmcuYwo+PiArKysgYi9kcml2ZXJzL2FjcGkvcGNpX21jZmcuYwo+PiBAQCAtMTY5LDYgKzE2 OSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbWNmZ19maXh1cCBtY2ZnX3F1aXJrc1tdID0gewo+PiAgIAlB TFRSQV9FQ0FNX1FVSVJLKDEsIDEzKSwKPj4gICAJQUxUUkFfRUNBTV9RVUlSSygxLCAxNCksCj4+ ICAgCUFMVFJBX0VDQU1fUVVJUksoMSwgMTUpLAo+PiArCj4+ICsJeyAiYmMyNzExIiwgIiIsIDAs IDAsIE1DRkdfQlVTX0FOWSwgJmJjbTI3MTFfcGNpZV9vcHMsCj4+ICsJICBERUZJTkVfUkVTX01F TSgweEZENTAwMDAwLCAweEEwMDApIH0sCj4gCj4gSGVsbG8hCj4gCj4gQWNjb3JkaW5nIHRvIGRp c2N1c3Npb24gZGVzY3JpYmVkIGluIGVtYWlsIFsxXSwgYWRkaW5nIGEgbmV3IE1DRkcgcXVpcmsK PiAobGlrZSBhYm92ZSkgaW50byBrZXJuZWwgcmVxdWlyZXMgYWRkaW5nIHNvbWUgZXJyYXRhIGVu dHJ5IGZvcgo+IGRvY3VtZW50aW5nIGJ1Z2d5IEhXLgo+IAo+IEJ1dCB0aGlzIHBhdGNoIHNlcmll cyBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBlcnJhdGEgZW50cnkuCgpOb3IgZGlkIHRoZSBx dWlyayBmb2xsb3dpbmcgdGhhdCBlbWFpbCwgd2hpY2ggd2FzIG1lcmdlZC4gUHJlc3VtYWJseSAK YmVjYXVzZSBJJ20gbm90IHN1cmUgYW55b25lIGNhbiBwcmVkaWN0IHRoZSBmdXR1cmUsIGFuZCBz b21lIG9mIHRoZSAKcG9pbnRzIGluIHRoYXQgcG9zdGluZyB3ZXJlIG1hZGUgc2ltcGx5IHRvIGZp bGwgZ2FwcyBpbiB0aGUgYXJndW1lbnRzIAphcm91bmQgd2h5IHRoZSBTTUMgaXMvd2FzIGEgYmV0 dGVyIHBsYW4uIFRoZSBmaW5hbCBwb2ludCBhYm91dCByZXF1aXJpbmcgCmEgTUNGRyBpcyBhbHNv IGZsaWVzIGluIHRoZSBmYWNlIG9mIHRoZSBmYWN0IHRoYXQgdGhlcmUgaXMgYW4gQXJtL1BjaSAK U3RhbmRhcmRpemVkIHdheSB0byBkZWFsIHdpdGggdGhlc2UgcHJvYmxlbXMgd2hpY2ggaXMgc3Vw cG9ydGVkIGJ5IG90aGVyIApPUydzIHJ1bm5pbmcgb24gdGhlc2UgcGxhdGZvcm1zIGFuZCBpdCBy ZXF1aXJlcyB0aGF0IE1GQ0cgaXMgbWlzc2luZy4gClRoZSBpZGVhIHRoYXQgTUNGRyB3aWxsIG1h Z2ljYWxseSBhcHBlYXIgZm9yIG9ubHkgTGludXggYW5kIGNvbnRhaW4gCnJlbGV2YW50IGluZm8g KGxpa2UgdGhlIG5vbiBldmVuIHBvd2VyIG9mIHR3byBjZmcgcmVnaW9uIG9uIHRoaXMgU29DKSBp cyAKYSBiaXQgd2lzaGZ1bC4KCkknbSBjZXJ0YWlubHkgaW4gbm8gcGxhY2UgdG8gY2xhaW0gZnV0 dXJlIFBDSWUgY29tcGxpYW5jZSBmb3IgQnJvYWRjb20ncyAKU29DJ3MsIG5vciBpdHMgbGlmZWN5 Y2xlLiBJJ20gYmV0dGluZyBmZXcgcGVvcGxlIHN1Ym1pdHRpbmcgTGludXggCnBhdGNoZXMgYXJl LCBwYXJ0aWN1bGFybHkgZm9yIG1vc3RseSBjb21tdW5pdHkgc3VwcG9ydGVkIHByb2plY3RzIGxp a2UgCnRoZSBSUGk0L0NNNC9BQ1BJIHBvcnQuIEknbSBtb3JlIHRoYW4gaGFwcHkgdG8gaGFjay90 d2VhayBmdXR1cmUgCnByb2JsZW1zIHdpdGggdGhpcyBjb2RlLCBhbmQgcG9zc2libHkgZXZlbiBl eHRlbmQgaXQgaWYgbmVlZGVkLiBUaGF0cyAKYWJvdXQgdGhlIGV4dGVudCBvZiB3aGF0IEkgY2Fu IGRvLgoKClRoYW5rcywKCgoKCj4gCj4gQmpvcm4sIGNvdWxkIHlvdSBsb29rIGF0IGhvdyB0byBw cm9wZXJseSBkb2N1bWVudCB0aGVzZSAiaHcgYnVncyI/Cj4gSSBndWVzcyB0aGVyZSB3b3VsZCBi ZSBsb3Qgb2YgbW9yZSByZXF1ZXN0cyBmb3IgYWRkaW5nIE1DRkcgcXVpcmtzIGFzCj4gbm93IGFj Y29yZGluZyB0byBbMV0sIGRvb3JzIGFyZSBvcGVuIGZvciB0aGVtLiBBbmQgaXQgaXMgcG9zc2li bGUgdGhhdAo+IGFmdGVyIG1vcmUgeWVhcnMgbm9ib2R5IHdvdWxkIGJlIGFibGUgdG8gbWFpbnRh aW4gdGhlc2UgcXVpcmtzIGlmIHdvdWxkCj4gbm90IGJlIHByb3Blcmx5IGRvY3VtZW50ZWQuCj4g Cj4gWzFdIC0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtcGNpLzIwMjEwMzI1MTMxMjMx LkdBMTg1OTBAZTEyMTE2Ni1saW4uY2FtYnJpZGdlLmFybS5jb20vCj4gCj4+ICAgfTsKPj4gICAK Pj4gICBzdGF0aWMgY2hhciBtY2ZnX29lbV9pZFtBQ1BJX09FTV9JRF9TSVpFXTsKPj4gQEAgLTE5 OCw4ICsyMDEsMjIgQEAgc3RhdGljIHZvaWQgcGNpX21jZmdfYXBwbHlfcXVpcmtzKHN0cnVjdCBh Y3BpX3BjaV9yb290ICpyb290LAo+PiAgIAl1MTYgc2VnbWVudCA9IHJvb3QtPnNlZ21lbnQ7Cj4+ ICAgCXN0cnVjdCByZXNvdXJjZSAqYnVzX3JhbmdlID0gJnJvb3QtPnNlY29uZGFyeTsKPj4gICAJ c3RydWN0IG1jZmdfZml4dXAgKmY7Cj4+ICsJY29uc3QgY2hhciAqc29jOwo+PiAgIAlpbnQgaTsK Pj4gICAKPj4gKwkvKgo+PiArCSAqIFRoaXMgbWF5IGJlIGEgbWFjaGluZSB3aXRoIGEgUENJL1NN QyBjb25kdWl0LCB3aGljaCBtZWFucyBpdCBkb2Vzbid0Cj4+ICsJICogaGF2ZSBhbiBNQ0ZHLiBV c2UgYW4gQUNQSSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbnN0ZWFkLgo+PiArCSAqLwo+PiArCWlm ICghZndub2RlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGFjcGlfZndub2RlX2hhbmRsZShyb290LT5k ZXZpY2UpLAo+PiArCQkJCQkgImxpbnV4LWVjYW0tcXVpcmstaWQiLCAmc29jKSkgewo+PiArCQlp ZiAoc3RybGVuKHNvYykgIT0gQUNQSV9PRU1fSURfU0laRSkKPj4gKwkJCWRldl9lcnIoJnJvb3Qt PmRldmljZS0+ZGV2LCAiRUNBTSBxdWlyayBzaG91bGQgYmUgJWQgY2hhcmFjdGVyc1xuIiwKPj4g KwkJCQlBQ1BJX09FTV9JRF9TSVpFKTsKPj4gKwkJZWxzZQo+PiArCQkJbWVtY3B5KG1jZmdfb2Vt X2lkLCBzb2MsIEFDUElfT0VNX0lEX1NJWkUpOwo+PiArCX0KPj4gKwo+PiAgIAlmb3IgKGkgPSAw LCBmID0gbWNmZ19xdWlya3M7IGkgPCBBUlJBWV9TSVpFKG1jZmdfcXVpcmtzKTsgaSsrLCBmKysp IHsKPj4gICAJCWlmIChwY2lfbWNmZ19xdWlya19tYXRjaGVzKGYsIHNlZ21lbnQsIGJ1c19yYW5n ZSkpIHsKPj4gICAJCQlpZiAoZi0+Y2ZncmVzLnN0YXJ0KQo+PiAtLSAKPj4gMi4zMS4xCj4+CgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=