From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37081) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evgAu-0008K4-GF for qemu-devel@nongnu.org; Tue, 13 Mar 2018 05:24:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1evgAp-0001ox-UJ for qemu-devel@nongnu.org; Tue, 13 Mar 2018 05:24:52 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:42368 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1evgAp-0001oW-OC for qemu-devel@nongnu.org; Tue, 13 Mar 2018 05:24:47 -0400 Date: Tue, 13 Mar 2018 09:24:42 +0000 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Message-ID: <20180313092442.GB3048@redhat.com> Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= References: <4a65e8b30fe9d2a6c1c53b85ef2697f02e01d13f.1520867956.git.x1917x@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <4a65e8b30fe9d2a6c1c53b85ef2697f02e01d13f.1520867956.git.x1917x@gmail.com> Subject: Re: [Qemu-devel] [RFC PATCH 16/30] q35/xen: Add Xen platform device support for Q35 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Gerasimenko Cc: xen-devel@lists.xenproject.org, Eduardo Habkost , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Marcel Apfelbaum , Paolo Bonzini , Richard Henderson On Tue, Mar 13, 2018 at 04:34:01AM +1000, Alexey Gerasimenko wrote: > Current Xen/QEMU method to control Xen Platform device on i440 is a bit > odd -- enabling/disabling Xen platform device actually modifies the QEMU > emulated machine type, namely xenfv <--> pc. > > In order to avoid multiplying machine types, use a new way to control Xen > Platform device for QEMU -- "xen-platform-dev" machine property (bool). > To maintain backward compatibility with existing Xen/QEMU setups, this > is only applicable to q35 machine currently. i440 emulation still uses the > old method (i.e. xenfv/pc machine selection) to control Xen Platform > device, this may be changed later to xen-platform-dev property as well. The change you made to q35 is pretty tiny, so I imagine the equiv change to pc machine is equally small. IOW, I think you should just convert them both straight away rather than providing an inconsistent configuration approach for q35 vs pc. > This way we can use a single machine type (q35) and change just > xen-platform-dev value to on/off to control Xen platform device. > > Signed-off-by: Alexey Gerasimenko > --- > hw/core/machine.c | 21 +++++++++++++++++++++ > hw/i386/pc_q35.c | 14 ++++++++++++++ > include/hw/boards.h | 1 + > qemu-options.hx | 1 + > 4 files changed, 37 insertions(+) > > diff --git a/hw/core/machine.c b/hw/core/machine.c > index 5e2bbcdace..205e7da3ce 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -290,6 +290,20 @@ static void machine_set_igd_gfx_passthru(Object *obj, bool value, Error **errp) > ms->igd_gfx_passthru = value; > } > > +static bool machine_get_xen_platform_dev(Object *obj, Error **errp) > +{ > + MachineState *ms = MACHINE(obj); > + > + return ms->xen_platform_dev; > +} > + > +static void machine_set_xen_platform_dev(Object *obj, bool value, Error **errp) > +{ > + MachineState *ms = MACHINE(obj); > + > + ms->xen_platform_dev = value; > +} > + > static char *machine_get_firmware(Object *obj, Error **errp) > { > MachineState *ms = MACHINE(obj); > @@ -595,6 +609,13 @@ static void machine_class_init(ObjectClass *oc, void *data) > object_class_property_set_description(oc, "igd-passthru", > "Set on/off to enable/disable igd passthrou", &error_abort); > > + object_class_property_add_bool(oc, "xen-platform-dev", > + machine_get_xen_platform_dev, > + machine_set_xen_platform_dev, &error_abort); > + object_class_property_set_description(oc, "xen-platform-dev", > + "Set on/off to enable/disable Xen Platform device", > + &error_abort); > + > object_class_property_add_str(oc, "firmware", > machine_get_firmware, machine_set_firmware, > &error_abort); > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > index 0db670f6d7..62caf924cf 100644 > --- a/hw/i386/pc_q35.c > +++ b/hw/i386/pc_q35.c > @@ -56,6 +56,18 @@ > /* ICH9 AHCI has 6 ports */ > #define MAX_SATA_PORTS 6 > > +static void q35_xen_hvm_init(MachineState *machine) > +{ > + PCMachineState *pcms = PC_MACHINE(machine); > + > + if (xen_enabled()) { > + /* check if Xen Platform device is enabled */ > + if (machine->xen_platform_dev) { > + pci_create_simple(pcms->bus, -1, "xen-platform"); > + } > + } > +} > + > /* PC hardware initialisation */ > static void pc_q35_init(MachineState *machine) > { > @@ -207,6 +219,8 @@ static void pc_q35_init(MachineState *machine) > if (xen_enabled()) { > pci_bus_irqs(host_bus, xen_cmn_set_irq, xen_cmn_pci_slot_get_pirq, > ich9_lpc, ICH9_XEN_NUM_IRQ_SOURCES); > + > + q35_xen_hvm_init(machine); > } else { > pci_bus_irqs(host_bus, ich9_lpc_set_irq, ich9_lpc_map_irq, ich9_lpc, > ICH9_LPC_NB_PIRQS); > diff --git a/include/hw/boards.h b/include/hw/boards.h > index efb0a9edfd..f35fc1cc03 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -238,6 +238,7 @@ struct MachineState { > bool usb; > bool usb_disabled; > bool igd_gfx_passthru; > + bool xen_platform_dev; > char *firmware; > bool iommu; > bool suppress_vmdesc; > diff --git a/qemu-options.hx b/qemu-options.hx > index 6585058c6c..cee0b92028 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -38,6 +38,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ > " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" > " mem-merge=on|off controls memory merge support (default: on)\n" > " igd-passthru=on|off controls IGD GFX passthrough support (default=off)\n" > + " xen-platform-dev=on|off controls Xen Platform device (default=off)\n" > " aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n" > " dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n" > " suppress-vmdesc=on|off disables self-describing migration (default=off)\n" > -- > 2.11.0 > > Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Subject: Re: [Qemu-devel] [RFC PATCH 16/30] q35/xen: Add Xen platform device support for Q35 Date: Tue, 13 Mar 2018 09:24:42 +0000 Message-ID: <20180313092442.GB3048@redhat.com> References: <4a65e8b30fe9d2a6c1c53b85ef2697f02e01d13f.1520867956.git.x1917x@gmail.com> Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1evgAs-0001A5-4v for xen-devel@lists.xenproject.org; Tue, 13 Mar 2018 09:24:50 +0000 Content-Disposition: inline In-Reply-To: <4a65e8b30fe9d2a6c1c53b85ef2697f02e01d13f.1520867956.git.x1917x@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Alexey Gerasimenko Cc: Eduardo Habkost , "Michael S. Tsirkin" , qemu-devel@nongnu.org, Paolo Bonzini , Marcel Apfelbaum , xen-devel@lists.xenproject.org, Richard Henderson List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBNYXIgMTMsIDIwMTggYXQgMDQ6MzQ6MDFBTSArMTAwMCwgQWxleGV5IEdlcmFzaW1l bmtvIHdyb3RlOgo+IEN1cnJlbnQgWGVuL1FFTVUgbWV0aG9kIHRvIGNvbnRyb2wgWGVuIFBsYXRm b3JtIGRldmljZSBvbiBpNDQwIGlzIGEgYml0Cj4gb2RkIC0tIGVuYWJsaW5nL2Rpc2FibGluZyBY ZW4gcGxhdGZvcm0gZGV2aWNlIGFjdHVhbGx5IG1vZGlmaWVzIHRoZSBRRU1VCj4gZW11bGF0ZWQg bWFjaGluZSB0eXBlLCBuYW1lbHkgeGVuZnYgPC0tPiBwYy4KPiAKPiBJbiBvcmRlciB0byBhdm9p ZCBtdWx0aXBseWluZyBtYWNoaW5lIHR5cGVzLCB1c2UgYSBuZXcgd2F5IHRvIGNvbnRyb2wgWGVu Cj4gUGxhdGZvcm0gZGV2aWNlIGZvciBRRU1VIC0tICJ4ZW4tcGxhdGZvcm0tZGV2IiBtYWNoaW5l IHByb3BlcnR5IChib29sKS4KPiBUbyBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdp dGggZXhpc3RpbmcgWGVuL1FFTVUgc2V0dXBzLCB0aGlzCj4gaXMgb25seSBhcHBsaWNhYmxlIHRv IHEzNSBtYWNoaW5lIGN1cnJlbnRseS4gaTQ0MCBlbXVsYXRpb24gc3RpbGwgdXNlcyB0aGUKPiBv bGQgbWV0aG9kIChpLmUuIHhlbmZ2L3BjIG1hY2hpbmUgc2VsZWN0aW9uKSB0byBjb250cm9sIFhl biBQbGF0Zm9ybQo+IGRldmljZSwgdGhpcyBtYXkgYmUgY2hhbmdlZCBsYXRlciB0byB4ZW4tcGxh dGZvcm0tZGV2IHByb3BlcnR5IGFzIHdlbGwuCgpUaGUgY2hhbmdlIHlvdSBtYWRlIHRvIHEzNSBp cyBwcmV0dHkgdGlueSwgc28gSSBpbWFnaW5lIHRoZSBlcXVpdgpjaGFuZ2UgdG8gcGMgbWFjaGlu ZSBpcyBlcXVhbGx5IHNtYWxsLiBJT1csIEkgdGhpbmsgeW91IHNob3VsZCBqdXN0CmNvbnZlcnQg dGhlbSBib3RoIHN0cmFpZ2h0IGF3YXkgcmF0aGVyIHRoYW4gcHJvdmlkaW5nIGFuIGluY29uc2lz dGVudApjb25maWd1cmF0aW9uIGFwcHJvYWNoIGZvciBxMzUgdnMgcGMuCgo+IFRoaXMgd2F5IHdl IGNhbiB1c2UgYSBzaW5nbGUgbWFjaGluZSB0eXBlIChxMzUpIGFuZCBjaGFuZ2UganVzdAo+IHhl bi1wbGF0Zm9ybS1kZXYgdmFsdWUgdG8gb24vb2ZmIHRvIGNvbnRyb2wgWGVuIHBsYXRmb3JtIGRl dmljZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgR2VyYXNpbWVua28gPHgxOTE3eEBnbWFp bC5jb20+Cj4gLS0tCj4gIGh3L2NvcmUvbWFjaGluZS5jICAgfCAyMSArKysrKysrKysrKysrKysr KysrKysKPiAgaHcvaTM4Ni9wY19xMzUuYyAgICB8IDE0ICsrKysrKysrKysrKysrCj4gIGluY2x1 ZGUvaHcvYm9hcmRzLmggfCAgMSArCj4gIHFlbXUtb3B0aW9ucy5oeCAgICAgfCAgMSArCj4gIDQg ZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9ody9jb3Jl L21hY2hpbmUuYyBiL2h3L2NvcmUvbWFjaGluZS5jCj4gaW5kZXggNWUyYmJjZGFjZS4uMjA1ZTdk YTNjZSAxMDA2NDQKPiAtLS0gYS9ody9jb3JlL21hY2hpbmUuYwo+ICsrKyBiL2h3L2NvcmUvbWFj aGluZS5jCj4gQEAgLTI5MCw2ICsyOTAsMjAgQEAgc3RhdGljIHZvaWQgbWFjaGluZV9zZXRfaWdk X2dmeF9wYXNzdGhydShPYmplY3QgKm9iaiwgYm9vbCB2YWx1ZSwgRXJyb3IgKiplcnJwKQo+ICAg ICAgbXMtPmlnZF9nZnhfcGFzc3RocnUgPSB2YWx1ZTsKPiAgfQo+ICAKPiArc3RhdGljIGJvb2wg bWFjaGluZV9nZXRfeGVuX3BsYXRmb3JtX2RldihPYmplY3QgKm9iaiwgRXJyb3IgKiplcnJwKQo+ ICt7Cj4gKyAgICBNYWNoaW5lU3RhdGUgKm1zID0gTUFDSElORShvYmopOwo+ICsKPiArICAgIHJl dHVybiBtcy0+eGVuX3BsYXRmb3JtX2RldjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFjaGlu ZV9zZXRfeGVuX3BsYXRmb3JtX2RldihPYmplY3QgKm9iaiwgYm9vbCB2YWx1ZSwgRXJyb3IgKipl cnJwKQo+ICt7Cj4gKyAgICBNYWNoaW5lU3RhdGUgKm1zID0gTUFDSElORShvYmopOwo+ICsKPiAr ICAgIG1zLT54ZW5fcGxhdGZvcm1fZGV2ID0gdmFsdWU7Cj4gK30KPiArCj4gIHN0YXRpYyBjaGFy ICptYWNoaW5lX2dldF9maXJtd2FyZShPYmplY3QgKm9iaiwgRXJyb3IgKiplcnJwKQo+ICB7Cj4g ICAgICBNYWNoaW5lU3RhdGUgKm1zID0gTUFDSElORShvYmopOwo+IEBAIC01OTUsNiArNjA5LDEz IEBAIHN0YXRpYyB2b2lkIG1hY2hpbmVfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqb2MsIHZvaWQg KmRhdGEpCj4gICAgICBvYmplY3RfY2xhc3NfcHJvcGVydHlfc2V0X2Rlc2NyaXB0aW9uKG9jLCAi aWdkLXBhc3N0aHJ1IiwKPiAgICAgICAgICAiU2V0IG9uL29mZiB0byBlbmFibGUvZGlzYWJsZSBp Z2QgcGFzc3Rocm91IiwgJmVycm9yX2Fib3J0KTsKPiAgCj4gKyAgICBvYmplY3RfY2xhc3NfcHJv cGVydHlfYWRkX2Jvb2wob2MsICJ4ZW4tcGxhdGZvcm0tZGV2IiwKPiArICAgICAgICBtYWNoaW5l X2dldF94ZW5fcGxhdGZvcm1fZGV2LAo+ICsgICAgICAgIG1hY2hpbmVfc2V0X3hlbl9wbGF0Zm9y bV9kZXYsICZlcnJvcl9hYm9ydCk7Cj4gKyAgICBvYmplY3RfY2xhc3NfcHJvcGVydHlfc2V0X2Rl c2NyaXB0aW9uKG9jLCAieGVuLXBsYXRmb3JtLWRldiIsCj4gKyAgICAgICAgIlNldCBvbi9vZmYg dG8gZW5hYmxlL2Rpc2FibGUgWGVuIFBsYXRmb3JtIGRldmljZSIsCj4gKyAgICAgICAgJmVycm9y X2Fib3J0KTsKPiArCj4gICAgICBvYmplY3RfY2xhc3NfcHJvcGVydHlfYWRkX3N0cihvYywgImZp cm13YXJlIiwKPiAgICAgICAgICBtYWNoaW5lX2dldF9maXJtd2FyZSwgbWFjaGluZV9zZXRfZmly bXdhcmUsCj4gICAgICAgICAgJmVycm9yX2Fib3J0KTsKPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9w Y19xMzUuYyBiL2h3L2kzODYvcGNfcTM1LmMKPiBpbmRleCAwZGI2NzBmNmQ3Li42MmNhZjkyNGNm IDEwMDY0NAo+IC0tLSBhL2h3L2kzODYvcGNfcTM1LmMKPiArKysgYi9ody9pMzg2L3BjX3EzNS5j Cj4gQEAgLTU2LDYgKzU2LDE4IEBACj4gIC8qIElDSDkgQUhDSSBoYXMgNiBwb3J0cyAqLwo+ICAj ZGVmaW5lIE1BWF9TQVRBX1BPUlRTICAgICA2Cj4gIAo+ICtzdGF0aWMgdm9pZCBxMzVfeGVuX2h2 bV9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKPiArewo+ICsgICAgUENNYWNoaW5lU3RhdGUg KnBjbXMgPSBQQ19NQUNISU5FKG1hY2hpbmUpOwo+ICsKPiArICAgIGlmICh4ZW5fZW5hYmxlZCgp KSB7Cj4gKyAgICAgICAgLyogY2hlY2sgaWYgWGVuIFBsYXRmb3JtIGRldmljZSBpcyBlbmFibGVk ICovCj4gKyAgICAgICAgaWYgKG1hY2hpbmUtPnhlbl9wbGF0Zm9ybV9kZXYpIHsKPiArICAgICAg ICAgICAgcGNpX2NyZWF0ZV9zaW1wbGUocGNtcy0+YnVzLCAtMSwgInhlbi1wbGF0Zm9ybSIpOwo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiAgLyogUEMgaGFyZHdhcmUgaW5pdGlhbGlz YXRpb24gKi8KPiAgc3RhdGljIHZvaWQgcGNfcTM1X2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5l KQo+ICB7Cj4gQEAgLTIwNyw2ICsyMTksOCBAQCBzdGF0aWMgdm9pZCBwY19xMzVfaW5pdChNYWNo aW5lU3RhdGUgKm1hY2hpbmUpCj4gICAgICBpZiAoeGVuX2VuYWJsZWQoKSkgewo+ICAgICAgICAg IHBjaV9idXNfaXJxcyhob3N0X2J1cywgeGVuX2Ntbl9zZXRfaXJxLCB4ZW5fY21uX3BjaV9zbG90 X2dldF9waXJxLAo+ICAgICAgICAgICAgICAgICAgICAgICBpY2g5X2xwYywgSUNIOV9YRU5fTlVN X0lSUV9TT1VSQ0VTKTsKPiArCj4gKyAgICAgICAgcTM1X3hlbl9odm1faW5pdChtYWNoaW5lKTsK PiAgICAgIH0gZWxzZSB7Cj4gICAgICAgICAgcGNpX2J1c19pcnFzKGhvc3RfYnVzLCBpY2g5X2xw Y19zZXRfaXJxLCBpY2g5X2xwY19tYXBfaXJxLCBpY2g5X2xwYywKPiAgICAgICAgICAgICAgICAg ICAgICAgSUNIOV9MUENfTkJfUElSUVMpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L2JvYXJk cy5oIGIvaW5jbHVkZS9ody9ib2FyZHMuaAo+IGluZGV4IGVmYjBhOWVkZmQuLmYzNWZjMWNjMDMg MTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9ody9ib2FyZHMuaAo+ICsrKyBiL2luY2x1ZGUvaHcvYm9h cmRzLmgKPiBAQCAtMjM4LDYgKzIzOCw3IEBAIHN0cnVjdCBNYWNoaW5lU3RhdGUgewo+ICAgICAg Ym9vbCB1c2I7Cj4gICAgICBib29sIHVzYl9kaXNhYmxlZDsKPiAgICAgIGJvb2wgaWdkX2dmeF9w YXNzdGhydTsKPiArICAgIGJvb2wgeGVuX3BsYXRmb3JtX2RldjsKPiAgICAgIGNoYXIgKmZpcm13 YXJlOwo+ICAgICAgYm9vbCBpb21tdTsKPiAgICAgIGJvb2wgc3VwcHJlc3Nfdm1kZXNjOwo+IGRp ZmYgLS1naXQgYS9xZW11LW9wdGlvbnMuaHggYi9xZW11LW9wdGlvbnMuaHgKPiBpbmRleCA2NTg1 MDU4YzZjLi5jZWUwYjkyMDI4IDEwMDY0NAo+IC0tLSBhL3FlbXUtb3B0aW9ucy5oeAo+ICsrKyBi L3FlbXUtb3B0aW9ucy5oeAo+IEBAIC0zOCw2ICszOCw3IEBAIERFRigibWFjaGluZSIsIEhBU19B UkcsIFFFTVVfT1BUSU9OX21hY2hpbmUsIFwKPiAgICAgICIgICAgICAgICAgICAgICAgZHVtcC1n dWVzdC1jb3JlPW9ufG9mZiBpbmNsdWRlIGd1ZXN0IG1lbW9yeSBpbiBhIGNvcmUgZHVtcCAoZGVm YXVsdD1vbilcbiIKPiAgICAgICIgICAgICAgICAgICAgICAgbWVtLW1lcmdlPW9ufG9mZiBjb250 cm9scyBtZW1vcnkgbWVyZ2Ugc3VwcG9ydCAoZGVmYXVsdDogb24pXG4iCj4gICAgICAiICAgICAg ICAgICAgICAgIGlnZC1wYXNzdGhydT1vbnxvZmYgY29udHJvbHMgSUdEIEdGWCBwYXNzdGhyb3Vn aCBzdXBwb3J0IChkZWZhdWx0PW9mZilcbiIKPiArICAgICIgICAgICAgICAgICAgICAgeGVuLXBs YXRmb3JtLWRldj1vbnxvZmYgY29udHJvbHMgWGVuIFBsYXRmb3JtIGRldmljZSAoZGVmYXVsdD1v ZmYpXG4iCj4gICAgICAiICAgICAgICAgICAgICAgIGFlcy1rZXktd3JhcD1vbnxvZmYgY29udHJv bHMgc3VwcG9ydCBmb3IgQUVTIGtleSB3cmFwcGluZyAoZGVmYXVsdD1vbilcbiIKPiAgICAgICIg ICAgICAgICAgICAgICAgZGVhLWtleS13cmFwPW9ufG9mZiBjb250cm9scyBzdXBwb3J0IGZvciBE RUEga2V5IHdyYXBwaW5nIChkZWZhdWx0PW9uKVxuIgo+ICAgICAgIiAgICAgICAgICAgICAgICBz dXBwcmVzcy12bWRlc2M9b258b2ZmIGRpc2FibGVzIHNlbGYtZGVzY3JpYmluZyBtaWdyYXRpb24g KGRlZmF1bHQ9b2ZmKVxuIgo+IC0tIAo+IDIuMTEuMAo+IAo+IAoKUmVnYXJkcywKRGFuaWVsCi0t IAp8OiBodHRwczovL2JlcnJhbmdlLmNvbSAgICAgIC1vLSAgICBodHRwczovL3d3dy5mbGlja3Iu Y29tL3Bob3Rvcy9kYmVycmFuZ2UgOnwKfDogaHR0cHM6Ly9saWJ2aXJ0Lm9yZyAgICAgICAgIC1v LSAgICAgICAgICAgIGh0dHBzOi8vZnN0b3AxMzguYmVycmFuZ2UuY29tIDp8Cnw6IGh0dHBzOi8v ZW50YW5nbGUtcGhvdG8ub3JnICAgIC1vLSAgICBodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2Ri ZXJyYW5nZSA6fAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==