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=-11.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 CFCC5C2B9F8 for ; Mon, 24 May 2021 21:00:44 +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 9951361411 for ; Mon, 24 May 2021 21:00:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9951361411 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net 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 7C3EC6E957; Mon, 24 May 2021 21:00:27 +0000 (UTC) Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC42F6E954 for ; Mon, 24 May 2021 21:00:04 +0000 (UTC) Received: by mail-pf1-x42b.google.com with SMTP id g18so20189347pfr.2 for ; Mon, 24 May 2021 14:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=FIQwcb+R3Fe4tk+8Me5Va022ROpmH6AgGLeYDpIii+c=; b=KvSNWrUUwrew785VZJzltgHAP3ZmVCbG8cjqtUZOu2Q0GwuNCnzdAJbPv5PaG5h881 l0Q5L8niVRxofOpGJeMQNngvVXUhUEZ/wouXF9JudBPz3RdMGnfISkIixx6fSvitXzbK iGMnbDnQVbzcJnoaqdJKiJl5mEPeC/O+R7qWmKsaiS242+W2jrWOkaqaQhlOINwPCk36 JylfdxKgh2TjT5maCVB35pPVu+IwNp3EYSmC2n9tdJvT2KMQMPWfvhCQMnSGPE+pmiJT rM4XX5oohJgBHTjsv54nWEy0p8iilkZhyOW+5Z9yIE3RpoTY1C2MzkYbJUotO61nkhSQ 9kqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=FIQwcb+R3Fe4tk+8Me5Va022ROpmH6AgGLeYDpIii+c=; b=qOuHOim1fljL7x/+9VRPxL7dMKWb2eprdkrUTqHyUL4ACH3hdCl74UZXiMv8zgOsE7 hsYIGWDxE65mv6EOBy2BrsqzHncVe86YeT7Vhi068hHQONGfKVi/Nxdl4W7FjgIWzqyS P2HG5FPyMX4pXzGsubfveJEtOH09V53GUn/54Z/B5yKHKGuHlt+zndevzyulWR5XeHou AbLgz0R2EDzvrmznji/+qp36nz2p+BZ/4X0AaxyeIxbkD3B5F/yBNrnJqFN8k8HTEkDY 6jzrIwK29TG84oNJEp6CkzpKCJi8K1NHPiwHsebwipElv9313I6uzKdGRJbLAtOsradO JOFw== X-Gm-Message-State: AOAM531779+JkaL7aslDH3CfhHkQpoMzhmgOdeiVYvA87hh6WB0AjD9r oewR1Y7AKmpFFxxc0EiKnH5lJtAfnMn17Q== X-Google-Smtp-Source: ABdhPJx6MNegbWI1+KqpaEZjdU/+/lHaoQSr5ysemEusdhnZohYDZLBaaIbL3bdV6+ivdkTksIaKog== X-Received: by 2002:a63:d709:: with SMTP id d9mr15566431pgg.337.1621890003684; Mon, 24 May 2021 14:00:03 -0700 (PDT) Received: from omlet.com ([134.134.139.76]) by smtp.gmail.com with ESMTPSA id c195sm12354958pfb.144.2021.05.24.14.00.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 14:00:03 -0700 (PDT) From: Jason Ekstrand To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Subject: [PATCH 0/6] dma-buf: Add an API for exporting sync files (v10) Date: Mon, 24 May 2021 15:59:48 -0500 Message-Id: <20210524205954.872814-1-jason@jlekstrand.net> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Stone , =?UTF-8?q?Michel=20D=C3=A4nzer?= , wayland-devel@lists.freedesktop.org, Jason Ekstrand , Dave Airlie , mesa-dev@lists.freedesktop.org, =?UTF-8?q?Christian=20K=C3=B6nig?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Modern userspace APIs like Vulkan are built on an explicit synchronization model. This doesn't always play nicely with the implicit synchronization used in the kernel and assumed by X11 and Wayland. The client -> compositor half of the synchronization isn't too bad, at least on intel, because we can control whether or not i915 synchronizes on the buffer and whether or not it's considered written. The harder part is the compositor -> client synchronization when we get the buffer back from the compositor. We're required to be able to provide the client with a VkSemaphore and VkFence representing the point in time where the window system (compositor and/or display) finished using the buffer. With current APIs, it's very hard to do this in such a way that we don't get confused by the Vulkan driver's access of the buffer. In particular, once we tell the kernel that we're rendering to the buffer again, any CPU waits on the buffer or GPU dependencies will wait on some of the client rendering and not just the compositor. This new IOCTL solves this problem by allowing us to get a snapshot of the implicit synchronization state of a given dma-buf in the form of a sync file. It's effectively the same as a poll() or I915_GEM_WAIT only, instead of CPU waiting directly, it encapsulates the wait operation, at the current moment in time, in a sync_file so we can check/wait on it later. As long as the Vulkan driver does the sync_file export from the dma-buf before we re-introduce it for rendering, it will only contain fences from the compositor or display. This allows to accurately turn it into a VkFence or VkSemaphore without any over- synchronization. This patch series actually contains two new ioctls. There is the export one mentioned above as well as an RFC for an import ioctl which provides the other half. The intention is to land the export ioctl since it seems like there's no real disagreement on that one. The import ioctl, however, has a lot of debate around it so it's intended to be RFC-only for now. Mesa MR: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4037 IGT tests: https://patchwork.freedesktop.org/series/90490/ v10 (Jason Ekstrand, Daniel Vetter): - Add reviews/acks - Add a patch to rename _rcu to _unlocked - Split things better so import is clearly RFC status Cc: Christian König Cc: Michel Dänzer Cc: Dave Airlie Cc: Bas Nieuwenhuizen Cc: Daniel Stone Cc: mesa-dev@lists.freedesktop.org Cc: wayland-devel@lists.freedesktop.org Test-with: 20210524205225.872316-1-jason@jlekstrand.net Christian König (1): dma-buf: add dma_fence_array_for_each (v2) Jason Ekstrand (5): dma-buf: Rename dma_resv helpers from _rcu to _unlocked dma-buf: add dma_resv_get_singleton_unlocked (v4) dma-buf: Add an API for exporting sync files (v9) RFC: dma-buf: Add an extra fence to dma_resv_get_singleton_unlocked RFC: dma-buf: Add an API for importing sync files (v6) drivers/dma-buf/dma-buf.c | 100 ++++++++++++- drivers/dma-buf/dma-fence-array.c | 27 ++++ drivers/dma-buf/dma-resv.c | 140 ++++++++++++++++-- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 4 +- drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 8 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +- drivers/gpu/drm/drm_gem.c | 6 +- drivers/gpu/drm/drm_gem_atomic_helper.c | 2 +- drivers/gpu/drm/etnaviv/etnaviv_gem.c | 4 +- drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 4 +- drivers/gpu/drm/i915/display/intel_display.c | 2 +- drivers/gpu/drm/i915/dma_resv_utils.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_busy.c | 2 +- .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_object.h | 2 +- drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 2 +- drivers/gpu/drm/i915/gem/i915_gem_wait.c | 10 +- drivers/gpu/drm/i915/i915_request.c | 4 +- drivers/gpu/drm/i915/i915_sw_fence.c | 4 +- drivers/gpu/drm/msm/msm_gem.c | 2 +- drivers/gpu/drm/nouveau/dispnv50/wndw.c | 2 +- drivers/gpu/drm/nouveau/nouveau_gem.c | 2 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 2 +- drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- drivers/gpu/drm/radeon/radeon_gem.c | 6 +- drivers/gpu/drm/radeon/radeon_mn.c | 2 +- drivers/gpu/drm/ttm/ttm_bo.c | 12 +- drivers/gpu/drm/vgem/vgem_fence.c | 2 +- drivers/gpu/drm/virtio/virtgpu_ioctl.c | 4 +- drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 2 +- include/linux/dma-fence-array.h | 17 +++ include/linux/dma-resv.h | 21 +-- include/uapi/linux/dma-buf.h | 25 ++++ 39 files changed, 361 insertions(+), 79 deletions(-) -- 2.31.1 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=-11.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 E8E16C04FF3 for ; Mon, 24 May 2021 21:00:27 +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 873B4613AD for ; Mon, 24 May 2021 21:00:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 873B4613AD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D39F66E23B; Mon, 24 May 2021 21:00:26 +0000 (UTC) Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9408F6E953 for ; Mon, 24 May 2021 21:00:04 +0000 (UTC) Received: by mail-pf1-x434.google.com with SMTP id q67so4804093pfb.4 for ; Mon, 24 May 2021 14:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=FIQwcb+R3Fe4tk+8Me5Va022ROpmH6AgGLeYDpIii+c=; b=KvSNWrUUwrew785VZJzltgHAP3ZmVCbG8cjqtUZOu2Q0GwuNCnzdAJbPv5PaG5h881 l0Q5L8niVRxofOpGJeMQNngvVXUhUEZ/wouXF9JudBPz3RdMGnfISkIixx6fSvitXzbK iGMnbDnQVbzcJnoaqdJKiJl5mEPeC/O+R7qWmKsaiS242+W2jrWOkaqaQhlOINwPCk36 JylfdxKgh2TjT5maCVB35pPVu+IwNp3EYSmC2n9tdJvT2KMQMPWfvhCQMnSGPE+pmiJT rM4XX5oohJgBHTjsv54nWEy0p8iilkZhyOW+5Z9yIE3RpoTY1C2MzkYbJUotO61nkhSQ 9kqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=FIQwcb+R3Fe4tk+8Me5Va022ROpmH6AgGLeYDpIii+c=; b=H026T5ayKftkc4VmP2ujFamypBOr3iazb1Wkg+ymdSCnl2YUHYUIQWWSmVcv27eE0x 8Hbe50OtclXaTSqe8lUQfdPUegWUYPYxuvRnWUH/n2Tz6c1l7m4Sj5BcF4f8+shHbHdz iB4drpOJNjU6VRv7smk4MYQhQ+7x/yPeru7bRyoHVUpt7YpzCTFsyHK4AT3PMuvr3JB1 IzlSqUkzPYDezNc8hanyCZzpyGwIHp7suAGoKfxnWQSRwIRS8aYe0EmtugCHE1kTf5zk /nVu+RrrqruV2rK1C+xUSnYGMwk3+YljtranrjsRRZDTMJThFdfGh6Cp2IDon/vAGuZm rLcA== X-Gm-Message-State: AOAM530InZZQH5GaqQ6gXxk2huRel68Ew9IOMC+QKKiUlBzgxTZZUDIj G27ve2KjbNejkpaXKw4HV3Ujhw== X-Google-Smtp-Source: ABdhPJx6MNegbWI1+KqpaEZjdU/+/lHaoQSr5ysemEusdhnZohYDZLBaaIbL3bdV6+ivdkTksIaKog== X-Received: by 2002:a63:d709:: with SMTP id d9mr15566431pgg.337.1621890003684; Mon, 24 May 2021 14:00:03 -0700 (PDT) Received: from omlet.com ([134.134.139.76]) by smtp.gmail.com with ESMTPSA id c195sm12354958pfb.144.2021.05.24.14.00.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 May 2021 14:00:03 -0700 (PDT) From: Jason Ekstrand To: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Date: Mon, 24 May 2021 15:59:48 -0500 Message-Id: <20210524205954.872814-1-jason@jlekstrand.net> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 0/6] dma-buf: Add an API for exporting sync files (v10) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Stone , =?UTF-8?q?Michel=20D=C3=A4nzer?= , wayland-devel@lists.freedesktop.org, Bas Nieuwenhuizen , Dave Airlie , mesa-dev@lists.freedesktop.org, =?UTF-8?q?Christian=20K=C3=B6nig?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" TW9kZXJuIHVzZXJzcGFjZSBBUElzIGxpa2UgVnVsa2FuIGFyZSBidWlsdCBvbiBhbiBleHBsaWNp dApzeW5jaHJvbml6YXRpb24gbW9kZWwuICBUaGlzIGRvZXNuJ3QgYWx3YXlzIHBsYXkgbmljZWx5 IHdpdGggdGhlCmltcGxpY2l0IHN5bmNocm9uaXphdGlvbiB1c2VkIGluIHRoZSBrZXJuZWwgYW5k IGFzc3VtZWQgYnkgWDExIGFuZApXYXlsYW5kLiAgVGhlIGNsaWVudCAtPiBjb21wb3NpdG9yIGhh bGYgb2YgdGhlIHN5bmNocm9uaXphdGlvbiBpc24ndCB0b28KYmFkLCBhdCBsZWFzdCBvbiBpbnRl bCwgYmVjYXVzZSB3ZSBjYW4gY29udHJvbCB3aGV0aGVyIG9yIG5vdCBpOTE1CnN5bmNocm9uaXpl cyBvbiB0aGUgYnVmZmVyIGFuZCB3aGV0aGVyIG9yIG5vdCBpdCdzIGNvbnNpZGVyZWQgd3JpdHRl bi4KClRoZSBoYXJkZXIgcGFydCBpcyB0aGUgY29tcG9zaXRvciAtPiBjbGllbnQgc3luY2hyb25p emF0aW9uIHdoZW4gd2UgZ2V0CnRoZSBidWZmZXIgYmFjayBmcm9tIHRoZSBjb21wb3NpdG9yLiAg V2UncmUgcmVxdWlyZWQgdG8gYmUgYWJsZSB0bwpwcm92aWRlIHRoZSBjbGllbnQgd2l0aCBhIFZr U2VtYXBob3JlIGFuZCBWa0ZlbmNlIHJlcHJlc2VudGluZyB0aGUgcG9pbnQKaW4gdGltZSB3aGVy ZSB0aGUgd2luZG93IHN5c3RlbSAoY29tcG9zaXRvciBhbmQvb3IgZGlzcGxheSkgZmluaXNoZWQK dXNpbmcgdGhlIGJ1ZmZlci4gIFdpdGggY3VycmVudCBBUElzLCBpdCdzIHZlcnkgaGFyZCB0byBk byB0aGlzIGluIHN1Y2gKYSB3YXkgdGhhdCB3ZSBkb24ndCBnZXQgY29uZnVzZWQgYnkgdGhlIFZ1 bGthbiBkcml2ZXIncyBhY2Nlc3Mgb2YgdGhlCmJ1ZmZlci4gIEluIHBhcnRpY3VsYXIsIG9uY2Ug d2UgdGVsbCB0aGUga2VybmVsIHRoYXQgd2UncmUgcmVuZGVyaW5nIHRvCnRoZSBidWZmZXIgYWdh aW4sIGFueSBDUFUgd2FpdHMgb24gdGhlIGJ1ZmZlciBvciBHUFUgZGVwZW5kZW5jaWVzIHdpbGwK d2FpdCBvbiBzb21lIG9mIHRoZSBjbGllbnQgcmVuZGVyaW5nIGFuZCBub3QganVzdCB0aGUgY29t cG9zaXRvci4KClRoaXMgbmV3IElPQ1RMIHNvbHZlcyB0aGlzIHByb2JsZW0gYnkgYWxsb3dpbmcg dXMgdG8gZ2V0IGEgc25hcHNob3Qgb2YKdGhlIGltcGxpY2l0IHN5bmNocm9uaXphdGlvbiBzdGF0 ZSBvZiBhIGdpdmVuIGRtYS1idWYgaW4gdGhlIGZvcm0gb2YgYQpzeW5jIGZpbGUuICBJdCdzIGVm ZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIGEgcG9sbCgpIG9yIEk5MTVfR0VNX1dBSVQgb25seSwKaW5z dGVhZCBvZiBDUFUgd2FpdGluZyBkaXJlY3RseSwgaXQgZW5jYXBzdWxhdGVzIHRoZSB3YWl0IG9w ZXJhdGlvbiwgYXQKdGhlIGN1cnJlbnQgbW9tZW50IGluIHRpbWUsIGluIGEgc3luY19maWxlIHNv IHdlIGNhbiBjaGVjay93YWl0IG9uIGl0CmxhdGVyLiAgQXMgbG9uZyBhcyB0aGUgVnVsa2FuIGRy aXZlciBkb2VzIHRoZSBzeW5jX2ZpbGUgZXhwb3J0IGZyb20gdGhlCmRtYS1idWYgYmVmb3JlIHdl IHJlLWludHJvZHVjZSBpdCBmb3IgcmVuZGVyaW5nLCBpdCB3aWxsIG9ubHkgY29udGFpbgpmZW5j ZXMgZnJvbSB0aGUgY29tcG9zaXRvciBvciBkaXNwbGF5LiAgVGhpcyBhbGxvd3MgdG8gYWNjdXJh dGVseSB0dXJuCml0IGludG8gYSBWa0ZlbmNlIG9yIFZrU2VtYXBob3JlIHdpdGhvdXQgYW55IG92 ZXItIHN5bmNocm9uaXphdGlvbi4KClRoaXMgcGF0Y2ggc2VyaWVzIGFjdHVhbGx5IGNvbnRhaW5z IHR3byBuZXcgaW9jdGxzLiAgVGhlcmUgaXMgdGhlIGV4cG9ydApvbmUgbWVudGlvbmVkIGFib3Zl IGFzIHdlbGwgYXMgYW4gUkZDIGZvciBhbiBpbXBvcnQgaW9jdGwgd2hpY2ggcHJvdmlkZXMKdGhl IG90aGVyIGhhbGYuICBUaGUgaW50ZW50aW9uIGlzIHRvIGxhbmQgdGhlIGV4cG9ydCBpb2N0bCBz aW5jZSBpdCBzZWVtcwpsaWtlIHRoZXJlJ3Mgbm8gcmVhbCBkaXNhZ3JlZW1lbnQgb24gdGhhdCBv bmUuICBUaGUgaW1wb3J0IGlvY3RsLCBob3dldmVyLApoYXMgYSBsb3Qgb2YgZGViYXRlIGFyb3Vu ZCBpdCBzbyBpdCdzIGludGVuZGVkIHRvIGJlIFJGQy1vbmx5IGZvciBub3cuCgpNZXNhIE1SOiBo dHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvbWVzYS9tZXNhLy0vbWVyZ2VfcmVxdWVzdHMv NDAzNwpJR1QgdGVzdHM6IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJpZXMv OTA0OTAvCgp2MTAgKEphc29uIEVrc3RyYW5kLCBEYW5pZWwgVmV0dGVyKToKIC0gQWRkIHJldmll d3MvYWNrcwogLSBBZGQgYSBwYXRjaCB0byByZW5hbWUgX3JjdSB0byBfdW5sb2NrZWQKIC0gU3Bs aXQgdGhpbmdzIGJldHRlciBzbyBpbXBvcnQgaXMgY2xlYXJseSBSRkMgc3RhdHVzCgpDYzogQ2hy aXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgpDYzogTWljaGVsIETDpG56 ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5j b20+CkNjOiBCYXMgTmlldXdlbmh1aXplbiA8YmFzQGJhc25pZXV3ZW5odWl6ZW4ubmw+CkNjOiBE YW5pZWwgU3RvbmUgPGRhbmllbHNAY29sbGFib3JhLmNvbT4KQ2M6IG1lc2EtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpDYzogd2F5bGFuZC1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKVGVz dC13aXRoOiAyMDIxMDUyNDIwNTIyNS44NzIzMTYtMS1qYXNvbkBqbGVrc3RyYW5kLm5ldAoKQ2hy aXN0aWFuIEvDtm5pZyAoMSk6CiAgZG1hLWJ1ZjogYWRkIGRtYV9mZW5jZV9hcnJheV9mb3JfZWFj aCAodjIpCgpKYXNvbiBFa3N0cmFuZCAoNSk6CiAgZG1hLWJ1ZjogUmVuYW1lIGRtYV9yZXN2IGhl bHBlcnMgZnJvbSBfcmN1IHRvIF91bmxvY2tlZAogIGRtYS1idWY6IGFkZCBkbWFfcmVzdl9nZXRf c2luZ2xldG9uX3VubG9ja2VkICh2NCkKICBkbWEtYnVmOiBBZGQgYW4gQVBJIGZvciBleHBvcnRp bmcgc3luYyBmaWxlcyAodjkpCiAgUkZDOiBkbWEtYnVmOiBBZGQgYW4gZXh0cmEgZmVuY2UgdG8g ZG1hX3Jlc3ZfZ2V0X3NpbmdsZXRvbl91bmxvY2tlZAogIFJGQzogZG1hLWJ1ZjogQWRkIGFuIEFQ SSBmb3IgaW1wb3J0aW5nIHN5bmMgZmlsZXMgKHY2KQoKIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVm LmMgICAgICAgICAgICAgICAgICAgICB8IDEwMCArKysrKysrKysrKystCiBkcml2ZXJzL2RtYS1i dWYvZG1hLWZlbmNlLWFycmF5LmMgICAgICAgICAgICAgfCAgMjcgKysrKwogZHJpdmVycy9kbWEt YnVmL2RtYS1yZXN2LmMgICAgICAgICAgICAgICAgICAgIHwgMTQwICsrKysrKysrKysrKysrKyst LQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYyAgIHwgICAyICst CiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jICAgfCAgIDIgKy0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAgICAgICB8ICAgMiArLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2lkcy5jICAgICAgIHwgICA0ICstCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgICAgICAgfCAgIDIgKy0KIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYyAgICB8ICAgMiArLQogZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5jICAgICAgIHwgICAyICstCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAgICAgfCAgIDggKy0KIC4uLi9n cHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYyB8ICAgMiArLQogZHJpdmVy cy9ncHUvZHJtL2RybV9nZW0uYyAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJz L2dwdS9kcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmMgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9n cHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMgIHwgICA0ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxzLmMgICAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYyAgICAgIHwgICAyICstCiAuLi4vZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYyAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jICAgICAgfCAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICAgNCArLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zd19mZW5jZS5jICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9nZW0uYyAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9ub3V2 ZWF1L2Rpc3BudjUwL3duZHcuYyAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL25vdXZl YXUvbm91dmVhdV9nZW0uYyAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3RfZHJ2LmMgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9qb2IuYyAgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9y YWRlb25fZ2VtLmMgICAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbl9tbi5jICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv LmMgICAgICAgICAgICAgICAgICB8ICAxMiArLQogZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9m ZW5jZS5jICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRn cHVfaW9jdGwuYyAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2JvLmMgICAgICAgICAgICB8ICAgMiArLQogaW5jbHVkZS9saW51eC9kbWEtZmVuY2UtYXJyYXku aCAgICAgICAgICAgICAgIHwgIDE3ICsrKwogaW5jbHVkZS9saW51eC9kbWEtcmVzdi5oICAgICAg ICAgICAgICAgICAgICAgIHwgIDIxICstLQogaW5jbHVkZS91YXBpL2xpbnV4L2RtYS1idWYuaCAg ICAgICAgICAgICAgICAgIHwgIDI1ICsrKysKIDM5IGZpbGVzIGNoYW5nZWQsIDM2MSBpbnNlcnRp b25zKCspLCA3OSBkZWxldGlvbnMoLSkKCi0tIAoyLjMxLjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=