From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from galahad.ideasonboard.com ([185.26.127.97]:54637 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754630AbeBWT4C (ORCPT ); Fri, 23 Feb 2018 14:56:02 -0500 From: Laurent Pinchart To: Frank Rowand Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Rob Herring , devicetree@vger.kernel.org Subject: Re: [PATCH v6 3/4] drm: rcar-du: Fix legacy DT to create LVDS encoder nodes Date: Fri, 23 Feb 2018 21:56:47 +0200 Message-ID: <1950752.H92aV169ua@avalon> In-Reply-To: <65f98b4d-ceba-c8cf-525b-529df3635cac@gmail.com> References: <20180222131336.7712-1-laurent.pinchart+renesas@ideasonboard.com> <6897566.HfZ0CxhyhN@avalon> <65f98b4d-ceba-c8cf-525b-529df3635cac@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Frank, On Friday, 23 February 2018 21:43:17 EET Frank Rowand wrote: > On 02/23/18 01:00, Laurent Pinchart wrote: > > On Friday, 23 February 2018 04:38:06 EET Frank Rowand wrote: > >> On 02/22/18 14:10, Frank Rowand wrote: > >>> Hi Laurent, Rob, > >>> > >>> Thanks for the prompt spin to address my concerns. There are some small > >>> technical issues. > >>> > >>> I did not read the v3 patch until today. v3 through v6 are still using > >>> the old overlay apply method which uses an expanded device tree as > >>> input. > >>> > >>> Rob, I don't see my overlay patches in you for-next branch, and I have > >>> not seen an "Applied" message from you. What is the status of the > >>> overlay patches? > >>> > >>> Comments in the patch below. > >>> > >>> On 02/22/18 05:13, Laurent Pinchart wrote: > >>>> The internal LVDS encoders now have their own DT bindings. Before > >>>> switching the driver infrastructure to those new bindings, implement > >>>> backward-compatibility through live DT patching. > >>>> > >>>> Patching is disabled and will be enabled along with support for the new > >>>> DT bindings in the DU driver. > >>>> > >>>> Signed-off-by: Laurent Pinchart > >>>> > >>>> --- > >>>> Changes since v5: > >>>> > >>>> - Use a private copy of rcar_du_of_changeset_add_property() > >>>> > >>>> Changes since v3: > >>>> > >>>> - Use the OF changeset API > >>>> - Use of_graph_get_endpoint_by_regs() > >>>> - Replace hardcoded constants by sizeof() > >>>> > >>>> Changes since v2: > >>>> > >>>> - Update the SPDX headers to use C-style comments in header files > >>>> - Removed the manually created __local_fixups__ node > >>>> - Perform manual fixups on live DT instead of overlay > >>>> > >>>> Changes since v1: > >>>> > >>>> - Select OF_FLATTREE > >>>> - Compile LVDS DT bindings patch code when DRM_RCAR_LVDS is selected > >>>> - Update the SPDX headers to use GPL-2.0 instead of GPL-2.0-only > >>>> - Turn __dtb_rcar_du_of_lvds_(begin|end) from u8 to char > >>>> - Pass void begin and end pointers to rcar_du_of_get_overlay() > >>>> - Use of_get_parent() instead of accessing the parent pointer directly > >>>> - Find the LVDS endpoints nodes based on the LVDS node instead of the > >>>> root of the overlay > >>>> - Update to the -lvds compatible string format > >>>> --- > >>>> > >>>> drivers/gpu/drm/rcar-du/Kconfig | 2 + > >>>> drivers/gpu/drm/rcar-du/Makefile | 7 +- > >>>> drivers/gpu/drm/rcar-du/rcar_du_of.c | 342 +++++++++++++ > >>>> drivers/gpu/drm/rcar-du/rcar_du_of.h | 20 ++ > >>>> .../gpu/drm/rcar-du/rcar_du_of_lvds_r8a7790.dts | 79 +++++ > >>>> .../gpu/drm/rcar-du/rcar_du_of_lvds_r8a7791.dts | 53 ++++ > >>>> .../gpu/drm/rcar-du/rcar_du_of_lvds_r8a7793.dts | 53 ++++ > >>>> .../gpu/drm/rcar-du/rcar_du_of_lvds_r8a7795.dts | 53 ++++ > >>>> .../gpu/drm/rcar-du/rcar_du_of_lvds_r8a7796.dts | 53 ++++ > >>>> 9 files changed, 661 insertions(+), 1 deletion(-) > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of.c > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of.h > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7790.dts > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7791.dts > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7793.dts > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7795.dts > >>>> create mode 100644 drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7796.dts > >>>> > >>>> diff --git a/drivers/gpu/drm/rcar-du/Kconfig > >>>> b/drivers/gpu/drm/rcar-du/Kconfig index 5d0b4b7119af..3f83352a7313 > >>>> 100644 > >>>> --- a/drivers/gpu/drm/rcar-du/Kconfig > >>>> +++ b/drivers/gpu/drm/rcar-du/Kconfig > >> > >> < snip > > >> > >>> becomes: > >>> ret = of_overlay_fdt_apply(dtb->begin, &ovcs_id); > >>> > >>> If my overlay patches do not exist, there are other small errors > >>> in the code block above. I'll ignore them for the moment. If you have time to not ignore them I'd appreciate your comments :-) I'd like to get this patch series merged in v4.17, and for that I want to be prepared to submit it on top of your overlay patches if they make it to mainline, or without them if they don't. > >>> A quick scan of the rest of the code looks OK. I'll read through it > >>> more carefully, but wanted to get this reply out without further > >>> delay. > >> > >> < snip > > >> > >> I was hoping to be able to convert the .dts files to use sugar syntax > >> instead of hand coding the fragment nodes, but for this specific set > >> of files I failed, since the labels that would have been required do > >> not already exist in the base .dts files that that overlays would be > >> applied against. > > > > And even if they existed in the base .dts in the kernel sources, there's > > no guarantee that the .dtb on the systems we want to patch would contain > > symbol, so that wouldn't have been an option anyway, would it ? > > Correct. And even more troublesome is that some of the fragments are > targeted at node "/", which dtc does not even allow a label on (at the > moment). > > >> Oh well. It was an interesting exercise anyway, trying to be crafty. -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v6 3/4] drm: rcar-du: Fix legacy DT to create LVDS encoder nodes Date: Fri, 23 Feb 2018 21:56:47 +0200 Message-ID: <1950752.H92aV169ua@avalon> References: <20180222131336.7712-1-laurent.pinchart+renesas@ideasonboard.com> <6897566.HfZ0CxhyhN@avalon> <65f98b4d-ceba-c8cf-525b-529df3635cac@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <65f98b4d-ceba-c8cf-525b-529df3635cac@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Frank Rowand Cc: linux-renesas-soc@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org SGkgRnJhbmssCgpPbiBGcmlkYXksIDIzIEZlYnJ1YXJ5IDIwMTggMjE6NDM6MTcgRUVUIEZyYW5r IFJvd2FuZCB3cm90ZToKPiBPbiAwMi8yMy8xOCAwMTowMCwgTGF1cmVudCBQaW5jaGFydCB3cm90 ZToKPiA+IE9uIEZyaWRheSwgMjMgRmVicnVhcnkgMjAxOCAwNDozODowNiBFRVQgRnJhbmsgUm93 YW5kIHdyb3RlOgo+ID4+IE9uIDAyLzIyLzE4IDE0OjEwLCBGcmFuayBSb3dhbmQgd3JvdGU6Cj4g Pj4+IEhpIExhdXJlbnQsIFJvYiwKPiA+Pj4gCj4gPj4+IFRoYW5rcyBmb3IgdGhlIHByb21wdCBz cGluIHRvIGFkZHJlc3MgbXkgY29uY2VybnMuICBUaGVyZSBhcmUgc29tZSBzbWFsbAo+ID4+PiB0 ZWNobmljYWwgaXNzdWVzLgo+ID4+PiAKPiA+Pj4gSSBkaWQgbm90IHJlYWQgdGhlIHYzIHBhdGNo IHVudGlsIHRvZGF5LiAgdjMgdGhyb3VnaCB2NiBhcmUgc3RpbGwgdXNpbmcKPiA+Pj4gdGhlIG9s ZCBvdmVybGF5IGFwcGx5IG1ldGhvZCB3aGljaCB1c2VzIGFuIGV4cGFuZGVkIGRldmljZSB0cmVl IGFzCj4gPj4+IGlucHV0Lgo+ID4+PiAKPiA+Pj4gUm9iLCBJIGRvbid0IHNlZSBteSBvdmVybGF5 IHBhdGNoZXMgaW4geW91IGZvci1uZXh0IGJyYW5jaCwgYW5kIEkgaGF2ZQo+ID4+PiBub3Qgc2Vl biBhbiAiQXBwbGllZCIgbWVzc2FnZSBmcm9tIHlvdS4gIFdoYXQgaXMgdGhlIHN0YXR1cyBvZiB0 aGUKPiA+Pj4gb3ZlcmxheSBwYXRjaGVzPwo+ID4+PiAKPiA+Pj4gQ29tbWVudHMgaW4gdGhlIHBh dGNoIGJlbG93Lgo+ID4+PiAKPiA+Pj4gT24gMDIvMjIvMTggMDU6MTMsIExhdXJlbnQgUGluY2hh cnQgd3JvdGU6Cj4gPj4+PiBUaGUgaW50ZXJuYWwgTFZEUyBlbmNvZGVycyBub3cgaGF2ZSB0aGVp ciBvd24gRFQgYmluZGluZ3MuIEJlZm9yZQo+ID4+Pj4gc3dpdGNoaW5nIHRoZSBkcml2ZXIgaW5m cmFzdHJ1Y3R1cmUgdG8gdGhvc2UgbmV3IGJpbmRpbmdzLCBpbXBsZW1lbnQKPiA+Pj4+IGJhY2t3 YXJkLWNvbXBhdGliaWxpdHkgdGhyb3VnaCBsaXZlIERUIHBhdGNoaW5nLgo+ID4+Pj4gCj4gPj4+ PiBQYXRjaGluZyBpcyBkaXNhYmxlZCBhbmQgd2lsbCBiZSBlbmFibGVkIGFsb25nIHdpdGggc3Vw cG9ydCBmb3IgdGhlIG5ldwo+ID4+Pj4gRFQgYmluZGluZ3MgaW4gdGhlIERVIGRyaXZlci4KPiA+ Pj4+IAo+ID4+Pj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydAo+ID4+Pj4gPGxhdXJl bnQucGluY2hhcnQrcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+ID4+Pj4gLS0tCj4gPj4+PiBD aGFuZ2VzIHNpbmNlIHY1Ogo+ID4+Pj4gCj4gPj4+PiAtIFVzZSBhIHByaXZhdGUgY29weSBvZiBy Y2FyX2R1X29mX2NoYW5nZXNldF9hZGRfcHJvcGVydHkoKQo+ID4+Pj4gCj4gPj4+PiBDaGFuZ2Vz IHNpbmNlIHYzOgo+ID4+Pj4gCj4gPj4+PiAtIFVzZSB0aGUgT0YgY2hhbmdlc2V0IEFQSQo+ID4+ Pj4gLSBVc2Ugb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoKQo+ID4+Pj4gLSBSZXBsYWNl IGhhcmRjb2RlZCBjb25zdGFudHMgYnkgc2l6ZW9mKCkKPiA+Pj4+IAo+ID4+Pj4gQ2hhbmdlcyBz aW5jZSB2MjoKPiA+Pj4+IAo+ID4+Pj4gLSBVcGRhdGUgdGhlIFNQRFggaGVhZGVycyB0byB1c2Ug Qy1zdHlsZSBjb21tZW50cyBpbiBoZWFkZXIgZmlsZXMKPiA+Pj4+IC0gUmVtb3ZlZCB0aGUgbWFu dWFsbHkgY3JlYXRlZCBfX2xvY2FsX2ZpeHVwc19fIG5vZGUKPiA+Pj4+IC0gUGVyZm9ybSBtYW51 YWwgZml4dXBzIG9uIGxpdmUgRFQgaW5zdGVhZCBvZiBvdmVybGF5Cj4gPj4+PiAKPiA+Pj4+IENo YW5nZXMgc2luY2UgdjE6Cj4gPj4+PiAKPiA+Pj4+IC0gU2VsZWN0IE9GX0ZMQVRUUkVFCj4gPj4+ PiAtIENvbXBpbGUgTFZEUyBEVCBiaW5kaW5ncyBwYXRjaCBjb2RlIHdoZW4gRFJNX1JDQVJfTFZE UyBpcyBzZWxlY3RlZAo+ID4+Pj4gLSBVcGRhdGUgdGhlIFNQRFggaGVhZGVycyB0byB1c2UgR1BM LTIuMCBpbnN0ZWFkIG9mIEdQTC0yLjAtb25seQo+ID4+Pj4gLSBUdXJuIF9fZHRiX3JjYXJfZHVf b2ZfbHZkc18oYmVnaW58ZW5kKSBmcm9tIHU4IHRvIGNoYXIKPiA+Pj4+IC0gUGFzcyB2b2lkIGJl Z2luIGFuZCBlbmQgcG9pbnRlcnMgdG8gcmNhcl9kdV9vZl9nZXRfb3ZlcmxheSgpCj4gPj4+PiAt IFVzZSBvZl9nZXRfcGFyZW50KCkgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgdGhlIHBhcmVudCBwb2lu dGVyIGRpcmVjdGx5Cj4gPj4+PiAtIEZpbmQgdGhlIExWRFMgZW5kcG9pbnRzIG5vZGVzIGJhc2Vk IG9uIHRoZSBMVkRTIG5vZGUgaW5zdGVhZCBvZiB0aGUKPiA+Pj4+ICAgcm9vdCBvZiB0aGUgb3Zl cmxheQo+ID4+Pj4gLSBVcGRhdGUgdG8gdGhlIDxzb2M+LWx2ZHMgY29tcGF0aWJsZSBzdHJpbmcg Zm9ybWF0Cj4gPj4+PiAtLS0KPiA+Pj4+IAo+ID4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1 L0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiA+Pj4+ICBkcml2ZXJzL2dwdS9k cm0vcmNhci1kdS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgNyArLQo+ID4+Pj4gIGRy aXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfb2YuYyAgICAgICAgICAgICAgIHwgMzQyICsr KysrKysrKysrKysKPiA+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X29mLmgg ICAgICAgICAgICAgICB8ICAyMCArKwo+ID4+Pj4gIC4uLi9ncHUvZHJtL3JjYXItZHUvcmNhcl9k dV9vZl9sdmRzX3I4YTc3OTAuZHRzICAgIHwgIDc5ICsrKysrCj4gPj4+PiAgLi4uL2dwdS9kcm0v cmNhci1kdS9yY2FyX2R1X29mX2x2ZHNfcjhhNzc5MS5kdHMgICAgfCAgNTMgKysrKwo+ID4+Pj4g IC4uLi9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9vZl9sdmRzX3I4YTc3OTMuZHRzICAgIHwgIDUz ICsrKysKPiA+Pj4+ICAuLi4vZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfb2ZfbHZkc19yOGE3Nzk1 LmR0cyAgICB8ICA1MyArKysrCj4gPj4+PiAgLi4uL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X29m X2x2ZHNfcjhhNzc5Ni5kdHMgICAgfCAgNTMgKysrKwo+ID4+Pj4gIDkgZmlsZXMgY2hhbmdlZCwg NjYxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9vZi5jCj4gPj4+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfb2YuaAo+ID4+Pj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X29mX2x2ZHNf cjhhNzc5MC5kdHMKPiA+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Jj YXItZHUvcmNhcl9kdV9vZl9sdmRzX3I4YTc3OTEuZHRzCj4gPj4+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfb2ZfbHZkc19yOGE3NzkzLmR0cwo+ ID4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1 X29mX2x2ZHNfcjhhNzc5NS5kdHMKPiA+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3JjYXItZHUvcmNhcl9kdV9vZl9sdmRzX3I4YTc3OTYuZHRzCj4gPj4+PiAKPiA+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9LY29uZmlnCj4gPj4+PiBiL2Ry aXZlcnMvZ3B1L2RybS9yY2FyLWR1L0tjb25maWcgaW5kZXggNWQwYjRiNzExOWFmLi4zZjgzMzUy YTczMTMKPiA+Pj4+IDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUv S2NvbmZpZwo+ID4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvS2NvbmZpZwo+ID4+ IAo+ID4+IDwgc25pcCA+Cj4gPj4gCj4gPj4+IGJlY29tZXM6Cj4gPj4+IAlyZXQgPSBvZl9vdmVy bGF5X2ZkdF9hcHBseShkdGItPmJlZ2luLCAmb3Zjc19pZCk7Cj4gPj4+IAo+ID4+PiBJZiBteSBv dmVybGF5IHBhdGNoZXMgZG8gbm90IGV4aXN0LCB0aGVyZSBhcmUgb3RoZXIgc21hbGwgZXJyb3Jz Cj4gPj4+IGluIHRoZSBjb2RlIGJsb2NrIGFib3ZlLiAgSSdsbCBpZ25vcmUgdGhlbSBmb3IgdGhl IG1vbWVudC4KCklmIHlvdSBoYXZlIHRpbWUgdG8gbm90IGlnbm9yZSB0aGVtIEknZCBhcHByZWNp YXRlIHlvdXIgY29tbWVudHMgOi0pIEknZCBsaWtlIAp0byBnZXQgdGhpcyBwYXRjaCBzZXJpZXMg bWVyZ2VkIGluIHY0LjE3LCBhbmQgZm9yIHRoYXQgSSB3YW50IHRvIGJlIHByZXBhcmVkIAp0byBz dWJtaXQgaXQgb24gdG9wIG9mIHlvdXIgb3ZlcmxheSBwYXRjaGVzIGlmIHRoZXkgbWFrZSBpdCB0 byBtYWlubGluZSwgb3IgCndpdGhvdXQgdGhlbSBpZiB0aGV5IGRvbid0LgoKPiA+Pj4gQSBxdWlj ayBzY2FuIG9mIHRoZSByZXN0IG9mIHRoZSBjb2RlIGxvb2tzIE9LLiAgSSdsbCByZWFkIHRocm91 Z2ggaXQKPiA+Pj4gbW9yZSBjYXJlZnVsbHksIGJ1dCB3YW50ZWQgdG8gZ2V0IHRoaXMgcmVwbHkg b3V0IHdpdGhvdXQgZnVydGhlcgo+ID4+PiBkZWxheS4KPiA+PiAKPiA+PiA8IHNuaXAgPgo+ID4+ IAo+ID4+IEkgd2FzIGhvcGluZyB0byBiZSBhYmxlIHRvIGNvbnZlcnQgdGhlIC5kdHMgZmlsZXMg dG8gdXNlIHN1Z2FyIHN5bnRheAo+ID4+IGluc3RlYWQgb2YgaGFuZCBjb2RpbmcgdGhlIGZyYWdt ZW50IG5vZGVzLCBidXQgZm9yIHRoaXMgc3BlY2lmaWMgc2V0Cj4gPj4gb2YgZmlsZXMgSSBmYWls ZWQsIHNpbmNlIHRoZSBsYWJlbHMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQgZG8KPiA+ PiBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgYmFzZSAuZHRzIGZpbGVzIHRoYXQgdGhhdCBvdmVy bGF5cyB3b3VsZCBiZQo+ID4+IGFwcGxpZWQgYWdhaW5zdC4KPiA+IAo+ID4gQW5kIGV2ZW4gaWYg dGhleSBleGlzdGVkIGluIHRoZSBiYXNlIC5kdHMgaW4gdGhlIGtlcm5lbCBzb3VyY2VzLCB0aGVy ZSdzCj4gPiBubyBndWFyYW50ZWUgdGhhdCB0aGUgLmR0YiBvbiB0aGUgc3lzdGVtcyB3ZSB3YW50 IHRvIHBhdGNoIHdvdWxkIGNvbnRhaW4KPiA+IHN5bWJvbCwgc28gdGhhdCB3b3VsZG4ndCBoYXZl IGJlZW4gYW4gb3B0aW9uIGFueXdheSwgd291bGQgaXQgPwo+IAo+IENvcnJlY3QuICBBbmQgZXZl biBtb3JlIHRyb3VibGVzb21lIGlzIHRoYXQgc29tZSBvZiB0aGUgZnJhZ21lbnRzIGFyZQo+IHRh cmdldGVkIGF0IG5vZGUgIi8iLCB3aGljaCBkdGMgZG9lcyBub3QgZXZlbiBhbGxvdyBhIGxhYmVs IG9uIChhdCB0aGUKPiBtb21lbnQpLgo+IAo+ID4+IE9oIHdlbGwuICBJdCB3YXMgYW4gaW50ZXJl c3RpbmcgZXhlcmNpc2UgYW55d2F5LCB0cnlpbmcgdG8gYmUgY3JhZnR5LgoKLS0gClJlZ2FyZHMs CgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK