From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2D4E3C20 for ; Thu, 20 Oct 2022 13:38:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 561CBC433D6; Thu, 20 Oct 2022 13:38:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666273117; bh=HpX2uNEc0GUdzYR5KnGOZkH0x1pbX64lowoU6XXIYiM=; h=From:To:Cc:Subject:Date:From; b=C8AQGXzsp9BTueq43xT/ola3YGVM9ZG57Q68jVxmR+9JHIdAcjAhhmNzVbBNdGd6A 1gu8O8RWPe1GWrNMlMdbyYK7dt+1pMJvBvRT/S9/Tk5Qu77xq+g18pFO8MWAuBYOKf DVfXiqWWZs+NmkSBzZvmRnjJOJTsKxT9uleXE7N6H0UfPu+U2kfO1neZ0SvxnMQ0IO nq+sfQ+O/B24nMK8z6SEtF+LnVV8KYB8p8v/UJTTbYumuyLUvUmCt54S8yfwoMlcI/ ka2iCP3rrkhxOH8Asf6qCZgct7hMyqPjVLBQmg0DTbfXMZdXTEmTNkG5/cPov/LMFv 4s/Qrc/GrGd9g== From: Will Deacon To: kvmarm@lists.linux.dev Cc: Will Deacon , Sean Christopherson , Vincent Donnefort , Alexandru Elisei , Catalin Marinas , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , James Morse , Chao Peng , Quentin Perret , Suzuki K Poulose , Mark Rutland , Fuad Tabba , Oliver Upton , Marc Zyngier , kernel-team@android.com, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 00/25] KVM: arm64: Introduce pKVM hyp VM and vCPU state at EL2 Date: Thu, 20 Oct 2022 14:38:02 +0100 Message-Id: <20221020133827.5541-1-will@kernel.org> X-Mailer: git-send-email 2.20.1 Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi all, This is version five of the pKVM EL2 state series, following hot on the heels of v4: Mega-patch: https://lore.kernel.org/kvmarm/20220519134204.5379-1-will@kernel.org/ v2: https://lore.kernel.org/all/20220630135747.26983-1-will@kernel.org/ v3: https://lore.kernel.org/kvmarm/20220914083500.5118-1-will@kernel.org/ v4: https://lore.kernel.org/kvm/20221017115209.2099-1-will@kernel.org/ This series extends the pKVM EL2 code so that it can dynamically instantiate and manage VM data structures without the host being able to access them directly. These structures consist of a hyp VM, a set of hyp vCPUs and the stage-2 page-table for the MMU. The pages used to hold the hypervisor structures are returned to the host when the VM is destroyed. Thanks to everyone who provided feedback and tags on the previous version. The main changes in v5 are: * Removed kvm_protected_vm::vm_lock in favour of existing kvm::lock * Removed pkvm_hyp_vm::donated_memory_size as this can be computed * Use inner-shareable barriers and TLB invalidation in the fixmap code * Don't check for the host donating the same host 'kvm' structure twice * Fixed comment relating to maximum number of protected VMs * Added tags * Reworked some of the patch authorship/Co-developed-by tags to better match reality * Remembered to mark the last patch as RFC... Cheers, Will, Quentin, Fuad and Marc Cc: Sean Christopherson Cc: Will Deacon Cc: Vincent Donnefort Cc: Alexandru Elisei Cc: Catalin Marinas Cc: Philippe Mathieu-Daudé Cc: James Morse Cc: Chao Peng Cc: Quentin Perret Cc: Suzuki K Poulose Cc: Mark Rutland Cc: Fuad Tabba Cc: Oliver Upton Cc: Marc Zyngier Cc: kernel-team@android.com Cc: kvm@vger.kernel.org Cc: kvmarm@lists.linux.dev Cc: linux-arm-kernel@lists.infradead.org --->8 Fuad Tabba (3): KVM: arm64: Add hyp_spinlock_t static initializer KVM: arm64: Add infrastructure to create and track pKVM instances at EL2 KVM: arm64: Instantiate pKVM hypervisor VM and vCPU structures from EL1 Quentin Perret (14): KVM: arm64: Move hyp refcount manipulation helpers to common header file KVM: arm64: Allow attaching of non-coalescable pages to a hyp pool KVM: arm64: Back the hypervisor 'struct hyp_page' array for all memory KVM: arm64: Fix-up hyp stage-1 refcounts for all pages mapped at EL2 KVM: arm64: Prevent the donation of no-map pages KVM: arm64: Add helpers to pin memory shared with the hypervisor at EL2 KVM: arm64: Add per-cpu fixmap infrastructure at EL2 KVM: arm64: Add generic hyp_memcache helpers KVM: arm64: Consolidate stage-2 initialisation into a single function KVM: arm64: Instantiate guest stage-2 page-tables at EL2 KVM: arm64: Return guest memory from EL2 via dedicated teardown memcache KVM: arm64: Unmap 'kvm_arm_hyp_percpu_base' from the host KVM: arm64: Explicitly map 'kvm_vgic_global_state' at EL2 KVM: arm64: Don't unnecessarily map host kernel sections at EL2 Will Deacon (8): KVM: arm64: Unify identifiers used to distinguish host and hypervisor KVM: arm64: Implement do_donate() helper for donating memory KVM: arm64: Include asm/kvm_mmu.h in nvhe/mem_protect.h KVM: arm64: Rename 'host_kvm' to 'host_mmu' KVM: arm64: Initialise hypervisor copies of host symbols unconditionally KVM: arm64: Provide I-cache invalidation by virtual address at EL2 KVM: arm64: Maintain a copy of 'kvm_arm_vmid_bits' at EL2 KVM: arm64: Use the pKVM hyp vCPU structure in handle___kvm_vcpu_run() arch/arm64/include/asm/kvm_arm.h | 2 +- arch/arm64/include/asm/kvm_asm.h | 7 +- arch/arm64/include/asm/kvm_host.h | 72 ++- arch/arm64/include/asm/kvm_hyp.h | 3 + arch/arm64/include/asm/kvm_mmu.h | 2 +- arch/arm64/include/asm/kvm_pgtable.h | 22 + arch/arm64/include/asm/kvm_pkvm.h | 38 ++ arch/arm64/kernel/image-vars.h | 15 - arch/arm64/kvm/arm.c | 61 ++- arch/arm64/kvm/hyp/hyp-constants.c | 3 + arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 25 +- arch/arm64/kvm/hyp/include/nvhe/memory.h | 27 + arch/arm64/kvm/hyp/include/nvhe/mm.h | 18 +- arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 68 +++ arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 10 +- arch/arm64/kvm/hyp/nvhe/cache.S | 11 + arch/arm64/kvm/hyp/nvhe/hyp-main.c | 110 +++- arch/arm64/kvm/hyp/nvhe/hyp-smp.c | 2 + arch/arm64/kvm/hyp/nvhe/mem_protect.c | 502 ++++++++++++++++-- arch/arm64/kvm/hyp/nvhe/mm.c | 168 +++++- arch/arm64/kvm/hyp/nvhe/page_alloc.c | 28 +- arch/arm64/kvm/hyp/nvhe/pkvm.c | 434 +++++++++++++++ arch/arm64/kvm/hyp/nvhe/setup.c | 96 ++-- arch/arm64/kvm/hyp/pgtable.c | 21 +- arch/arm64/kvm/mmu.c | 55 +- arch/arm64/kvm/pkvm.c | 138 ++++- arch/arm64/kvm/reset.c | 29 - 27 files changed, 1751 insertions(+), 216 deletions(-) create mode 100644 arch/arm64/kvm/hyp/include/nvhe/pkvm.h -- 2.38.0.413.g74048e4d9e-goog 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 90F97C4332F for ; Thu, 20 Oct 2022 13:48:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=UsLnxILMwjLtSvMI0hbzSRaNaLtTD0KxYTzUsZ7aV+w=; b=3TSR14V8bKmUlY 9ySds+LHfYhAVxuQOqVZf+zSQATLwMkkXZdldXK8vslKpcVXKhzMJDisFZFw675OdbjEOZbbAhJiF 5Ey8FXBSX/IXZtBw3nMV5VD/ByB9qMx6nrT6+rTCOOjhqWXhP1WewBTmOZq2fRfnSJGEJHo46rxAJ cmFpsLtbkkvegj32BUpqWgM/63L2Ut8WGJRi2s+l+YPAwTefYjkSyYUXPzmCuXwoAuSAE7xGJ/ADQ cSnr8YIHRqJXLit7NeTgtgLUPrfFBt8iIGkEJzOh5qZWl3O1NPFrDddG+9l/YJVjhrX22CGmLywag 3iqdlvqb9yILQuFzSB0A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1olVsz-00FiBh-MS; Thu, 20 Oct 2022 13:47:01 +0000 Received: from dfw.source.kernel.org ([2604:1380:4641:c500::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1olVku-00FZje-E8 for linux-arm-kernel@lists.infradead.org; Thu, 20 Oct 2022 13:38:42 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 2E7AA61B91; Thu, 20 Oct 2022 13:38:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 561CBC433D6; Thu, 20 Oct 2022 13:38:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666273117; bh=HpX2uNEc0GUdzYR5KnGOZkH0x1pbX64lowoU6XXIYiM=; h=From:To:Cc:Subject:Date:From; b=C8AQGXzsp9BTueq43xT/ola3YGVM9ZG57Q68jVxmR+9JHIdAcjAhhmNzVbBNdGd6A 1gu8O8RWPe1GWrNMlMdbyYK7dt+1pMJvBvRT/S9/Tk5Qu77xq+g18pFO8MWAuBYOKf DVfXiqWWZs+NmkSBzZvmRnjJOJTsKxT9uleXE7N6H0UfPu+U2kfO1neZ0SvxnMQ0IO nq+sfQ+O/B24nMK8z6SEtF+LnVV8KYB8p8v/UJTTbYumuyLUvUmCt54S8yfwoMlcI/ ka2iCP3rrkhxOH8Asf6qCZgct7hMyqPjVLBQmg0DTbfXMZdXTEmTNkG5/cPov/LMFv 4s/Qrc/GrGd9g== From: Will Deacon To: kvmarm@lists.linux.dev Cc: Will Deacon , Sean Christopherson , Vincent Donnefort , Alexandru Elisei , Catalin Marinas , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , James Morse , Chao Peng , Quentin Perret , Suzuki K Poulose , Mark Rutland , Fuad Tabba , Oliver Upton , Marc Zyngier , kernel-team@android.com, kvm@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v5 00/25] KVM: arm64: Introduce pKVM hyp VM and vCPU state at EL2 Date: Thu, 20 Oct 2022 14:38:02 +0100 Message-Id: <20221020133827.5541-1-will@kernel.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221020_063840_593771_F4EACFD6 X-CRM114-Status: GOOD ( 18.82 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgYWxsLAoKVGhpcyBpcyB2ZXJzaW9uIGZpdmUgb2YgdGhlIHBLVk0gRUwyIHN0YXRlIHNlcmll cywgZm9sbG93aW5nIGhvdCBvbiB0aGUKaGVlbHMgb2YgdjQ6CgogIE1lZ2EtcGF0Y2g6IGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL2t2bWFybS8yMDIyMDUxOTEzNDIwNC41Mzc5LTEtd2lsbEBrZXJu ZWwub3JnLwogIHYyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMjA2MzAxMzU3NDcu MjY5ODMtMS13aWxsQGtlcm5lbC5vcmcvCiAgdjM6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2t2 bWFybS8yMDIyMDkxNDA4MzUwMC41MTE4LTEtd2lsbEBrZXJuZWwub3JnLwogIHY0OiBodHRwczov L2xvcmUua2VybmVsLm9yZy9rdm0vMjAyMjEwMTcxMTUyMDkuMjA5OS0xLXdpbGxAa2VybmVsLm9y Zy8KClRoaXMgc2VyaWVzIGV4dGVuZHMgdGhlIHBLVk0gRUwyIGNvZGUgc28gdGhhdCBpdCBjYW4g ZHluYW1pY2FsbHkKaW5zdGFudGlhdGUgYW5kIG1hbmFnZSBWTSBkYXRhIHN0cnVjdHVyZXMgd2l0 aG91dCB0aGUgaG9zdCBiZWluZyBhYmxlIHRvCmFjY2VzcyB0aGVtIGRpcmVjdGx5LiBUaGVzZSBz dHJ1Y3R1cmVzIGNvbnNpc3Qgb2YgYSBoeXAgVk0sIGEgc2V0IG9mIGh5cAp2Q1BVcyBhbmQgdGhl IHN0YWdlLTIgcGFnZS10YWJsZSBmb3IgdGhlIE1NVS4gVGhlIHBhZ2VzIHVzZWQgdG8gaG9sZCB0 aGUKaHlwZXJ2aXNvciBzdHJ1Y3R1cmVzIGFyZSByZXR1cm5lZCB0byB0aGUgaG9zdCB3aGVuIHRo ZSBWTSBpcyBkZXN0cm95ZWQuCgpUaGFua3MgdG8gZXZlcnlvbmUgd2hvIHByb3ZpZGVkIGZlZWRi YWNrIGFuZCB0YWdzIG9uIHRoZSBwcmV2aW91cyB2ZXJzaW9uLgpUaGUgbWFpbiBjaGFuZ2VzIGlu IHY1IGFyZToKCiAgKiBSZW1vdmVkIGt2bV9wcm90ZWN0ZWRfdm06OnZtX2xvY2sgaW4gZmF2b3Vy IG9mIGV4aXN0aW5nIGt2bTo6bG9jawoKICAqIFJlbW92ZWQgcGt2bV9oeXBfdm06OmRvbmF0ZWRf bWVtb3J5X3NpemUgYXMgdGhpcyBjYW4gYmUgY29tcHV0ZWQKCiAgKiBVc2UgaW5uZXItc2hhcmVh YmxlIGJhcnJpZXJzIGFuZCBUTEIgaW52YWxpZGF0aW9uIGluIHRoZSBmaXhtYXAgY29kZQoKICAq IERvbid0IGNoZWNrIGZvciB0aGUgaG9zdCBkb25hdGluZyB0aGUgc2FtZSBob3N0ICdrdm0nIHN0 cnVjdHVyZQogICAgdHdpY2UKCiAgKiBGaXhlZCBjb21tZW50IHJlbGF0aW5nIHRvIG1heGltdW0g bnVtYmVyIG9mIHByb3RlY3RlZCBWTXMKCiAgKiBBZGRlZCB0YWdzCgogICogUmV3b3JrZWQgc29t ZSBvZiB0aGUgcGF0Y2ggYXV0aG9yc2hpcC9Dby1kZXZlbG9wZWQtYnkgdGFncyB0byBiZXR0ZXIK ICAgIG1hdGNoIHJlYWxpdHkKCiAgKiBSZW1lbWJlcmVkIHRvIG1hcmsgdGhlIGxhc3QgcGF0Y2gg YXMgUkZDLi4uCgpDaGVlcnMsCgpXaWxsLCBRdWVudGluLCBGdWFkIGFuZCBNYXJjCgpDYzogU2Vh biBDaHJpc3RvcGhlcnNvbiA8c2VhbmpjQGdvb2dsZS5jb20+CkNjOiBXaWxsIERlYWNvbiA8d2ls bEBrZXJuZWwub3JnPgpDYzogVmluY2VudCBEb25uZWZvcnQgPHZkb25uZWZvcnRAZ29vZ2xlLmNv bT4KQ2M6IEFsZXhhbmRydSBFbGlzZWkgPGFsZXhhbmRydS5lbGlzZWlAYXJtLmNvbT4KQ2M6IENh dGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CkNjOiBQaGlsaXBwZSBNYXRo aWV1LURhdWTDqSA8cGhpbG1kQGxpbmFyby5vcmc+CkNjOiBKYW1lcyBNb3JzZSA8amFtZXMubW9y c2VAYXJtLmNvbT4KQ2M6IENoYW8gUGVuZyA8Y2hhby5wLnBlbmdAbGludXguaW50ZWwuY29tPgpD YzogUXVlbnRpbiBQZXJyZXQgPHFwZXJyZXRAZ29vZ2xlLmNvbT4KQ2M6IFN1enVraSBLIFBvdWxv c2UgPHN1enVraS5wb3Vsb3NlQGFybS5jb20+CkNjOiBNYXJrIFJ1dGxhbmQgPG1hcmsucnV0bGFu ZEBhcm0uY29tPgpDYzogRnVhZCBUYWJiYSA8dGFiYmFAZ29vZ2xlLmNvbT4KQ2M6IE9saXZlciBV cHRvbiA8b2xpdmVyLnVwdG9uQGxpbnV4LmRldj4KQ2M6IE1hcmMgWnluZ2llciA8bWF6QGtlcm5l bC5vcmc+CgpDYzoga2VybmVsLXRlYW1AYW5kcm9pZC5jb20KQ2M6IGt2bUB2Z2VyLmtlcm5lbC5v cmcKQ2M6IGt2bWFybUBsaXN0cy5saW51eC5kZXYKQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwoKLS0tPjgKCkZ1YWQgVGFiYmEgKDMpOgogIEtWTTogYXJtNjQ6IEFkZCBo eXBfc3BpbmxvY2tfdCBzdGF0aWMgaW5pdGlhbGl6ZXIKICBLVk06IGFybTY0OiBBZGQgaW5mcmFz dHJ1Y3R1cmUgdG8gY3JlYXRlIGFuZCB0cmFjayBwS1ZNIGluc3RhbmNlcyBhdAogICAgRUwyCiAg S1ZNOiBhcm02NDogSW5zdGFudGlhdGUgcEtWTSBoeXBlcnZpc29yIFZNIGFuZCB2Q1BVIHN0cnVj dHVyZXMgZnJvbQogICAgRUwxCgpRdWVudGluIFBlcnJldCAoMTQpOgogIEtWTTogYXJtNjQ6IE1v dmUgaHlwIHJlZmNvdW50IG1hbmlwdWxhdGlvbiBoZWxwZXJzIHRvIGNvbW1vbiBoZWFkZXIKICAg IGZpbGUKICBLVk06IGFybTY0OiBBbGxvdyBhdHRhY2hpbmcgb2Ygbm9uLWNvYWxlc2NhYmxlIHBh Z2VzIHRvIGEgaHlwIHBvb2wKICBLVk06IGFybTY0OiBCYWNrIHRoZSBoeXBlcnZpc29yICdzdHJ1 Y3QgaHlwX3BhZ2UnIGFycmF5IGZvciBhbGwgbWVtb3J5CiAgS1ZNOiBhcm02NDogRml4LXVwIGh5 cCBzdGFnZS0xIHJlZmNvdW50cyBmb3IgYWxsIHBhZ2VzIG1hcHBlZCBhdCBFTDIKICBLVk06IGFy bTY0OiBQcmV2ZW50IHRoZSBkb25hdGlvbiBvZiBuby1tYXAgcGFnZXMKICBLVk06IGFybTY0OiBB ZGQgaGVscGVycyB0byBwaW4gbWVtb3J5IHNoYXJlZCB3aXRoIHRoZSBoeXBlcnZpc29yIGF0CiAg ICBFTDIKICBLVk06IGFybTY0OiBBZGQgcGVyLWNwdSBmaXhtYXAgaW5mcmFzdHJ1Y3R1cmUgYXQg RUwyCiAgS1ZNOiBhcm02NDogQWRkIGdlbmVyaWMgaHlwX21lbWNhY2hlIGhlbHBlcnMKICBLVk06 IGFybTY0OiBDb25zb2xpZGF0ZSBzdGFnZS0yIGluaXRpYWxpc2F0aW9uIGludG8gYSBzaW5nbGUg ZnVuY3Rpb24KICBLVk06IGFybTY0OiBJbnN0YW50aWF0ZSBndWVzdCBzdGFnZS0yIHBhZ2UtdGFi bGVzIGF0IEVMMgogIEtWTTogYXJtNjQ6IFJldHVybiBndWVzdCBtZW1vcnkgZnJvbSBFTDIgdmlh IGRlZGljYXRlZCB0ZWFyZG93bgogICAgbWVtY2FjaGUKICBLVk06IGFybTY0OiBVbm1hcCAna3Zt X2FybV9oeXBfcGVyY3B1X2Jhc2UnIGZyb20gdGhlIGhvc3QKICBLVk06IGFybTY0OiBFeHBsaWNp dGx5IG1hcCAna3ZtX3ZnaWNfZ2xvYmFsX3N0YXRlJyBhdCBFTDIKICBLVk06IGFybTY0OiBEb24n dCB1bm5lY2Vzc2FyaWx5IG1hcCBob3N0IGtlcm5lbCBzZWN0aW9ucyBhdCBFTDIKCldpbGwgRGVh Y29uICg4KToKICBLVk06IGFybTY0OiBVbmlmeSBpZGVudGlmaWVycyB1c2VkIHRvIGRpc3Rpbmd1 aXNoIGhvc3QgYW5kIGh5cGVydmlzb3IKICBLVk06IGFybTY0OiBJbXBsZW1lbnQgZG9fZG9uYXRl KCkgaGVscGVyIGZvciBkb25hdGluZyBtZW1vcnkKICBLVk06IGFybTY0OiBJbmNsdWRlIGFzbS9r dm1fbW11LmggaW4gbnZoZS9tZW1fcHJvdGVjdC5oCiAgS1ZNOiBhcm02NDogUmVuYW1lICdob3N0 X2t2bScgdG8gJ2hvc3RfbW11JwogIEtWTTogYXJtNjQ6IEluaXRpYWxpc2UgaHlwZXJ2aXNvciBj b3BpZXMgb2YgaG9zdCBzeW1ib2xzCiAgICB1bmNvbmRpdGlvbmFsbHkKICBLVk06IGFybTY0OiBQ cm92aWRlIEktY2FjaGUgaW52YWxpZGF0aW9uIGJ5IHZpcnR1YWwgYWRkcmVzcyBhdCBFTDIKICBL Vk06IGFybTY0OiBNYWludGFpbiBhIGNvcHkgb2YgJ2t2bV9hcm1fdm1pZF9iaXRzJyBhdCBFTDIK ICBLVk06IGFybTY0OiBVc2UgdGhlIHBLVk0gaHlwIHZDUFUgc3RydWN0dXJlIGluIGhhbmRsZV9f X2t2bV92Y3B1X3J1bigpCgogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggICAgICAg ICAgICAgIHwgICAyICstCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hc20uaCAgICAgICAg ICAgICAgfCAgIDcgKy0KIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCAgICAgICAg ICAgICB8ICA3MiArKy0KIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2h5cC5oICAgICAgICAg ICAgICB8ICAgMyArCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaCAgICAgICAgICAg ICAgfCAgIDIgKy0KIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCAgICAgICAg ICB8ICAyMiArCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wa3ZtLmggICAgICAgICAgICAg fCAgMzggKysKIGFyY2gvYXJtNjQva2VybmVsL2ltYWdlLXZhcnMuaCAgICAgICAgICAgICAgICB8 ICAxNSAtCiBhcmNoL2FybTY0L2t2bS9hcm0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg NjEgKystCiBhcmNoL2FybTY0L2t2bS9oeXAvaHlwLWNvbnN0YW50cy5jICAgICAgICAgICAgfCAg IDMgKwogYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvbnZoZS9tZW1fcHJvdGVjdC5oIHwgIDI1 ICstCiBhcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9udmhlL21lbW9yeS5oICAgICAgfCAgMjcg KwogYXJjaC9hcm02NC9rdm0vaHlwL2luY2x1ZGUvbnZoZS9tbS5oICAgICAgICAgIHwgIDE4ICst CiBhcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9udmhlL3Brdm0uaCAgICAgICAgfCAgNjggKysr CiBhcmNoL2FybTY0L2t2bS9oeXAvaW5jbHVkZS9udmhlL3NwaW5sb2NrLmggICAgfCAgMTAgKy0K IGFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL2NhY2hlLlMgICAgICAgICAgICAgICB8ICAxMSArCiBh cmNoL2FybTY0L2t2bS9oeXAvbnZoZS9oeXAtbWFpbi5jICAgICAgICAgICAgfCAxMTAgKysrLQog YXJjaC9hcm02NC9rdm0vaHlwL252aGUvaHlwLXNtcC5jICAgICAgICAgICAgIHwgICAyICsKIGFy Y2gvYXJtNjQva3ZtL2h5cC9udmhlL21lbV9wcm90ZWN0LmMgICAgICAgICB8IDUwMiArKysrKysr KysrKysrKysrLS0KIGFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL21tLmMgICAgICAgICAgICAgICAg ICB8IDE2OCArKysrKy0KIGFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3BhZ2VfYWxsb2MuYyAgICAg ICAgICB8ICAyOCArLQogYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jICAgICAgICAgICAg ICAgIHwgNDM0ICsrKysrKysrKysrKysrKwogYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc2V0dXAu YyAgICAgICAgICAgICAgIHwgIDk2ICsrLS0KIGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMg ICAgICAgICAgICAgICAgICB8ICAyMSArLQogYXJjaC9hcm02NC9rdm0vbW11LmMgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDU1ICstCiBhcmNoL2FybTY0L2t2bS9wa3ZtLmMgICAgICAgICAg ICAgICAgICAgICAgICAgfCAxMzggKysrKy0KIGFyY2gvYXJtNjQva3ZtL3Jlc2V0LmMgICAgICAg ICAgICAgICAgICAgICAgICB8ICAyOSAtCiAyNyBmaWxlcyBjaGFuZ2VkLCAxNzUxIGluc2VydGlv bnMoKyksIDIxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybTY0L2t2 bS9oeXAvaW5jbHVkZS9udmhlL3Brdm0uaAoKLS0gCjIuMzguMC40MTMuZzc0MDQ4ZTRkOWUtZ29v ZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK