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 X-Spam-Level: X-Spam-Status: No, score=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2851CC432C0 for ; Wed, 20 Nov 2019 15:53:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F229B206CB for ; Wed, 20 Nov 2019 15:53:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728476AbfKTPxI (ORCPT ); Wed, 20 Nov 2019 10:53:08 -0500 Received: from mga17.intel.com ([192.55.52.151]:63174 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728453AbfKTPxI (ORCPT ); Wed, 20 Nov 2019 10:53:08 -0500 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:53:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,222,1571727600"; d="scan'208";a="215842721" Received: from lahna.fi.intel.com (HELO lahna) ([10.237.72.163]) by fmsmga001.fm.intel.com with SMTP; 20 Nov 2019 07:53:02 -0800 Received: by lahna (sSMTP sendmail emulation); Wed, 20 Nov 2019 17:53:02 +0200 Date: Wed, 20 Nov 2019 17:53:01 +0200 From: Mika Westerberg To: Karol Herbst Cc: "Rafael J. Wysocki" , Bjorn Helgaas , LKML , Lyude Paul , "Rafael J . Wysocki" , Linux PCI , Linux PM , dri-devel , nouveau , Dave Airlie , Mario Limonciello Subject: Re: [PATCH v4] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Message-ID: <20191120155301.GL11621@lahna.fi.intel.com> References: <20191120101816.GX11621@lahna.fi.intel.com> <20191120112212.GA11621@lahna.fi.intel.com> <20191120115127.GD11621@lahna.fi.intel.com> <20191120120913.GE11621@lahna.fi.intel.com> <20191120151542.GH11621@lahna.fi.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.12.1 (2019-06-15) Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Wed, Nov 20, 2019 at 04:37:14PM +0100, Karol Herbst wrote: > On Wed, Nov 20, 2019 at 4:15 PM Mika Westerberg > wrote: > > > > On Wed, Nov 20, 2019 at 01:11:52PM +0100, Karol Herbst wrote: > > > On Wed, Nov 20, 2019 at 1:09 PM Mika Westerberg > > > wrote: > > > > > > > > On Wed, Nov 20, 2019 at 12:58:00PM +0100, Karol Herbst wrote: > > > > > overall, what I really want to know is, _why_ does it work on windows? > > > > > > > > So do I ;-) > > > > > > > > > Or what are we doing differently on Linux so that it doesn't work? If > > > > > anybody has any idea on how we could dig into this and figure it out > > > > > on this level, this would probably allow us to get closer to the root > > > > > cause? no? > > > > > > > > Have you tried to use the acpi_rev_override parameter in your system and > > > > does it have any effect? > > > > > > > > Also did you try to trace the ACPI _ON/_OFF() methods? I think that > > > > should hopefully reveal something. > > > > > > > > > > I think I did in the past and it seemed to have worked, there is just > > > one big issue with this: it's a Dell specific workaround afaik, and > > > this issue plagues not just Dell, but we've seen it on HP and Lenovo > > > laptops as well, and I've heard about users having the same issues on > > > Asus and MSI laptops as well. > > > > Maybe it is not a workaround at all but instead it simply determines > > whether the system supports RTD3 or something like that (IIRC Windows 8 > > started supporting it). Maybe Dell added check for Linux because at that > > time Linux did not support it. > > > > the point is, it's not checking it by default, so by default you still > run into the windows 8 codepath. Well you can add the quirk to acpi_rev_dmi_table[] so it goes to that path by default. There are a bunch of similar entries for Dell machines. Of course this does not help the non-Dell users so we would still need to figure out the root cause. > > In case RTD3 is supported it invokes LKDS() which probably does the L2 > > or L3 entry and this is for some reason does not work the same way in > > Linux than it does with Windows 8+. > > > > I don't remember if this happens only with nouveau or with the > > proprietary driver as well but looking at the nouveau runtime PM suspend > > hook (assuming I'm looking at the correct code): > > > > static int > > nouveau_pmops_runtime_suspend(struct device *dev) > > { > > struct pci_dev *pdev = to_pci_dev(dev); > > struct drm_device *drm_dev = pci_get_drvdata(pdev); > > int ret; > > > > if (!nouveau_pmops_runtime()) { > > pm_runtime_forbid(dev); > > return -EBUSY; > > } > > > > nouveau_switcheroo_optimus_dsm(); > > ret = nouveau_do_suspend(drm_dev, true); > > pci_save_state(pdev); > > pci_disable_device(pdev); > > pci_ignore_hotplug(pdev); > > pci_set_power_state(pdev, PCI_D3cold); > > drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; > > return ret; > > } > > > > Normally PCI drivers leave the PCI bus PM things to PCI core but here > > the driver does these. So I wonder if it makes any difference if we let > > the core handle all that: > > > > static int > > nouveau_pmops_runtime_suspend(struct device *dev) > > { > > struct pci_dev *pdev = to_pci_dev(dev); > > struct drm_device *drm_dev = pci_get_drvdata(pdev); > > int ret; > > > > if (!nouveau_pmops_runtime()) { > > pm_runtime_forbid(dev); > > return -EBUSY; > > } > > > > nouveau_switcheroo_optimus_dsm(); > > ret = nouveau_do_suspend(drm_dev, true); > > pci_ignore_hotplug(pdev); > > drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; > > return ret; > > } > > > > and similar for the nouveau_pmops_runtime_resume(). > > > > yeah, I tried that at some point and it didn't help either. The reason > we call those from inside Nouveau is to support systems pre _PR where > nouveau invokes custom _DSM calls on its own. We could potentially > check for that though. OK. 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 X-Spam-Level: X-Spam-Status: No, score=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE7BEC43141 for ; Wed, 20 Nov 2019 15:53:09 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 CD2EE20672 for ; Wed, 20 Nov 2019 15:53:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CD2EE20672 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 36D1C6E62C; Wed, 20 Nov 2019 15:53:09 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F3626E62C; Wed, 20 Nov 2019 15:53:08 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 07:53:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,222,1571727600"; d="scan'208";a="215842721" Received: from lahna.fi.intel.com (HELO lahna) ([10.237.72.163]) by fmsmga001.fm.intel.com with SMTP; 20 Nov 2019 07:53:02 -0800 Received: by lahna (sSMTP sendmail emulation); Wed, 20 Nov 2019 17:53:02 +0200 Date: Wed, 20 Nov 2019 17:53:01 +0200 From: Mika Westerberg To: Karol Herbst Subject: Re: [PATCH v4] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Message-ID: <20191120155301.GL11621@lahna.fi.intel.com> References: <20191120101816.GX11621@lahna.fi.intel.com> <20191120112212.GA11621@lahna.fi.intel.com> <20191120115127.GD11621@lahna.fi.intel.com> <20191120120913.GE11621@lahna.fi.intel.com> <20191120151542.GH11621@lahna.fi.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.12.1 (2019-06-15) X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Rafael J. Wysocki" , Linux PCI , Linux PM , "Rafael J . Wysocki" , LKML , dri-devel , Mario Limonciello , Bjorn Helgaas , nouveau Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191120155301.Xn1n7RJewEa4ov9Nz0905qn-Z5wYvJII0ii8ghHl1H4@z> T24gV2VkLCBOb3YgMjAsIDIwMTkgYXQgMDQ6Mzc6MTRQTSArMDEwMCwgS2Fyb2wgSGVyYnN0IHdy b3RlOgo+IE9uIFdlZCwgTm92IDIwLCAyMDE5IGF0IDQ6MTUgUE0gTWlrYSBXZXN0ZXJiZXJnCj4g PG1pa2Eud2VzdGVyYmVyZ0BpbnRlbC5jb20+IHdyb3RlOgo+ID4KPiA+IE9uIFdlZCwgTm92IDIw LCAyMDE5IGF0IDAxOjExOjUyUE0gKzAxMDAsIEthcm9sIEhlcmJzdCB3cm90ZToKPiA+ID4gT24g V2VkLCBOb3YgMjAsIDIwMTkgYXQgMTowOSBQTSBNaWthIFdlc3RlcmJlcmcKPiA+ID4gPG1pa2Eu d2VzdGVyYmVyZ0BpbnRlbC5jb20+IHdyb3RlOgo+ID4gPiA+Cj4gPiA+ID4gT24gV2VkLCBOb3Yg MjAsIDIwMTkgYXQgMTI6NTg6MDBQTSArMDEwMCwgS2Fyb2wgSGVyYnN0IHdyb3RlOgo+ID4gPiA+ ID4gb3ZlcmFsbCwgd2hhdCBJIHJlYWxseSB3YW50IHRvIGtub3cgaXMsIF93aHlfIGRvZXMgaXQg d29yayBvbiB3aW5kb3dzPwo+ID4gPiA+Cj4gPiA+ID4gU28gZG8gSSA7LSkKPiA+ID4gPgo+ID4g PiA+ID4gT3Igd2hhdCBhcmUgd2UgZG9pbmcgZGlmZmVyZW50bHkgb24gTGludXggc28gdGhhdCBp dCBkb2Vzbid0IHdvcms/IElmCj4gPiA+ID4gPiBhbnlib2R5IGhhcyBhbnkgaWRlYSBvbiBob3cg d2UgY291bGQgZGlnIGludG8gdGhpcyBhbmQgZmlndXJlIGl0IG91dAo+ID4gPiA+ID4gb24gdGhp cyBsZXZlbCwgdGhpcyB3b3VsZCBwcm9iYWJseSBhbGxvdyB1cyB0byBnZXQgY2xvc2VyIHRvIHRo ZSByb290Cj4gPiA+ID4gPiBjYXVzZT8gbm8/Cj4gPiA+ID4KPiA+ID4gPiBIYXZlIHlvdSB0cmll ZCB0byB1c2UgdGhlIGFjcGlfcmV2X292ZXJyaWRlIHBhcmFtZXRlciBpbiB5b3VyIHN5c3RlbSBh bmQKPiA+ID4gPiBkb2VzIGl0IGhhdmUgYW55IGVmZmVjdD8KPiA+ID4gPgo+ID4gPiA+IEFsc28g ZGlkIHlvdSB0cnkgdG8gdHJhY2UgdGhlIEFDUEkgX09OL19PRkYoKSBtZXRob2RzPyBJIHRoaW5r IHRoYXQKPiA+ID4gPiBzaG91bGQgaG9wZWZ1bGx5IHJldmVhbCBzb21ldGhpbmcuCj4gPiA+ID4K PiA+ID4KPiA+ID4gSSB0aGluayBJIGRpZCBpbiB0aGUgcGFzdCBhbmQgaXQgc2VlbWVkIHRvIGhh dmUgd29ya2VkLCB0aGVyZSBpcyBqdXN0Cj4gPiA+IG9uZSBiaWcgaXNzdWUgd2l0aCB0aGlzOiBp dCdzIGEgRGVsbCBzcGVjaWZpYyB3b3JrYXJvdW5kIGFmYWlrLCBhbmQKPiA+ID4gdGhpcyBpc3N1 ZSBwbGFndWVzIG5vdCBqdXN0IERlbGwsIGJ1dCB3ZSd2ZSBzZWVuIGl0IG9uIEhQIGFuZCBMZW5v dm8KPiA+ID4gbGFwdG9wcyBhcyB3ZWxsLCBhbmQgSSd2ZSBoZWFyZCBhYm91dCB1c2VycyBoYXZp bmcgdGhlIHNhbWUgaXNzdWVzIG9uCj4gPiA+IEFzdXMgYW5kIE1TSSBsYXB0b3BzIGFzIHdlbGwu Cj4gPgo+ID4gTWF5YmUgaXQgaXMgbm90IGEgd29ya2Fyb3VuZCBhdCBhbGwgYnV0IGluc3RlYWQg aXQgc2ltcGx5IGRldGVybWluZXMKPiA+IHdoZXRoZXIgdGhlIHN5c3RlbSBzdXBwb3J0cyBSVEQz IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgKElJUkMgV2luZG93cyA4Cj4gPiBzdGFydGVkIHN1cHBv cnRpbmcgaXQpLiBNYXliZSBEZWxsIGFkZGVkIGNoZWNrIGZvciBMaW51eCBiZWNhdXNlIGF0IHRo YXQKPiA+IHRpbWUgTGludXggZGlkIG5vdCBzdXBwb3J0IGl0Lgo+ID4KPiAKPiB0aGUgcG9pbnQg aXMsIGl0J3Mgbm90IGNoZWNraW5nIGl0IGJ5IGRlZmF1bHQsIHNvIGJ5IGRlZmF1bHQgeW91IHN0 aWxsCj4gcnVuIGludG8gdGhlIHdpbmRvd3MgOCBjb2RlcGF0aC4KCldlbGwgeW91IGNhbiBhZGQg dGhlIHF1aXJrIHRvIGFjcGlfcmV2X2RtaV90YWJsZVtdIHNvIGl0IGdvZXMgdG8gdGhhdApwYXRo IGJ5IGRlZmF1bHQuIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIHNpbWlsYXIgZW50cmllcyBmb3IgRGVs bCBtYWNoaW5lcy4KCk9mIGNvdXJzZSB0aGlzIGRvZXMgbm90IGhlbHAgdGhlIG5vbi1EZWxsIHVz ZXJzIHNvIHdlIHdvdWxkIHN0aWxsIG5lZWQKdG8gZmlndXJlIG91dCB0aGUgcm9vdCBjYXVzZS4K Cj4gPiBJbiBjYXNlIFJURDMgaXMgc3VwcG9ydGVkIGl0IGludm9rZXMgTEtEUygpIHdoaWNoIHBy b2JhYmx5IGRvZXMgdGhlIEwyCj4gPiBvciBMMyBlbnRyeSBhbmQgdGhpcyBpcyBmb3Igc29tZSBy ZWFzb24gZG9lcyBub3Qgd29yayB0aGUgc2FtZSB3YXkgaW4KPiA+IExpbnV4IHRoYW4gaXQgZG9l cyB3aXRoIFdpbmRvd3MgOCsuCj4gPgo+ID4gSSBkb24ndCByZW1lbWJlciBpZiB0aGlzIGhhcHBl bnMgb25seSB3aXRoIG5vdXZlYXUgb3Igd2l0aCB0aGUKPiA+IHByb3ByaWV0YXJ5IGRyaXZlciBh cyB3ZWxsIGJ1dCBsb29raW5nIGF0IHRoZSBub3V2ZWF1IHJ1bnRpbWUgUE0gc3VzcGVuZAo+ID4g aG9vayAoYXNzdW1pbmcgSSdtIGxvb2tpbmcgYXQgdGhlIGNvcnJlY3QgY29kZSk6Cj4gPgo+ID4g c3RhdGljIGludAo+ID4gbm91dmVhdV9wbW9wc19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmlj ZSAqZGV2KQo+ID4gewo+ID4gICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9k ZXYoZGV2KTsKPiA+ICAgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwY2lfZ2V0 X2RydmRhdGEocGRldik7Cj4gPiAgICAgICAgIGludCByZXQ7Cj4gPgo+ID4gICAgICAgICBpZiAo IW5vdXZlYXVfcG1vcHNfcnVudGltZSgpKSB7Cj4gPiAgICAgICAgICAgICAgICAgcG1fcnVudGlt ZV9mb3JiaWQoZGV2KTsKPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwo+ID4gICAg ICAgICB9Cj4gPgo+ID4gICAgICAgICBub3V2ZWF1X3N3aXRjaGVyb29fb3B0aW11c19kc20oKTsK PiA+ICAgICAgICAgcmV0ID0gbm91dmVhdV9kb19zdXNwZW5kKGRybV9kZXYsIHRydWUpOwo+ID4g ICAgICAgICBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKPiA+ICAgICAgICAgcGNpX2Rpc2FibGVfZGV2 aWNlKHBkZXYpOwo+ID4gICAgICAgICBwY2lfaWdub3JlX2hvdHBsdWcocGRldik7Cj4gPiAgICAg ICAgIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzY29sZCk7Cj4gPiAgICAgICAgIGRy bV9kZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9IERSTV9TV0lUQ0hfUE9XRVJfRFlOQU1JQ19PRkY7 Cj4gPiAgICAgICAgIHJldHVybiByZXQ7Cj4gPiB9Cj4gPgo+ID4gTm9ybWFsbHkgUENJIGRyaXZl cnMgbGVhdmUgdGhlIFBDSSBidXMgUE0gdGhpbmdzIHRvIFBDSSBjb3JlIGJ1dCBoZXJlCj4gPiB0 aGUgZHJpdmVyIGRvZXMgdGhlc2UuIFNvIEkgd29uZGVyIGlmIGl0IG1ha2VzIGFueSBkaWZmZXJl bmNlIGlmIHdlIGxldAo+ID4gdGhlIGNvcmUgaGFuZGxlIGFsbCB0aGF0Ogo+ID4KPiA+IHN0YXRp YyBpbnQKPiA+IG5vdXZlYXVfcG1vcHNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKPiA+IHsKPiA+ICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRl dik7Cj4gPiAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZk YXRhKHBkZXYpOwo+ID4gICAgICAgICBpbnQgcmV0Owo+ID4KPiA+ICAgICAgICAgaWYgKCFub3V2 ZWF1X3Btb3BzX3J1bnRpbWUoKSkgewo+ID4gICAgICAgICAgICAgICAgIHBtX3J1bnRpbWVfZm9y YmlkKGRldik7Cj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiA+ICAgICAgICAg fQo+ID4KPiA+ICAgICAgICAgbm91dmVhdV9zd2l0Y2hlcm9vX29wdGltdXNfZHNtKCk7Cj4gPiAg ICAgICAgIHJldCA9IG5vdXZlYXVfZG9fc3VzcGVuZChkcm1fZGV2LCB0cnVlKTsKPiA+ICAgICAg ICAgcGNpX2lnbm9yZV9ob3RwbHVnKHBkZXYpOwo+ID4gICAgICAgICBkcm1fZGV2LT5zd2l0Y2hf cG93ZXJfc3RhdGUgPSBEUk1fU1dJVENIX1BPV0VSX0RZTkFNSUNfT0ZGOwo+ID4gICAgICAgICBy ZXR1cm4gcmV0Owo+ID4gfQo+ID4KPiA+IGFuZCBzaW1pbGFyIGZvciB0aGUgbm91dmVhdV9wbW9w c19ydW50aW1lX3Jlc3VtZSgpLgo+ID4KPiAKPiB5ZWFoLCBJIHRyaWVkIHRoYXQgYXQgc29tZSBw b2ludCBhbmQgaXQgZGlkbid0IGhlbHAgZWl0aGVyLiBUaGUgcmVhc29uCj4gd2UgY2FsbCB0aG9z ZSBmcm9tIGluc2lkZSBOb3V2ZWF1IGlzIHRvIHN1cHBvcnQgc3lzdGVtcyBwcmUgX1BSIHdoZXJl Cj4gbm91dmVhdSBpbnZva2VzIGN1c3RvbSBfRFNNIGNhbGxzIG9uIGl0cyBvd24uIFdlIGNvdWxk IHBvdGVudGlhbGx5Cj4gY2hlY2sgZm9yIHRoYXQgdGhvdWdoLgoKT0suCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==