From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Date: Wed, 4 Oct 2017 14:19:54 -0700 Message-Id: <20171004212003.28296-19-thgarnie@google.com> In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Subject: [kernel-hardening] [RFC v3 18/27] kvm: Adapt assembly for PIE support To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter , Boris Ostrovsky , Alexey Dobriyan , Andrew Morton , Paul Gortmaker , Chris Metcalf , "Paul E . McKenney" , Nicolas Pitre , Borislav Petkov , "Luis R . Rodriguez" , Greg Kroah-Hartman , Christopher Li , Steven Rostedt , Jason Baron , Dou Liyang , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Masahiro Yamada , Alexei Starovoitov , Daniel Borkmann , Markus Trippelsdorf , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Joerg Roedel , Rik van Riel , David Howells , Ard Biesheuvel , Waiman Long , Kyle Huey , Andrey Ryabinin , Jonathan Corbet , Matthew Wilcox , Michal Hocko , Peter Foley , Paul Bolle , Jiri Kosina , Rob Landley , "H . J . Lu" , Baoquan He , =?UTF-8?q?Jan=20H=20=2E=20Sch=C3=B6nherr?= , Daniel Micay Cc: x86@kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, virtualization@lists.linux-foundation.org, xen-devel@lists.xenproject.org, linux-arch@vger.kernel.org, linux-sparse@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, kernel-hardening@lists.openwall.com List-ID: Change the assembly code to use only relative references of symbols for the kernel to be PIE compatible. The new __ASM_GET_PTR_PRE macro is used to get the address of a symbol on both 32 and 64-bit with PIE support. Position Independent Executable (PIE) support will allow to extended the KASLR randomization range below the -2G memory limit. Signed-off-by: Thomas Garnier --- arch/x86/include/asm/kvm_host.h | 6 ++++-- arch/x86/kernel/kvm.c | 6 ++++-- arch/x86/kvm/svm.c | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 9d7d856b2d89..14073fda75fb 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1342,9 +1342,11 @@ asmlinkage void kvm_spurious_fault(void); ".pushsection .fixup, \"ax\" \n" \ "667: \n\t" \ cleanup_insn "\n\t" \ - "cmpb $0, kvm_rebooting \n\t" \ + "cmpb $0, kvm_rebooting" __ASM_SEL(,(%%rip)) " \n\t" \ "jne 668b \n\t" \ - __ASM_SIZE(push) " $666b \n\t" \ + __ASM_SIZE(push) "%%" _ASM_AX " \n\t" \ + __ASM_GET_PTR_PRE(666b) "%%" _ASM_AX "\n\t" \ + "xchg %%" _ASM_AX ", (%%" _ASM_SP ") \n\t" \ "call kvm_spurious_fault \n\t" \ ".popsection \n\t" \ _ASM_EXTABLE(666b, 667b) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index aa60a08b65b1..07176bfc188b 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -620,8 +620,10 @@ asm( ".global __raw_callee_save___kvm_vcpu_is_preempted;" ".type __raw_callee_save___kvm_vcpu_is_preempted, @function;" "__raw_callee_save___kvm_vcpu_is_preempted:" -"movq __per_cpu_offset(,%rdi,8), %rax;" -"cmpb $0, " __stringify(KVM_STEAL_TIME_preempted) "+steal_time(%rax);" +"leaq __per_cpu_offset(%rip), %rax;" +"movq (%rax,%rdi,8), %rax;" +"addq " __stringify(KVM_STEAL_TIME_preempted) "+steal_time(%rip), %rax;" +"cmpb $0, (%rax);" "setne %al;" "ret;" ".popsection"); diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 0e68f0b3cbf7..364536080438 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -568,12 +568,12 @@ static u32 svm_msrpm_offset(u32 msr) static inline void clgi(void) { - asm volatile (__ex(SVM_CLGI)); + asm volatile (__ex(SVM_CLGI) : :); } static inline void stgi(void) { - asm volatile (__ex(SVM_STGI)); + asm volatile (__ex(SVM_STGI) : :); } static inline void invlpga(unsigned long addr, u32 asid) -- 2.14.2.920.gcf0c67979c-goog From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 18/27] kvm: Adapt assembly for PIE support Date: Wed, 4 Oct 2017 14:19:54 -0700 Message-ID: <20171004212003.28296-19-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter Bor Cc: linux-arch@vger.kernel.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-sparse@vger.kernel.org, linux-crypto@vger.kernel.org, kernel-hardening@lists.openwall.com, xen-devel@lists.xenproject.org List-Id: linux-arch.vger.kernel.org Q2hhbmdlIHRoZSBhc3NlbWJseSBjb2RlIHRvIHVzZSBvbmx5IHJlbGF0aXZlIHJlZmVyZW5jZXMg b2Ygc3ltYm9scyBmb3IgdGhlCmtlcm5lbCB0byBiZSBQSUUgY29tcGF0aWJsZS4gVGhlIG5ldyBf X0FTTV9HRVRfUFRSX1BSRSBtYWNybyBpcyB1c2VkIHRvCmdldCB0aGUgYWRkcmVzcyBvZiBhIHN5 bWJvbCBvbiBib3RoIDMyIGFuZCA2NC1iaXQgd2l0aCBQSUUgc3VwcG9ydC4KClBvc2l0aW9uIElu ZGVwZW5kZW50IEV4ZWN1dGFibGUgKFBJRSkgc3VwcG9ydCB3aWxsIGFsbG93IHRvIGV4dGVuZGVk IHRoZQpLQVNMUiByYW5kb21pemF0aW9uIHJhbmdlIGJlbG93IHRoZSAtMkcgbWVtb3J5IGxpbWl0 LgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIEdhcm5pZXIgPHRoZ2FybmllQGdvb2dsZS5jb20+Ci0t LQogYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCB8IDYgKysrKy0tCiBhcmNoL3g4Ni9r ZXJuZWwva3ZtLmMgICAgICAgICAgIHwgNiArKysrLS0KIGFyY2gveDg2L2t2bS9zdm0uYyAgICAg ICAgICAgICAgfCA0ICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5o IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA5ZDdkODU2YjJkODkuLjE0 MDczZmRhNzVmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAor KysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMzQyLDkgKzEzNDIsMTEg QEAgYXNtbGlua2FnZSB2b2lkIGt2bV9zcHVyaW91c19mYXVsdCh2b2lkKTsKIAkiLnB1c2hzZWN0 aW9uIC5maXh1cCwgXCJheFwiIFxuIiBcCiAJIjY2NzogXG5cdCIgXAogCWNsZWFudXBfaW5zbiAi XG5cdCIJCSAgICAgIFwKLQkiY21wYiAkMCwga3ZtX3JlYm9vdGluZyBcblx0IgkgICAgICBcCisJ ImNtcGIgJDAsIGt2bV9yZWJvb3RpbmciIF9fQVNNX1NFTCgsKCUlcmlwKSkgIiBcblx0IiBcCiAJ ImpuZSA2NjhiIFxuXHQiICAgICAgCQkgICAgICBcCi0JX19BU01fU0laRShwdXNoKSAiICQ2NjZi IFxuXHQiCSAgICAgIFwKKwlfX0FTTV9TSVpFKHB1c2gpICIlJSIgX0FTTV9BWCAiIFxuXHQiCQlc CisJX19BU01fR0VUX1BUUl9QUkUoNjY2YikgIiUlIiBfQVNNX0FYICJcblx0IglcCisJInhjaGcg JSUiIF9BU01fQVggIiwgKCUlIiBfQVNNX1NQICIpIFxuXHQiCVwKIAkiY2FsbCBrdm1fc3B1cmlv dXNfZmF1bHQgXG5cdCIJICAgICAgXAogCSIucG9wc2VjdGlvbiBcblx0IiBcCiAJX0FTTV9FWFRB QkxFKDY2NmIsIDY2N2IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMgYi9hcmNo L3g4Ni9rZXJuZWwva3ZtLmMKaW5kZXggYWE2MGEwOGI2NWIxLi4wNzE3NmJmYzE4OGIgMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMK QEAgLTYyMCw4ICs2MjAsMTAgQEAgYXNtKAogIi5nbG9iYWwgX19yYXdfY2FsbGVlX3NhdmVfX19r dm1fdmNwdV9pc19wcmVlbXB0ZWQ7IgogIi50eXBlIF9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3Zj cHVfaXNfcHJlZW1wdGVkLCBAZnVuY3Rpb247IgogIl9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3Zj cHVfaXNfcHJlZW1wdGVkOiIKLSJtb3ZxCV9fcGVyX2NwdV9vZmZzZXQoLCVyZGksOCksICVyYXg7 IgotImNtcGIJJDAsICIgX19zdHJpbmdpZnkoS1ZNX1NURUFMX1RJTUVfcHJlZW1wdGVkKSAiK3N0 ZWFsX3RpbWUoJXJheCk7IgorImxlYXEJX19wZXJfY3B1X29mZnNldCglcmlwKSwgJXJheDsiCisi bW92cQkoJXJheCwlcmRpLDgpLCAlcmF4OyIKKyJhZGRxCSIgX19zdHJpbmdpZnkoS1ZNX1NURUFM X1RJTUVfcHJlZW1wdGVkKSAiK3N0ZWFsX3RpbWUoJXJpcCksICVyYXg7IgorImNtcGIJJDAsICgl cmF4KTsiCiAic2V0bmUJJWFsOyIKICJyZXQ7IgogIi5wb3BzZWN0aW9uIik7CmRpZmYgLS1naXQg YS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggMGU2OGYwYjNj YmY3Li4zNjQ1MzYwODA0MzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9h cmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTU2OCwxMiArNTY4LDEyIEBAIHN0YXRpYyB1MzIgc3ZtX21z cnBtX29mZnNldCh1MzIgbXNyKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xnaSh2b2lkKQogewot CWFzbSB2b2xhdGlsZSAoX19leChTVk1fQ0xHSSkpOworCWFzbSB2b2xhdGlsZSAoX19leChTVk1f Q0xHSSkgOiA6KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN0Z2kodm9pZCkKIHsKLQlhc20g dm9sYXRpbGUgKF9fZXgoU1ZNX1NUR0kpKTsKKwlhc20gdm9sYXRpbGUgKF9fZXgoU1ZNX1NUR0kp IDogOik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGdhKHVuc2lnbmVkIGxvbmcgYWRk ciwgdTMyIGFzaWQpCi0tIAoyLjE0LjIuOTIwLmdjZjBjNjc5NzljLWdvb2cKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Garnier Subject: [RFC v3 18/27] kvm: Adapt assembly for PIE support Date: Wed, 4 Oct 2017 14:19:54 -0700 Message-ID: <20171004212003.28296-19-thgarnie@google.com> References: <20171004212003.28296-1-thgarnie@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: linux-arch@vger.kernel.org, kvm@vger.kernel.org, linux-pm@vger.kernel.org, x86@kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-sparse@vger.kernel.org, linux-crypto@vger.kernel.org, kernel-hardening@lists.openwall.com, xen-devel@lists.xenproject.org To: Herbert Xu , "David S . Miller" , Thomas Gleixner , Ingo Molnar , "H . Peter Anvin" , Peter Zijlstra , Josh Poimboeuf , Thomas Garnier , Arnd Bergmann , Kees Cook , Matthias Kaehlcke , Tom Lendacky , Andy Lutomirski , "Kirill A . Shutemov" , Borislav Petkov , "Rafael J . Wysocki" , Len Brown , Pavel Machek , Juergen Gross , Chris Wright , Alok Kataria , Rusty Russell , Tejun Heo , Christoph Lameter , Bor Return-path: In-Reply-To: <20171004212003.28296-1-thgarnie@google.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" List-Id: linux-crypto.vger.kernel.org Q2hhbmdlIHRoZSBhc3NlbWJseSBjb2RlIHRvIHVzZSBvbmx5IHJlbGF0aXZlIHJlZmVyZW5jZXMg b2Ygc3ltYm9scyBmb3IgdGhlCmtlcm5lbCB0byBiZSBQSUUgY29tcGF0aWJsZS4gVGhlIG5ldyBf X0FTTV9HRVRfUFRSX1BSRSBtYWNybyBpcyB1c2VkIHRvCmdldCB0aGUgYWRkcmVzcyBvZiBhIHN5 bWJvbCBvbiBib3RoIDMyIGFuZCA2NC1iaXQgd2l0aCBQSUUgc3VwcG9ydC4KClBvc2l0aW9uIElu ZGVwZW5kZW50IEV4ZWN1dGFibGUgKFBJRSkgc3VwcG9ydCB3aWxsIGFsbG93IHRvIGV4dGVuZGVk IHRoZQpLQVNMUiByYW5kb21pemF0aW9uIHJhbmdlIGJlbG93IHRoZSAtMkcgbWVtb3J5IGxpbWl0 LgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIEdhcm5pZXIgPHRoZ2FybmllQGdvb2dsZS5jb20+Ci0t LQogYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCB8IDYgKysrKy0tCiBhcmNoL3g4Ni9r ZXJuZWwva3ZtLmMgICAgICAgICAgIHwgNiArKysrLS0KIGFyY2gveDg2L2t2bS9zdm0uYyAgICAg ICAgICAgICAgfCA0ICsrLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5o IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA5ZDdkODU2YjJkODkuLjE0 MDczZmRhNzVmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAor KysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xMzQyLDkgKzEzNDIsMTEg QEAgYXNtbGlua2FnZSB2b2lkIGt2bV9zcHVyaW91c19mYXVsdCh2b2lkKTsKIAkiLnB1c2hzZWN0 aW9uIC5maXh1cCwgXCJheFwiIFxuIiBcCiAJIjY2NzogXG5cdCIgXAogCWNsZWFudXBfaW5zbiAi XG5cdCIJCSAgICAgIFwKLQkiY21wYiAkMCwga3ZtX3JlYm9vdGluZyBcblx0IgkgICAgICBcCisJ ImNtcGIgJDAsIGt2bV9yZWJvb3RpbmciIF9fQVNNX1NFTCgsKCUlcmlwKSkgIiBcblx0IiBcCiAJ ImpuZSA2NjhiIFxuXHQiICAgICAgCQkgICAgICBcCi0JX19BU01fU0laRShwdXNoKSAiICQ2NjZi IFxuXHQiCSAgICAgIFwKKwlfX0FTTV9TSVpFKHB1c2gpICIlJSIgX0FTTV9BWCAiIFxuXHQiCQlc CisJX19BU01fR0VUX1BUUl9QUkUoNjY2YikgIiUlIiBfQVNNX0FYICJcblx0IglcCisJInhjaGcg JSUiIF9BU01fQVggIiwgKCUlIiBfQVNNX1NQICIpIFxuXHQiCVwKIAkiY2FsbCBrdm1fc3B1cmlv dXNfZmF1bHQgXG5cdCIJICAgICAgXAogCSIucG9wc2VjdGlvbiBcblx0IiBcCiAJX0FTTV9FWFRB QkxFKDY2NmIsIDY2N2IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMgYi9hcmNo L3g4Ni9rZXJuZWwva3ZtLmMKaW5kZXggYWE2MGEwOGI2NWIxLi4wNzE3NmJmYzE4OGIgMTAwNjQ0 Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMK QEAgLTYyMCw4ICs2MjAsMTAgQEAgYXNtKAogIi5nbG9iYWwgX19yYXdfY2FsbGVlX3NhdmVfX19r dm1fdmNwdV9pc19wcmVlbXB0ZWQ7IgogIi50eXBlIF9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3Zj cHVfaXNfcHJlZW1wdGVkLCBAZnVuY3Rpb247IgogIl9fcmF3X2NhbGxlZV9zYXZlX19fa3ZtX3Zj cHVfaXNfcHJlZW1wdGVkOiIKLSJtb3ZxCV9fcGVyX2NwdV9vZmZzZXQoLCVyZGksOCksICVyYXg7 IgotImNtcGIJJDAsICIgX19zdHJpbmdpZnkoS1ZNX1NURUFMX1RJTUVfcHJlZW1wdGVkKSAiK3N0 ZWFsX3RpbWUoJXJheCk7IgorImxlYXEJX19wZXJfY3B1X29mZnNldCglcmlwKSwgJXJheDsiCisi bW92cQkoJXJheCwlcmRpLDgpLCAlcmF4OyIKKyJhZGRxCSIgX19zdHJpbmdpZnkoS1ZNX1NURUFM X1RJTUVfcHJlZW1wdGVkKSAiK3N0ZWFsX3RpbWUoJXJpcCksICVyYXg7IgorImNtcGIJJDAsICgl cmF4KTsiCiAic2V0bmUJJWFsOyIKICJyZXQ7IgogIi5wb3BzZWN0aW9uIik7CmRpZmYgLS1naXQg YS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggMGU2OGYwYjNj YmY3Li4zNjQ1MzYwODA0MzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9h cmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTU2OCwxMiArNTY4LDEyIEBAIHN0YXRpYyB1MzIgc3ZtX21z cnBtX29mZnNldCh1MzIgbXNyKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xnaSh2b2lkKQogewot CWFzbSB2b2xhdGlsZSAoX19leChTVk1fQ0xHSSkpOworCWFzbSB2b2xhdGlsZSAoX19leChTVk1f Q0xHSSkgOiA6KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN0Z2kodm9pZCkKIHsKLQlhc20g dm9sYXRpbGUgKF9fZXgoU1ZNX1NUR0kpKTsKKwlhc20gdm9sYXRpbGUgKF9fZXgoU1ZNX1NUR0kp IDogOik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZscGdhKHVuc2lnbmVkIGxvbmcgYWRk ciwgdTMyIGFzaWQpCi0tIAoyLjE0LjIuOTIwLmdjZjBjNjc5NzljLWdvb2cKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2 ZWwK