From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jim Porter Newsgroups: gmane.emacs.bugs Subject: bug#51993: 29.0.50; [PATCH explanation] Killing emacsclient terminal with `server-stop-automatically' doesn't prompt to save files Date: Thu, 1 Dec 2022 17:42:18 -0800 Message-ID: <30673991-caf6-afeb-ec05-d70d6fc45f48@gmail.com> References: <9e47c871-a2c3-d764-bec9-d87abf3efe83@gmail.com> <79a53ecc-dbfc-d088-d80d-96f349be794a@gmail.com> <834k7vw2vb.fsf@gnu.org> <87czc4tosz.fsf@gnus.org> <83lepoi58p.fsf@gnu.org> <83y1tbxbbt.fsf@gnu.org> <83h6zxwujo.fsf@gnu.org> <2738f071-c87f-72cf-226f-6e8597cb07a8@gmail.com> <83a65ouz0e.fsf@gnu.org> <83lenrghhg.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------kP04AvxyTSEJW1KPGKYjpSB1" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22632"; mail-complaints-to="usenet@ciao.gmane.io" Cc: larsi@gnus.org, 51993@debbugs.gnu.org, gregory@heytings.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Dec 02 02:43:18 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p0v5C-0005m7-5o for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 02 Dec 2022 02:43:18 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p0v53-0008BI-5Y; Thu, 01 Dec 2022 20:43:10 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p0v51-0008B7-Mn for bug-gnu-emacs@gnu.org; Thu, 01 Dec 2022 20:43:07 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p0v4w-0005RS-LN for bug-gnu-emacs@gnu.org; Thu, 01 Dec 2022 20:43:07 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1p0v4w-0004QU-Ha for bug-gnu-emacs@gnu.org; Thu, 01 Dec 2022 20:43:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Jim Porter Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 02 Dec 2022 01:43:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51993 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 51993-submit@debbugs.gnu.org id=B51993.166994534917007 (code B ref 51993); Fri, 02 Dec 2022 01:43:02 +0000 Original-Received: (at 51993) by debbugs.gnu.org; 2 Dec 2022 01:42:29 +0000 Original-Received: from localhost ([127.0.0.1]:43165 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0v4O-0004QF-JK for submit@debbugs.gnu.org; Thu, 01 Dec 2022 20:42:29 -0500 Original-Received: from mail-pj1-f53.google.com ([209.85.216.53]:37866) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p0v4M-0004Q9-6w for 51993@debbugs.gnu.org; Thu, 01 Dec 2022 20:42:27 -0500 Original-Received: by mail-pj1-f53.google.com with SMTP id k2-20020a17090a4c8200b002187cce2f92so6929372pjh.2 for <51993@debbugs.gnu.org>; Thu, 01 Dec 2022 17:42:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=vjFhW/4czrlPuvA9a6Z5FVhKqEkpSPM5eZlP+hB/GkA=; b=oFBaPBnCYyPmZZ/+JFUP8XAqkAEElSvQKoEjPSWV4/hcXgqxG+C/v7TkPWXfvskw3Y Ru8d3YWBDckHS+qmAoHuxN7sLs0GvJPf3IKTr7d9gh2H+0lbHtj3wOnY6TFZBZ2n2ihK PvuRnSBQa8HDqPFkPo0Nefjll2Y1fswR25MWrdGUYDaZ+GzOsULZb28WB9hdPky4/Cy5 xRS7CxxowoMCd1CWNu70QbIeYvJEoBCTWX/XBWFrbHaJmCIS508ZH/0h9ghqoGfAwLEC Zp1sCYZvqnXmnitYoOJgP3hN8U+JukxOthTtdYtJY34LIpBevl7dYrtOufCMpIIOEEO4 ROHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=vjFhW/4czrlPuvA9a6Z5FVhKqEkpSPM5eZlP+hB/GkA=; b=q1ifDRcX4wUfMB2jUnk92YrClFECzTOi2Yd86LLox1DzCws5OnI3N2l/sN5ZuUqqBh 5si54xvibTmP1JPztovSbdkzimHDMp0lwEtWbSH/VJ7adO8SMy1pVJBEX/Vp6ryycV56 Jzv7NCzilZi7iFK1dXMulPKeOLz/oO/b5+fMAsJQ0V31Y3HXeqlh7QOUT0Z5A9NDnSVt OJlllVq9QBcc7LeGpiBRp0f4Q48kyY6GVu3kROFTGBuUX0KJqt9YoswVpq+InPGEWkKp 12qcVMNFz1TXP+rSuo+se86e9opV2mgAJGkc4z2DjMxQTan/AnzXgxLicSbdnj14TK80 +D/A== X-Gm-Message-State: ANoB5pnnrreBUQBgc6kMl0zBn0NpdGd3MfayNHM8NFIKqgkl4P0wCBjH H6S3Cx0nQDjDveu+rbWYF/s= X-Google-Smtp-Source: AA0mqf6hWK4fgwTWAkTL4M4uJ1cQM09Nna30NBSdjYnZAi8IDH0BVIkhaDTpDxSxkj8N70GFX3yqig== X-Received: by 2002:a17:902:bb84:b0:184:e4db:e3e with SMTP id m4-20020a170902bb8400b00184e4db0e3emr53707820pls.47.1669945340089; Thu, 01 Dec 2022 17:42:20 -0800 (PST) Original-Received: from [192.168.1.2] (cpe-76-168-148-233.socal.res.rr.com. [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id l12-20020a17090a850c00b0020ae09e9724sm3607530pjn.53.2022.12.01.17.42.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 01 Dec 2022 17:42:19 -0800 (PST) Content-Language: en-US In-Reply-To: <83lenrghhg.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:249686 Archived-At: This is a multi-part message in MIME format. --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 12/1/2022 9:29 AM, Eli Zaretskii wrote: > I'm okay with installing the original changes on master, if you indeed > believe the new code is much cleaner (but then please explain why you think > so, because I don't think I see that just by looking at the diffs). But for > the release branch, I'm not comfortable with making such serious changes in > a part of server.el that is already way too complicated, what with all the > fancy shutdown options we strive to support. There be dragons, and I have > no intention to release Emacs 29 with buggy server-client editing. So for > the release branch, please prepare a safer version of the change, which only > changes the code which is the immediate cause of the incorrect behavior. Attached is a patch series that explains in more detail how I arrived at the previous version of my patch. This is basically a reconstruction of the steps I took when writing it originally. I'll describe my overall plan and then address the specific comments you had after that. (This might be overly-verbose, but I wanted to put as much detail in as I could in the hopes of addressing all your concerns.) Prior to my patch, 'server-stop-automatically--handle-delete-frame' (henceforth 'SSA--handle-delete-frame') can get called in two situations: when someone calls 'delete-frame' (it's a hook on 'delete-frame-functions') or when someone calls 'save-buffers-kill-emacs' ('server-save-buffers-kill-emacs' delegates to it when configured to). To help make the logic easier to follow, I split it into two: one for handling 'delete-frame', and one for handling 'save-buffers-kill-terminal'. See patches 0001 and 0002. >> (defun server-stop-automatically--handle-delete-frame (frame) >> "Handle deletion of FRAME when `server-stop-automatically' is used." >> - (when server-stop-automatically >> - (if (if (and (processp (frame-parameter frame 'client)) >> - (eq this-command 'save-buffers-kill-terminal)) >> - (progn >> - (dolist (f (frame-list)) >> - (when (and (eq (frame-parameter frame 'client) >> - (frame-parameter f 'client)) >> - (not (eq frame f))) >> - (set-frame-parameter f 'client nil) >> - (let ((server-stop-automatically nil)) >> - (delete-frame f)))) >> - (if (cddr (frame-list)) >> - (let ((server-stop-automatically nil)) >> - (delete-frame frame) >> - nil) >> - t)) >> + (when (and server-stop-automatically >> (null (cddr (frame-list)))) >> (let ((server-stop-automatically nil)) >> (save-buffers-kill-emacs) >> - (delete-frame frame))))) >> + (delete-frame frame)))) > > And here you completely rewrote a function. In patch 0002, you can see (most of) this change that you mentioned: since I made one function for each case as described above, the second 'if' statement's conditional is always false, so I just got rid of the conditional and the then-clause, leaving only the else-clause: (null (cddr (frame-list))). I also simplified this function a bit in the last patch, 0007. Now for the rest of the patch series. The original bug is that the behavior of 'server-save-buffers-kill-terminal' when there are multiple clients should be the same regardless of the SSA setting (it wasn't). So next, I made 'SSA--handle-kill-terminal' have the same basic structure as 'server-save-buffers-kill-terminal' (patch 0003). That makes it easier to see the differences between the two. Patch 0005 is where the real fix is: it makes sure that when we *don't* want to kill Emacs, 'SSA--handle-kill-terminal' does the same thing as 'server-save-buffers-kill-terminal'. >> @@ -1801,31 +1809,20 @@ server-save-buffers-kill-terminal >> ;; ARG is non-nil), since we're not killing >> ;; Emacs (unlike `save-buffers-kill-emacs'). >> (and arg t))) >> - (server-delete-client proc))) >> - (t (error "Invalid client frame")))))) >> + (server-delete-client proc)) >> + ;; If `server-stop-automatically' is set, there are no >> + ;; other client processes, and no other client frames >> + ;; (e.g. `nowait' frames), kill Emacs. >> + (save-buffers-kill-emacs arg))) >> + (t (error "Invalid client frame"))))) > > But this one is problematic: it adds save-buffers-kill-emacs which wasn't in > the original code, and I don't understand why. The bug wasn't about this, > was it? In patch 0005, you can start to see this block of code take shape: because we want to handle the "don't kill Emacs" case in 'SSA--handle-kill-terminal', we add the 'save-some-buffers' + 'server-delete-client' code there, resulting in something that looks similar to the above hunk. Then, in patch 0006, I just merge 'server-save-buffers-kill-terminal' and 'SSA--handle-kill-terminal', since most of the code is shared at this point. Finally, patch 0007 is just a bit of cleanup; with all of these applied, server.el should be identical to my previous patch. Hopefully this explains things reasonably well, and doesn't go into too much (or too little) detail. If there are any other bits that you have concerns about, just let me know. --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0001-Duplicate-server-stop-automatically-handle-delete-fr.patch" Content-Disposition: attachment; filename*0="0001-Duplicate-server-stop-automatically-handle-delete-fr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3NGM3MjRhNDZiMTY3ODJkNjgyNzM1N2RkNjRlZmJhZmU4YWViOTJmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMTozMzoxOCAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggMS83XSBEdXBsaWNhdGUKICdzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUt ZGVsZXRlLWZyYW1lJwoKKiBsaXNwL3NlcnZlci5lbCAoc2VydmVyLXN0b3AtYXV0b21hdGlj YWxseS0taGFuZGxlLWRlbGV0ZS1mcmFtZSk6CkNvcHkgdGhpcy4uLgooc2VydmVyLXN0b3At YXV0b21hdGljYWxseS0taGFuZGxlLWtpbGwtdGVybWluYWwpIC4uLiB0byB0aGlzLgooc2Vy dmVyLXNhdmUtYnVmZmVycy1raWxsLXRlcm1pbmFsKTogVXNlIGl0LgotLS0KIGxpc3Avc2Vy dmVyLmVsIHwgMjUgKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDI0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9saXNwL3Nl cnZlci5lbCBiL2xpc3Avc2VydmVyLmVsCmluZGV4IDFiMDI3Zjg4Y2UuLjBhNTljODQ5NmEg MTAwNjQ0Ci0tLSBhL2xpc3Avc2VydmVyLmVsCisrKyBiL2xpc3Avc2VydmVyLmVsCkBAIC0x NzgxLDcgKzE3ODEsNyBAQCBzZXJ2ZXItc2F2ZS1idWZmZXJzLWtpbGwtdGVybWluYWwKIElm IGVtYWNzY2xpZW50IHdhcyBzdGFydGVkIHdpdGggYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBl ZGl0LCB0aGVuCiBvbmx5IHRoZXNlIGZpbGVzIHdpbGwgYmUgYXNrZWQgdG8gYmUgc2F2ZWQu IgogICAoaWYgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseQotICAgICAgKHNlcnZlci1zdG9w LWF1dG9tYXRpY2FsbHktLWhhbmRsZS1kZWxldGUtZnJhbWUgKHNlbGVjdGVkLWZyYW1lKSkK KyAgICAgIChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUta2lsbC10ZXJtaW5h bCAoc2VsZWN0ZWQtZnJhbWUpKQogICAgIChsZXQgKChwcm9jIChmcmFtZS1wYXJhbWV0ZXIg bmlsICdjbGllbnQpKSkKICAgICAgIChjb25kICgoZXEgcHJvYyAnbm93YWl0KQogCSAgICAg OzsgTm93YWl0IGZyYW1lcyBoYXZlIG5vIGNsaWVudCBidWZmZXIgbGlzdC4KQEAgLTE4Mjcs NiArMTgyNywyOSBAQCBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUtZGVsZXRl LWZyYW1lCiAJICAoc2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MpCiAJICAoZGVsZXRlLWZyYW1l IGZyYW1lKSkpKSkKIAorKGRlZnVuIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRs ZS1raWxsLXRlcm1pbmFsIChmcmFtZSkKKyAgIkhhbmRsZSBkZWxldGlvbiBvZiBGUkFNRSB3 aGVuIGBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5JyBpcyB1c2VkLiIKKyAgKHdoZW4gc2Vy dmVyLXN0b3AtYXV0b21hdGljYWxseQorICAgIChpZiAoaWYgKGFuZCAocHJvY2Vzc3AgKGZy YW1lLXBhcmFtZXRlciBmcmFtZSAnY2xpZW50KSkKKwkJIChlcSB0aGlzLWNvbW1hbmQgJ3Nh dmUtYnVmZmVycy1raWxsLXRlcm1pbmFsKSkKKwkgICAgKHByb2duCisJICAgICAgKGRvbGlz dCAoZiAoZnJhbWUtbGlzdCkpCisJCSh3aGVuIChhbmQgKGVxIChmcmFtZS1wYXJhbWV0ZXIg ZnJhbWUgJ2NsaWVudCkKKwkJCSAgICAgICAoZnJhbWUtcGFyYW1ldGVyIGYgJ2NsaWVudCkp CisJCQkgICAobm90IChlcSBmcmFtZSBmKSkpCisJCSAgKHNldC1mcmFtZS1wYXJhbWV0ZXIg ZiAnY2xpZW50IG5pbCkKKwkJICAobGV0ICgoc2VydmVyLXN0b3AtYXV0b21hdGljYWxseSBu aWwpKQorCQkgICAgKGRlbGV0ZS1mcmFtZSBmKSkpKQorCSAgICAgIChpZiAoY2RkciAoZnJh bWUtbGlzdCkpCisJCSAgKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkgbmlsKSkK KwkJICAgIChkZWxldGUtZnJhbWUgZnJhbWUpCisJCSAgICBuaWwpCisJCXQpKQorCSAgKG51 bGwgKGNkZHIgKGZyYW1lLWxpc3QpKSkpCisJKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRp Y2FsbHkgbmlsKSkKKwkgIChzYXZlLWJ1ZmZlcnMta2lsbC1lbWFjcykKKwkgIChkZWxldGUt ZnJhbWUgZnJhbWUpKSkpKQorCiAoZGVmdW4gc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0t bWF5YmUta2lsbC1lbWFjcyAoKQogICAiSGFuZGxlIGNsb3Npbmcgb2YgRW1hY3MgZGFlbW9u IHdoZW4gYHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHknIGlzIHVzZWQuIgogICAodW5sZXNz IChjZHIgKGZyYW1lLWxpc3QpKQotLSAKMi4yNS4xCgo= --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0002-Simplify-server-stop-automatically-handlers.patch" Content-Disposition: attachment; filename="0002-Simplify-server-stop-automatically-handlers.patch" Content-Transfer-Encoding: base64 RnJvbSBiZTBiNDU1NmI5Y2IxYWI4ODJkN2U2Y2U1ZTg1ZGQyMGNmZGM5ZDk2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMTozNTowMCAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggMi83XSBTaW1wbGlmeSBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IGhhbmRsZXJzCgoq IGxpc3Avc2VydmVyLmVsIChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUtZGVs ZXRlLWZyYW1lKToKJ3RoaXMtY29tbWFuZCcgaXMgbmV2ZXIgJ3NhdmUtYnVmZmVycy1raWxs LXRlcm1pbmFsJyBoZXJlOyByZW1vdmUKdGhlIHdob2xlIGNvbmRpdGlvbmFsLgooc2VydmVy LXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWtpbGwtdGVybWluYWwpOiAndGhpcy1jb21t YW5kJyBpcwphbHdheXMgJ3NhdmUtYnVmZmVycy1raWxsLXRlcm1pbmFsJywgc28gcmVtb3Zl IHRoYXQgdGVzdC4KLS0tCiBsaXNwL3NlcnZlci5lbCB8IDIwICsrLS0tLS0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9saXNwL3NlcnZlci5lbCBiL2xpc3Avc2VydmVyLmVsCmluZGV4IDBh NTljODQ5NmEuLjY0MzMyNDQyZDMgMTAwNjQ0Ci0tLSBhL2xpc3Avc2VydmVyLmVsCisrKyBi L2xpc3Avc2VydmVyLmVsCkBAIC0xODA3LDIyICsxODA3LDcgQEAgc2VydmVyLXNhdmUtYnVm ZmVycy1raWxsLXRlcm1pbmFsCiAoZGVmdW4gc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0t aGFuZGxlLWRlbGV0ZS1mcmFtZSAoZnJhbWUpCiAgICJIYW5kbGUgZGVsZXRpb24gb2YgRlJB TUUgd2hlbiBgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseScgaXMgdXNlZC4iCiAgICh3aGVu IHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkKLSAgICAoaWYgKGlmIChhbmQgKHByb2Nlc3Nw IChmcmFtZS1wYXJhbWV0ZXIgZnJhbWUgJ2NsaWVudCkpCi0JCSAoZXEgdGhpcy1jb21tYW5k ICdzYXZlLWJ1ZmZlcnMta2lsbC10ZXJtaW5hbCkpCi0JICAgIChwcm9nbgotCSAgICAgIChk b2xpc3QgKGYgKGZyYW1lLWxpc3QpKQotCQkod2hlbiAoYW5kIChlcSAoZnJhbWUtcGFyYW1l dGVyIGZyYW1lICdjbGllbnQpCi0JCQkgICAgICAgKGZyYW1lLXBhcmFtZXRlciBmICdjbGll bnQpKQotCQkJICAgKG5vdCAoZXEgZnJhbWUgZikpKQotCQkgIChzZXQtZnJhbWUtcGFyYW1l dGVyIGYgJ2NsaWVudCBuaWwpCi0JCSAgKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRpY2Fs bHkgbmlsKSkKLQkJICAgIChkZWxldGUtZnJhbWUgZikpKSkKLQkgICAgICAoaWYgKGNkZHIg KGZyYW1lLWxpc3QpKQotCQkgIChsZXQgKChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5p bCkpCi0JCSAgICAoZGVsZXRlLWZyYW1lIGZyYW1lKQotCQkgICAgbmlsKQotCQl0KSkKLQkg IChudWxsIChjZGRyIChmcmFtZS1saXN0KSkpKQorICAgIChpZiAobnVsbCAoY2RkciAoZnJh bWUtbGlzdCkpKQogCShsZXQgKChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5pbCkpCiAJ ICAoc2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MpCiAJICAoZGVsZXRlLWZyYW1lIGZyYW1lKSkp KSkKQEAgLTE4MzAsOCArMTgxNSw3IEBAIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhh bmRsZS1kZWxldGUtZnJhbWUKIChkZWZ1biBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1o YW5kbGUta2lsbC10ZXJtaW5hbCAoZnJhbWUpCiAgICJIYW5kbGUgZGVsZXRpb24gb2YgRlJB TUUgd2hlbiBgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseScgaXMgdXNlZC4iCiAgICh3aGVu IHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkKLSAgICAoaWYgKGlmIChhbmQgKHByb2Nlc3Nw IChmcmFtZS1wYXJhbWV0ZXIgZnJhbWUgJ2NsaWVudCkpCi0JCSAoZXEgdGhpcy1jb21tYW5k ICdzYXZlLWJ1ZmZlcnMta2lsbC10ZXJtaW5hbCkpCisgICAgKGlmIChpZiAocHJvY2Vzc3Ag KGZyYW1lLXBhcmFtZXRlciBmcmFtZSAnY2xpZW50KSkKIAkgICAgKHByb2duCiAJICAgICAg KGRvbGlzdCAoZiAoZnJhbWUtbGlzdCkpCiAJCSh3aGVuIChhbmQgKGVxIChmcmFtZS1wYXJh bWV0ZXIgZnJhbWUgJ2NsaWVudCkKLS0gCjIuMjUuMQoK --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0003-Restructure-server-stop-automatically-handle-kill-te.patch" Content-Disposition: attachment; filename*0="0003-Restructure-server-stop-automatically-handle-kill-te.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkYjBjZmZiODQ5YzBhMGJlNTBkYjdhZDRhM2EwZDQ4ZmYzNDM4NTRiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMTo0Mjo0OCAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggMy83XSBSZXN0cnVjdHVyZQogJ3NlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRs ZS1raWxsLXRlcm1pbmFsJwoKVGhpcyBjaGFuZ2VzIHRoZSBmdW5jdGlvbiB0byBoYXZlIHRo ZSBzYW1lIHN0cnVjdHVyZSBhcwonc2VydmVyLXNhdmUtYnVmZmVycy1raWxsLXRlcm1pbmFs JywgYnV0IG90aGVyd2lzZSB3b3JrcyBleGFjdGx5IHRoZQpzYW1lIGFzIGJlZm9yZS4gIFRo aXMganVzdCB0YWtlcyB0aGUgbmVzdGVkICdpZicgc3RhdGVtZW50IGFuZCBicmluZ3MKaXQg dG8gdGhlIHRvcCBsZXZlbCBhcyAnY29uZCcgKG5vdGUgdGhhdCB0aGUgJ2NsaWVudCcgZnJh bWUgcGFyYW1ldGVyCmNhbiBvbmx5IGJlIGEgcHJvY2VzcyBvciB0aGUgc3ltYm9sICdub3dh aXQnIGhlcmUsIHNpbmNlIG90aGVyd2lzZQonc2VydmVyLXNhdmUtYnVmZmVycy1raWxsLXRl cm1pbmFsJyB3b3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkKS4KCiogbGlzcC9zZXJ2ZXIuZWwg KHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRsZS1raWxsLXRlcm1pbmFsKToKUmVz dHJ1Y3R1cmUuCi0tLQogbGlzcC9zZXJ2ZXIuZWwgfCA0MSArKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMo KyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3Avc2VydmVyLmVsIGIvbGlz cC9zZXJ2ZXIuZWwKaW5kZXggNjQzMzI0NDJkMy4uNzE5MTM4Nzk1OSAxMDA2NDQKLS0tIGEv bGlzcC9zZXJ2ZXIuZWwKKysrIGIvbGlzcC9zZXJ2ZXIuZWwKQEAgLTE4MTUsMjQgKzE4MTUs MjkgQEAgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWRlbGV0ZS1mcmFtZQog KGRlZnVuIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRsZS1raWxsLXRlcm1pbmFs IChmcmFtZSkKICAgIkhhbmRsZSBkZWxldGlvbiBvZiBGUkFNRSB3aGVuIGBzZXJ2ZXItc3Rv cC1hdXRvbWF0aWNhbGx5JyBpcyB1c2VkLiIKICAgKHdoZW4gc2VydmVyLXN0b3AtYXV0b21h dGljYWxseQotICAgIChpZiAoaWYgKHByb2Nlc3NwIChmcmFtZS1wYXJhbWV0ZXIgZnJhbWUg J2NsaWVudCkpCi0JICAgIChwcm9nbgotCSAgICAgIChkb2xpc3QgKGYgKGZyYW1lLWxpc3Qp KQotCQkod2hlbiAoYW5kIChlcSAoZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdjbGllbnQpCi0J CQkgICAgICAgKGZyYW1lLXBhcmFtZXRlciBmICdjbGllbnQpKQotCQkJICAgKG5vdCAoZXEg ZnJhbWUgZikpKQotCQkgIChzZXQtZnJhbWUtcGFyYW1ldGVyIGYgJ2NsaWVudCBuaWwpCi0J CSAgKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkgbmlsKSkKLQkJICAgIChkZWxl dGUtZnJhbWUgZikpKSkKLQkgICAgICAoaWYgKGNkZHIgKGZyYW1lLWxpc3QpKQotCQkgIChs ZXQgKChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5pbCkpCi0JCSAgICAoZGVsZXRlLWZy YW1lIGZyYW1lKQotCQkgICAgbmlsKQotCQl0KSkKLQkgIChudWxsIChjZGRyIChmcmFtZS1s aXN0KSkpKQotCShsZXQgKChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5pbCkpCi0JICAo c2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MpCi0JICAoZGVsZXRlLWZyYW1lIGZyYW1lKSkpKSkK KyAgICAobGV0ICgocHJvYyAoZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdjbGllbnQpKSkKKyAg ICAgIChjb25kICgoZXEgcHJvYyAnbm93YWl0KQorICAgICAgICAgICAgIChpZiAobnVsbCAo Y2RkciAoZnJhbWUtbGlzdCkpKQorICAgICAgICAgICAgICAgICAobGV0ICgoc2VydmVyLXN0 b3AtYXV0b21hdGljYWxseSBuaWwpKQorCSAgICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxs LWVtYWNzKQorCSAgICAgICAgICAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkpKSkKKyAgICAgICAg ICAgICgocHJvY2Vzc3AgcHJvYykKKyAgICAgICAgICAgICAoaWYgKHByb2duCisJICAgICAg ICAgICAoZG9saXN0IChmIChmcmFtZS1saXN0KSkKKwkJICAgICAod2hlbiAoYW5kIChlcSAo ZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdjbGllbnQpCisJCQkgICAgICAgICAgICAoZnJhbWUt cGFyYW1ldGVyIGYgJ2NsaWVudCkpCisJCQkgICAgICAgIChub3QgKGVxIGZyYW1lIGYpKSkK KwkJICAgICAgIChzZXQtZnJhbWUtcGFyYW1ldGVyIGYgJ2NsaWVudCBuaWwpCisJCSAgICAg ICAobGV0ICgoc2VydmVyLXN0b3AtYXV0b21hdGljYWxseSBuaWwpKQorCQkgICAgICAgICAo ZGVsZXRlLWZyYW1lIGYpKSkpCisJICAgICAgICAgICAoaWYgKGNkZHIgKGZyYW1lLWxpc3Qp KQorCQkgICAgICAgKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkgbmlsKSkKKwkJ ICAgICAgICAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkKKwkJICAgICAgICAgbmlsKQorCQkgICAg IHQpKQorCSAgICAgICAgIChsZXQgKChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5pbCkp CisJICAgICAgICAgICAoc2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MpCisJICAgICAgICAgICAo ZGVsZXRlLWZyYW1lIGZyYW1lKSkpKSkpKSkKIAogKGRlZnVuIHNlcnZlci1zdG9wLWF1dG9t YXRpY2FsbHktLW1heWJlLWtpbGwtZW1hY3MgKCkKICAgIkhhbmRsZSBjbG9zaW5nIG9mIEVt YWNzIGRhZW1vbiB3aGVuIGBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5JyBpcyB1c2VkLiIK LS0gCjIuMjUuMQoK --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0004-Remove-unnecessary-delete-frame-calls-after-save-buf.patch" Content-Disposition: attachment; filename*0="0004-Remove-unnecessary-delete-frame-calls-after-save-buf.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2OTRhYWQ0MzJhZWU3M2FjZDIzMzVmNWVhNWQwZjQ3ZDBjODM3OWUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMTo0ODoxMSAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggNC83XSBSZW1vdmUgdW5uZWNlc3NhcnkgJ2RlbGV0ZS1mcmFtZScgY2FsbHMgYWZ0ZXIK ICdzYXZlLWJ1ZmZlcnMta2lsbC1lbWFjcycKCk5vIG5lZWQgdG8gZGVsZXRlIGEgZnJhbWUg aWYgd2UncmUga2lsbGluZyBFbWFjcyBlbnRpcmVseSBhbnl3YXkuCgoqIGxpc3Avc2VydmVy LmVsIChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUta2lsbC10ZXJtaW5hbCk6 ClJlbW92ZSBhIGNvdXBsZSAnZGVsZXRlLWZyYW1lJyBjYWxscy4KLS0tCiBsaXNwL3NlcnZl ci5lbCB8IDggKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDYg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9zZXJ2ZXIuZWwgYi9saXNwL3NlcnZl ci5lbAppbmRleCA3MTkxMzg3OTU5Li4zOTliZjY5NGZkIDEwMDY0NAotLS0gYS9saXNwL3Nl cnZlci5lbAorKysgYi9saXNwL3NlcnZlci5lbApAQCAtMTgxOCw5ICsxODE4LDcgQEAgc2Vy dmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWtpbGwtdGVybWluYWwKICAgICAobGV0 ICgocHJvYyAoZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdjbGllbnQpKSkKICAgICAgIChjb25k ICgoZXEgcHJvYyAnbm93YWl0KQogICAgICAgICAgICAgIChpZiAobnVsbCAoY2RkciAoZnJh bWUtbGlzdCkpKQotICAgICAgICAgICAgICAgICAobGV0ICgoc2VydmVyLXN0b3AtYXV0b21h dGljYWxseSBuaWwpKQotCSAgICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxsLWVtYWNzKQot CSAgICAgICAgICAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkpKSkKKwkgICAgICAgICAoc2F2ZS1i dWZmZXJzLWtpbGwtZW1hY3MpKSkKICAgICAgICAgICAgICgocHJvY2Vzc3AgcHJvYykKICAg ICAgICAgICAgICAoaWYgKHByb2duCiAJICAgICAgICAgICAoZG9saXN0IChmIChmcmFtZS1s aXN0KSkKQEAgLTE4MzUsOSArMTgzMyw3IEBAIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkt LWhhbmRsZS1raWxsLXRlcm1pbmFsCiAJCSAgICAgICAgIChkZWxldGUtZnJhbWUgZnJhbWUp CiAJCSAgICAgICAgIG5pbCkKIAkJICAgICB0KSkKLQkgICAgICAgICAobGV0ICgoc2VydmVy LXN0b3AtYXV0b21hdGljYWxseSBuaWwpKQotCSAgICAgICAgICAgKHNhdmUtYnVmZmVycy1r aWxsLWVtYWNzKQotCSAgICAgICAgICAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkpKSkpKSkpCisJ ICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxsLWVtYWNzKSkpKSkpKQogCiAoZGVmdW4gc2Vy dmVyLXN0b3AtYXV0b21hdGljYWxseS0tbWF5YmUta2lsbC1lbWFjcyAoKQogICAiSGFuZGxl IGNsb3Npbmcgb2YgRW1hY3MgZGFlbW9uIHdoZW4gYHNlcnZlci1zdG9wLWF1dG9tYXRpY2Fs bHknIGlzIHVzZWQuIgotLSAKMi4yNS4xCgo= --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0005-This-is-the-commit-that-actually-fixes-bug-51993.patch" Content-Disposition: attachment; filename*0="0005-This-is-the-commit-that-actually-fixes-bug-51993.patch" Content-Transfer-Encoding: base64 RnJvbSAzNzMwYTBjNTVlZDQxNmVjMDA3Mzk3YmUzMTJjMzIyM2ViZTA3OGFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMjowNTo0MCAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggNS83XSBUaGlzIGlzIHRoZSBjb21taXQgdGhhdCBhY3R1YWxseSBmaXhlcyBidWcjNTE5 OTMKClRoZXJlIGFyZSB0d28gcGFydHMgdG8gdGhpczoKCjEuIEZvciAnbm93YWl0JyBmcmFt ZXMsIGNhbGwgJ3NhdmUtc29tZS1idWZmZXJzJyBhbmQgJ2RlbGV0ZS1mcmFtZScKICAgd2hl biB0aGVyZSBhcmUgb3RoZXIgbm9uLWRhZW1vbiBmcmFtZXMuCgoyLiBGb3IgY2xpZW50IGZy YW1lcyAod2hlcmUgdGhlIGNsaWVudCBpcyBhIHByb2Nlc3MpLCBkb24ndCB0cnkgdG8KICAg ZGVsZXRlIGFsbCB0aGUgY2xpZW50J3MgZnJhbWVzIGRpcmVjdGx5LiAgUHJldmlvdXNseSwg dGhpcyBjb2RlCiAgIHdvdWxkIGRlbGV0ZSBhbGwgKm90aGVyKiBmcmFtZXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBjbGllbnQsIGFuZAogICB0aGVuIGVpdGhlciBhKSBkZWxldGUgdGhlIGN1 cnJlbnQgZnJhbWUgaWYgdGhlcmUgYXJlIHN0aWxsIG1vcmUKICAgKG5vbi1kYWVtb24pIGZy YW1lcyByZW1haW5pbmcsIG9yIGIpIGtpbGwgRW1hY3Mgb3RoZXJ3aXNlLiAgTm93LAogICBj aGVjayB0byBzZWUgd2hhdCB3ZSBzaG91bGQgZG8gZmlyc3Q6IGlmIHRoZXJlIGFyZSBubyBv dGhlciBjbGllbnRzCiAgIChvciBmcmFtZXMgbm90IG93bmVkIGJ5IHRoZSBjdXJyZW50IGNs aWVudCksIHRoZW4gd2Ugc2hvdWxkIGtpbGwKICAgRW1hY3M7IG90aGVyd2lzZSwgb25seSBk ZWxldGUgdGhpcyBjbGllbnQgKGFmdGVyIHNhdmluZykuCgoqIGxpc3Avc2VydmVyLmVsIChz ZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUta2lsbC10ZXJtaW5hbCk6CkhhbmRs ZSB0aGUgY2FzZSB3aGVuIHdlICpkb24ndCoga2lsbCBFbWFjcywgYXMgZGVzY3JpYmVkIGFi b3ZlLgotLS0KIGxpc3Avc2VydmVyLmVsIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAx NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL3NlcnZlci5lbCBiL2xpc3Avc2Vy dmVyLmVsCmluZGV4IDM5OWJmNjk0ZmQuLjliOTFmYmJiZGMgMTAwNjQ0Ci0tLSBhL2xpc3Av c2VydmVyLmVsCisrKyBiL2xpc3Avc2VydmVyLmVsCkBAIC0xODE3LDIzICsxODE3LDM0IEBA IHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRsZS1raWxsLXRlcm1pbmFsCiAgICh3 aGVuIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkKICAgICAobGV0ICgocHJvYyAoZnJhbWUt cGFyYW1ldGVyIGZyYW1lICdjbGllbnQpKSkKICAgICAgIChjb25kICgoZXEgcHJvYyAnbm93 YWl0KQotICAgICAgICAgICAgIChpZiAobnVsbCAoY2RkciAoZnJhbWUtbGlzdCkpKQorICAg ICAgICAgICAgIChpZiAoY2RkciAoZnJhbWUtbGlzdCkpCisgICAgICAgICAgICAgICAgIDs7 IElmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLWRhZW1vbiBmcmFtZXMsIGRvbid0CisgICAg ICAgICAgICAgICAgIDs7IGtpbGwgRW1hY3MsIGJ1dCAqZG8qIHNhdmUgc29tZSBidWZmZXJz LCBhcyBpbgorICAgICAgICAgICAgICAgICA7OyBgc2VydmVyLXNhdmUtYnVmZmVycy1raWxs LXRlcm1pbmFsJy4KKyAgICAgICAgICAgICAgICAgKHByb2duCisgICAgICAgICAgICAgICAg ICAgKHNhdmUtc29tZS1idWZmZXJzKQorCSAgICAgICAgICAgKGRlbGV0ZS1mcmFtZSkpCisg ICAgICAgICAgICAgICAgIDs7IElmIHdlJ3JlIHRoZSBsYXN0IG5vbi1kYWVtb24gZnJhbWUg c3RhbmRpbmcsIGtpbGwKKyAgICAgICAgICAgICAgICAgOzsgRW1hY3MuCiAJICAgICAgICAg KHNhdmUtYnVmZmVycy1raWxsLWVtYWNzKSkpCiAgICAgICAgICAgICAoKHByb2Nlc3NwIHBy b2MpCi0gICAgICAgICAgICAgKGlmIChwcm9nbgotCSAgICAgICAgICAgKGRvbGlzdCAoZiAo ZnJhbWUtbGlzdCkpCi0JCSAgICAgKHdoZW4gKGFuZCAoZXEgKGZyYW1lLXBhcmFtZXRlciBm cmFtZSAnY2xpZW50KQotCQkJICAgICAgICAgICAgKGZyYW1lLXBhcmFtZXRlciBmICdjbGll bnQpKQotCQkJICAgICAgICAobm90IChlcSBmcmFtZSBmKSkpCi0JCSAgICAgICAoc2V0LWZy YW1lLXBhcmFtZXRlciBmICdjbGllbnQgbmlsKQotCQkgICAgICAgKGxldCAoKHNlcnZlci1z dG9wLWF1dG9tYXRpY2FsbHkgbmlsKSkKLQkJICAgICAgICAgKGRlbGV0ZS1mcmFtZSBmKSkp KQotCSAgICAgICAgICAgKGlmIChjZGRyIChmcmFtZS1saXN0KSkKLQkJICAgICAgIChsZXQg KChzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5IG5pbCkpCi0JCSAgICAgICAgIChkZWxldGUt ZnJhbWUgZnJhbWUpCi0JCSAgICAgICAgIG5pbCkKLQkJICAgICB0KSkKLQkgICAgICAgICAo c2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MpKSkpKSkpCisgICAgICAgICAgICAgKGlmIDs7IEtl ZXAgdGhlIHNlcnZlciBhbGl2ZSBpZi4uLgorICAgICAgICAgICAgICAgICAob3IKKyAgICAg ICAgICAgICAgICAgIDs7IGEpIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2xpZW50cywgb3IuLi4K KyAgICAgICAgICAgICAgICAgIChsZW5ndGg+IHNlcnZlci1jbGllbnRzIDEpCisgICAgICAg ICAgICAgICAgICA7OyBiKSB0aGVyZSBhcmUgYW55IGZyYW1lcyBub3Qgb3duZWQgYnkgdGhp cyBjbGllbnQuCisgICAgICAgICAgICAgICAgICAoc2VxLXNvbWUKKyAgICAgICAgICAgICAg ICAgICAobGFtYmRhIChmcmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICh3aGVuLWxldCAo KHAgKGZyYW1lLXBhcmFtZXRlciBmcmFtZSAnY2xpZW50KSkpCisgICAgICAgICAgICAgICAg ICAgICAgIChub3QgKGVxIHByb2MgcCkpKSkKKyAgICAgICAgICAgICAgICAgICAoZnJhbWUt bGlzdCkpKQorICAgICAgICAgICAgICAgICAobGV0ICgoYnVmZmVycyAocHJvY2Vzcy1nZXQg cHJvYyAnYnVmZmVycykpKQorICAgICAgICAgICAgICAgICAgIChzYXZlLXNvbWUtYnVmZmVy cworICAgICAgICAgICAgICAgICAgICBuaWwgKGlmIGJ1ZmZlcnMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7OyBPbmx5IGZpbGVzIGZyb20gZW1hY3NjbGllbnQgZmlsZSBsaXN0 LgorCQkgICAgICAgICAgICAobGFtYmRhICgpIChtZW1xIChjdXJyZW50LWJ1ZmZlcikgYnVm ZmVycykpKSkKKyAgICAgICAgICAgICAgICAgICAoc2VydmVyLWRlbGV0ZS1jbGllbnQpKQor ICAgICAgICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxsLWVtYWNzKSkpKSkpKQogCiAoZGVm dW4gc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0tbWF5YmUta2lsbC1lbWFjcyAoKQogICAi SGFuZGxlIGNsb3Npbmcgb2YgRW1hY3MgZGFlbW9uIHdoZW4gYHNlcnZlci1zdG9wLWF1dG9t YXRpY2FsbHknIGlzIHVzZWQuIgotLSAKMi4yNS4xCgo= --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0006-Merge-kill-terminal-implementations.patch" Content-Disposition: attachment; filename="0006-Merge-kill-terminal-implementations.patch" Content-Transfer-Encoding: base64 RnJvbSBmZTZmZjYyZGUzZjE4YzJkOGY5YzBhMDAzMmZmZjM5NjE1MzgwMjk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMjoxOTo0NCAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggNi83XSBNZXJnZSBraWxsLXRlcm1pbmFsIGltcGxlbWVudGF0aW9ucwoKTm93IHRoYXQg J3NlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHktLWhhbmRsZS1raWxsLXRlcm1pbmFsJyBhbmQK J3NlcnZlci1zYXZlLWJ1ZmZlcnMta2lsbC10ZXJtaW5hbCcgYXJlIGFsbW9zdCB0aGUgc2Ft ZSwgbWVyZ2UgdGhlbQppbnRvIGEgc2luZ2xlIGZ1bmN0aW9uLgoKKiBsaXNwL3NlcnZlci5l bCAoc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWtpbGwtdGVybWluYWwpOgpN ZXJnZSB0aGlzLi4uCihzZXJ2ZXItc2F2ZS1idWZmZXJzLWtpbGwtdGVybWluYWwpOiAuLi4g aW50byB0aGlzLgotLS0KIGxpc3Avc2VydmVyLmVsIHwgOTIgKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNSBp bnNlcnRpb25zKCspLCA1NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL3NlcnZl ci5lbCBiL2xpc3Avc2VydmVyLmVsCmluZGV4IDliOTFmYmJiZGMuLjZlZWFhOTMyYTcgMTAw NjQ0Ci0tLSBhL2xpc3Avc2VydmVyLmVsCisrKyBiL2xpc3Avc2VydmVyLmVsCkBAIC0xNzgw LDI5ICsxNzgwLDQxIEBAIHNlcnZlci1zYXZlLWJ1ZmZlcnMta2lsbC10ZXJtaW5hbAogCiBJ ZiBlbWFjc2NsaWVudCB3YXMgc3RhcnRlZCB3aXRoIGEgbGlzdCBvZiBmaWxlbmFtZXMgdG8g ZWRpdCwgdGhlbgogb25seSB0aGVzZSBmaWxlcyB3aWxsIGJlIGFza2VkIHRvIGJlIHNhdmVk LiIKLSAgKGlmIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkKLSAgICAgIChzZXJ2ZXItc3Rv cC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUta2lsbC10ZXJtaW5hbCAoc2VsZWN0ZWQtZnJhbWUp KQotICAgIChsZXQgKChwcm9jIChmcmFtZS1wYXJhbWV0ZXIgbmlsICdjbGllbnQpKSkKLSAg ICAgIChjb25kICgoZXEgcHJvYyAnbm93YWl0KQotCSAgICAgOzsgTm93YWl0IGZyYW1lcyBo YXZlIG5vIGNsaWVudCBidWZmZXIgbGlzdC4KLQkgICAgIChpZiAoY2RyIChmcmFtZS1saXN0 KSkKLQkgICAgICAgICAocHJvZ24gKHNhdmUtc29tZS1idWZmZXJzIGFyZykKLQkJICAgICAg ICAoZGVsZXRlLWZyYW1lKSkKLQkgICAgICAgOzsgSWYgd2UncmUgdGhlIGxhc3QgZnJhbWUg c3RhbmRpbmcsIGtpbGwgRW1hY3MuCi0JICAgICAgIChzYXZlLWJ1ZmZlcnMta2lsbC1lbWFj cyBhcmcpKSkKLQkgICAgKChwcm9jZXNzcCBwcm9jKQotCSAgICAgKGxldCAoKGJ1ZmZlcnMg KHByb2Nlc3MtZ2V0IHByb2MgJ2J1ZmZlcnMpKSkKLQkgICAgICAgKHNhdmUtc29tZS1idWZm ZXJzCi0JICAgICAgICBhcmcgKGlmIGJ1ZmZlcnMKLSAgICAgICAgICAgICAgICAgICAgICAg IDs7IE9ubHkgZmlsZXMgZnJvbSBlbWFjc2NsaWVudCBmaWxlIGxpc3QuCi0JCSAgICAgICAg KGxhbWJkYSAoKSAobWVtcSAoY3VycmVudC1idWZmZXIpIGJ1ZmZlcnMpKQotICAgICAgICAg ICAgICAgICAgICAgIDs7IE5vIGVtYWNzY2xpZW50IGZpbGUgbGlzdDogZG9uJ3Qgb3ZlcnJp ZGUKLSAgICAgICAgICAgICAgICAgICAgICA7OyBgc2F2ZS1zb21lLWJ1ZmZlcnMtZGVmYXVs dC1wcmVkaWNhdGUnICh1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgICA7OyBBUkcgaXMg bm9uLW5pbCksIHNpbmNlIHdlJ3JlIG5vdCBraWxsaW5nCi0gICAgICAgICAgICAgICAgICAg ICAgOzsgRW1hY3MgKHVubGlrZSBgc2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MnKS4KLQkJICAg ICAgKGFuZCBhcmcgdCkpKQotCSAgICAgICAoc2VydmVyLWRlbGV0ZS1jbGllbnQgcHJvYykp KQotCSAgICAodCAoZXJyb3IgIkludmFsaWQgY2xpZW50IGZyYW1lIikpKSkpKQorICAobGV0 ICgocHJvYyAoZnJhbWUtcGFyYW1ldGVyIG5pbCAnY2xpZW50KSkpCisgICAgKGNvbmQgKChl cSBwcm9jICdub3dhaXQpCisJICAgOzsgTm93YWl0IGZyYW1lcyBoYXZlIG5vIGNsaWVudCBi dWZmZXIgbGlzdC4KKwkgICAoaWYgKGxlbmd0aD4gKGZyYW1lLWxpc3QpIChpZiBzZXJ2ZXIt c3RvcC1hdXRvbWF0aWNhbGx5IDIgMSkpCisgICAgICAgICAgICAgICA7OyBJZiB0aGVyZSBh cmUgYW55IG90aGVyIGZyYW1lcywgb25seSBkZWxldGUgdGhpcyBvbmUuCisgICAgICAgICAg ICAgICA7OyBXaGVuIGBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5JyBpcyBzZXQsIGRvbid0 IGNvdW50CisgICAgICAgICAgICAgICA7OyB0aGUgZGFlbW9uIGZyYW1lLgorCSAgICAgICAo cHJvZ24gKHNhdmUtc29tZS1idWZmZXJzIGFyZykKKwkJICAgICAgKGRlbGV0ZS1mcmFtZSkp CisJICAgICA7OyBJZiB3ZSdyZSB0aGUgbGFzdCBmcmFtZSBzdGFuZGluZywga2lsbCBFbWFj cy4KKwkgICAgIChzYXZlLWJ1ZmZlcnMta2lsbC1lbWFjcyBhcmcpKSkKKwkgICgocHJvY2Vz c3AgcHJvYykKKyAgICAgICAgICAgKGlmIChvciAobm90IHNlcnZlci1zdG9wLWF1dG9tYXRp Y2FsbHkpCisgICAgICAgICAgICAgICAgICAgKGxlbmd0aD4gc2VydmVyLWNsaWVudHMgMSkK KyAgICAgICAgICAgICAgICAgICAoc2VxLXNvbWUKKyAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAoZnJhbWUpCisgICAgICAgICAgICAgICAgICAgICAgKHdoZW4tbGV0ICgocCAoZnJh bWUtcGFyYW1ldGVyIGZyYW1lICdjbGllbnQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg IChub3QgKGVxIHByb2MgcCkpKSkKKyAgICAgICAgICAgICAgICAgICAgKGZyYW1lLWxpc3Qp KSkKKwkgICAgICAgKGxldCAoKGJ1ZmZlcnMgKHByb2Nlc3MtZ2V0IHByb2MgJ2J1ZmZlcnMp KSkKKwkgICAgICAgICAoc2F2ZS1zb21lLWJ1ZmZlcnMKKwkgICAgICAgICAgYXJnIChpZiBi dWZmZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IE9ubHkgZmlsZXMgZnJvbSBl bWFjc2NsaWVudCBmaWxlIGxpc3QuCisJCSAgICAgICAgICAobGFtYmRhICgpIChtZW1xIChj dXJyZW50LWJ1ZmZlcikgYnVmZmVycykpCisgICAgICAgICAgICAgICAgICAgICAgICA7OyBO byBlbWFjc2NsaWVudCBmaWxlIGxpc3Q6IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICAg ICAgICAgICAgICA7OyBgc2F2ZS1zb21lLWJ1ZmZlcnMtZGVmYXVsdC1wcmVkaWNhdGUnICh1 bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7IEFSRyBpcyBub24tbmlsKSwgc2lu Y2Ugd2UncmUgbm90IGtpbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7IEVtYWNz ICh1bmxpa2UgYHNhdmUtYnVmZmVycy1raWxsLWVtYWNzJykuCisJCSAgICAgICAgKGFuZCBh cmcgdCkpKQorCSAgICAgICAgIChzZXJ2ZXItZGVsZXRlLWNsaWVudCBwcm9jKSkKKyAgICAg ICAgICAgICA7OyBJZiBgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseScgaXMgc2V0LCB0aGVy ZSBhcmUgbm8KKyAgICAgICAgICAgICA7OyBvdGhlciBjbGllbnQgcHJvY2Vzc2VzLCBhbmQg bm8gb3RoZXIgY2xpZW50IGZyYW1lcworICAgICAgICAgICAgIDs7IChlLmcuIGBub3dhaXQn IGZyYW1lcyksIGtpbGwgRW1hY3MuCisgICAgICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxs LWVtYWNzIGFyZykpKQorCSAgKHQgKGVycm9yICJJbnZhbGlkIGNsaWVudCBmcmFtZSIpKSkp KQogCiAoZGVmdW4gc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWRlbGV0ZS1m cmFtZSAoZnJhbWUpCiAgICJIYW5kbGUgZGVsZXRpb24gb2YgRlJBTUUgd2hlbiBgc2VydmVy LXN0b3AtYXV0b21hdGljYWxseScgaXMgdXNlZC4iCkBAIC0xODEyLDQwICsxODI0LDYgQEAg c2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWRlbGV0ZS1mcmFtZQogCSAgKHNh dmUtYnVmZmVycy1raWxsLWVtYWNzKQogCSAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkpKSkpCiAK LShkZWZ1biBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5kbGUta2lsbC10ZXJtaW5h bCAoZnJhbWUpCi0gICJIYW5kbGUgZGVsZXRpb24gb2YgRlJBTUUgd2hlbiBgc2VydmVyLXN0 b3AtYXV0b21hdGljYWxseScgaXMgdXNlZC4iCi0gICh3aGVuIHNlcnZlci1zdG9wLWF1dG9t YXRpY2FsbHkKLSAgICAobGV0ICgocHJvYyAoZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdjbGll bnQpKSkKLSAgICAgIChjb25kICgoZXEgcHJvYyAnbm93YWl0KQotICAgICAgICAgICAgIChp ZiAoY2RkciAoZnJhbWUtbGlzdCkpCi0gICAgICAgICAgICAgICAgIDs7IElmIHRoZXJlIGFy ZSBhbnkgb3RoZXIgbm9uLWRhZW1vbiBmcmFtZXMsIGRvbid0Ci0gICAgICAgICAgICAgICAg IDs7IGtpbGwgRW1hY3MsIGJ1dCAqZG8qIHNhdmUgc29tZSBidWZmZXJzLCBhcyBpbgotICAg ICAgICAgICAgICAgICA7OyBgc2VydmVyLXNhdmUtYnVmZmVycy1raWxsLXRlcm1pbmFsJy4K LSAgICAgICAgICAgICAgICAgKHByb2duCi0gICAgICAgICAgICAgICAgICAgKHNhdmUtc29t ZS1idWZmZXJzKQotCSAgICAgICAgICAgKGRlbGV0ZS1mcmFtZSkpCi0gICAgICAgICAgICAg ICAgIDs7IElmIHdlJ3JlIHRoZSBsYXN0IG5vbi1kYWVtb24gZnJhbWUgc3RhbmRpbmcsIGtp bGwKLSAgICAgICAgICAgICAgICAgOzsgRW1hY3MuCi0JICAgICAgICAgKHNhdmUtYnVmZmVy cy1raWxsLWVtYWNzKSkpCi0gICAgICAgICAgICAoKHByb2Nlc3NwIHByb2MpCi0gICAgICAg ICAgICAgKGlmIDs7IEtlZXAgdGhlIHNlcnZlciBhbGl2ZSBpZi4uLgotICAgICAgICAgICAg ICAgICAob3IKLSAgICAgICAgICAgICAgICAgIDs7IGEpIHRoZXJlIGFyZSBhbnkgb3RoZXIg Y2xpZW50cywgb3IuLi4KLSAgICAgICAgICAgICAgICAgIChsZW5ndGg+IHNlcnZlci1jbGll bnRzIDEpCi0gICAgICAgICAgICAgICAgICA7OyBiKSB0aGVyZSBhcmUgYW55IGZyYW1lcyBu b3Qgb3duZWQgYnkgdGhpcyBjbGllbnQuCi0gICAgICAgICAgICAgICAgICAoc2VxLXNvbWUK LSAgICAgICAgICAgICAgICAgICAobGFtYmRhIChmcmFtZSkKLSAgICAgICAgICAgICAgICAg ICAgICh3aGVuLWxldCAoKHAgKGZyYW1lLXBhcmFtZXRlciBmcmFtZSAnY2xpZW50KSkpCi0g ICAgICAgICAgICAgICAgICAgICAgIChub3QgKGVxIHByb2MgcCkpKSkKLSAgICAgICAgICAg ICAgICAgICAoZnJhbWUtbGlzdCkpKQotICAgICAgICAgICAgICAgICAobGV0ICgoYnVmZmVy cyAocHJvY2Vzcy1nZXQgcHJvYyAnYnVmZmVycykpKQotICAgICAgICAgICAgICAgICAgIChz YXZlLXNvbWUtYnVmZmVycwotICAgICAgICAgICAgICAgICAgICBuaWwgKGlmIGJ1ZmZlcnMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBPbmx5IGZpbGVzIGZyb20gZW1hY3Nj bGllbnQgZmlsZSBsaXN0LgotCQkgICAgICAgICAgICAobGFtYmRhICgpIChtZW1xIChjdXJy ZW50LWJ1ZmZlcikgYnVmZmVycykpKSkKLSAgICAgICAgICAgICAgICAgICAoc2VydmVyLWRl bGV0ZS1jbGllbnQpKQotICAgICAgICAgICAgICAgKHNhdmUtYnVmZmVycy1raWxsLWVtYWNz KSkpKSkpKQotCiAoZGVmdW4gc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0tbWF5YmUta2ls bC1lbWFjcyAoKQogICAiSGFuZGxlIGNsb3Npbmcgb2YgRW1hY3MgZGFlbW9uIHdoZW4gYHNl cnZlci1zdG9wLWF1dG9tYXRpY2FsbHknIGlzIHVzZWQuIgogICAodW5sZXNzIChjZHIgKGZy YW1lLWxpc3QpKQotLSAKMi4yNS4xCgo= --------------kP04AvxyTSEJW1KPGKYjpSB1 Content-Type: text/plain; charset=UTF-8; name="0007-Simplify-server-stop-automatically-handle-delete-fra.patch" Content-Disposition: attachment; filename*0="0007-Simplify-server-stop-automatically-handle-delete-fra.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhNzliNGYzNGZhZjJjMGJkMzBmOGQ2NmY4N2U0ZDg0ODMyNDc3MzcxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMSBEZWMgMjAyMiAxMjoyMzoxNyAtMDgwMApTdWJqZWN0OiBbUEFU Q0ggNy83XSBTaW1wbGlmeSAnc2VydmVyLXN0b3AtYXV0b21hdGljYWxseS0taGFuZGxlLWRl bGV0ZS1mcmFtZScKCiogbGlzcC9zZXJ2ZXIuZWwgKHNlcnZlci1zdG9wLWF1dG9tYXRpY2Fs bHktLWhhbmRsZS1kZWxldGUtZnJhbWUpOgpDb21iaW5lIHRoZSAnd2hlbicgYW5kICdpZicg aW50byBhIHNpbmdsZSBjb25kaXRpb25hbC4KLS0tCiBsaXNwL3NlcnZlci5lbCB8IDEwICsr KysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9zZXJ2ZXIuZWwgYi9saXNwL3NlcnZlci5lbAppbmRl eCA2ZWVhYTkzMmE3Li5lODhjZmZhOGZiIDEwMDY0NAotLS0gYS9saXNwL3NlcnZlci5lbAor KysgYi9saXNwL3NlcnZlci5lbApAQCAtMTgxOCwxMSArMTgxOCwxMSBAQCBzZXJ2ZXItc2F2 ZS1idWZmZXJzLWtpbGwtdGVybWluYWwKIAogKGRlZnVuIHNlcnZlci1zdG9wLWF1dG9tYXRp Y2FsbHktLWhhbmRsZS1kZWxldGUtZnJhbWUgKGZyYW1lKQogICAiSGFuZGxlIGRlbGV0aW9u IG9mIEZSQU1FIHdoZW4gYHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHknIGlzIHVzZWQuIgot ICAod2hlbiBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5Ci0gICAgKGlmIChudWxsIChjZGRy IChmcmFtZS1saXN0KSkpCi0JKGxldCAoKHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkgbmls KSkKLQkgIChzYXZlLWJ1ZmZlcnMta2lsbC1lbWFjcykKLQkgIChkZWxldGUtZnJhbWUgZnJh bWUpKSkpKQorICAod2hlbiAoYW5kIHNlcnZlci1zdG9wLWF1dG9tYXRpY2FsbHkKKyAgICAg ICAgICAgICAobnVsbCAoY2RkciAoZnJhbWUtbGlzdCkpKSkKKyAgICAobGV0ICgoc2VydmVy LXN0b3AtYXV0b21hdGljYWxseSBuaWwpKQorICAgICAgKHNhdmUtYnVmZmVycy1raWxsLWVt YWNzKQorICAgICAgKGRlbGV0ZS1mcmFtZSBmcmFtZSkpKSkKIAogKGRlZnVuIHNlcnZlci1z dG9wLWF1dG9tYXRpY2FsbHktLW1heWJlLWtpbGwtZW1hY3MgKCkKICAgIkhhbmRsZSBjbG9z aW5nIG9mIEVtYWNzIGRhZW1vbiB3aGVuIGBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5JyBp cyB1c2VkLiIKLS0gCjIuMjUuMQoK --------------kP04AvxyTSEJW1KPGKYjpSB1--