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 98F3E7A for ; Tue, 17 May 2022 18:49:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65D07C385B8; Tue, 17 May 2022 18:49:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652813365; bh=QbR97zXTo/NaC1jwtAoXzhOVIO4EnZxkhALYWJt3s1g=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kuqWIdQKLyeN7nlz+CcqYfc4xOJV5rQVhDnfvKvx8yT3JSbeof2xnY4I+qsyFGWeZ 40z5U6jzfh9FSlv3AYsJaRfAYzAOF2XEzqiWQQ2Si7azi0sulysaAB39QMrGRUi/ps FGq991sN8UyU5oqjSmza7h5PqZHLIGlLV8fB4GNA3vDjJZXHGHMkgjEL7bUhpy20UJ Eb4HMJLirkNk/g9phi8jqLbugty5tc6+2d2RE6mZ/Xxb0ErMlIx+F1unhHb5w0yF/g bFYtWV1PRiBCQJdaV4dTNruigqO4/WrMLcksw54XFreFrFSd0FnOTFn1XF4D1uwoKH P5woZcV7I7FtQ== Date: Tue, 17 May 2022 11:49:22 -0700 From: Nathan Chancellor To: Sedat Dilek Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Kees Cook , Josh Poimboeuf , Peter Zijlstra , x86@kernel.org, Catalin Marinas , Will Deacon , Mark Rutland , Nick Desaulniers , Joao Moreira , Steven Rostedt , linux-hardening@vger.kernel.org, linux-arm-kernel@lists.infradead.org, llvm@lists.linux.dev Subject: Re: [RFC PATCH v2 00/21] KCFI support Message-ID: References: <20220513202159.1550547-1-samitolvanen@google.com> Precedence: bulk X-Mailing-List: llvm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Tue, May 17, 2022 at 09:33:47AM +0200, Sedat Dilek wrote: > Is your tags/kcfi-rfc-v2 the recommended LLVM toolchain for testing kcfi-rfc-v2? > > What I want to ask is if your commit well tested for x86 (and arm64) > means build and boot on bare metal? I have run kCFI (v1, I haven't had time to test v2) on x86_64 hardware, both AMD and Intel. I have only found two failures so far: the i915 issue that I mention below and a failure in the KVM subsystem, which I can see by just running QEMU: [ 124.344654] CFI failure at kvm_mmu_notifier_invalidate_range_end+0xca/0x177 [kvm] (target: kvm_null_fn+0x0/0x7 [kvm]; expected type: 0x1e2c5b9c) [ 124.344691] WARNING: CPU: 5 PID: 2767 at kvm_mmu_notifier_invalidate_range_end+0xca/0x177 [kvm] [ 124.344708] Modules linked in: ... [ 124.344737] CPU: 5 PID: 2767 Comm: qemu-system-x86 Tainted: P 5.18.0-rc6-debug-00033-g1d5284aff7cd #1 8c4966c7fb24f3345076747feebac5fb340a4797 [ 124.344738] Hardware name: ASUS System Product Name/PRIME Z590M-PLUS, BIOS 1203 10/27/2021 [ 124.344738] RIP: 0010:kvm_mmu_notifier_invalidate_range_end+0xca/0x177 [kvm] [ 124.344756] Code: 48 89 da e8 88 16 86 dd 48 85 c0 89 6c 24 0c 74 30 4d 85 f6 74 36 48 c7 c5 19 c8 b4 c0 4c 8b 34 24 81 7d fa 9c 5b 2c 1e 74 02 <0f> 0b 48 89 c7 4c 89 fe 48 89 da e8 b6 16 86 dd 48 85 c0 75 e2 eb [ 124.344757] RSP: 0018:ffffc033039d78e8 EFLAGS: 00010282 [ 124.344758] RAX: ffffa0a141ed9450 RBX: 00007fb897e9efff RCX: ffffa0a143c9d850 [ 124.344758] RDX: 00007fb897e9efff RSI: 00007fb897e9e000 RDI: ffffc03304499cf8 [ 124.344759] RBP: ffffffffc0b4c819 R08: 0000000000000000 R09: 0000000000000000 [ 124.344759] R10: 0000000000000000 R11: ffffffffc0b4c639 R12: ffffc03304499000 [ 124.344760] R13: ffffc033044a30a0 R14: ffffc033044a3120 R15: 00007fb897e9e000 [ 124.344760] FS: 00007fbca4bc3640(0000) GS:ffffa0a87f540000(0000) knlGS:0000000000000000 [ 124.344761] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 124.344761] CR2: 0000000000000000 CR3: 0000000119f74006 CR4: 0000000000772ee0 [ 124.344762] PKRU: 55555554 [ 124.344762] Call Trace: [ 124.344762] [ 124.344763] __mmu_notifier_invalidate_range_end+0xa1/0xd7 [ 124.344764] wp_page_copy+0x592/0x920 [ 124.344766] __handle_mm_fault+0x820/0x8f0 [ 124.344767] handle_mm_fault+0xe0/0x227 [ 124.344768] __get_user_pages+0x17a/0x430 [ 124.344769] get_user_pages_unlocked+0xd9/0x327 [ 124.344770] hva_to_pfn+0xfa/0x3f7 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344788] kvm_faultin_pfn+0xc3/0x2f0 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344806] ? fast_page_fault+0x400/0x4c0 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344823] direct_page_fault+0x130/0x350 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344841] kvm_mmu_page_fault+0x176/0x2f7 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344858] vmx_handle_exit+0xe/0x37 [kvm_intel 647f514f18fc365045dc57db46d2bb4930b746eb] [ 124.344863] vcpu_enter_guest+0xbff/0x1030 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344881] vcpu_run+0x65/0x2f0 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344898] kvm_arch_vcpu_ioctl_run+0x15f/0x3f7 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344916] kvm_vcpu_ioctl+0x547/0x627 [kvm 950e483805e01f967a3e331506278d766494a4cc] [ 124.344933] ? syscall_exit_to_user_mode+0x24/0x47 [ 124.344934] ? do_syscall_64+0x7a/0x97 [ 124.344935] ? __fget_files+0xa1/0xc0 [ 124.344936] __se_sys_ioctl+0x7c/0xc0 [ 124.344937] do_syscall_64+0x6c/0x97 [ 124.344938] ? do_syscall_64+0x7a/0x97 [ 124.344939] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 124.344940] RIP: 0033:0x7fbca75f7b1f [ 124.344940] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <89> c2 3d 00 f0 ff ff 77 18 48 8b 44 24 18 64 48 2b 04 25 28 00 00 [ 124.344941] RSP: 002b:00007fbca4bc2550 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 [ 124.344942] RAX: ffffffffffffffda RBX: 000000000000ae80 RCX: 00007fbca75f7b1f [ 124.344942] RDX: 0000000000000000 RSI: 000000000000ae80 RDI: 000000000000000e [ 124.344943] RBP: 000056351ba661d0 R08: 000056351a74dc48 R09: 0000000000000004 [ 124.344943] R10: 004818cf4f129e11 R11: 0000000000000246 R12: 0000000000000000 [ 124.344943] R13: 0000000000000000 R14: 00007fbca814f004 R15: 0000000000000000 [ 124.344944] [ 124.344945] ---[ end trace 0000000000000000 ]--- I don't do any bare metal testing for the tc-build known good revision bumps, just QEMU tests with boot-utils. > Just for the records: > You definitely need a pre-LLVM-15 toolchain + KCFI sanitizer patch? > LLVM-14? The feature won't land in LLVM 14, so there is little point to backporting and testing it on LLVM 14. This is a work in progress feature so it has to target the main branch. I have fairly good coverage of tip of tree locally and we have solid coverage through CI so we'll know if something major happens, it should be pretty safe to test Sami's series. > > > Nathan has a i915 cfi patch in His personal kernel.org Git. > > > Is this relevant to kcfi? > > > > It fixes a type mismatch, so in that sense it's relevant. > > > > Here the link to patch "drm/i915: Fix CFI violation with show_dynamic_id()": > > https://git.kernel.org/pub/scm/linux/kernel/git/nathan/linux.git/commit/?h=submitted/i915-cfi-fix&id=53735be6dc53453fcfbac658e847b54360e73871 This is now in the i915 tree so that branch is going to disappear: https://cgit.freedesktop.org/drm/drm-intel/commit/?id=18fb42db05a0b93ab5dd5eab5315e50eaa3ca620 > You say no need to build your kernel with LTO... > That sounds good. > Currently, I build my kernels with Clang-14 and CONFIG_LTO_CLANG_THIN=y. > Does something speak against using CONFIG_LTO_CLANG_THIN=y with KCFI support? > Build-time? > Disc-usage? I wouldn't expect the build time or disk usage to significantly increase with kCFI. I ran a quick benchmark with Arch Linux's configuration with ThinLTO then ThinLTO + kCFI on an AMD EPYC 7513: Benchmark 1: ThinLTO Time (abs ≡): 166.036 s [User: 4687.951 s, System: 1636.767 s] Benchmark 2: ThinLTO + kCFI Time (abs ≡): 168.739 s [User: 4682.020 s, System: 1638.109 s] Summary 'ThinLTO' ran 1.02 times faster than 'ThinLTO + kCFI' Cheers, Nathan 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 75881C433EF for ; Tue, 17 May 2022 18:50:41 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=rdzLFmXZYc23hR9ojq+J3/OUTZUTH6T4BiZLXstyinU=; b=3yljPMjklZmYai 4+ipR7V8mZs6pGwBCxCn1PC8zE7rZEXnk5cSvNBwCXz5wPIrMFGmGwoRJTtpsQ4g0Nyay+a0HcUhd MPRarNZpioPLebW3D6Nv0zJ7qkShUWGcJXJyggoH35iBHYdd8oW8OKkSv16xg3et717yozxaib6sA qAzVWqG3unbWASMGPOUEYQxCTCYCbZIJNQbsObTawusy8fsy7IykeVoS0P9m6QSF8ckIw8OIwpaKx bOiMp+IQNHV9vAPZWfRQxOsyHhs9RBGTtapwkDpa3NJHTLItt0f8jeWJfITTGT/IteEpZOgCjlJoJ Ng+CmbZ8JcbeZG8gmlxg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr2GD-00FQ5H-JA; Tue, 17 May 2022 18:49:33 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr2G8-00FQ2u-7L for linux-arm-kernel@lists.infradead.org; Tue, 17 May 2022 18:49:30 +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 ams.source.kernel.org (Postfix) with ESMTPS id 97EF1B81BDC; Tue, 17 May 2022 18:49:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65D07C385B8; Tue, 17 May 2022 18:49:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652813365; bh=QbR97zXTo/NaC1jwtAoXzhOVIO4EnZxkhALYWJt3s1g=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kuqWIdQKLyeN7nlz+CcqYfc4xOJV5rQVhDnfvKvx8yT3JSbeof2xnY4I+qsyFGWeZ 40z5U6jzfh9FSlv3AYsJaRfAYzAOF2XEzqiWQQ2Si7azi0sulysaAB39QMrGRUi/ps FGq991sN8UyU5oqjSmza7h5PqZHLIGlLV8fB4GNA3vDjJZXHGHMkgjEL7bUhpy20UJ Eb4HMJLirkNk/g9phi8jqLbugty5tc6+2d2RE6mZ/Xxb0ErMlIx+F1unhHb5w0yF/g bFYtWV1PRiBCQJdaV4dTNruigqO4/WrMLcksw54XFreFrFSd0FnOTFn1XF4D1uwoKH P5woZcV7I7FtQ== Date: Tue, 17 May 2022 11:49:22 -0700 From: Nathan Chancellor To: Sedat Dilek Cc: Sami Tolvanen , linux-kernel@vger.kernel.org, Kees Cook , Josh Poimboeuf , Peter Zijlstra , x86@kernel.org, Catalin Marinas , Will Deacon , Mark Rutland , Nick Desaulniers , Joao Moreira , Steven Rostedt , linux-hardening@vger.kernel.org, linux-arm-kernel@lists.infradead.org, llvm@lists.linux.dev Subject: Re: [RFC PATCH v2 00/21] KCFI support Message-ID: References: <20220513202159.1550547-1-samitolvanen@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220517_114928_603311_EB00A090 X-CRM114-Status: GOOD ( 25.19 ) 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 T24gVHVlLCBNYXkgMTcsIDIwMjIgYXQgMDk6MzM6NDdBTSArMDIwMCwgU2VkYXQgRGlsZWsgd3Jv dGU6Cj4gSXMgeW91ciB0YWdzL2tjZmktcmZjLXYyIHRoZSByZWNvbW1lbmRlZCBMTFZNIHRvb2xj aGFpbiBmb3IgdGVzdGluZyBrY2ZpLXJmYy12Mj8KPiAKPiBXaGF0IEkgd2FudCB0byBhc2sgaXMg aWYgeW91ciBjb21taXQgd2VsbCB0ZXN0ZWQgZm9yIHg4NiAoYW5kIGFybTY0KQo+IG1lYW5zIGJ1 aWxkIGFuZCBib290IG9uIGJhcmUgbWV0YWw/CgpJIGhhdmUgcnVuIGtDRkkgKHYxLCBJIGhhdmVu J3QgaGFkIHRpbWUgdG8gdGVzdCB2Mikgb24geDg2XzY0IGhhcmR3YXJlLApib3RoIEFNRCBhbmQg SW50ZWwuIEkgaGF2ZSBvbmx5IGZvdW5kIHR3byBmYWlsdXJlcyBzbyBmYXI6IHRoZSBpOTE1Cmlz c3VlIHRoYXQgSSBtZW50aW9uIGJlbG93IGFuZCBhIGZhaWx1cmUgaW4gdGhlIEtWTSBzdWJzeXN0 ZW0sIHdoaWNoIEkKY2FuIHNlZSBieSBqdXN0IHJ1bm5pbmcgUUVNVToKClsgIDEyNC4zNDQ2NTRd IENGSSBmYWlsdXJlIGF0IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQrMHhj YS8weDE3NyBba3ZtXSAodGFyZ2V0OiBrdm1fbnVsbF9mbisweDAvMHg3IFtrdm1dOyBleHBlY3Rl ZCB0eXBlOiAweDFlMmM1YjljKQpbICAxMjQuMzQ0NjkxXSBXQVJOSU5HOiBDUFU6IDUgUElEOiAy NzY3IGF0IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQrMHhjYS8weDE3NyBb a3ZtXQpbICAxMjQuMzQ0NzA4XSBNb2R1bGVzIGxpbmtlZCBpbjogLi4uClsgIDEyNC4zNDQ3Mzdd IENQVTogNSBQSUQ6IDI3NjcgQ29tbTogcWVtdS1zeXN0ZW0teDg2IFRhaW50ZWQ6IFAgICAgICAg ICAgICAgICAgICA1LjE4LjAtcmM2LWRlYnVnLTAwMDMzLWcxZDUyODRhZmY3Y2QgIzEgOGM0OTY2 YzdmYjI0ZjMzNDUwNzY3NDdmZWViYWM1ZmIzNDBhNDc5NwpbICAxMjQuMzQ0NzM4XSBIYXJkd2Fy ZSBuYW1lOiBBU1VTIFN5c3RlbSBQcm9kdWN0IE5hbWUvUFJJTUUgWjU5ME0tUExVUywgQklPUyAx MjAzIDEwLzI3LzIwMjEKWyAgMTI0LjM0NDczOF0gUklQOiAwMDEwOmt2bV9tbXVfbm90aWZpZXJf aW52YWxpZGF0ZV9yYW5nZV9lbmQrMHhjYS8weDE3NyBba3ZtXQpbICAxMjQuMzQ0NzU2XSBDb2Rl OiA0OCA4OSBkYSBlOCA4OCAxNiA4NiBkZCA0OCA4NSBjMCA4OSA2YyAyNCAwYyA3NCAzMCA0ZCA4 NSBmNiA3NCAzNiA0OCBjNyBjNSAxOSBjOCBiNCBjMCA0YyA4YiAzNCAyNCA4MSA3ZCBmYSA5YyA1 YiAyYyAxZSA3NCAwMiA8MGY+IDBiIDQ4IDg5IGM3IDRjIDg5IGZlIDQ4IDg5IGRhIGU4IGI2IDE2 IDg2IGRkIDQ4IDg1IGMwIDc1IGUyIGViClsgIDEyNC4zNDQ3NTddIFJTUDogMDAxODpmZmZmYzAz MzAzOWQ3OGU4IEVGTEFHUzogMDAwMTAyODIKWyAgMTI0LjM0NDc1OF0gUkFYOiBmZmZmYTBhMTQx ZWQ5NDUwIFJCWDogMDAwMDdmYjg5N2U5ZWZmZiBSQ1g6IGZmZmZhMGExNDNjOWQ4NTAKWyAgMTI0 LjM0NDc1OF0gUkRYOiAwMDAwN2ZiODk3ZTllZmZmIFJTSTogMDAwMDdmYjg5N2U5ZTAwMCBSREk6 IGZmZmZjMDMzMDQ0OTljZjgKWyAgMTI0LjM0NDc1OV0gUkJQOiBmZmZmZmZmZmMwYjRjODE5IFIw ODogMDAwMDAwMDAwMDAwMDAwMCBSMDk6IDAwMDAwMDAwMDAwMDAwMDAKWyAgMTI0LjM0NDc1OV0g UjEwOiAwMDAwMDAwMDAwMDAwMDAwIFIxMTogZmZmZmZmZmZjMGI0YzYzOSBSMTI6IGZmZmZjMDMz MDQ0OTkwMDAKWyAgMTI0LjM0NDc2MF0gUjEzOiBmZmZmYzAzMzA0NGEzMGEwIFIxNDogZmZmZmMw MzMwNDRhMzEyMCBSMTU6IDAwMDA3ZmI4OTdlOWUwMDAKWyAgMTI0LjM0NDc2MF0gRlM6ICAwMDAw N2ZiY2E0YmMzNjQwKDAwMDApIEdTOmZmZmZhMGE4N2Y1NDAwMDAoMDAwMCkga25sR1M6MDAwMDAw MDAwMDAwMDAwMApbICAxMjQuMzQ0NzYxXSBDUzogIDAwMTAgRFM6IDAwMDAgRVM6IDAwMDAgQ1Iw OiAwMDAwMDAwMDgwMDUwMDMzClsgIDEyNC4zNDQ3NjFdIENSMjogMDAwMDAwMDAwMDAwMDAwMCBD UjM6IDAwMDAwMDAxMTlmNzQwMDYgQ1I0OiAwMDAwMDAwMDAwNzcyZWUwClsgIDEyNC4zNDQ3NjJd IFBLUlU6IDU1NTU1NTU0ClsgIDEyNC4zNDQ3NjJdIENhbGwgVHJhY2U6ClsgIDEyNC4zNDQ3NjJd ICA8VEFTSz4KWyAgMTI0LjM0NDc2M10gIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vf ZW5kKzB4YTEvMHhkNwpbICAxMjQuMzQ0NzY0XSAgd3BfcGFnZV9jb3B5KzB4NTkyLzB4OTIwClsg IDEyNC4zNDQ3NjZdICBfX2hhbmRsZV9tbV9mYXVsdCsweDgyMC8weDhmMApbICAxMjQuMzQ0NzY3 XSAgaGFuZGxlX21tX2ZhdWx0KzB4ZTAvMHgyMjcKWyAgMTI0LjM0NDc2OF0gIF9fZ2V0X3VzZXJf cGFnZXMrMHgxN2EvMHg0MzAKWyAgMTI0LjM0NDc2OV0gIGdldF91c2VyX3BhZ2VzX3VubG9ja2Vk KzB4ZDkvMHgzMjcKWyAgMTI0LjM0NDc3MF0gIGh2YV90b19wZm4rMHhmYS8weDNmNyBba3ZtIDk1 MGU0ODM4MDVlMDFmOTY3YTNlMzMxNTA2Mjc4ZDc2NjQ5NGE0Y2NdClsgIDEyNC4zNDQ3ODhdICBr dm1fZmF1bHRpbl9wZm4rMHhjMy8weDJmMCBba3ZtIDk1MGU0ODM4MDVlMDFmOTY3YTNlMzMxNTA2 Mjc4ZDc2NjQ5NGE0Y2NdClsgIDEyNC4zNDQ4MDZdICA/IGZhc3RfcGFnZV9mYXVsdCsweDQwMC8w eDRjMCBba3ZtIDk1MGU0ODM4MDVlMDFmOTY3YTNlMzMxNTA2Mjc4ZDc2NjQ5NGE0Y2NdClsgIDEy NC4zNDQ4MjNdICBkaXJlY3RfcGFnZV9mYXVsdCsweDEzMC8weDM1MCBba3ZtIDk1MGU0ODM4MDVl MDFmOTY3YTNlMzMxNTA2Mjc4ZDc2NjQ5NGE0Y2NdClsgIDEyNC4zNDQ4NDFdICBrdm1fbW11X3Bh Z2VfZmF1bHQrMHgxNzYvMHgyZjcgW2t2bSA5NTBlNDgzODA1ZTAxZjk2N2EzZTMzMTUwNjI3OGQ3 NjY0OTRhNGNjXQpbICAxMjQuMzQ0ODU4XSAgdm14X2hhbmRsZV9leGl0KzB4ZS8weDM3IFtrdm1f aW50ZWwgNjQ3ZjUxNGYxOGZjMzY1MDQ1ZGM1N2RiNDZkMmJiNDkzMGI3NDZlYl0KWyAgMTI0LjM0 NDg2M10gIHZjcHVfZW50ZXJfZ3Vlc3QrMHhiZmYvMHgxMDMwIFtrdm0gOTUwZTQ4MzgwNWUwMWY5 NjdhM2UzMzE1MDYyNzhkNzY2NDk0YTRjY10KWyAgMTI0LjM0NDg4MV0gIHZjcHVfcnVuKzB4NjUv MHgyZjAgW2t2bSA5NTBlNDgzODA1ZTAxZjk2N2EzZTMzMTUwNjI3OGQ3NjY0OTRhNGNjXQpbICAx MjQuMzQ0ODk4XSAga3ZtX2FyY2hfdmNwdV9pb2N0bF9ydW4rMHgxNWYvMHgzZjcgW2t2bSA5NTBl NDgzODA1ZTAxZjk2N2EzZTMzMTUwNjI3OGQ3NjY0OTRhNGNjXQpbICAxMjQuMzQ0OTE2XSAga3Zt X3ZjcHVfaW9jdGwrMHg1NDcvMHg2MjcgW2t2bSA5NTBlNDgzODA1ZTAxZjk2N2EzZTMzMTUwNjI3 OGQ3NjY0OTRhNGNjXQpbICAxMjQuMzQ0OTMzXSAgPyBzeXNjYWxsX2V4aXRfdG9fdXNlcl9tb2Rl KzB4MjQvMHg0NwpbICAxMjQuMzQ0OTM0XSAgPyBkb19zeXNjYWxsXzY0KzB4N2EvMHg5NwpbICAx MjQuMzQ0OTM1XSAgPyBfX2ZnZXRfZmlsZXMrMHhhMS8weGMwClsgIDEyNC4zNDQ5MzZdICBfX3Nl X3N5c19pb2N0bCsweDdjLzB4YzAKWyAgMTI0LjM0NDkzN10gIGRvX3N5c2NhbGxfNjQrMHg2Yy8w eDk3ClsgIDEyNC4zNDQ5MzhdICA/IGRvX3N5c2NhbGxfNjQrMHg3YS8weDk3ClsgIDEyNC4zNDQ5 MzldICBlbnRyeV9TWVNDQUxMXzY0X2FmdGVyX2h3ZnJhbWUrMHg0NC8weGFlClsgIDEyNC4zNDQ5 NDBdIFJJUDogMDAzMzoweDdmYmNhNzVmN2IxZgpbICAxMjQuMzQ0OTQwXSBDb2RlOiAwMCA0OCA4 OSA0NCAyNCAxOCAzMSBjMCA0OCA4ZCA0NCAyNCA2MCBjNyAwNCAyNCAxMCAwMCAwMCAwMCA0OCA4 OSA0NCAyNCAwOCA0OCA4ZCA0NCAyNCAyMCA0OCA4OSA0NCAyNCAxMCBiOCAxMCAwMCAwMCAwMCAw ZiAwNSA8ODk+IGMyIDNkIDAwIGYwIGZmIGZmIDc3IDE4IDQ4IDhiIDQ0IDI0IDE4IDY0IDQ4IDJi IDA0IDI1IDI4IDAwIDAwClsgIDEyNC4zNDQ5NDFdIFJTUDogMDAyYjowMDAwN2ZiY2E0YmMyNTUw IEVGTEFHUzogMDAwMDAyNDYgT1JJR19SQVg6IDAwMDAwMDAwMDAwMDAwMTAKWyAgMTI0LjM0NDk0 Ml0gUkFYOiBmZmZmZmZmZmZmZmZmZmRhIFJCWDogMDAwMDAwMDAwMDAwYWU4MCBSQ1g6IDAwMDA3 ZmJjYTc1ZjdiMWYKWyAgMTI0LjM0NDk0Ml0gUkRYOiAwMDAwMDAwMDAwMDAwMDAwIFJTSTogMDAw MDAwMDAwMDAwYWU4MCBSREk6IDAwMDAwMDAwMDAwMDAwMGUKWyAgMTI0LjM0NDk0M10gUkJQOiAw MDAwNTYzNTFiYTY2MWQwIFIwODogMDAwMDU2MzUxYTc0ZGM0OCBSMDk6IDAwMDAwMDAwMDAwMDAw MDQKWyAgMTI0LjM0NDk0M10gUjEwOiAwMDQ4MThjZjRmMTI5ZTExIFIxMTogMDAwMDAwMDAwMDAw MDI0NiBSMTI6IDAwMDAwMDAwMDAwMDAwMDAKWyAgMTI0LjM0NDk0M10gUjEzOiAwMDAwMDAwMDAw MDAwMDAwIFIxNDogMDAwMDdmYmNhODE0ZjAwNCBSMTU6IDAwMDAwMDAwMDAwMDAwMDAKWyAgMTI0 LjM0NDk0NF0gIDwvVEFTSz4KWyAgMTI0LjM0NDk0NV0gLS0tWyBlbmQgdHJhY2UgMDAwMDAwMDAw MDAwMDAwMCBdLS0tCgpJIGRvbid0IGRvIGFueSBiYXJlIG1ldGFsIHRlc3RpbmcgZm9yIHRoZSB0 Yy1idWlsZCBrbm93biBnb29kIHJldmlzaW9uCmJ1bXBzLCBqdXN0IFFFTVUgdGVzdHMgd2l0aCBi b290LXV0aWxzLgoKPiBKdXN0IGZvciB0aGUgcmVjb3JkczoKPiBZb3UgZGVmaW5pdGVseSBuZWVk IGEgcHJlLUxMVk0tMTUgdG9vbGNoYWluICsgS0NGSSBzYW5pdGl6ZXIgcGF0Y2g/Cj4gTExWTS0x ND8KClRoZSBmZWF0dXJlIHdvbid0IGxhbmQgaW4gTExWTSAxNCwgc28gdGhlcmUgaXMgbGl0dGxl IHBvaW50IHRvCmJhY2twb3J0aW5nIGFuZCB0ZXN0aW5nIGl0IG9uIExMVk0gMTQuIFRoaXMgaXMg YSB3b3JrIGluIHByb2dyZXNzCmZlYXR1cmUgc28gaXQgaGFzIHRvIHRhcmdldCB0aGUgbWFpbiBi cmFuY2guIEkgaGF2ZSBmYWlybHkgZ29vZCBjb3ZlcmFnZQpvZiB0aXAgb2YgdHJlZSBsb2NhbGx5 IGFuZCB3ZSBoYXZlIHNvbGlkIGNvdmVyYWdlIHRocm91Z2ggQ0kgc28gd2UnbGwKa25vdyBpZiBz b21ldGhpbmcgbWFqb3IgaGFwcGVucywgaXQgc2hvdWxkIGJlIHByZXR0eSBzYWZlIHRvIHRlc3Qg U2FtaSdzCnNlcmllcy4KCj4gPiA+IE5hdGhhbiBoYXMgYSBpOTE1IGNmaSBwYXRjaCBpbiBIaXMg cGVyc29uYWwga2VybmVsLm9yZyBHaXQuCj4gPiA+IElzIHRoaXMgcmVsZXZhbnQgdG8ga2NmaT8K PiA+Cj4gPiBJdCBmaXhlcyBhIHR5cGUgbWlzbWF0Y2gsIHNvIGluIHRoYXQgc2Vuc2UgaXQncyBy ZWxldmFudC4KPiA+Cj4gCj4gSGVyZSB0aGUgbGluayB0byBwYXRjaCAiZHJtL2k5MTU6IEZpeCBD RkkgdmlvbGF0aW9uIHdpdGggc2hvd19keW5hbWljX2lkKCkiOgo+IAo+IGh0dHBzOi8vZ2l0Lmtl cm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L25hdGhhbi9saW51eC5naXQvY29tbWl0 Lz9oPXN1Ym1pdHRlZC9pOTE1LWNmaS1maXgmaWQ9NTM3MzViZTZkYzUzNDUzZmNmYmFjNjU4ZTg0 N2I1NDM2MGU3Mzg3MQoKVGhpcyBpcyBub3cgaW4gdGhlIGk5MTUgdHJlZSBzbyB0aGF0IGJyYW5j aCBpcyBnb2luZyB0byBkaXNhcHBlYXI6CgpodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2Ry bS9kcm0taW50ZWwvY29tbWl0Lz9pZD0xOGZiNDJkYjA1YTBiOTNhYjVkZDVlYWI1MzE1ZTUwZWFh M2NhNjIwCgo+IFlvdSBzYXkgbm8gbmVlZCB0byBidWlsZCB5b3VyIGtlcm5lbCB3aXRoIExUTy4u Lgo+IFRoYXQgc291bmRzIGdvb2QuCj4gQ3VycmVudGx5LCBJIGJ1aWxkIG15IGtlcm5lbHMgd2l0 aCBDbGFuZy0xNCBhbmQgQ09ORklHX0xUT19DTEFOR19USElOPXkuCj4gRG9lcyBzb21ldGhpbmcg c3BlYWsgYWdhaW5zdCB1c2luZyBDT05GSUdfTFRPX0NMQU5HX1RISU49eSB3aXRoIEtDRkkgc3Vw cG9ydD8KPiBCdWlsZC10aW1lPwo+IERpc2MtdXNhZ2U/CgpJIHdvdWxkbid0IGV4cGVjdCB0aGUg YnVpbGQgdGltZSBvciBkaXNrIHVzYWdlIHRvIHNpZ25pZmljYW50bHkgaW5jcmVhc2UKd2l0aCBr Q0ZJLiBJIHJhbiBhIHF1aWNrIGJlbmNobWFyayB3aXRoIEFyY2ggTGludXgncyBjb25maWd1cmF0 aW9uIHdpdGgKVGhpbkxUTyB0aGVuIFRoaW5MVE8gKyBrQ0ZJIG9uIGFuIEFNRCBFUFlDIDc1MTM6 CgpCZW5jaG1hcmsgMTogVGhpbkxUTwogIFRpbWUgKGFicyDiiaEpOiAgICAgICAgMTY2LjAzNiBz ICAgICAgICAgICAgICAgW1VzZXI6IDQ2ODcuOTUxIHMsIFN5c3RlbTogMTYzNi43Njcgc10KCkJl bmNobWFyayAyOiBUaGluTFRPICsga0NGSQogIFRpbWUgKGFicyDiiaEpOiAgICAgICAgMTY4Ljcz OSBzICAgICAgICAgICAgICAgW1VzZXI6IDQ2ODIuMDIwIHMsIFN5c3RlbTogMTYzOC4xMDkgc10K ClN1bW1hcnkKICAnVGhpbkxUTycgcmFuCiAgICAxLjAyIHRpbWVzIGZhc3RlciB0aGFuICdUaGlu TFRPICsga0NGSScKCkNoZWVycywKTmF0aGFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==