From nobody Sat Jun 13 07:29:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1781278900; cv=none; d=zohomail.com; s=zohoarc; b=A7yACCGaWecNZhPFAVy0+f5Op3k/ioqf3aPdCZcGvXcLsDR51WfPaEKgrBAprbFCeLYl4qwFL5YDsGOyvPzSIJn8gZu4zUxe7ZPPQT4ho4pm1sVzXdowYFSDoCtD5h/cF0GXS3DYfx41c3UKGUvNVAzQ0iqEcTE41FuDn759B6g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781278900; h=Content-Type:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=35ZiRbHcXFIuTMYGuABY0THVvr5nDzHFAHOY5N4BasU=; b=Bz6YD2N0weWQXH18yHHIihGqjDx0bjuj5OrnIgH47pRqTzirncyrKBdDyzaS7/+4RREy9Cszppbs2mbY54J9BDK919IW8MHm7X/Q8jdZ71tP+bSXGuR9QrraS0pmn0tAqd/Tpvp3wboBJ1zimvzkN7nx26cLZsCKJKUp7P7Ld9o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1781278900739495.83987639972145; Fri, 12 Jun 2026 08:41:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1336845.1598618 (Exim 4.92) (envelope-from ) id 1wY40R-0003on-92; Fri, 12 Jun 2026 15:41:15 +0000 Received: by outflank-mailman (output) from mailman id 1336845.1598618; Fri, 12 Jun 2026 15:41:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wY40R-0003og-69; Fri, 12 Jun 2026 15:41:15 +0000 Received: by outflank-mailman (input) for mailman id 1336845; Fri, 12 Jun 2026 15:41:13 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wY40P-0003oY-7H for xen-devel@lists.xenproject.org; Fri, 12 Jun 2026 15:41:13 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wY40O-00GbRW-KV for xen-devel@lists.xenproject.org; Fri, 12 Jun 2026 17:41:12 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a2c2893-2eae-0a2a0a5409dd-0a2a45068c16-6 for ; Fri, 12 Jun 2026 17:41:12 +0200 Received: from [209.85.128.49] (helo=mail-wm1-f49.google.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.56.1) (envelope-from ) id 6a2c2898-7371-0a2a45060019-d1558031d92e-3 for ; Fri, 12 Jun 2026 17:41:12 +0200 Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-490b3637b90so8770505e9.3 for ; Fri, 12 Jun 2026 08:41:12 -0700 (PDT) Received: from ?IPV6:2a02:1748:f7df:8cb1:8428:5f57:cb30:5fcd? ([2a02:1748:f7df:8cb1:8428:5f57:cb30:5fcd]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490ea961f18sm61665845e9.2.2026.06.12.08.41.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 12 Jun 2026 08:41:11 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="In-Reply-To:From:Content-Language:References:To:Subject:User-Agent:MIME-Version:Date:Message-ID" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781278872; x=1781883672; darn=lists.xenproject.org; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=35ZiRbHcXFIuTMYGuABY0THVvr5nDzHFAHOY5N4BasU=; b=dNng9/MFgJwjNgRq1m0nkhC7sv2gcCqj2deSWALjys9tHYscsPfLrX4B4vwG66TJRl Y6lVohLnsWp77ZNPe+tGmA+y5Y8s3ZKMOTUQaeKHgMUAboi/+kuYFS1uiNkAdWbbQ2+/ n4542tX+9TIg8j65aWz13tM3Fheik35fhqF9RuzQmn5D1+SUIhoMJq/XSx7lNFV9xGzd NxlMmaKLrQqTNlSbVgfKWoc3oIonpo/xEJr6Gl9hHcyCfCi2f5hgzruELDXM2uRgYuJb +p/a9X8PzVYMOkqXXaAQrutZhc0vfl6IFCkkko7yZ8OqMYwYDfncZImIY4Ws8uWgsUs6 kzMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781278872; x=1781883672; h=in-reply-to:from:content-language:references:to:subject:user-agent :mime-version:date:message-id:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=35ZiRbHcXFIuTMYGuABY0THVvr5nDzHFAHOY5N4BasU=; b=lKMGYNf2WW8ZsEBcQLNYjj09Pr89zLGVRVy/gP4ejC29AbyKe2jhI2oTMYayZd/qcw qVgkAsfcVJkD/fGrRMpm5JD5/1H2y+m0trH14doWOpzlCVPOHb+R+bfAiCaJoKTbm3GT H/bY/SNE0TgsxUSQBMFXYpds7aMZhystpZrhhOdJw1DY/XK2uIHfIYO8ITJQ3h99RUB7 Fd1D3CSviFavgl2I1HLMIf7aN9A5KzVhBTXcZy8XBCh0AhsOJMvuC6mRw33W0WB/0ZZr cdQUSAnCA03ECFsaTSrvY5Y5qdmzYb1a3AnD6wWRmpYkvGesm/1F+EU/y5wtAPMy+3Nv phbQ== X-Gm-Message-State: AOJu0Yy2ZRfoADw0u1JaxybJIWo82psAXNeOjYpFKeLL+qN/Gckl1jW+ 2leadpQAMB81+S0Nzgu/9/sUWSVe3xLJk9tKUuVda0PV0ETra81y7yyY95VM0A== X-Gm-Gg: Acq92OH0ubj0Hy3dv1EhsiakaAUCqH8FEDNywVG1GCjXyyGMI+oWH1FSeR5NbFruVEr GAwx09zdfSjBsy/pBzau05TlytrqH/4wPmfofMea6P1Bx47VJ1vQI1cL+pZDJ85kWUvI5Ms5tTj mhJoyoDhDtj1AoJ/RAi7m5DmylkAIPVeCRV0pIoAE8OH+eJfMAckagKIheQSOgkXPIU3imVq+hh n64W3llCfRmgw8M2rr7XkT9iklqH4LG7YXwcSEWNe2v+ZfeExG8+4t3Olb84qQY50s78f92WB03 QiuVVbFoTMzZFjz5hhd0ApIwxaF5CP71a0QO99pSf6sJRcUUkUtTCtPZqNI9yjy2JTAbA4z/tGD CxBnZ8ND3PaU56wjYE2Ez87VFCSX+7nrbOL/IOgW7fX3zaZfpX0EGkpp4dcnGqxsa3nkthDVeZ9 mvvjw7YRm0Bf7LK/OJZLq2+PqAJ/7Q2mO6QZ9jL7zHAKKwQxKmQiLF0q1moz63gWtvr9cwRoyjQ VV+PxhJ1iC8wbI= X-Received: by 2002:a05:600c:46c4:b0:490:e60b:5fd6 with SMTP id 5b1f17b1804b1-490ec4e7b61mr47904535e9.29.1781278871792; Fri, 12 Jun 2026 08:41:11 -0700 (PDT) Content-Type: multipart/alternative; boundary="------------LCntiB06HltbOa9A5wVnM96m" Message-ID: <8b51a40e-028a-42aa-a7e4-55a731ebe10e@gmail.com> Date: Fri, 12 Jun 2026 17:41:07 +0200 MIME-Version: 1.0 User-Agent: Thunderbird Daily Subject: [PATCH] x86/efi: Skip FPU save/restore for idle vCPU in EFI, runtime path To: xen-devel@lists.xenproject.org, Anthony PERARD , Jan Beulich References: <1781272430.8631fc262581453bbf619ec5b2062170.19ebc1c488b000701b@vates.tech> <957a0fea-4099-4470-9b40-3f8b294c44dc@suse.com> Content-Language: en-US From: Bernhard Kaindl In-Reply-To: <957a0fea-4099-4470-9b40-3f8b294c44dc@suse.com> X-purgate-ID: tlsNG-16d1c6/1781278872-85F6BD75-3F508F5F/0/0 X-purgate-type: clean X-purgate-size: 11282 X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1781278903366158500 This is a multi-part message in MIME format. --------------LCntiB06HltbOa9A5wVnM96m Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Hi Anthony, could you test this patch which exactly applies the changes=20 Jan suggested? Summary: Guard both EFI runtime FPU calls with !is_idle_vcpu() to skip save/restore for idle vCPUs, which don't have an FPU context to save/restore, much like the calls are guarded in __context_switch(), where save/restore is done only for non-idle vCPUs. As these simple guards should preferably go into Xen 4.22: Please test=20 if there are any further regressions with the 'cmos-rtc-probe'=20 workaround you just added removed to check if guarding the assertions as=20 Jan suggested is enough to fix the issues triggered on your machine.=20 Thanks, Bernhard The patch to test follows: [PATCH] x86/efi: Skip FPU=20 save/restore for idle vCPU in EFI, runtime path Anthony reported a boot-time crash in init_xen_time() via efi_get_time() on a Broadwell-D system: =C2=A0 Assertion '!is_idle_vcpu(v)' failed at arch/x86/i387.c:195 The failing path is an EFI runtime call reached early during boot, where current may still be the idle vCPU. This became fragile after the lazy-FPU removal cleanup series. In 1792bb9a99d2 ("x86: Cleanup cr0.TS flag handling"), efi_rs_enter() was changed from save_fpu_enable() to vcpu_save_fpu(curr), which unconditionally asserts !is_idle_vcpu(v) so an EFI runtime call in idle context now asserts. Likewise, in dba44e051209 ("x86: Remove fully_eager_fpu"), efi_rs_leave() was changed to call vcpu_restore_fpu(curr), which has the same assertion and can fail for the same reason. Guard both EFI runtime FPU calls with !is_idle_vcpu() to skip save/restore for idle vCPUs, which don't have an FPU context to save/restore, much like the calls are guarded in __context_switch(), where save/restore is done only for non-idle vCPUs. Fixes: 1792bb9a99d2 ("x86: Cleanup cr0.TS flag handling") Fixes: dba44e051209 ("x86: Remove fully_eager_fpu") Reported-by: Anthony PERARD Suggested-by: Jan Beulich Signed-off-by: Bernhard Kaindl --- =C2=A0xen/common/efi/runtime.c | 6 ++++-- =C2=A01 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c index a23fa75e37..596f2710fb 100644 --- a/xen/common/efi/runtime.c +++ b/xen/common/efi/runtime.c @@ -98,7 +98,8 @@ struct efi_rs_state efi_rs_enter(void) =C2=A0 =C2=A0 =C2=A0 */ =C2=A0 =C2=A0 =C2=A0sync_local_execstate(); =C2=A0 =C2=A0 =C2=A0state.cr3 =3D read_cr3(); - =C2=A0 =C2=A0vcpu_save_fpu(current); + =C2=A0 =C2=A0if ( !is_idle_vcpu(current) ) + =C2=A0 =C2=A0 =C2=A0 =C2=A0vcpu_save_fpu(current); =C2=A0 =C2=A0 =C2=A0asm volatile ( "fnclex; fldcw %0" :: "m" (fcw) ); =C2=A0 =C2=A0 =C2=A0asm volatile ( "ldmxcsr %0" :: "m" (mxcsr) ); @@ -159,7 +160,8 @@ void efi_rs_leave(struct efi_rs_state *state) =C2=A0 =C2=A0 =C2=A0} =C2=A0 =C2=A0 =C2=A0irq_exit(); =C2=A0 =C2=A0 =C2=A0spin_unlock(&efi_rs_lock); - =C2=A0 =C2=A0vcpu_restore_fpu(curr); + =C2=A0 =C2=A0if ( !is_idle_vcpu(curr) ) + =C2=A0 =C2=A0 =C2=A0 =C2=A0vcpu_restore_fpu(curr); =C2=A0} =C2=A0unsigned long efi_get_time(void) --=20 2.43.0 --- PS: The suggestion by Jan to fix this issue: On 12/06/2026 16:17,=20 Jan Beulich wrote: > The thinko looks to be in 4b9851c64522 ("x86: Remove fpu_initialised/fpu_= dirty"): > While vcpu_restore_fpu() indeed unconditionally set the two boolean field= s to > true at that point, idle vCPU-s may never make it through that function, = and > hence ->fpu_dirtied would have remained false, triggering the (original) = early > exit from _vcpu_save_fpu(). Perhaps all we can do now is guard the call to > vcpu_save_fpu() (and also the one to vcpu_restore_fpu() out of efi_rs_lea= ve()) > by explicit is_idle_vcpu() checks. Much like the calls are guarded in > __context_switch(). > > Jan --------------LCntiB06HltbOa9A5wVnM96m Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29u dGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgogIDwvaGVhZD4K ICA8Ym9keT4KICAgIDxkaXYKc3R5bGU9ImNvbG9yOiAjMDAwMDAwO2JhY2tncm91bmQtY29sb3I6 ICNmZmZmZmY7Zm9udC1mYW1pbHk6IENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7 Zm9udC13ZWlnaHQ6IG5vcm1hbDtmb250LXNpemU6IDE0cHg7bGluZS1oZWlnaHQ6IDE5cHg7d2hp dGUtc3BhY2U6IHByZTsiPjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij5IaSBBbnRo b255LAoKPC9zcGFuPmNvdWxkIHlvdSB0ZXN0IHRoaXMgcGF0Y2ggd2hpY2ggZXhhY3RseSBhcHBs aWVzIHRoZSBjaGFuZ2VzIEphbiBzdWdnZXN0ZWQ/CgpTdW1tYXJ5OgoKPGRpdj48c3BhbiBzdHls ZT0iY29sb3I6ICMwMDAwMDA7Ij5HdWFyZCBib3RoIEVGSSBydW50aW1lIEZQVSBjYWxscyB3aXRo ICFpc19pZGxlX3ZjcHUoKSB0byBza2lwIHNhdmUvcmVzdG9yZTwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij5mb3IgaWRsZSB2Q1BVcywgd2hpY2ggZG9u J3QgaGF2ZSBhbiBGUFUgY29udGV4dCB0byBzYXZlL3Jlc3RvcmUsPC9zcGFuPjwvZGl2PjxkaXY+ PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPm11Y2ggbGlrZSB0aGUgY2FsbHMgYXJl IGd1YXJkZWQgaW4gX19jb250ZXh0X3N3aXRjaCgpLDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAg ICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij53aGVyZSBzYXZlL3Jlc3RvcmUgaXMgZG9uZSBvbmx5 IGZvciBub24taWRsZSB2Q1BVcy48L3NwYW4+PC9kaXY+CkFzIHRoZXNlIHNpbXBsZSBndWFyZHMg c2hvdWxkIHByZWZlcmFibHkgZ28gaW50byBYZW4gNC4yMjoKClBsZWFzZSB0ZXN0IGlmIHRoZXJl IGFyZSBhbnkgZnVydGhlciByZWdyZXNzaW9ucyB3aXRoCjxzcGFuIHN0eWxlPSJ3aGl0ZS1zcGFj ZTogcHJlLXdyYXAiPnRoZSAnY21vcy1ydGMtcHJvYmUnIDwvc3Bhbj53b3JrYXJvdW5kIHlvdSBq dXN0IGFkZGVkIHJlbW92ZWQKdG8gY2hlY2sgaWYgZ3VhcmRpbmcgdGhlIGFzc2VydGlvbnMgYXMg SmFuIHN1Z2dlc3RlZCBpcyBlbm91Z2gKdG8gZml4IHRoZSBpc3N1ZXMgdHJpZ2dlcmVkIG9uIHlv dXIgbWFjaGluZS4KClRoYW5rcywKCiBCZXJuaGFyZAoKVGhlIHBhdGNoIHRvIHRlc3QgZm9sbG93 czoKCltQQVRDSF0geDg2L2VmaTogU2tpcCBGUFUgc2F2ZS9yZXN0b3JlIGZvciBpZGxlIHZDUFUg aW4gRUZJLCBydW50aW1lIHBhdGgKCjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+ QW50aG9ueSByZXBvcnRlZCBhIGJvb3QtdGltZSBjcmFzaCBpbiBpbml0X3hlbl90aW1lKCkgdmlh IGVmaV9nZXRfdGltZSgpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjog IzAwMDAwMDsiPm9uIGEgQnJvYWR3ZWxsLUQgc3lzdGVtOjwvc3Bhbj48L2Rpdj4KPGRpdj48c3Bh biBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij7CoCBBc3NlcnRpb24gJyFpc19pZGxlX3ZjcHUodikn IGZhaWxlZCBhdCBhcmNoL3g4Ni9pMzg3LmM6MTk1PC9zcGFuPjwvZGl2Pgo8ZGl2PjxzcGFuIHN0 eWxlPSJjb2xvcjogIzAwMDAwMDsiPlRoZSBmYWlsaW5nIHBhdGggaXMgYW4gRUZJIHJ1bnRpbWUg Y2FsbCByZWFjaGVkIGVhcmx5IGR1cmluZyBib290LDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAg ICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij53aGVyZSBjdXJyZW50IG1heSBzdGlsbCBiZSB0aGUg aWRsZSB2Q1BVLjwvc3Bhbj48L2Rpdj4KPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7 Ij5UaGlzIGJlY2FtZSBmcmFnaWxlIGFmdGVyIHRoZSBsYXp5LUZQVSByZW1vdmFsIGNsZWFudXAg c2VyaWVzLjwvc3Bhbj48L2Rpdj4KPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij5J biAxNzkyYmI5YTk5ZDIgKCJ4ODY6IENsZWFudXAgY3IwLlRTIGZsYWcgaGFuZGxpbmciKSw8L3Nw YW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+ZWZpX3JzX2Vu dGVyKCkgd2FzIGNoYW5nZWQgZnJvbSBzYXZlX2ZwdV9lbmFibGUoKSB0byB2Y3B1X3NhdmVfZnB1 KGN1cnIpLDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7 Ij53aGljaCB1bmNvbmRpdGlvbmFsbHkgYXNzZXJ0cyAhaXNfaWRsZV92Y3B1KHYpPC9zcGFuPjwv ZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPnNvIGFuIEVGSSBydW50 aW1lIGNhbGwgaW4gaWRsZSBjb250ZXh0IG5vdyBhc3NlcnRzLjwvc3Bhbj48L2Rpdj4KPGRpdj48 c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij5MaWtld2lzZSwgaW4gZGJhNDRlMDUxMjA5ICgi eDg2OiBSZW1vdmUgZnVsbHlfZWFnZXJfZnB1IiksPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAg IHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPmVmaV9yc19sZWF2ZSgpIHdhcyBjaGFuZ2VkIHRvIGNh bGwgdmNwdV9yZXN0b3JlX2ZwdShjdXJyKSw8L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5 bGU9ImNvbG9yOiAjMDAwMDAwOyI+d2hpY2ggaGFzIHRoZSBzYW1lIGFzc2VydGlvbiBhbmQgY2Fu IGZhaWwgZm9yIHRoZSBzYW1lIHJlYXNvbi48L3NwYW4+PC9kaXY+CjxkaXY+PHNwYW4gc3R5bGU9 ImNvbG9yOiAjMDAwMDAwOyI+R3VhcmQgYm90aCBFRkkgcnVudGltZSBGUFUgY2FsbHMgd2l0aCAh aXNfaWRsZV92Y3B1KCkgdG8gc2tpcCBzYXZlL3Jlc3RvcmU8L3NwYW4+PC9kaXY+PGRpdj48c3Bh bgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+Zm9yIGlkbGUgdkNQVXMsIHdoaWNoIGRvbid0 IGhhdmUgYW4gRlBVIGNvbnRleHQgdG8gc2F2ZS9yZXN0b3JlLDwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij5tdWNoIGxpa2UgdGhlIGNhbGxzIGFyZSBn dWFyZGVkIGluIF9fY29udGV4dF9zd2l0Y2goKSw8L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAg c3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+d2hlcmUgc2F2ZS9yZXN0b3JlIGlzIGRvbmUgb25seSBm b3Igbm9uLWlkbGUgdkNQVXMuPC9zcGFuPjwvZGl2Pgo8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjog IzAwMDAwMDsiPkZpeGVzOiAxNzkyYmI5YTk5ZDIgKCJ4ODY6IENsZWFudXAgY3IwLlRTIGZsYWcg aGFuZGxpbmciKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAw MDA7Ij5GaXhlczogZGJhNDRlMDUxMjA5ICgieDg2OiBSZW1vdmUgZnVsbHlfZWFnZXJfZnB1Iik8 L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+UmVwb3J0 ZWQtYnk6IEFudGhvbnkgUEVSQVJEIDxhIGNsYXNzPSJtb3otdHh0LWxpbmstcmZjMjM5NkUiIGhy ZWY9Im1haWx0bzphbnRob255LnBlcmFyZEB2YXRlcy50ZWNoIj4mbHQ7YW50aG9ueS5wZXJhcmRA dmF0ZXMudGVjaCZndDs8L2E+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xv cjogIzAwMDAwMDsiPlN1Z2dlc3RlZC1ieTogSmFuIEJldWxpY2ggPGEgY2xhc3M9Im1vei10eHQt bGluay1yZmMyMzk2RSIgaHJlZj0ibWFpbHRvOmpiZXVsaWNoQHN1c2UuY29tIj4mbHQ7amJldWxp Y2hAc3VzZS5jb20mZ3Q7PC9hPjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29s b3I6ICMwMDAwMDA7Ij5TaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBLYWluZGwgPGEgY2xhc3M9Im1v ei10eHQtbGluay1yZmMyMzk2RSIgaHJlZj0ibWFpbHRvOmJlcm5oYXJkLmthaW5kbEBjaXRyaXgu Y29tIj4mbHQ7YmVybmhhcmQua2FpbmRsQGNpdHJpeC5jb20mZ3Q7PC9hPjwvc3Bhbj48L2Rpdj48 ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij4tLS08L3NwYW4+PC9kaXY+PGRp dj48c3BhbgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+wqB4ZW4vY29tbW9uL2VmaS9ydW50 aW1lLmMgfCA2ICsrKystLTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6 ICMwMDAwMDA7Ij7CoDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pPC9zcGFuPjwvZGl2Pgo8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDA4MDsiPmRpZmYg LS1naXQgYS94ZW4vY29tbW9uL2VmaS9ydW50aW1lLmMgYi94ZW4vY29tbW9uL2VmaS9ydW50aW1l LmM8L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+aW5k ZXggYTIzZmE3NWUzNy4uNTk2ZjI3MTBmYiAxMDA2NDQ8L3NwYW4+PC9kaXY+PGRpdj48c3Bhbgog ICAgc3R5bGU9ImNvbG9yOiAjMDAwMDgwOyI+LS0tIGEveGVuL2NvbW1vbi9lZmkvcnVudGltZS5j PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDA4MDsiPisrKyBi L3hlbi9jb21tb24vZWZpL3J1bnRpbWUuYzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHls ZT0iY29sb3I6ICMwMDAwMDA7Ij5AQCAtOTgsNyArOTgsOCBAQCBzdHJ1Y3QgZWZpX3JzX3N0YXRl IGVmaV9yc19lbnRlcih2b2lkKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29s b3I6ICMwMDAwMDA7Ij7CoCDCoCDCoCAqLzwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHls ZT0iY29sb3I6ICMwMDAwMDA7Ij7CoCDCoCDCoHN5bmNfbG9jYWxfZXhlY3N0YXRlKCk7PC9zcGFu PjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgIMKgIMKgc3Rh dGUuY3IzID0gcmVhZF9jcjMoKTs8L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5bGU9ImNv bG9yOiAjYTMxNTE1OyI+LSDCoCDCoHZjcHVfc2F2ZV9mcHUoY3VycmVudCk7PC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzA5ODY1ODsiPisgwqAgwqBpZiAoICFpc19p ZGxlX3ZjcHUoY3VycmVudCkgKTwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29s b3I6ICMwOTg2NTg7Ij4rIMKgIMKgIMKgIMKgdmNwdV9zYXZlX2ZwdShjdXJyZW50KTs8L3NwYW4+ PC9kaXY+PGRpdj48c3BhbgogICAgc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyI+wqAgwqAgwqBhc20g dm9sYXRpbGUgKCAiZm5jbGV4OyBmbGRjdyAlMCIgOjogIm0iIChmY3cpICk7PC9zcGFuPjwvZGl2 PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgIMKgIMKgYXNtIHZvbGF0 aWxlICggImxkbXhjc3IgJTAiIDo6ICJtIiAobXhjc3IpICk7PC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4K ICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPkBAIC0xNTksNyArMTYwLDggQEAgdm9pZCBlZmlf cnNfbGVhdmUoc3RydWN0IGVmaV9yc19zdGF0ZSAqc3RhdGUpPC9zcGFuPjwvZGl2PjxkaXY+PHNw YW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgIMKgIMKgfTwvc3Bhbj48L2Rpdj48ZGl2 PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij7CoCDCoCDCoGlycV9leGl0KCk7PC9z cGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgIMKgIMKg c3Bpbl91bmxvY2soJmFtcDtlZmlfcnNfbG9jayk7PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAg IHN0eWxlPSJjb2xvcjogI2EzMTUxNTsiPi0gwqAgwqB2Y3B1X3Jlc3RvcmVfZnB1KGN1cnIpOzwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwOTg2NTg7Ij4rIMKgIMKg aWYgKCAhaXNfaWRsZV92Y3B1KGN1cnIpICk8L3NwYW4+PC9kaXY+PGRpdj48c3BhbgogICAgc3R5 bGU9ImNvbG9yOiAjMDk4NjU4OyI+KyDCoCDCoCDCoCDCoHZjcHVfcmVzdG9yZV9mcHUoY3Vycik7 PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPsKgfTwv c3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij7CoDwvc3Bh bj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij7CoHVuc2lnbmVk IGxvbmcgZWZpX2dldF90aW1lKHZvaWQpPC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4KICAgIHN0eWxl PSJjb2xvcjogI2EzMTUxNTsiPi0tIDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuCiAgICBzdHlsZT0i Y29sb3I6ICMwMDAwMDA7Ij4yLjQzLjA8L3NwYW4+PC9kaXY+PHNwYW4KICAgIHN0eWxlPSJ3aGl0 ZS1zcGFjZTogbm9ybWFsIj4KLS0tClBTOiBUaGUgc3VnZ2VzdGlvbiBieSBKYW4gdG8gZml4IHRo aXMgaXNzdWU6CgpPbiAxMi8wNi8yMDI2IDE2OjE3LCBKYW4gQmV1bGljaCB3cm90ZTo8L3NwYW4+ PC9kaXY+CiAgICA8YmxvY2txdW90ZSB0eXBlPSJjaXRlIgogICAgICBjaXRlPSJtaWQ6OTU3YTBm ZWEtNDA5OS00NDcwLTliNDAtM2Y4YjI5NGM0NGRjQHN1c2UuY29tIj4KICAgICAgPHByZSB3cmFw PSIiIGNsYXNzPSJtb3otcXVvdGUtcHJlIj5UaGUgdGhpbmtvIGxvb2tzIHRvIGJlIGluIDRiOTg1 MWM2NDUyMiAoIng4NjogUmVtb3ZlIGZwdV9pbml0aWFsaXNlZC9mcHVfZGlydHkiKToKV2hpbGUg dmNwdV9yZXN0b3JlX2ZwdSgpIGluZGVlZCB1bmNvbmRpdGlvbmFsbHkgc2V0IHRoZSB0d28gYm9v bGVhbiBmaWVsZHMgdG8KdHJ1ZSBhdCB0aGF0IHBvaW50LCBpZGxlIHZDUFUtcyBtYXkgbmV2ZXIg bWFrZSBpdCB0aHJvdWdoIHRoYXQgZnVuY3Rpb24sIGFuZApoZW5jZSAtJmd0O2ZwdV9kaXJ0aWVk IHdvdWxkIGhhdmUgcmVtYWluZWQgZmFsc2UsIHRyaWdnZXJpbmcgdGhlIChvcmlnaW5hbCkgZWFy bHkKZXhpdCBmcm9tIF92Y3B1X3NhdmVfZnB1KCkuIFBlcmhhcHMgYWxsIHdlIGNhbiBkbyBub3cg aXMgZ3VhcmQgdGhlIGNhbGwgdG8KdmNwdV9zYXZlX2ZwdSgpIChhbmQgYWxzbyB0aGUgb25lIHRv IHZjcHVfcmVzdG9yZV9mcHUoKSBvdXQgb2YgZWZpX3JzX2xlYXZlKCkpCmJ5IGV4cGxpY2l0IGlz X2lkbGVfdmNwdSgpIGNoZWNrcy4gTXVjaCBsaWtlIHRoZSBjYWxscyBhcmUgZ3VhcmRlZCBpbgpf X2NvbnRleHRfc3dpdGNoKCkuCgpKYW48L3ByZT4KICAgIDwvYmxvY2txdW90ZT4KICA8L2JvZHk+ CjwvaHRtbD4K --------------LCntiB06HltbOa9A5wVnM96m--