From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f65.google.com ([74.125.82.65]:56056 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754437AbeD3O4y (ORCPT ); Mon, 30 Apr 2018 10:56:54 -0400 Received: by mail-wm0-f65.google.com with SMTP id a8so13683809wmg.5 for ; Mon, 30 Apr 2018 07:56:53 -0700 (PDT) Date: Mon, 30 Apr 2018 16:56:40 +0200 From: Daniel Vetter To: Laurent Pinchart Cc: Daniel Vetter , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Kieran Bingham , Ulrich Hecht , Maarten Lankhorst , IGT development Subject: Re: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) Message-ID: <20180430145640.GK12521@phenom.ffwll.local> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180430145524.GJ12521@phenom.ffwll.local> Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: On Mon, Apr 30, 2018 at 04:55:24PM +0200, Daniel Vetter wrote: > On Sat, Apr 28, 2018 at 12:07:04AM +0300, Laurent Pinchart wrote: > > Hi Daniel, > > > > (Removing the linux-media mailing list from CC as it is out of scope) > > > > You enquired on IRC whether this patch series passes the igt CRC tests. > > > > # ./kms_pipe_crc_basic --run-subtest read-crc-pipe-A > > IGT-Version: 1.22-gf447f5fc531d (aarch64) (Linux: 4.17.0-rc1-00085-g56e849d93cc9 aarch64) > > read-crc-pipe-A: Testing connector LVDS-1 using pipe A > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error > > Stack trace: > > Subtest read-crc-pipe-A failed. > > **** DEBUG **** > > (kms_pipe_crc_basic:1638) DEBUG: Test requirement passed: !(pipe >= data->display.n_pipes) > > (kms_pipe_crc_basic:1638) INFO: read-crc-pipe-A: Testing connector LVDS-1 using pipe A > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: set_pipe(A) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: Selecting pipe A > > (kms_pipe_crc_basic:1638) DEBUG: Clearing the fb with color (0.00,1.00,0.00) > > (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(width=1024, height=768, format=0x34325258, tiling=0x0, size=0) > > (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(handle=1, pitch=4096) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: Test requirement passed: plane_idx >= 0 && plane_idx < pipe->n_planes > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_fb(140) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_size (1024x768) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_position(0,0) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_size(1024x768) > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: commit { > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: SetCrtc pipe A, fb 140, src (0, 0), mode 1024x768 > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe A, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 2, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 3, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 4, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe B, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 1, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 2, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 3, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 4, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe C, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 1, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 2, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 3, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 4, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 2, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 3, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 4, disabling > > (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: } > > (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' > > (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 > > (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error > > (kms_pipe_crc_basic:1638) igt-core-INFO: Stack trace: > > **** END **** > > Subtest read-crc-pipe-A: FAIL (0.061s) > > > > I think the answer is no, but I don't think it's the fault of this patch > > series. Opening the CRC data file returns -EIO because the CRTC is not active, > > and I'm trying to find out why that is the case. The debug log shows a commit > > that seems strange to me, enabling pipe A and immediately disabling right > > afterwards. After some investigation I believe that this is caused by sharing > > primary planes between CRTCs. > > > > The R-Car DU groups CRTCs by two and shares 5 planes between the two CRTCs of > > the group. This specific SoC has two groups of two CRTCs, but that's not > > relevant here, so we can ignore pipes C and D. > > > > Pipes A and B thus shared 5 planes that I will number 0 to 4 for simplicity. > > The driver sets plane 0 as the primary plane for CRTC A and plane 1 as the > > primary plane for CRTC B. Planes 2, 3 and 4 are created as overlay planes. > > > > When igt iterates over all planes for pipe A, it will first encounter plane 0 > > that has a framebuffer, and thus enables the pipe. It then iterates over > > plane 1, recognizes it as a primary plane without a framebuffer, and thus > > disables the pipe. Planes 2, 3 and 4 are recognized as overlay planes and thus > > don't affect the pipe active state. Pipe B is handled the same way, and igt > > disables it twice as planes 0 and 1 are primary. > > > > I don't know if the fault here is with igt that doesn't properly support this > > architecture, or with the driver that shouldn't have two primary planes > > available for a CRTC. In the former case, I'm not sure how to fix it, as I'm > > not familiar enough with igt to rearchitecture the commit helpers. In the > > latter case, how would you recommend fixing it on the driver side ? > > I guess thus far no one did run igt on a chip which did have reassignable > primary planes. The problem here is that it's pretty hard to figure out > which one is the real primary plane, since with possible CRTCs you could > have multiple primary planes on 1 CRTC. There's no property or anything > that explicitly tells you this. Two fixes: > > 1. Change drivers to limit primary planes to 1 crtc. Same for cursor > overlays. There's probably other userspace than igt that gets confused > by this, but this has the ugly downside that we artifically limit plane > usage - if only 1 CRTC is on, we want to use all the available planes > on that one. > > 2. Add some implicit or explicit uapi to allow userspace to figure out > which primary plane is the primary plane for this crtc. > > a) Explicit option: We add a PRIMARY_ID property (and CURSOR_ID prop > while at it) on the CRTC which points at the primary/cursor plane. > > b) Implicit option: We require primary planes are assigned to CRTC in the > same order as they're created. So first primary plane you encouter > is the one for the first CRTC, 2nd primary plane is the one for the > 2nd CRTC and so on. If we go with this we probably should add a bit > of code to the kernel to check that invariant (by making sure the > primary plane has the corresponding CRTC included in its > possible_crtc mask). > > Either way igt needs to be patched to not treat any primary plane that > could work on a CRTC as the primary plane for that CRTC. > > Personally I'm leaning towards 2b). Adding Maarten and igt-dev. -Daniel > > Cheers, Daniel > > > > > On Monday, 23 April 2018 01:34:22 EEST Laurent Pinchart wrote: > > > Hello, > > > > > > This patch series adds support for CRC calculation to the rcar-du-drm > > > driver. > > > > > > CRC calculation is supported starting at the Renesas R-Car Gen3 SoCs, as > > > earlier versions don't have the necessary hardware. On Gen3 SoCs, the CRC is > > > computed by the DISCOM module part of the VSP-D and VSP-DL. > > > > > > The DISCOM is interfaced to the VSP through the UIF glue and appears as a > > > VSP entity with a sink pad and a source pad. > > > > > > The series starts with a switch to SPDX license headers in patch 1/8, > > > prompted by a checkpatch.pl warning for a later patch that complained about > > > missing SPDX license headers. It then continues with cleanup and > > > refactoring. Patches 2/8 and 3/8 prepare for DISCOM and UIF support by > > > extending generic code to make it usable for the UIF. Patch 4/8 documents a > > > structure that will receive new fields. > > > > > > Patch 5/8 then extends the API exposed by the VSP driver to the DU driver to > > > support CRC computation configuration and reporting. The patch > > > unfortunately needs to touch both the VSP and DU drivers, so the whole > > > series will need to be merged through a single tree. > > > > > > Patch 5/8 adds support for the DISCOM and UIF in the VSP driver, patch 7/8 > > > integrates it in the DRM pipeline, and patch 8/8 finally implements the CRC > > > API in the DU driver to expose CRC computation to userspace. > > > > > > The hardware supports computing the CRC at any arbitrary point in the > > > pipeline on a configurable window of the frame. This patch series supports > > > CRC computation on input planes or pipeline output, but on the full frame > > > only. Support for CRC window configuration can be added later if needed but > > > will require extending the userspace API, as the DRM/KMS CRC API doesn't > > > support this feature. > > > > > > Compared to v1, the CRC source names for plane inputs are now constructed > > > from plane IDs instead of plane indices. This allows userspace to match CRC > > > sources with planes. > > > > > > Note that exposing the DISCOM and UIF though the V4L2 API isn't supported as > > > the module is only found in VSP-D and VSP-DL instances that are not exposed > > > through V4L2. It is possible to expose those instances through V4L2 with a > > > small modification to the driver for testing purpose. If the need arises to > > > test DISCOM and UIF with such an out-of-tree patch, support for CRC > > > reporting through a V4L2 control can be added later without affecting how > > > CRC is exposed through the DRM/KMS API. > > > > > > The patches are based on top of the "[PATCH v2 00/15] R-Car VSP1: > > > Dynamically assign blend units to display pipelines" patch series, itself > > > based on top of the Linux media master branch and scheduled for merge in > > > v4.18. The new base caused heavy conflicts, requiring this series to be > > > merged through the V4L2 tree. Once the patches receive the necessary review > > > I will ask Dave to ack the merge plan. > > > > > > For convenience the patches are available at > > > > > > git://linuxtv.org/pinchartl/media.git vsp1-discom-v2-20180423 > > > > > > The code has been tested through the kms-test-crc.py script part of the DU > > > test suite available at > > > > > > git://git.ideasonboard.com/renesas/kms-tests.git discom > > > > > > Laurent Pinchart (8): > > > v4l: vsp1: Use SPDX license headers > > > v4l: vsp1: Share the CLU, LIF and LUT set_fmt pad operation code > > > v4l: vsp1: Reset the crop and compose rectangles in the set_fmt helper > > > v4l: vsp1: Document the vsp1_du_atomic_config structure > > > v4l: vsp1: Extend the DU API to support CRC computation > > > v4l: vsp1: Add support for the DISCOM entity > > > v4l: vsp1: Integrate DISCOM in display pipeline > > > drm: rcar-du: Add support for CRC computation > > > > > > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 156 ++++++++++++++++- > > > drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 19 +++ > > > drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 13 +- > > > drivers/media/platform/vsp1/Makefile | 2 +- > > > drivers/media/platform/vsp1/vsp1.h | 10 +- > > > drivers/media/platform/vsp1/vsp1_brx.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_brx.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_clu.c | 71 ++------ > > > drivers/media/platform/vsp1/vsp1_clu.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_dl.c | 8 +- > > > drivers/media/platform/vsp1/vsp1_dl.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_drm.c | 127 ++++++++++++-- > > > drivers/media/platform/vsp1/vsp1_drm.h | 20 ++- > > > drivers/media/platform/vsp1/vsp1_drv.c | 26 ++- > > > drivers/media/platform/vsp1/vsp1_entity.c | 103 +++++++++++- > > > drivers/media/platform/vsp1/vsp1_entity.h | 13 +- > > > drivers/media/platform/vsp1/vsp1_hgo.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_hgo.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_hgt.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_hgt.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_histo.c | 65 +------ > > > drivers/media/platform/vsp1/vsp1_histo.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_hsit.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_hsit.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_lif.c | 71 ++------ > > > drivers/media/platform/vsp1/vsp1_lif.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_lut.c | 71 ++------ > > > drivers/media/platform/vsp1/vsp1_lut.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_pipe.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_pipe.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_regs.h | 46 ++++- > > > drivers/media/platform/vsp1/vsp1_rpf.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_rwpf.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_rwpf.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_sru.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_sru.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_uds.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_uds.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_uif.c | 271 +++++++++++++++++++++++++++ > > > drivers/media/platform/vsp1/vsp1_uif.h | 32 ++++ > > > drivers/media/platform/vsp1/vsp1_video.c | 6 +- > > > drivers/media/platform/vsp1/vsp1_video.h | 6 +- > > > drivers/media/platform/vsp1/vsp1_wpf.c | 6 +- > > > include/media/vsp1.h | 39 ++++- > > > 44 files changed, 896 insertions(+), 417 deletions(-) > > > create mode 100644 drivers/media/platform/vsp1/vsp1_uif.c > > > create mode 100644 drivers/media/platform/vsp1/vsp1_uif.h > > > > -- > > Regards, > > > > Laurent Pinchart > > > > > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) Date: Mon, 30 Apr 2018 16:56:40 +0200 Message-ID: <20180430145640.GK12521@phenom.ffwll.local> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 524C96E360 for ; Mon, 30 Apr 2018 14:56:56 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id f6so13680775wmc.4 for ; Mon, 30 Apr 2018 07:56:56 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180430145524.GJ12521@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: IGT development , Kieran Bingham , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Ulrich Hecht List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBBcHIgMzAsIDIwMTggYXQgMDQ6NTU6MjRQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBTYXQsIEFwciAyOCwgMjAxOCBhdCAxMjowNzowNEFNICswMzAwLCBMYXVyZW50 IFBpbmNoYXJ0IHdyb3RlOgo+ID4gSGkgRGFuaWVsLAo+ID4gCj4gPiAoUmVtb3ZpbmcgdGhlIGxp bnV4LW1lZGlhIG1haWxpbmcgbGlzdCBmcm9tIENDIGFzIGl0IGlzIG91dCBvZiBzY29wZSkKPiA+ IAo+ID4gWW91IGVucXVpcmVkIG9uIElSQyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHBhc3Nl cyB0aGUgaWd0IENSQyB0ZXN0cy4KPiA+IAo+ID4gIyAuL2ttc19waXBlX2NyY19iYXNpYyAtLXJ1 bi1zdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQQo+ID4gSUdULVZlcnNpb246IDEuMjItZ2Y0NDdmNWZj NTMxZCAoYWFyY2g2NCkgKExpbnV4OiA0LjE3LjAtcmMxLTAwMDg1LWc1NmU4NDlkOTNjYzkgYWFy Y2g2NCkKPiA+IHJlYWQtY3JjLXBpcGUtQTogVGVzdGluZyBjb25uZWN0b3IgTFZEUy0xIHVzaW5n IHBpcGUgQQo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNB TDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlvbiBpZ3RfcGlwZV9jcmNfc3RhcnQsIGZp bGUgaWd0X2RlYnVnZnMuYzo3NjQ6Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1k ZWJ1Z2ZzLUNSSVRJQ0FMOiBGYWlsZWQgYXNzZXJ0aW9uOiBwaXBlX2NyYy0+Y3JjX2ZkICE9IC0x Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBMYXN0 IGVycm5vOiA1LCBJbnB1dC9vdXRwdXQgZXJyb3IKPiA+IFN0YWNrIHRyYWNlOgo+ID4gU3VidGVz dCByZWFkLWNyYy1waXBlLUEgZmFpbGVkLgo+ID4gKioqKiBERUJVRyAqKioqCj4gPiAoa21zX3Bp cGVfY3JjX2Jhc2ljOjE2MzgpIERFQlVHOiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogIShwaXBl ID49IGRhdGEtPmRpc3BsYXkubl9waXBlcykKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg SU5GTzogcmVhZC1jcmMtcGlwZS1BOiBUZXN0aW5nIGNvbm5lY3RvciBMVkRTLTEgdXNpbmcgcGlw ZSBBCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6 IExWRFMtMTogc2V0X3BpcGUoQSkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWtt cy1ERUJVRzogZGlzcGxheTogTFZEUy0xOiBTZWxlY3RpbmcgcGlwZSBBCj4gPiAoa21zX3BpcGVf Y3JjX2Jhc2ljOjE2MzgpIERFQlVHOiBDbGVhcmluZyB0aGUgZmIgd2l0aCBjb2xvciAoMC4wMCwx LjAwLDAuMDApCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1mYi1ERUJVRzogaWd0 X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUod2lkdGg9MTAyNCwgaGVpZ2h0PTc2OCwgZm9ybWF0PTB4 MzQzMjUyNTgsIHRpbGluZz0weDAsIHNpemU9MCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWZiLURFQlVHOiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShoYW5kbGU9MSwgcGl0 Y2g9NDA5NikKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogVGVz dCByZXF1aXJlbWVudCBwYXNzZWQ6IHBsYW5lX2lkeCA+PSAwICYmIHBsYW5lX2lkeCA8IHBpcGUt Pm5fcGxhbmVzCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6IEEuMDogcGxhbmVfc2V0X2ZiKDE0MCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBwbGFuZV9zZXRfc2l6ZSAoMTAyNHg3Njgp Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6IEEu MDogZmJfc2V0X3Bvc2l0aW9uKDAsMCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBmYl9zZXRfc2l6ZSgxMDI0eDc2OCkKPiA+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogY29tbWl0IHsKPiA+ IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIExW RFMtMTogU2V0Q3J0YyBwaXBlIEEsIGZiIDE0MCwgc3JjICgwLCAwKSwgbW9kZSAxMDI0eDc2OAo+ ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAg U2V0Q3J0YyBwaXBlIEEsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBp Z3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAyLCBkaXNh YmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldFBsYW5lIHBpcGUgQSwgcGxhbmUgMywgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVf Y3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBl IEEsIHBsYW5lIDQsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qt a21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEIsIGRpc2FibGluZwo+ID4gKGtt c19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxh bmUgcGlwZSBCLCBwbGFuZSAxLCBkaXNhYmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQiwgcGxhbmUgMiwg ZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDMsIGRpc2FibGluZwo+ID4gKGttc19w aXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUg cGlwZSBCLCBwbGFuZSA0LCBkaXNhYmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldENydGMgcGlwZSBDLCBkaXNhYmxpbmcKPiA+ IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNl dFBsYW5lIHBpcGUgQywgcGxhbmUgMSwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2lj OjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEMsIHBsYW5l IDIsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVH OiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBDLCBwbGFuZSAzLCBkaXNhYmxpbmcKPiA+IChr bXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBs YW5lIHBpcGUgQywgcGxhbmUgNCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRDcnRjIHBpcGUgRCwgZGlzYWJsaW5n Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAg ICBTZXRDcnRjIHBpcGUgRCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2Mzgp IGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDIsIGRp c2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNw bGF5OiAgICAgU2V0UGxhbmUgcGlwZSBELCBwbGFuZSAzLCBkaXNhYmxpbmcKPiA+IChrbXNfcGlw ZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBp cGUgRCwgcGxhbmUgNCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGln dC1rbXMtREVCVUc6IGRpc3BsYXk6IH0KPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWRlYnVnZnMtREVCVUc6IE9wZW5pbmcgZGVidWdmcyBkaXJlY3RvcnkgJy9zeXMva2VybmVsL2Rl YnVnL2RyaS8wJwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1ERUJV RzogT3BlbmluZyBkZWJ1Z2ZzIGRpcmVjdG9yeSAnL3N5cy9rZXJuZWwvZGVidWcvZHJpLzAnCj4g PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBUZXN0IGFz c2VydGlvbiBmYWlsdXJlIGZ1bmN0aW9uIGlndF9waXBlX2NyY19zdGFydCwgZmlsZSBpZ3RfZGVi dWdmcy5jOjc2NDoKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJ VElDQUw6IEZhaWxlZCBhc3NlcnRpb246IHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEKPiA+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJVElDQUw6IExhc3QgZXJybm86IDUs IElucHV0L291dHB1dCBlcnJvcgo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtY29y ZS1JTkZPOiBTdGFjayB0cmFjZToKPiA+ICoqKiogIEVORCAgKioqKgo+ID4gU3VidGVzdCByZWFk LWNyYy1waXBlLUE6IEZBSUwgKDAuMDYxcykKPiA+IAo+ID4gSSB0aGluayB0aGUgYW5zd2VyIGlz IG5vLCBidXQgSSBkb24ndCB0aGluayBpdCdzIHRoZSBmYXVsdCBvZiB0aGlzIHBhdGNoCj4gPiBz ZXJpZXMuIE9wZW5pbmcgdGhlIENSQyBkYXRhIGZpbGUgcmV0dXJucyAtRUlPIGJlY2F1c2UgdGhl IENSVEMgaXMgbm90IGFjdGl2ZSwKPiA+IGFuZCBJJ20gdHJ5aW5nIHRvIGZpbmQgb3V0IHdoeSB0 aGF0IGlzIHRoZSBjYXNlLiBUaGUgZGVidWcgbG9nIHNob3dzIGEgY29tbWl0Cj4gPiB0aGF0IHNl ZW1zIHN0cmFuZ2UgdG8gbWUsIGVuYWJsaW5nIHBpcGUgQSBhbmQgaW1tZWRpYXRlbHkgZGlzYWJs aW5nIHJpZ2h0Cj4gPiBhZnRlcndhcmRzLiBBZnRlciBzb21lIGludmVzdGlnYXRpb24gSSBiZWxp ZXZlIHRoYXQgdGhpcyBpcyBjYXVzZWQgYnkgc2hhcmluZwo+ID4gcHJpbWFyeSBwbGFuZXMgYmV0 d2VlbiBDUlRDcy4KPiA+IAo+ID4gVGhlIFItQ2FyIERVIGdyb3VwcyBDUlRDcyBieSB0d28gYW5k IHNoYXJlcyA1IHBsYW5lcyBiZXR3ZWVuIHRoZSB0d28gQ1JUQ3Mgb2YKPiA+IHRoZSBncm91cC4g VGhpcyBzcGVjaWZpYyBTb0MgaGFzIHR3byBncm91cHMgb2YgdHdvIENSVENzLCBidXQgdGhhdCdz IG5vdAo+ID4gcmVsZXZhbnQgaGVyZSwgc28gd2UgY2FuIGlnbm9yZSBwaXBlcyBDIGFuZCBELgo+ ID4gCj4gPiBQaXBlcyBBIGFuZCBCIHRodXMgc2hhcmVkIDUgcGxhbmVzIHRoYXQgSSB3aWxsIG51 bWJlciAwIHRvIDQgZm9yIHNpbXBsaWNpdHkuCj4gPiBUaGUgZHJpdmVyIHNldHMgcGxhbmUgMCBh cyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgQ1JUQyBBIGFuZCBwbGFuZSAxIGFzIHRoZQo+ID4gcHJp bWFyeSBwbGFuZSBmb3IgQ1JUQyBCLiBQbGFuZXMgMiwgMyBhbmQgNCBhcmUgY3JlYXRlZCBhcyBv dmVybGF5IHBsYW5lcy4KPiA+IAo+ID4gV2hlbiBpZ3QgaXRlcmF0ZXMgb3ZlciBhbGwgcGxhbmVz IGZvciBwaXBlIEEsIGl0IHdpbGwgZmlyc3QgZW5jb3VudGVyIHBsYW5lIDAKPiA+IHRoYXQgaGFz IGEgZnJhbWVidWZmZXIsIGFuZCB0aHVzIGVuYWJsZXMgdGhlIHBpcGUuIEl0IHRoZW4gaXRlcmF0 ZXMgb3Zlcgo+ID4gcGxhbmUgMSwgcmVjb2duaXplcyBpdCBhcyBhIHByaW1hcnkgcGxhbmUgd2l0 aG91dCBhIGZyYW1lYnVmZmVyLCBhbmQgdGh1cwo+ID4gZGlzYWJsZXMgdGhlIHBpcGUuIFBsYW5l cyAyLCAzIGFuZCA0IGFyZSByZWNvZ25pemVkIGFzIG92ZXJsYXkgcGxhbmVzIGFuZCB0aHVzCj4g PiBkb24ndCBhZmZlY3QgdGhlIHBpcGUgYWN0aXZlIHN0YXRlLiBQaXBlIEIgaXMgaGFuZGxlZCB0 aGUgc2FtZSB3YXksIGFuZCBpZ3QKPiA+IGRpc2FibGVzIGl0IHR3aWNlIGFzIHBsYW5lcyAwIGFu ZCAxIGFyZSBwcmltYXJ5Lgo+ID4gCj4gPiBJIGRvbid0IGtub3cgaWYgdGhlIGZhdWx0IGhlcmUg aXMgd2l0aCBpZ3QgdGhhdCBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgdGhpcwo+ID4gYXJjaGl0 ZWN0dXJlLCBvciB3aXRoIHRoZSBkcml2ZXIgdGhhdCBzaG91bGRuJ3QgaGF2ZSB0d28gcHJpbWFy eSBwbGFuZXMKPiA+IGF2YWlsYWJsZSBmb3IgYSBDUlRDLiBJbiB0aGUgZm9ybWVyIGNhc2UsIEkn bSBub3Qgc3VyZSBob3cgdG8gZml4IGl0LCBhcyBJJ20KPiA+IG5vdCBmYW1pbGlhciBlbm91Z2gg d2l0aCBpZ3QgdG8gcmVhcmNoaXRlY3R1cmUgdGhlIGNvbW1pdCBoZWxwZXJzLiBJbiB0aGUKPiA+ IGxhdHRlciBjYXNlLCBob3cgd291bGQgeW91IHJlY29tbWVuZCBmaXhpbmcgaXQgb24gdGhlIGRy aXZlciBzaWRlID8KPiAKPiBJIGd1ZXNzIHRodXMgZmFyIG5vIG9uZSBkaWQgcnVuIGlndCBvbiBh IGNoaXAgd2hpY2ggZGlkIGhhdmUgcmVhc3NpZ25hYmxlCj4gcHJpbWFyeSBwbGFuZXMuIFRoZSBw cm9ibGVtIGhlcmUgaXMgdGhhdCBpdCdzIHByZXR0eSBoYXJkIHRvIGZpZ3VyZSBvdXQKPiB3aGlj aCBvbmUgaXMgdGhlIHJlYWwgcHJpbWFyeSBwbGFuZSwgc2luY2Ugd2l0aCBwb3NzaWJsZSBDUlRD cyB5b3UgY291bGQKPiBoYXZlIG11bHRpcGxlIHByaW1hcnkgcGxhbmVzIG9uIDEgQ1JUQy4gVGhl cmUncyBubyBwcm9wZXJ0eSBvciBhbnl0aGluZwo+IHRoYXQgZXhwbGljaXRseSB0ZWxscyB5b3Ug dGhpcy4gVHdvIGZpeGVzOgo+IAo+IDEuIENoYW5nZSBkcml2ZXJzIHRvIGxpbWl0IHByaW1hcnkg cGxhbmVzIHRvIDEgY3J0Yy4gU2FtZSBmb3IgY3Vyc29yCj4gICAgb3ZlcmxheXMuIFRoZXJlJ3Mg cHJvYmFibHkgb3RoZXIgdXNlcnNwYWNlIHRoYW4gaWd0IHRoYXQgZ2V0cyBjb25mdXNlZAo+ICAg IGJ5IHRoaXMsIGJ1dCB0aGlzIGhhcyB0aGUgdWdseSBkb3duc2lkZSB0aGF0IHdlIGFydGlmaWNh bGx5IGxpbWl0IHBsYW5lCj4gICAgdXNhZ2UgLSBpZiBvbmx5IDEgQ1JUQyBpcyBvbiwgd2Ugd2Fu dCB0byB1c2UgYWxsIHRoZSBhdmFpbGFibGUgcGxhbmVzCj4gICAgb24gdGhhdCBvbmUuCj4gCj4g Mi4gQWRkIHNvbWUgaW1wbGljaXQgb3IgZXhwbGljaXQgdWFwaSB0byBhbGxvdyB1c2Vyc3BhY2Ug dG8gZmlndXJlIG91dAo+ICAgIHdoaWNoIHByaW1hcnkgcGxhbmUgaXMgdGhlIHByaW1hcnkgcGxh bmUgZm9yIHRoaXMgY3J0Yy4KPiAKPiAgICBhKSBFeHBsaWNpdCBvcHRpb246IFdlIGFkZCBhIFBS SU1BUllfSUQgcHJvcGVydHkgKGFuZCBDVVJTT1JfSUQgcHJvcAo+ICAgICAgIHdoaWxlIGF0IGl0 KSBvbiB0aGUgQ1JUQyB3aGljaCBwb2ludHMgYXQgdGhlIHByaW1hcnkvY3Vyc29yIHBsYW5lLgo+ IAo+ICAgIGIpIEltcGxpY2l0IG9wdGlvbjogV2UgcmVxdWlyZSBwcmltYXJ5IHBsYW5lcyBhcmUg YXNzaWduZWQgdG8gQ1JUQyBpbiB0aGUKPiAgICAgICBzYW1lIG9yZGVyIGFzIHRoZXkncmUgY3Jl YXRlZC4gU28gZmlyc3QgcHJpbWFyeSBwbGFuZSB5b3UgZW5jb3V0ZXIKPiAgICAgICBpcyB0aGUg b25lIGZvciB0aGUgZmlyc3QgQ1JUQywgMm5kIHByaW1hcnkgcGxhbmUgaXMgdGhlIG9uZSBmb3Ig dGhlCj4gICAgICAgMm5kIENSVEMgYW5kIHNvIG9uLiBJZiB3ZSBnbyB3aXRoIHRoaXMgd2UgcHJv YmFibHkgc2hvdWxkIGFkZCBhIGJpdAo+ICAgICAgIG9mIGNvZGUgdG8gdGhlIGtlcm5lbCB0byBj aGVjayB0aGF0IGludmFyaWFudCAoYnkgbWFraW5nIHN1cmUgdGhlCj4gICAgICAgcHJpbWFyeSBw bGFuZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgQ1JUQyBpbmNsdWRlZCBpbiBpdHMKPiAgICAgICBw b3NzaWJsZV9jcnRjIG1hc2spLgo+IAo+IEVpdGhlciB3YXkgaWd0IG5lZWRzIHRvIGJlIHBhdGNo ZWQgdG8gbm90IHRyZWF0IGFueSBwcmltYXJ5IHBsYW5lIHRoYXQKPiBjb3VsZCB3b3JrIG9uIGEg Q1JUQyBhcyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgdGhhdCBDUlRDLgo+IAo+IFBlcnNvbmFsbHkg SSdtIGxlYW5pbmcgdG93YXJkcyAyYikuCgpBZGRpbmcgTWFhcnRlbiBhbmQgaWd0LWRldi4KLURh bmllbAoKPiAKPiBDaGVlcnMsIERhbmllbAo+IAo+ID4gCj4gPiBPbiBNb25kYXksIDIzIEFwcmls IDIwMTggMDE6MzQ6MjIgRUVTVCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPiBIZWxsbywK PiA+ID4gCj4gPiA+IFRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgQ1JDIGNhbGN1 bGF0aW9uIHRvIHRoZSByY2FyLWR1LWRybQo+ID4gPiBkcml2ZXIuCj4gPiA+IAo+ID4gPiBDUkMg Y2FsY3VsYXRpb24gaXMgc3VwcG9ydGVkIHN0YXJ0aW5nIGF0IHRoZSBSZW5lc2FzIFItQ2FyIEdl bjMgU29DcywgYXMKPiA+ID4gZWFybGllciB2ZXJzaW9ucyBkb24ndCBoYXZlIHRoZSBuZWNlc3Nh cnkgaGFyZHdhcmUuIE9uIEdlbjMgU29DcywgdGhlIENSQyBpcwo+ID4gPiBjb21wdXRlZCBieSB0 aGUgRElTQ09NIG1vZHVsZSBwYXJ0IG9mIHRoZSBWU1AtRCBhbmQgVlNQLURMLgo+ID4gPiAKPiA+ ID4gVGhlIERJU0NPTSBpcyBpbnRlcmZhY2VkIHRvIHRoZSBWU1AgdGhyb3VnaCB0aGUgVUlGIGds dWUgYW5kIGFwcGVhcnMgYXMgYQo+ID4gPiBWU1AgZW50aXR5IHdpdGggYSBzaW5rIHBhZCBhbmQg YSBzb3VyY2UgcGFkLgo+ID4gPiAKPiA+ID4gVGhlIHNlcmllcyBzdGFydHMgd2l0aCBhIHN3aXRj aCB0byBTUERYIGxpY2Vuc2UgaGVhZGVycyBpbiBwYXRjaCAxLzgsCj4gPiA+IHByb21wdGVkIGJ5 IGEgY2hlY2twYXRjaC5wbCB3YXJuaW5nIGZvciBhIGxhdGVyIHBhdGNoIHRoYXQgY29tcGxhaW5l ZCBhYm91dAo+ID4gPiBtaXNzaW5nIFNQRFggbGljZW5zZSBoZWFkZXJzLiBJdCB0aGVuIGNvbnRp bnVlcyB3aXRoIGNsZWFudXAgYW5kCj4gPiA+IHJlZmFjdG9yaW5nLiBQYXRjaGVzIDIvOCBhbmQg My84IHByZXBhcmUgZm9yIERJU0NPTSBhbmQgVUlGIHN1cHBvcnQgYnkKPiA+ID4gZXh0ZW5kaW5n IGdlbmVyaWMgY29kZSB0byBtYWtlIGl0IHVzYWJsZSBmb3IgdGhlIFVJRi4gUGF0Y2ggNC84IGRv Y3VtZW50cyBhCj4gPiA+IHN0cnVjdHVyZSB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgZmllbGRzLgo+ ID4gPiAKPiA+ID4gUGF0Y2ggNS84IHRoZW4gZXh0ZW5kcyB0aGUgQVBJIGV4cG9zZWQgYnkgdGhl IFZTUCBkcml2ZXIgdG8gdGhlIERVIGRyaXZlciB0bwo+ID4gPiBzdXBwb3J0IENSQyBjb21wdXRh dGlvbiBjb25maWd1cmF0aW9uIGFuZCByZXBvcnRpbmcuIFRoZSBwYXRjaAo+ID4gPiB1bmZvcnR1 bmF0ZWx5IG5lZWRzIHRvIHRvdWNoIGJvdGggdGhlIFZTUCBhbmQgRFUgZHJpdmVycywgc28gdGhl IHdob2xlCj4gPiA+IHNlcmllcyB3aWxsIG5lZWQgdG8gYmUgbWVyZ2VkIHRocm91Z2ggYSBzaW5n bGUgdHJlZS4KPiA+ID4gCj4gPiA+IFBhdGNoIDUvOCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBESVND T00gYW5kIFVJRiBpbiB0aGUgVlNQIGRyaXZlciwgcGF0Y2ggNy84Cj4gPiA+IGludGVncmF0ZXMg aXQgaW4gdGhlIERSTSBwaXBlbGluZSwgYW5kIHBhdGNoIDgvOCBmaW5hbGx5IGltcGxlbWVudHMg dGhlIENSQwo+ID4gPiBBUEkgaW4gdGhlIERVIGRyaXZlciB0byBleHBvc2UgQ1JDIGNvbXB1dGF0 aW9uIHRvIHVzZXJzcGFjZS4KPiA+ID4gCj4gPiA+IFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBjb21w dXRpbmcgdGhlIENSQyBhdCBhbnkgYXJiaXRyYXJ5IHBvaW50IGluIHRoZQo+ID4gPiBwaXBlbGlu ZSBvbiBhIGNvbmZpZ3VyYWJsZSB3aW5kb3cgb2YgdGhlIGZyYW1lLiBUaGlzIHBhdGNoIHNlcmll cyBzdXBwb3J0cwo+ID4gPiBDUkMgY29tcHV0YXRpb24gb24gaW5wdXQgcGxhbmVzIG9yIHBpcGVs aW5lIG91dHB1dCwgYnV0IG9uIHRoZSBmdWxsIGZyYW1lCj4gPiA+IG9ubHkuIFN1cHBvcnQgZm9y IENSQyB3aW5kb3cgY29uZmlndXJhdGlvbiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgbmVlZGVkIGJ1 dAo+ID4gPiB3aWxsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSB1c2Vyc3BhY2UgQVBJLCBhcyB0aGUg RFJNL0tNUyBDUkMgQVBJIGRvZXNuJ3QKPiA+ID4gc3VwcG9ydCB0aGlzIGZlYXR1cmUuCj4gPiA+ IAo+ID4gPiBDb21wYXJlZCB0byB2MSwgdGhlIENSQyBzb3VyY2UgbmFtZXMgZm9yIHBsYW5lIGlu cHV0cyBhcmUgbm93IGNvbnN0cnVjdGVkCj4gPiA+IGZyb20gcGxhbmUgSURzIGluc3RlYWQgb2Yg cGxhbmUgaW5kaWNlcy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIG1hdGNoIENSQwo+ID4gPiBz b3VyY2VzIHdpdGggcGxhbmVzLgo+ID4gPiAKPiA+ID4gTm90ZSB0aGF0IGV4cG9zaW5nIHRoZSBE SVNDT00gYW5kIFVJRiB0aG91Z2ggdGhlIFY0TDIgQVBJIGlzbid0IHN1cHBvcnRlZCBhcwo+ID4g PiB0aGUgbW9kdWxlIGlzIG9ubHkgZm91bmQgaW4gVlNQLUQgYW5kIFZTUC1ETCBpbnN0YW5jZXMg dGhhdCBhcmUgbm90IGV4cG9zZWQKPiA+ID4gdGhyb3VnaCBWNEwyLiBJdCBpcyBwb3NzaWJsZSB0 byBleHBvc2UgdGhvc2UgaW5zdGFuY2VzIHRocm91Z2ggVjRMMiB3aXRoIGEKPiA+ID4gc21hbGwg bW9kaWZpY2F0aW9uIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZS4gSWYgdGhlIG5l ZWQgYXJpc2VzIHRvCj4gPiA+IHRlc3QgRElTQ09NIGFuZCBVSUYgd2l0aCBzdWNoIGFuIG91dC1v Zi10cmVlIHBhdGNoLCBzdXBwb3J0IGZvciBDUkMKPiA+ID4gcmVwb3J0aW5nIHRocm91Z2ggYSBW NEwyIGNvbnRyb2wgY2FuIGJlIGFkZGVkIGxhdGVyIHdpdGhvdXQgYWZmZWN0aW5nIGhvdwo+ID4g PiBDUkMgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBEUk0vS01TIEFQSS4KPiA+ID4gCj4gPiA+IFRo ZSBwYXRjaGVzIGFyZSBiYXNlZCBvbiB0b3Agb2YgdGhlICJbUEFUQ0ggdjIgMDAvMTVdIFItQ2Fy IFZTUDE6Cj4gPiA+IER5bmFtaWNhbGx5IGFzc2lnbiBibGVuZCB1bml0cyB0byBkaXNwbGF5IHBp cGVsaW5lcyIgcGF0Y2ggc2VyaWVzLCBpdHNlbGYKPiA+ID4gYmFzZWQgb24gdG9wIG9mIHRoZSBM aW51eCBtZWRpYSBtYXN0ZXIgYnJhbmNoIGFuZCBzY2hlZHVsZWQgZm9yIG1lcmdlIGluCj4gPiA+ IHY0LjE4LiBUaGUgbmV3IGJhc2UgY2F1c2VkIGhlYXZ5IGNvbmZsaWN0cywgcmVxdWlyaW5nIHRo aXMgc2VyaWVzIHRvIGJlCj4gPiA+IG1lcmdlZCB0aHJvdWdoIHRoZSBWNEwyIHRyZWUuIE9uY2Ug dGhlIHBhdGNoZXMgcmVjZWl2ZSB0aGUgbmVjZXNzYXJ5IHJldmlldwo+ID4gPiBJIHdpbGwgYXNr IERhdmUgdG8gYWNrIHRoZSBtZXJnZSBwbGFuLgo+ID4gPiAKPiA+ID4gRm9yIGNvbnZlbmllbmNl IHRoZSBwYXRjaGVzIGFyZSBhdmFpbGFibGUgYXQKPiA+ID4gCj4gPiA+ICAgICAgICAgZ2l0Oi8v bGludXh0di5vcmcvcGluY2hhcnRsL21lZGlhLmdpdCB2c3AxLWRpc2NvbS12Mi0yMDE4MDQyMwo+ ID4gPiAKPiA+ID4gVGhlIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHRocm91Z2ggdGhlIGttcy10ZXN0 LWNyYy5weSBzY3JpcHQgcGFydCBvZiB0aGUgRFUKPiA+ID4gdGVzdCBzdWl0ZSBhdmFpbGFibGUg YXQKPiA+ID4gCj4gPiA+ICAgICAgICAgZ2l0Oi8vZ2l0LmlkZWFzb25ib2FyZC5jb20vcmVuZXNh cy9rbXMtdGVzdHMuZ2l0IGRpc2NvbQo+ID4gPiAKPiA+ID4gTGF1cmVudCBQaW5jaGFydCAoOCk6 Cj4gPiA+ICAgdjRsOiB2c3AxOiBVc2UgU1BEWCBsaWNlbnNlIGhlYWRlcnMKPiA+ID4gICB2NGw6 IHZzcDE6IFNoYXJlIHRoZSBDTFUsIExJRiBhbmQgTFVUIHNldF9mbXQgcGFkIG9wZXJhdGlvbiBj b2RlCj4gPiA+ICAgdjRsOiB2c3AxOiBSZXNldCB0aGUgY3JvcCBhbmQgY29tcG9zZSByZWN0YW5n bGVzIGluIHRoZSBzZXRfZm10IGhlbHBlcgo+ID4gPiAgIHY0bDogdnNwMTogRG9jdW1lbnQgdGhl IHZzcDFfZHVfYXRvbWljX2NvbmZpZyBzdHJ1Y3R1cmUKPiA+ID4gICB2NGw6IHZzcDE6IEV4dGVu ZCB0aGUgRFUgQVBJIHRvIHN1cHBvcnQgQ1JDIGNvbXB1dGF0aW9uCj4gPiA+ICAgdjRsOiB2c3Ax OiBBZGQgc3VwcG9ydCBmb3IgdGhlIERJU0NPTSBlbnRpdHkKPiA+ID4gICB2NGw6IHZzcDE6IElu dGVncmF0ZSBESVNDT00gaW4gZGlzcGxheSBwaXBlbGluZQo+ID4gPiAgIGRybTogcmNhci1kdTog QWRkIHN1cHBvcnQgZm9yIENSQyBjb21wdXRhdGlvbgo+ID4gPiAKPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS9yY2FyLWR1L3JjYXJfZHVfY3J0Yy5jICAgIHwgMTU2ICsrKysrKysrKysrKysrKystCj4g PiA+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2NydGMuaCAgICB8ICAxOSArKysK PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfdnNwLmMgICAgIHwgIDEzICst Cj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvTWFrZWZpbGUgICAgICB8ICAgMiAr LQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDEuaCAgICAgICAgfCAgMTAg Ky0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2JyeC5jICAgIHwgICA2 ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9icnguaCAgICB8ICAg NiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfY2x1LmMgICAgfCAg NzEgKystLS0tLS0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2NsdS5o ICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kbC5j ICAgICB8ICAgOCArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZGwu aCAgICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2Ry bS5jICAgIHwgMTI3ICsrKysrKysrKysrKy0tCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3ZzcDEvdnNwMV9kcm0uaCAgICB8ICAyMCArKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdnNwMS92c3AxX2Rydi5jICAgIHwgIDI2ICsrLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfZW50aXR5LmMgfCAxMDMgKysrKysrKysrKystCj4gPiA+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9lbnRpdHkuaCB8ICAxMyArLQo+ID4gPiAgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaGdvLmMgICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hnby5oICAgIHwgICA2ICstCj4gPiA+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oZ3QuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaGd0LmggICAgfCAgIDYgKy0KPiA+ID4gIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hpc3RvLmMgIHwgIDY1ICstLS0tLS0KPiA+ ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hpc3RvLmggIHwgICA2ICstCj4g PiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oc2l0LmMgICB8ICAgNiArLQo+ ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaHNpdC5oICAgfCAgIDYgKy0K PiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2xpZi5jICAgIHwgIDcxICsr LS0tLS0tCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9saWYuaCAgICB8 ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfbHV0LmMgICAg fCAgNzEgKystLS0tLS0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2x1 dC5oICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9w aXBlLmMgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFf cGlwZS5oICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X3JlZ3MuaCAgIHwgIDQ2ICsrKystCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEv dnNwMV9ycGYuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3Ax L3ZzcDFfcndwZi5jICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX3J3cGYuaCAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zz cDEvdnNwMV9zcnUuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 c3AxL3ZzcDFfc3J1LmggICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dnNwMS92c3AxX3Vkcy5jICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3ZzcDEvdnNwMV91ZHMuaCAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS92c3AxL3ZzcDFfdWlmLmMgICAgfCAyNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV91aWYuaCAgICB8ICAzMiArKysr Cj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV92aWRlby5jICB8ICAgNiAr LQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfdmlkZW8uaCAgfCAgIDYg Ky0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3dwZi5jICAgIHwgICA2 ICstCj4gPiA+ICBpbmNsdWRlL21lZGlhL3ZzcDEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAz OSArKysrLQo+ID4gPiAgNDQgZmlsZXMgY2hhbmdlZCwgODk2IGluc2VydGlvbnMoKyksIDQxNyBk ZWxldGlvbnMoLSkKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZzcDEvdnNwMV91aWYuYwo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdnNwMS92c3AxX3VpZi5oCj4gPiAKPiA+IC0tIAo+ID4gUmVnYXJkcywKPiA+ IAo+ID4gTGF1cmVudCBQaW5jaGFydAo+ID4gCj4gPiAKPiA+IAo+IAo+IC0tIAo+IERhbmllbCBW ZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxv Zy5mZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENv cnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1B98A6E1CC for ; Mon, 30 Apr 2018 14:56:51 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id a8so13683439wmg.5 for ; Mon, 30 Apr 2018 07:56:51 -0700 (PDT) Date: Mon, 30 Apr 2018 16:56:40 +0200 From: Daniel Vetter Message-ID: <20180430145640.GK12521@phenom.ffwll.local> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> <3482108.jirjkbZynl@avalon> <20180430145524.GJ12521@phenom.ffwll.local> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180430145524.GJ12521@phenom.ffwll.local> Subject: Re: [igt-dev] igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Laurent Pinchart Cc: IGT development , Daniel Vetter , Kieran Bingham , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org List-ID: T24gTW9uLCBBcHIgMzAsIDIwMTggYXQgMDQ6NTU6MjRQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBTYXQsIEFwciAyOCwgMjAxOCBhdCAxMjowNzowNEFNICswMzAwLCBMYXVyZW50 IFBpbmNoYXJ0IHdyb3RlOgo+ID4gSGkgRGFuaWVsLAo+ID4gCj4gPiAoUmVtb3ZpbmcgdGhlIGxp bnV4LW1lZGlhIG1haWxpbmcgbGlzdCBmcm9tIENDIGFzIGl0IGlzIG91dCBvZiBzY29wZSkKPiA+ IAo+ID4gWW91IGVucXVpcmVkIG9uIElSQyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHBhc3Nl cyB0aGUgaWd0IENSQyB0ZXN0cy4KPiA+IAo+ID4gIyAuL2ttc19waXBlX2NyY19iYXNpYyAtLXJ1 bi1zdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQQo+ID4gSUdULVZlcnNpb246IDEuMjItZ2Y0NDdmNWZj NTMxZCAoYWFyY2g2NCkgKExpbnV4OiA0LjE3LjAtcmMxLTAwMDg1LWc1NmU4NDlkOTNjYzkgYWFy Y2g2NCkKPiA+IHJlYWQtY3JjLXBpcGUtQTogVGVzdGluZyBjb25uZWN0b3IgTFZEUy0xIHVzaW5n IHBpcGUgQQo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNB TDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlvbiBpZ3RfcGlwZV9jcmNfc3RhcnQsIGZp bGUgaWd0X2RlYnVnZnMuYzo3NjQ6Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1k ZWJ1Z2ZzLUNSSVRJQ0FMOiBGYWlsZWQgYXNzZXJ0aW9uOiBwaXBlX2NyYy0+Y3JjX2ZkICE9IC0x Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBMYXN0 IGVycm5vOiA1LCBJbnB1dC9vdXRwdXQgZXJyb3IKPiA+IFN0YWNrIHRyYWNlOgo+ID4gU3VidGVz dCByZWFkLWNyYy1waXBlLUEgZmFpbGVkLgo+ID4gKioqKiBERUJVRyAqKioqCj4gPiAoa21zX3Bp cGVfY3JjX2Jhc2ljOjE2MzgpIERFQlVHOiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogIShwaXBl ID49IGRhdGEtPmRpc3BsYXkubl9waXBlcykKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg SU5GTzogcmVhZC1jcmMtcGlwZS1BOiBUZXN0aW5nIGNvbm5lY3RvciBMVkRTLTEgdXNpbmcgcGlw ZSBBCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6 IExWRFMtMTogc2V0X3BpcGUoQSkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWtt cy1ERUJVRzogZGlzcGxheTogTFZEUy0xOiBTZWxlY3RpbmcgcGlwZSBBCj4gPiAoa21zX3BpcGVf Y3JjX2Jhc2ljOjE2MzgpIERFQlVHOiBDbGVhcmluZyB0aGUgZmIgd2l0aCBjb2xvciAoMC4wMCwx LjAwLDAuMDApCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1mYi1ERUJVRzogaWd0 X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUod2lkdGg9MTAyNCwgaGVpZ2h0PTc2OCwgZm9ybWF0PTB4 MzQzMjUyNTgsIHRpbGluZz0weDAsIHNpemU9MCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWZiLURFQlVHOiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShoYW5kbGU9MSwgcGl0 Y2g9NDA5NikKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogVGVz dCByZXF1aXJlbWVudCBwYXNzZWQ6IHBsYW5lX2lkeCA+PSAwICYmIHBsYW5lX2lkeCA8IHBpcGUt Pm5fcGxhbmVzCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6IEEuMDogcGxhbmVfc2V0X2ZiKDE0MCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBwbGFuZV9zZXRfc2l6ZSAoMTAyNHg3Njgp Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6IEEu MDogZmJfc2V0X3Bvc2l0aW9uKDAsMCkKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBmYl9zZXRfc2l6ZSgxMDI0eDc2OCkKPiA+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogY29tbWl0IHsKPiA+ IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIExW RFMtMTogU2V0Q3J0YyBwaXBlIEEsIGZiIDE0MCwgc3JjICgwLCAwKSwgbW9kZSAxMDI0eDc2OAo+ ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAg U2V0Q3J0YyBwaXBlIEEsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBp Z3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAyLCBkaXNh YmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxh eTogICAgIFNldFBsYW5lIHBpcGUgQSwgcGxhbmUgMywgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVf Y3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBl IEEsIHBsYW5lIDQsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qt a21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEIsIGRpc2FibGluZwo+ID4gKGtt c19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxh bmUgcGlwZSBCLCBwbGFuZSAxLCBkaXNhYmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYz OCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQiwgcGxhbmUgMiwg ZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRp c3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDMsIGRpc2FibGluZwo+ID4gKGttc19w aXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUg cGlwZSBCLCBwbGFuZSA0LCBkaXNhYmxpbmcKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldENydGMgcGlwZSBDLCBkaXNhYmxpbmcKPiA+ IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNl dFBsYW5lIHBpcGUgQywgcGxhbmUgMSwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2lj OjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEMsIHBsYW5l IDIsIGRpc2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVH OiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBDLCBwbGFuZSAzLCBkaXNhYmxpbmcKPiA+IChr bXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBs YW5lIHBpcGUgQywgcGxhbmUgNCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRDcnRjIHBpcGUgRCwgZGlzYWJsaW5n Cj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAg ICBTZXRDcnRjIHBpcGUgRCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2Mzgp IGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDIsIGRp c2FibGluZwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNw bGF5OiAgICAgU2V0UGxhbmUgcGlwZSBELCBwbGFuZSAzLCBkaXNhYmxpbmcKPiA+IChrbXNfcGlw ZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBp cGUgRCwgcGxhbmUgNCwgZGlzYWJsaW5nCj4gPiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGln dC1rbXMtREVCVUc6IGRpc3BsYXk6IH0KPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWRlYnVnZnMtREVCVUc6IE9wZW5pbmcgZGVidWdmcyBkaXJlY3RvcnkgJy9zeXMva2VybmVsL2Rl YnVnL2RyaS8wJwo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1ERUJV RzogT3BlbmluZyBkZWJ1Z2ZzIGRpcmVjdG9yeSAnL3N5cy9rZXJuZWwvZGVidWcvZHJpLzAnCj4g PiAoa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBUZXN0IGFz c2VydGlvbiBmYWlsdXJlIGZ1bmN0aW9uIGlndF9waXBlX2NyY19zdGFydCwgZmlsZSBpZ3RfZGVi dWdmcy5jOjc2NDoKPiA+IChrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJ VElDQUw6IEZhaWxlZCBhc3NlcnRpb246IHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEKPiA+IChrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVnZnMtQ1JJVElDQUw6IExhc3QgZXJybm86IDUs IElucHV0L291dHB1dCBlcnJvcgo+ID4gKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtY29y ZS1JTkZPOiBTdGFjayB0cmFjZToKPiA+ICoqKiogIEVORCAgKioqKgo+ID4gU3VidGVzdCByZWFk LWNyYy1waXBlLUE6IEZBSUwgKDAuMDYxcykKPiA+IAo+ID4gSSB0aGluayB0aGUgYW5zd2VyIGlz IG5vLCBidXQgSSBkb24ndCB0aGluayBpdCdzIHRoZSBmYXVsdCBvZiB0aGlzIHBhdGNoCj4gPiBz ZXJpZXMuIE9wZW5pbmcgdGhlIENSQyBkYXRhIGZpbGUgcmV0dXJucyAtRUlPIGJlY2F1c2UgdGhl IENSVEMgaXMgbm90IGFjdGl2ZSwKPiA+IGFuZCBJJ20gdHJ5aW5nIHRvIGZpbmQgb3V0IHdoeSB0 aGF0IGlzIHRoZSBjYXNlLiBUaGUgZGVidWcgbG9nIHNob3dzIGEgY29tbWl0Cj4gPiB0aGF0IHNl ZW1zIHN0cmFuZ2UgdG8gbWUsIGVuYWJsaW5nIHBpcGUgQSBhbmQgaW1tZWRpYXRlbHkgZGlzYWJs aW5nIHJpZ2h0Cj4gPiBhZnRlcndhcmRzLiBBZnRlciBzb21lIGludmVzdGlnYXRpb24gSSBiZWxp ZXZlIHRoYXQgdGhpcyBpcyBjYXVzZWQgYnkgc2hhcmluZwo+ID4gcHJpbWFyeSBwbGFuZXMgYmV0 d2VlbiBDUlRDcy4KPiA+IAo+ID4gVGhlIFItQ2FyIERVIGdyb3VwcyBDUlRDcyBieSB0d28gYW5k IHNoYXJlcyA1IHBsYW5lcyBiZXR3ZWVuIHRoZSB0d28gQ1JUQ3Mgb2YKPiA+IHRoZSBncm91cC4g VGhpcyBzcGVjaWZpYyBTb0MgaGFzIHR3byBncm91cHMgb2YgdHdvIENSVENzLCBidXQgdGhhdCdz IG5vdAo+ID4gcmVsZXZhbnQgaGVyZSwgc28gd2UgY2FuIGlnbm9yZSBwaXBlcyBDIGFuZCBELgo+ ID4gCj4gPiBQaXBlcyBBIGFuZCBCIHRodXMgc2hhcmVkIDUgcGxhbmVzIHRoYXQgSSB3aWxsIG51 bWJlciAwIHRvIDQgZm9yIHNpbXBsaWNpdHkuCj4gPiBUaGUgZHJpdmVyIHNldHMgcGxhbmUgMCBh cyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgQ1JUQyBBIGFuZCBwbGFuZSAxIGFzIHRoZQo+ID4gcHJp bWFyeSBwbGFuZSBmb3IgQ1JUQyBCLiBQbGFuZXMgMiwgMyBhbmQgNCBhcmUgY3JlYXRlZCBhcyBv dmVybGF5IHBsYW5lcy4KPiA+IAo+ID4gV2hlbiBpZ3QgaXRlcmF0ZXMgb3ZlciBhbGwgcGxhbmVz IGZvciBwaXBlIEEsIGl0IHdpbGwgZmlyc3QgZW5jb3VudGVyIHBsYW5lIDAKPiA+IHRoYXQgaGFz IGEgZnJhbWVidWZmZXIsIGFuZCB0aHVzIGVuYWJsZXMgdGhlIHBpcGUuIEl0IHRoZW4gaXRlcmF0 ZXMgb3Zlcgo+ID4gcGxhbmUgMSwgcmVjb2duaXplcyBpdCBhcyBhIHByaW1hcnkgcGxhbmUgd2l0 aG91dCBhIGZyYW1lYnVmZmVyLCBhbmQgdGh1cwo+ID4gZGlzYWJsZXMgdGhlIHBpcGUuIFBsYW5l cyAyLCAzIGFuZCA0IGFyZSByZWNvZ25pemVkIGFzIG92ZXJsYXkgcGxhbmVzIGFuZCB0aHVzCj4g PiBkb24ndCBhZmZlY3QgdGhlIHBpcGUgYWN0aXZlIHN0YXRlLiBQaXBlIEIgaXMgaGFuZGxlZCB0 aGUgc2FtZSB3YXksIGFuZCBpZ3QKPiA+IGRpc2FibGVzIGl0IHR3aWNlIGFzIHBsYW5lcyAwIGFu ZCAxIGFyZSBwcmltYXJ5Lgo+ID4gCj4gPiBJIGRvbid0IGtub3cgaWYgdGhlIGZhdWx0IGhlcmUg aXMgd2l0aCBpZ3QgdGhhdCBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgdGhpcwo+ID4gYXJjaGl0 ZWN0dXJlLCBvciB3aXRoIHRoZSBkcml2ZXIgdGhhdCBzaG91bGRuJ3QgaGF2ZSB0d28gcHJpbWFy eSBwbGFuZXMKPiA+IGF2YWlsYWJsZSBmb3IgYSBDUlRDLiBJbiB0aGUgZm9ybWVyIGNhc2UsIEkn bSBub3Qgc3VyZSBob3cgdG8gZml4IGl0LCBhcyBJJ20KPiA+IG5vdCBmYW1pbGlhciBlbm91Z2gg d2l0aCBpZ3QgdG8gcmVhcmNoaXRlY3R1cmUgdGhlIGNvbW1pdCBoZWxwZXJzLiBJbiB0aGUKPiA+ IGxhdHRlciBjYXNlLCBob3cgd291bGQgeW91IHJlY29tbWVuZCBmaXhpbmcgaXQgb24gdGhlIGRy aXZlciBzaWRlID8KPiAKPiBJIGd1ZXNzIHRodXMgZmFyIG5vIG9uZSBkaWQgcnVuIGlndCBvbiBh IGNoaXAgd2hpY2ggZGlkIGhhdmUgcmVhc3NpZ25hYmxlCj4gcHJpbWFyeSBwbGFuZXMuIFRoZSBw cm9ibGVtIGhlcmUgaXMgdGhhdCBpdCdzIHByZXR0eSBoYXJkIHRvIGZpZ3VyZSBvdXQKPiB3aGlj aCBvbmUgaXMgdGhlIHJlYWwgcHJpbWFyeSBwbGFuZSwgc2luY2Ugd2l0aCBwb3NzaWJsZSBDUlRD cyB5b3UgY291bGQKPiBoYXZlIG11bHRpcGxlIHByaW1hcnkgcGxhbmVzIG9uIDEgQ1JUQy4gVGhl cmUncyBubyBwcm9wZXJ0eSBvciBhbnl0aGluZwo+IHRoYXQgZXhwbGljaXRseSB0ZWxscyB5b3Ug dGhpcy4gVHdvIGZpeGVzOgo+IAo+IDEuIENoYW5nZSBkcml2ZXJzIHRvIGxpbWl0IHByaW1hcnkg cGxhbmVzIHRvIDEgY3J0Yy4gU2FtZSBmb3IgY3Vyc29yCj4gICAgb3ZlcmxheXMuIFRoZXJlJ3Mg cHJvYmFibHkgb3RoZXIgdXNlcnNwYWNlIHRoYW4gaWd0IHRoYXQgZ2V0cyBjb25mdXNlZAo+ICAg IGJ5IHRoaXMsIGJ1dCB0aGlzIGhhcyB0aGUgdWdseSBkb3duc2lkZSB0aGF0IHdlIGFydGlmaWNh bGx5IGxpbWl0IHBsYW5lCj4gICAgdXNhZ2UgLSBpZiBvbmx5IDEgQ1JUQyBpcyBvbiwgd2Ugd2Fu dCB0byB1c2UgYWxsIHRoZSBhdmFpbGFibGUgcGxhbmVzCj4gICAgb24gdGhhdCBvbmUuCj4gCj4g Mi4gQWRkIHNvbWUgaW1wbGljaXQgb3IgZXhwbGljaXQgdWFwaSB0byBhbGxvdyB1c2Vyc3BhY2Ug dG8gZmlndXJlIG91dAo+ICAgIHdoaWNoIHByaW1hcnkgcGxhbmUgaXMgdGhlIHByaW1hcnkgcGxh bmUgZm9yIHRoaXMgY3J0Yy4KPiAKPiAgICBhKSBFeHBsaWNpdCBvcHRpb246IFdlIGFkZCBhIFBS SU1BUllfSUQgcHJvcGVydHkgKGFuZCBDVVJTT1JfSUQgcHJvcAo+ICAgICAgIHdoaWxlIGF0IGl0 KSBvbiB0aGUgQ1JUQyB3aGljaCBwb2ludHMgYXQgdGhlIHByaW1hcnkvY3Vyc29yIHBsYW5lLgo+ IAo+ICAgIGIpIEltcGxpY2l0IG9wdGlvbjogV2UgcmVxdWlyZSBwcmltYXJ5IHBsYW5lcyBhcmUg YXNzaWduZWQgdG8gQ1JUQyBpbiB0aGUKPiAgICAgICBzYW1lIG9yZGVyIGFzIHRoZXkncmUgY3Jl YXRlZC4gU28gZmlyc3QgcHJpbWFyeSBwbGFuZSB5b3UgZW5jb3V0ZXIKPiAgICAgICBpcyB0aGUg b25lIGZvciB0aGUgZmlyc3QgQ1JUQywgMm5kIHByaW1hcnkgcGxhbmUgaXMgdGhlIG9uZSBmb3Ig dGhlCj4gICAgICAgMm5kIENSVEMgYW5kIHNvIG9uLiBJZiB3ZSBnbyB3aXRoIHRoaXMgd2UgcHJv YmFibHkgc2hvdWxkIGFkZCBhIGJpdAo+ICAgICAgIG9mIGNvZGUgdG8gdGhlIGtlcm5lbCB0byBj aGVjayB0aGF0IGludmFyaWFudCAoYnkgbWFraW5nIHN1cmUgdGhlCj4gICAgICAgcHJpbWFyeSBw bGFuZSBoYXMgdGhlIGNvcnJlc3BvbmRpbmcgQ1JUQyBpbmNsdWRlZCBpbiBpdHMKPiAgICAgICBw b3NzaWJsZV9jcnRjIG1hc2spLgo+IAo+IEVpdGhlciB3YXkgaWd0IG5lZWRzIHRvIGJlIHBhdGNo ZWQgdG8gbm90IHRyZWF0IGFueSBwcmltYXJ5IHBsYW5lIHRoYXQKPiBjb3VsZCB3b3JrIG9uIGEg Q1JUQyBhcyB0aGUgcHJpbWFyeSBwbGFuZSBmb3IgdGhhdCBDUlRDLgo+IAo+IFBlcnNvbmFsbHkg SSdtIGxlYW5pbmcgdG93YXJkcyAyYikuCgpBZGRpbmcgTWFhcnRlbiBhbmQgaWd0LWRldi4KLURh bmllbAoKPiAKPiBDaGVlcnMsIERhbmllbAo+IAo+ID4gCj4gPiBPbiBNb25kYXksIDIzIEFwcmls IDIwMTggMDE6MzQ6MjIgRUVTVCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPiBIZWxsbywK PiA+ID4gCj4gPiA+IFRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgQ1JDIGNhbGN1 bGF0aW9uIHRvIHRoZSByY2FyLWR1LWRybQo+ID4gPiBkcml2ZXIuCj4gPiA+IAo+ID4gPiBDUkMg Y2FsY3VsYXRpb24gaXMgc3VwcG9ydGVkIHN0YXJ0aW5nIGF0IHRoZSBSZW5lc2FzIFItQ2FyIEdl bjMgU29DcywgYXMKPiA+ID4gZWFybGllciB2ZXJzaW9ucyBkb24ndCBoYXZlIHRoZSBuZWNlc3Nh cnkgaGFyZHdhcmUuIE9uIEdlbjMgU29DcywgdGhlIENSQyBpcwo+ID4gPiBjb21wdXRlZCBieSB0 aGUgRElTQ09NIG1vZHVsZSBwYXJ0IG9mIHRoZSBWU1AtRCBhbmQgVlNQLURMLgo+ID4gPiAKPiA+ ID4gVGhlIERJU0NPTSBpcyBpbnRlcmZhY2VkIHRvIHRoZSBWU1AgdGhyb3VnaCB0aGUgVUlGIGds dWUgYW5kIGFwcGVhcnMgYXMgYQo+ID4gPiBWU1AgZW50aXR5IHdpdGggYSBzaW5rIHBhZCBhbmQg YSBzb3VyY2UgcGFkLgo+ID4gPiAKPiA+ID4gVGhlIHNlcmllcyBzdGFydHMgd2l0aCBhIHN3aXRj aCB0byBTUERYIGxpY2Vuc2UgaGVhZGVycyBpbiBwYXRjaCAxLzgsCj4gPiA+IHByb21wdGVkIGJ5 IGEgY2hlY2twYXRjaC5wbCB3YXJuaW5nIGZvciBhIGxhdGVyIHBhdGNoIHRoYXQgY29tcGxhaW5l ZCBhYm91dAo+ID4gPiBtaXNzaW5nIFNQRFggbGljZW5zZSBoZWFkZXJzLiBJdCB0aGVuIGNvbnRp bnVlcyB3aXRoIGNsZWFudXAgYW5kCj4gPiA+IHJlZmFjdG9yaW5nLiBQYXRjaGVzIDIvOCBhbmQg My84IHByZXBhcmUgZm9yIERJU0NPTSBhbmQgVUlGIHN1cHBvcnQgYnkKPiA+ID4gZXh0ZW5kaW5n IGdlbmVyaWMgY29kZSB0byBtYWtlIGl0IHVzYWJsZSBmb3IgdGhlIFVJRi4gUGF0Y2ggNC84IGRv Y3VtZW50cyBhCj4gPiA+IHN0cnVjdHVyZSB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgZmllbGRzLgo+ ID4gPiAKPiA+ID4gUGF0Y2ggNS84IHRoZW4gZXh0ZW5kcyB0aGUgQVBJIGV4cG9zZWQgYnkgdGhl IFZTUCBkcml2ZXIgdG8gdGhlIERVIGRyaXZlciB0bwo+ID4gPiBzdXBwb3J0IENSQyBjb21wdXRh dGlvbiBjb25maWd1cmF0aW9uIGFuZCByZXBvcnRpbmcuIFRoZSBwYXRjaAo+ID4gPiB1bmZvcnR1 bmF0ZWx5IG5lZWRzIHRvIHRvdWNoIGJvdGggdGhlIFZTUCBhbmQgRFUgZHJpdmVycywgc28gdGhl IHdob2xlCj4gPiA+IHNlcmllcyB3aWxsIG5lZWQgdG8gYmUgbWVyZ2VkIHRocm91Z2ggYSBzaW5n bGUgdHJlZS4KPiA+ID4gCj4gPiA+IFBhdGNoIDUvOCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBESVND T00gYW5kIFVJRiBpbiB0aGUgVlNQIGRyaXZlciwgcGF0Y2ggNy84Cj4gPiA+IGludGVncmF0ZXMg aXQgaW4gdGhlIERSTSBwaXBlbGluZSwgYW5kIHBhdGNoIDgvOCBmaW5hbGx5IGltcGxlbWVudHMg dGhlIENSQwo+ID4gPiBBUEkgaW4gdGhlIERVIGRyaXZlciB0byBleHBvc2UgQ1JDIGNvbXB1dGF0 aW9uIHRvIHVzZXJzcGFjZS4KPiA+ID4gCj4gPiA+IFRoZSBoYXJkd2FyZSBzdXBwb3J0cyBjb21w dXRpbmcgdGhlIENSQyBhdCBhbnkgYXJiaXRyYXJ5IHBvaW50IGluIHRoZQo+ID4gPiBwaXBlbGlu ZSBvbiBhIGNvbmZpZ3VyYWJsZSB3aW5kb3cgb2YgdGhlIGZyYW1lLiBUaGlzIHBhdGNoIHNlcmll cyBzdXBwb3J0cwo+ID4gPiBDUkMgY29tcHV0YXRpb24gb24gaW5wdXQgcGxhbmVzIG9yIHBpcGVs aW5lIG91dHB1dCwgYnV0IG9uIHRoZSBmdWxsIGZyYW1lCj4gPiA+IG9ubHkuIFN1cHBvcnQgZm9y IENSQyB3aW5kb3cgY29uZmlndXJhdGlvbiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgbmVlZGVkIGJ1 dAo+ID4gPiB3aWxsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSB1c2Vyc3BhY2UgQVBJLCBhcyB0aGUg RFJNL0tNUyBDUkMgQVBJIGRvZXNuJ3QKPiA+ID4gc3VwcG9ydCB0aGlzIGZlYXR1cmUuCj4gPiA+ IAo+ID4gPiBDb21wYXJlZCB0byB2MSwgdGhlIENSQyBzb3VyY2UgbmFtZXMgZm9yIHBsYW5lIGlu cHV0cyBhcmUgbm93IGNvbnN0cnVjdGVkCj4gPiA+IGZyb20gcGxhbmUgSURzIGluc3RlYWQgb2Yg cGxhbmUgaW5kaWNlcy4gVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIG1hdGNoIENSQwo+ID4gPiBz b3VyY2VzIHdpdGggcGxhbmVzLgo+ID4gPiAKPiA+ID4gTm90ZSB0aGF0IGV4cG9zaW5nIHRoZSBE SVNDT00gYW5kIFVJRiB0aG91Z2ggdGhlIFY0TDIgQVBJIGlzbid0IHN1cHBvcnRlZCBhcwo+ID4g PiB0aGUgbW9kdWxlIGlzIG9ubHkgZm91bmQgaW4gVlNQLUQgYW5kIFZTUC1ETCBpbnN0YW5jZXMg dGhhdCBhcmUgbm90IGV4cG9zZWQKPiA+ID4gdGhyb3VnaCBWNEwyLiBJdCBpcyBwb3NzaWJsZSB0 byBleHBvc2UgdGhvc2UgaW5zdGFuY2VzIHRocm91Z2ggVjRMMiB3aXRoIGEKPiA+ID4gc21hbGwg bW9kaWZpY2F0aW9uIHRvIHRoZSBkcml2ZXIgZm9yIHRlc3RpbmcgcHVycG9zZS4gSWYgdGhlIG5l ZWQgYXJpc2VzIHRvCj4gPiA+IHRlc3QgRElTQ09NIGFuZCBVSUYgd2l0aCBzdWNoIGFuIG91dC1v Zi10cmVlIHBhdGNoLCBzdXBwb3J0IGZvciBDUkMKPiA+ID4gcmVwb3J0aW5nIHRocm91Z2ggYSBW NEwyIGNvbnRyb2wgY2FuIGJlIGFkZGVkIGxhdGVyIHdpdGhvdXQgYWZmZWN0aW5nIGhvdwo+ID4g PiBDUkMgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBEUk0vS01TIEFQSS4KPiA+ID4gCj4gPiA+IFRo ZSBwYXRjaGVzIGFyZSBiYXNlZCBvbiB0b3Agb2YgdGhlICJbUEFUQ0ggdjIgMDAvMTVdIFItQ2Fy IFZTUDE6Cj4gPiA+IER5bmFtaWNhbGx5IGFzc2lnbiBibGVuZCB1bml0cyB0byBkaXNwbGF5IHBp cGVsaW5lcyIgcGF0Y2ggc2VyaWVzLCBpdHNlbGYKPiA+ID4gYmFzZWQgb24gdG9wIG9mIHRoZSBM aW51eCBtZWRpYSBtYXN0ZXIgYnJhbmNoIGFuZCBzY2hlZHVsZWQgZm9yIG1lcmdlIGluCj4gPiA+ IHY0LjE4LiBUaGUgbmV3IGJhc2UgY2F1c2VkIGhlYXZ5IGNvbmZsaWN0cywgcmVxdWlyaW5nIHRo aXMgc2VyaWVzIHRvIGJlCj4gPiA+IG1lcmdlZCB0aHJvdWdoIHRoZSBWNEwyIHRyZWUuIE9uY2Ug dGhlIHBhdGNoZXMgcmVjZWl2ZSB0aGUgbmVjZXNzYXJ5IHJldmlldwo+ID4gPiBJIHdpbGwgYXNr IERhdmUgdG8gYWNrIHRoZSBtZXJnZSBwbGFuLgo+ID4gPiAKPiA+ID4gRm9yIGNvbnZlbmllbmNl IHRoZSBwYXRjaGVzIGFyZSBhdmFpbGFibGUgYXQKPiA+ID4gCj4gPiA+ICAgICAgICAgZ2l0Oi8v bGludXh0di5vcmcvcGluY2hhcnRsL21lZGlhLmdpdCB2c3AxLWRpc2NvbS12Mi0yMDE4MDQyMwo+ ID4gPiAKPiA+ID4gVGhlIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHRocm91Z2ggdGhlIGttcy10ZXN0 LWNyYy5weSBzY3JpcHQgcGFydCBvZiB0aGUgRFUKPiA+ID4gdGVzdCBzdWl0ZSBhdmFpbGFibGUg YXQKPiA+ID4gCj4gPiA+ICAgICAgICAgZ2l0Oi8vZ2l0LmlkZWFzb25ib2FyZC5jb20vcmVuZXNh cy9rbXMtdGVzdHMuZ2l0IGRpc2NvbQo+ID4gPiAKPiA+ID4gTGF1cmVudCBQaW5jaGFydCAoOCk6 Cj4gPiA+ICAgdjRsOiB2c3AxOiBVc2UgU1BEWCBsaWNlbnNlIGhlYWRlcnMKPiA+ID4gICB2NGw6 IHZzcDE6IFNoYXJlIHRoZSBDTFUsIExJRiBhbmQgTFVUIHNldF9mbXQgcGFkIG9wZXJhdGlvbiBj b2RlCj4gPiA+ICAgdjRsOiB2c3AxOiBSZXNldCB0aGUgY3JvcCBhbmQgY29tcG9zZSByZWN0YW5n bGVzIGluIHRoZSBzZXRfZm10IGhlbHBlcgo+ID4gPiAgIHY0bDogdnNwMTogRG9jdW1lbnQgdGhl IHZzcDFfZHVfYXRvbWljX2NvbmZpZyBzdHJ1Y3R1cmUKPiA+ID4gICB2NGw6IHZzcDE6IEV4dGVu ZCB0aGUgRFUgQVBJIHRvIHN1cHBvcnQgQ1JDIGNvbXB1dGF0aW9uCj4gPiA+ICAgdjRsOiB2c3Ax OiBBZGQgc3VwcG9ydCBmb3IgdGhlIERJU0NPTSBlbnRpdHkKPiA+ID4gICB2NGw6IHZzcDE6IElu dGVncmF0ZSBESVNDT00gaW4gZGlzcGxheSBwaXBlbGluZQo+ID4gPiAgIGRybTogcmNhci1kdTog QWRkIHN1cHBvcnQgZm9yIENSQyBjb21wdXRhdGlvbgo+ID4gPiAKPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS9yY2FyLWR1L3JjYXJfZHVfY3J0Yy5jICAgIHwgMTU2ICsrKysrKysrKysrKysrKystCj4g PiA+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2NydGMuaCAgICB8ICAxOSArKysK PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfdnNwLmMgICAgIHwgIDEzICst Cj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvTWFrZWZpbGUgICAgICB8ICAgMiAr LQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDEuaCAgICAgICAgfCAgMTAg Ky0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2JyeC5jICAgIHwgICA2 ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9icnguaCAgICB8ICAg NiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfY2x1LmMgICAgfCAg NzEgKystLS0tLS0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2NsdS5o ICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kbC5j ICAgICB8ICAgOCArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZGwu aCAgICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2Ry bS5jICAgIHwgMTI3ICsrKysrKysrKysrKy0tCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3ZzcDEvdnNwMV9kcm0uaCAgICB8ICAyMCArKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdnNwMS92c3AxX2Rydi5jICAgIHwgIDI2ICsrLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfZW50aXR5LmMgfCAxMDMgKysrKysrKysrKystCj4gPiA+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9lbnRpdHkuaCB8ICAxMyArLQo+ID4gPiAgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaGdvLmMgICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hnby5oICAgIHwgICA2ICstCj4gPiA+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oZ3QuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaGd0LmggICAgfCAgIDYgKy0KPiA+ID4gIGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hpc3RvLmMgIHwgIDY1ICstLS0tLS0KPiA+ ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hpc3RvLmggIHwgICA2ICstCj4g PiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oc2l0LmMgICB8ICAgNiArLQo+ ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaHNpdC5oICAgfCAgIDYgKy0K PiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2xpZi5jICAgIHwgIDcxICsr LS0tLS0tCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9saWYuaCAgICB8 ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfbHV0LmMgICAg fCAgNzEgKystLS0tLS0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2x1 dC5oICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9w aXBlLmMgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFf cGlwZS5oICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X3JlZ3MuaCAgIHwgIDQ2ICsrKystCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEv dnNwMV9ycGYuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3Ax L3ZzcDFfcndwZi5jICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX3J3cGYuaCAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Zz cDEvdnNwMV9zcnUuYyAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 c3AxL3ZzcDFfc3J1LmggICAgfCAgIDYgKy0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dnNwMS92c3AxX3Vkcy5jICAgIHwgICA2ICstCj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3ZzcDEvdnNwMV91ZHMuaCAgICB8ICAgNiArLQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS92c3AxL3ZzcDFfdWlmLmMgICAgfCAyNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV91aWYuaCAgICB8ICAzMiArKysr Cj4gPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV92aWRlby5jICB8ICAgNiAr LQo+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfdmlkZW8uaCAgfCAgIDYg Ky0KPiA+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3dwZi5jICAgIHwgICA2 ICstCj4gPiA+ICBpbmNsdWRlL21lZGlhL3ZzcDEuaCAgICAgICAgICAgICAgICAgICAgICB8ICAz OSArKysrLQo+ID4gPiAgNDQgZmlsZXMgY2hhbmdlZCwgODk2IGluc2VydGlvbnMoKyksIDQxNyBk ZWxldGlvbnMoLSkKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZzcDEvdnNwMV91aWYuYwo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdnNwMS92c3AxX3VpZi5oCj4gPiAKPiA+IC0tIAo+ID4gUmVnYXJkcywKPiA+ IAo+ID4gTGF1cmVudCBQaW5jaGFydAo+ID4gCj4gPiAKPiA+IAo+IAo+IC0tIAo+IERhbmllbCBW ZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiBodHRwOi8vYmxv Zy5mZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENv cnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaWd0LWRldgo=