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 D145BC433EF for ; Fri, 7 Jan 2022 23:12:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231378AbiAGXMB (ORCPT ); Fri, 7 Jan 2022 18:12:01 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:39880 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229973AbiAGXMA (ORCPT ); Fri, 7 Jan 2022 18:12:00 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id A35FFB82411; Fri, 7 Jan 2022 23:11:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03AF9C36AE5; Fri, 7 Jan 2022 23:11:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641597118; bh=ema667oKwKR5qrj2kGa4cpFiKCbKM2GV+Mdd0QA3F8o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=lPcK162hh6oTb9R2o0z6zB2XcOHegTHtXVh2lKRSkhL/7Bo1R+d7wydxouVmSxFfg ia0pMjYegQRxT7eGC3w/CUCP8OcFFjNe0rB9pk5ur2NQsv9MjRpBHDHnXL86+ow+XV ELw985alZUCZRqYgXWkceNZYVMCXj5w8yVrdqYRpKvfDRHG37sTrJ/YhioWenobPq9 //rPfGnMFVV07zQhIM/EpTKq3GyzSAK5k05N1vfT2hgJeWP4ZCtw0RUpijQmLK09zU 7x1dOU9HiE2p8fiyxFkUa4SntM5YSMl9Bt3QaecYq5XMnTn+GdW96SvFLR70R7LfJQ ZZ4vdDc6qCRfg== Received: by pali.im (Postfix) id 62114B22; Sat, 8 Jan 2022 00:11:55 +0100 (CET) Date: Sat, 8 Jan 2022 00:11:55 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: Bjorn Helgaas Cc: Thomas Petazzoni , Lorenzo Pieralisi , Rob Herring , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Bjorn Helgaas , Marek =?utf-8?B?QmVow7pu?= , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 05/15] PCI: mvebu: Disallow mapping interrupts on emulated bridges Message-ID: <20220107231155.juv4skvyqunuilgk@pali> References: <20220107221348.5s4ehqhxunmoacbm@pali> <20220107230155.GA425110@bhelgaas> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220107230155.GA425110@bhelgaas> User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday 07 January 2022 17:01:55 Bjorn Helgaas wrote: > On Fri, Jan 07, 2022 at 11:13:48PM +0100, Pali Rohár wrote: > > On Friday 07 January 2022 15:32:16 Bjorn Helgaas wrote: > > > On Thu, Nov 25, 2021 at 01:45:55PM +0100, Pali Rohár wrote: > > > > Interrupt support on mvebu emulated bridges is not implemented yet. > > > > > > Is this mvebu-specific, or is aardvar also affected? > > > > This is pci-mvebu.c driver specific, it does not implement emulation of > > neither INTx, nor MSI interrupts for emulated pci bridge (root port). As > > we know this HW does not have compliant pci root port, it needs to be > > emulated in driver, and emulation for interrupts is missing. (it means > > that also AER interrupt is missing). > > > > And pci-aardvark.c driver has same issue and similar patch is required > > for pci-aardvark.c too. Marek should take care of it. But for > > pci-aardvark we already have implementation which emulates INTx > > interrupts and it is waiting for review on the list: > > https://lore.kernel.org/linux-pci/20211208061851.31867-1-kabel@kernel.org/ > > > > > > So properly indicate return value to callers that they cannot request > > > > interrupts from emulated bridge. > > > > > > Pet peeve: descriptions that say "do this *properly*". As though the > > > previous authors were just ignorant or intentionally did something > > > *improperly* :) > > > > > > > Signed-off-by: Pali Rohár > > > > Cc: stable@vger.kernel.org > > > > --- > > > > drivers/pci/controller/pci-mvebu.c | 10 ++++++++++ > > > > 1 file changed, 10 insertions(+) > > > > > > > > diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c > > > > index 19c6ee298442..a3df352d440e 100644 > > > > --- a/drivers/pci/controller/pci-mvebu.c > > > > +++ b/drivers/pci/controller/pci-mvebu.c > > > > @@ -705,6 +705,15 @@ static struct pci_ops mvebu_pcie_ops = { > > > > .write = mvebu_pcie_wr_conf, > > > > }; > > > > > > > > +static int mvebu_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) > > > > +{ > > > > + /* Interrupt support on mvebu emulated bridges is not implemented yet */ > > > > + if (dev->bus->number == 0) > > > > + return 0; /* Proper return code 0 == NO_IRQ */ > > > > + > > > > + return of_irq_parse_and_map_pci(dev, slot, pin); > > > > > > Is this something that could be done with a .read_base() op, e.g., > > > make PCI_INTERRUPT_PIN contain zero (PCI_INTERRUPT_UNKNOWN)? > > > > I'm not sure... maybe. I choose this style as after I implement > > emulation of INTx interrupts it allows me just to replace "return 0;" by > > "return my_mapping_function_for_root_port(...);". > > OK, so even after you implement INTx for the emulated Root Ports, the > default of_irq_parse_and_map_pci() is insufficient, and you will > require an mvebu .map_irq() function. That's reasonable. > > "PCI_INTERRUPT_PIN == 0" is the way software learns that a device > doesn't use INTx, of course, and I suppose PCI_INTERRUPT_PIN already > reads as zero, since mvebu_pci_bridge_emul_init() doesn't set > bridge->conf.intpin, and I assume the default value would be zero? > > Bjorn Yes, looks like that zeros are in emulated config space for fields not explicitly initialized. Which is the pci-mvebu.c case. But now I'm looking at pci-aardvark.c driver and it sets PCI_INTERRUPT_PIN register to A: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/controller/pci-aardvark.c?h=v5.16-rc8#n953 And that comment "/* Support interrupt A for MSI feature */" must be total nonsense as INTA for sure is not required for MSI... Plus we know that pci-aardvark.c driver does not implement for pci bridge neither INTx nor MSI... Ach... seems that this code is here since beginning and needs to be fixed... 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 209B6C433F5 for ; Fri, 7 Jan 2022 23:13:25 +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:MIME-Version:References: 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=alYFw+YylrLXuHzRqplOoKTrnumvUvWVqYnpGlLoRCk=; b=l6MuvshHTRIrKI b7r7Fftlj64+uOZ6H2BArMriT9TYODRn0DoBpP7l/X9s8vAiWIefO1Aj8yhtT0k1ZBgHdeS1rO6Hw 3E4mh0+eZZiPKNd/WarKtiwsy4AzHOgnEEGs0GGNlLqwPZfNH4l3+wlo+unqsxHZLC19DB9jFIgAR 1BZ0aumUFg0TC5tqO1ur6BLU1/3KbmWdTTB7VuXnCz5vd8EMG030lrxjzzIJi2WZsaHKSyKyzxDNs meGtDMB++e8VWBLZSLVUHzo6wXBqeq4iM2iz1iMEWVK4aCTNXcsJ88lZTrPGOuGnJwRhffw5IOW0s fj448jqlbr2oE22UUx2g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n5yOy-005SmB-KN; Fri, 07 Jan 2022 23:12:04 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n5yOu-005SlZ-UB for linux-arm-kernel@lists.infradead.org; Fri, 07 Jan 2022 23:12:02 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id A0A62B80B50; Fri, 7 Jan 2022 23:11:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03AF9C36AE5; Fri, 7 Jan 2022 23:11:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641597118; bh=ema667oKwKR5qrj2kGa4cpFiKCbKM2GV+Mdd0QA3F8o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=lPcK162hh6oTb9R2o0z6zB2XcOHegTHtXVh2lKRSkhL/7Bo1R+d7wydxouVmSxFfg ia0pMjYegQRxT7eGC3w/CUCP8OcFFjNe0rB9pk5ur2NQsv9MjRpBHDHnXL86+ow+XV ELw985alZUCZRqYgXWkceNZYVMCXj5w8yVrdqYRpKvfDRHG37sTrJ/YhioWenobPq9 //rPfGnMFVV07zQhIM/EpTKq3GyzSAK5k05N1vfT2hgJeWP4ZCtw0RUpijQmLK09zU 7x1dOU9HiE2p8fiyxFkUa4SntM5YSMl9Bt3QaecYq5XMnTn+GdW96SvFLR70R7LfJQ ZZ4vdDc6qCRfg== Received: by pali.im (Postfix) id 62114B22; Sat, 8 Jan 2022 00:11:55 +0100 (CET) Date: Sat, 8 Jan 2022 00:11:55 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: Bjorn Helgaas Cc: Thomas Petazzoni , Lorenzo Pieralisi , Rob Herring , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Bjorn Helgaas , Marek =?utf-8?B?QmVow7pu?= , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 05/15] PCI: mvebu: Disallow mapping interrupts on emulated bridges Message-ID: <20220107231155.juv4skvyqunuilgk@pali> References: <20220107221348.5s4ehqhxunmoacbm@pali> <20220107230155.GA425110@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220107230155.GA425110@bhelgaas> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220107_151201_280560_AEADE15A X-CRM114-Status: GOOD ( 39.00 ) 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 T24gRnJpZGF5IDA3IEphbnVhcnkgMjAyMiAxNzowMTo1NSBCam9ybiBIZWxnYWFzIHdyb3RlOgo+ IE9uIEZyaSwgSmFuIDA3LCAyMDIyIGF0IDExOjEzOjQ4UE0gKzAxMDAsIFBhbGkgUm9ow6FyIHdy b3RlOgo+ID4gT24gRnJpZGF5IDA3IEphbnVhcnkgMjAyMiAxNTozMjoxNiBCam9ybiBIZWxnYWFz IHdyb3RlOgo+ID4gPiBPbiBUaHUsIE5vdiAyNSwgMjAyMSBhdCAwMTo0NTo1NVBNICswMTAwLCBQ YWxpIFJvaMOhciB3cm90ZToKPiA+ID4gPiBJbnRlcnJ1cHQgc3VwcG9ydCBvbiBtdmVidSBlbXVs YXRlZCBicmlkZ2VzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCj4gPiA+IAo+ID4gPiBJcyB0aGlz IG12ZWJ1LXNwZWNpZmljLCBvciBpcyBhYXJkdmFyIGFsc28gYWZmZWN0ZWQ/Cj4gPiAKPiA+IFRo aXMgaXMgcGNpLW12ZWJ1LmMgZHJpdmVyIHNwZWNpZmljLCBpdCBkb2VzIG5vdCBpbXBsZW1lbnQg ZW11bGF0aW9uIG9mCj4gPiBuZWl0aGVyIElOVHgsIG5vciBNU0kgaW50ZXJydXB0cyBmb3IgZW11 bGF0ZWQgcGNpIGJyaWRnZSAocm9vdCBwb3J0KS4gQXMKPiA+IHdlIGtub3cgdGhpcyBIVyBkb2Vz IG5vdCBoYXZlIGNvbXBsaWFudCBwY2kgcm9vdCBwb3J0LCBpdCBuZWVkcyB0byBiZQo+ID4gZW11 bGF0ZWQgaW4gZHJpdmVyLCBhbmQgZW11bGF0aW9uIGZvciBpbnRlcnJ1cHRzIGlzIG1pc3Npbmcu IChpdCBtZWFucwo+ID4gdGhhdCBhbHNvIEFFUiBpbnRlcnJ1cHQgaXMgbWlzc2luZykuCj4gPiAK PiA+IEFuZCBwY2ktYWFyZHZhcmsuYyBkcml2ZXIgaGFzIHNhbWUgaXNzdWUgYW5kIHNpbWlsYXIg cGF0Y2ggaXMgcmVxdWlyZWQKPiA+IGZvciBwY2ktYWFyZHZhcmsuYyB0b28uIE1hcmVrIHNob3Vs ZCB0YWtlIGNhcmUgb2YgaXQuIEJ1dCBmb3IKPiA+IHBjaS1hYXJkdmFyayB3ZSBhbHJlYWR5IGhh dmUgaW1wbGVtZW50YXRpb24gd2hpY2ggZW11bGF0ZXMgSU5UeAo+ID4gaW50ZXJydXB0cyBhbmQg aXQgaXMgd2FpdGluZyBmb3IgcmV2aWV3IG9uIHRoZSBsaXN0Ogo+ID4gaHR0cHM6Ly9sb3JlLmtl cm5lbC5vcmcvbGludXgtcGNpLzIwMjExMjA4MDYxODUxLjMxODY3LTEta2FiZWxAa2VybmVsLm9y Zy8KPiA+IAo+ID4gPiA+IFNvIHByb3Blcmx5IGluZGljYXRlIHJldHVybiB2YWx1ZSB0byBjYWxs ZXJzIHRoYXQgdGhleSBjYW5ub3QgcmVxdWVzdAo+ID4gPiA+IGludGVycnVwdHMgZnJvbSBlbXVs YXRlZCBicmlkZ2UuCj4gPiA+IAo+ID4gPiBQZXQgcGVldmU6IGRlc2NyaXB0aW9ucyB0aGF0IHNh eSAiZG8gdGhpcyAqcHJvcGVybHkqIi4gIEFzIHRob3VnaCB0aGUKPiA+ID4gcHJldmlvdXMgYXV0 aG9ycyB3ZXJlIGp1c3QgaWdub3JhbnQgb3IgaW50ZW50aW9uYWxseSBkaWQgc29tZXRoaW5nCj4g PiA+ICppbXByb3Blcmx5KiA6KQo+ID4gPiAKPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBQYWxpIFJv aMOhciA8cGFsaUBrZXJuZWwub3JnPgo+ID4gPiA+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3Jn Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLW12ZWJ1LmMg fCAxMCArKysrKysrKysrCj4gPiA+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCsp Cj4gPiA+ID4gCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNp LW12ZWJ1LmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1tdmVidS5jCj4gPiA+ID4gaW5k ZXggMTljNmVlMjk4NDQyLi5hM2RmMzUyZDQ0MGUgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVy cy9wY2kvY29udHJvbGxlci9wY2ktbXZlYnUuYwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGNpLW12ZWJ1LmMKPiA+ID4gPiBAQCAtNzA1LDYgKzcwNSwxNSBAQCBzdGF0aWMg c3RydWN0IHBjaV9vcHMgbXZlYnVfcGNpZV9vcHMgPSB7Cj4gPiA+ID4gIAkud3JpdGUgPSBtdmVi dV9wY2llX3dyX2NvbmYsCj4gPiA+ID4gIH07Cj4gPiA+ID4gIAo+ID4gPiA+ICtzdGF0aWMgaW50 IG12ZWJ1X3BjaWVfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1 OCBwaW4pCj4gPiA+ID4gK3sKPiA+ID4gPiArCS8qIEludGVycnVwdCBzdXBwb3J0IG9uIG12ZWJ1 IGVtdWxhdGVkIGJyaWRnZXMgaXMgbm90IGltcGxlbWVudGVkIHlldCAqLwo+ID4gPiA+ICsJaWYg KGRldi0+YnVzLT5udW1iZXIgPT0gMCkKPiA+ID4gPiArCQlyZXR1cm4gMDsgLyogUHJvcGVyIHJl dHVybiBjb2RlIDAgPT0gTk9fSVJRICovCj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0dXJuIG9mX2ly cV9wYXJzZV9hbmRfbWFwX3BjaShkZXYsIHNsb3QsIHBpbik7Cj4gPiA+IAo+ID4gPiBJcyB0aGlz IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGRvbmUgd2l0aCBhIC5yZWFkX2Jhc2UoKSBvcCwgZS5n LiwKPiA+ID4gbWFrZSBQQ0lfSU5URVJSVVBUX1BJTiBjb250YWluIHplcm8gKFBDSV9JTlRFUlJV UFRfVU5LTk9XTik/Cj4gPiAKPiA+IEknbSBub3Qgc3VyZS4uLiBtYXliZS4gSSBjaG9vc2UgdGhp cyBzdHlsZSBhcyBhZnRlciBJIGltcGxlbWVudAo+ID4gZW11bGF0aW9uIG9mIElOVHggaW50ZXJy dXB0cyBpdCBhbGxvd3MgbWUganVzdCB0byByZXBsYWNlICJyZXR1cm4gMDsiIGJ5Cj4gPiAicmV0 dXJuIG15X21hcHBpbmdfZnVuY3Rpb25fZm9yX3Jvb3RfcG9ydCguLi4pOyIuIAo+IAo+IE9LLCBz byBldmVuIGFmdGVyIHlvdSBpbXBsZW1lbnQgSU5UeCBmb3IgdGhlIGVtdWxhdGVkIFJvb3QgUG9y dHMsIHRoZQo+IGRlZmF1bHQgb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNpKCkgaXMgaW5zdWZmaWNp ZW50LCBhbmQgeW91IHdpbGwKPiByZXF1aXJlIGFuIG12ZWJ1IC5tYXBfaXJxKCkgZnVuY3Rpb24u ICBUaGF0J3MgcmVhc29uYWJsZS4KPiAKPiAiUENJX0lOVEVSUlVQVF9QSU4gPT0gMCIgaXMgdGhl IHdheSBzb2Z0d2FyZSBsZWFybnMgdGhhdCBhIGRldmljZQo+IGRvZXNuJ3QgdXNlIElOVHgsIG9m IGNvdXJzZSwgYW5kIEkgc3VwcG9zZSBQQ0lfSU5URVJSVVBUX1BJTiBhbHJlYWR5Cj4gcmVhZHMg YXMgemVybywgc2luY2UgbXZlYnVfcGNpX2JyaWRnZV9lbXVsX2luaXQoKSBkb2Vzbid0IHNldAo+ IGJyaWRnZS0+Y29uZi5pbnRwaW4sIGFuZCBJIGFzc3VtZSB0aGUgZGVmYXVsdCB2YWx1ZSB3b3Vs ZCBiZSB6ZXJvPwo+IAo+IEJqb3JuCgpZZXMsIGxvb2tzIGxpa2UgdGhhdCB6ZXJvcyBhcmUgaW4g ZW11bGF0ZWQgY29uZmlnIHNwYWNlIGZvciBmaWVsZHMgbm90CmV4cGxpY2l0bHkgaW5pdGlhbGl6 ZWQuIFdoaWNoIGlzIHRoZSBwY2ktbXZlYnUuYyBjYXNlLgoKQnV0IG5vdyBJJ20gbG9va2luZyBh dCBwY2ktYWFyZHZhcmsuYyBkcml2ZXIgYW5kIGl0IHNldHMKUENJX0lOVEVSUlVQVF9QSU4gcmVn aXN0ZXIgdG8gQToKaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9n aXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktYWFy ZHZhcmsuYz9oPXY1LjE2LXJjOCNuOTUzCkFuZCB0aGF0IGNvbW1lbnQgIi8qIFN1cHBvcnQgaW50 ZXJydXB0IEEgZm9yIE1TSSBmZWF0dXJlICovIiBtdXN0IGJlCnRvdGFsIG5vbnNlbnNlIGFzIElO VEEgZm9yIHN1cmUgaXMgbm90IHJlcXVpcmVkIGZvciBNU0kuLi4gUGx1cyB3ZSBrbm93CnRoYXQg cGNpLWFhcmR2YXJrLmMgZHJpdmVyIGRvZXMgbm90IGltcGxlbWVudCBmb3IgcGNpIGJyaWRnZSBu ZWl0aGVyCklOVHggbm9yIE1TSS4uLiBBY2guLi4gc2VlbXMgdGhhdCB0aGlzIGNvZGUgaXMgaGVy ZSBzaW5jZSBiZWdpbm5pbmcgYW5kCm5lZWRzIHRvIGJlIGZpeGVkLi4uCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==