From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: martin rudalics via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#59862: quit-restore per window buffer Date: Mon, 3 Jun 2024 11:34:33 +0200 Message-ID: <8243325e-ed03-4e9e-b64f-c8225fb6dc60@gmx.at> References: <86fsds8mlm.fsf@mail.linkov.net> <86ttibq1w1.fsf@mail.linkov.net> Reply-To: martin rudalics Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------IC2I0Uy7drpTFuo2EwzOlvBQ" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36108"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird To: Juri Linkov , 59862@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jun 03 11:35:43 2024 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 1sE46Q-0008yB-7X for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 03 Jun 2024 11:35:42 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sE45b-0007BB-Jl; Mon, 03 Jun 2024 05:34:51 -0400 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 1sE45Z-0007AZ-SZ for bug-gnu-emacs@gnu.org; Mon, 03 Jun 2024 05:34:50 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sE45Z-0002VY-KY for bug-gnu-emacs@gnu.org; Mon, 03 Jun 2024 05:34:49 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sE45m-0006El-4Q for bug-gnu-emacs@gnu.org; Mon, 03 Jun 2024 05:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 03 Jun 2024 09:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 59862 X-GNU-PR-Package: emacs Original-Received: via spool by 59862-submit@debbugs.gnu.org id=B59862.171740730023964 (code B ref 59862); Mon, 03 Jun 2024 09:35:02 +0000 Original-Received: (at 59862) by debbugs.gnu.org; 3 Jun 2024 09:35:00 +0000 Original-Received: from localhost ([127.0.0.1]:59021 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sE45i-0006ER-SF for submit@debbugs.gnu.org; Mon, 03 Jun 2024 05:34:59 -0400 Original-Received: from mout.gmx.net ([212.227.15.15]:35363) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sE45e-0006EB-9L for 59862@debbugs.gnu.org; Mon, 03 Jun 2024 05:34:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.at; s=s31663417; t=1717407274; x=1718012074; i=rudalics@gmx.at; bh=x7ngPJncLu2zWSPGzaonAK4KG8Qs1gRxAfZbMMlC9Ww=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version: Subject:To:References:From:In-Reply-To:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=io4ix7JpK3ec/Jm4EecxKDwGinyKl01/G9E9a53NMDY7v0/QSKFKUfdzrObF/ZzV Ch0mIzpyBB8duV3Ijg3zgSmgW4EovYXrxxIxEfw/ChpoKcZT43YARTYDs4wsY59nW HhmeiDOP52atsGugmYWclgIomZsBd3ncP8DZRI7EccApOpvU+d1V8AK1fThdFifh/ rCTDIyX2bagEh1A/x8Locs2S4CIHZsinFm6UNRKnIdz7qhRHGvl+wmsvuD61CcD9s IWSyOOuOHydO7bnswBlsabRfMBs69X+7YEocJL299A0zEqEsOngms7RLhlYU5OT04 yd6EGgkb+WvD1I8ALg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Original-Received: from [192.168.31.113] ([212.95.5.29]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MXGrE-1ryDmm0fr4-00VOJY; Mon, 03 Jun 2024 11:34:34 +0200 Content-Language: en-US In-Reply-To: <86ttibq1w1.fsf@mail.linkov.net> X-Provags-ID: V03:K1:grXd230jyaCkhefQ9m5UjFGXaqn4BtRnCTJQNy3OWT2ufg1CkzT 1A4ybSxmm1W+UzSYXwM8Oi2fc8vzqHi0mgASWuoPdV2jSiCDqKYxK6R3eVDJkggFDl6L83a g7u6XSIQ2euL51kbrRhdqB3d+9jPjEA3Zjev1wH5Zoo81Qq9qMtTBj3AgQWUkGDauC2EMqU TqayKgV3lV/vd5Me+ymkA== UI-OutboundReport: notjunk:1;M01:P0:JBgaVkSZWuY=;UtabX/FBvgBK+tgUdKmFpDcJjNa 2s0v7FYh8+6DS3593o2+wYJKG/AaTjMoAdEBwavWe1Pt6xlW+oYT07gDsl+5beiOpWijP8Dt9 tamm5coHSj6QZ393yx9l4wqoOYpzScaqXPHT6HpiKCuI06eSpnxqulSrDivfY6OVz7YcmHeZg nVbeMejbPH41Fo2rsDM67JIPUCFwJtGAz4YXgJCgKC4LYLRdHdtOaHW1Hmg+A0CkWsGbWROz1 HW4OFTIWoRrtTz+gXInFpF2OuBbblNkwKGelfcEccNUSm4C5vi6nVUtlbb6q1cGsWPCa/kXS4 52bo2QMBGAWMiMMooxd7uk9Hqg4Q73bGSwrhz5p1g8I2L8UMUYr3FozO3nUhvZxD5Dgn4C/bk 0Uki5ZbZmYc0vb4JgpImKa1FNDZsFURefQRU6kebhqEJ9QC427/kWGNPUZKrJwkM09zO+tpZC PTG16OrF2gIhcjxV+P7pbJOh0sG6f1xO38/ZWmEhtuD0vYblQQPOCtQ7k9mpCLPzu/tMMOjaj xIXD6/0SStOsnyK29VPFxeFQYMvrpyo1DDa8Qnf7dNMs0UwFegZpXpXcX4+PEb8FanQBV4jJG aKjtXtbuVtyMY+Hnz0Q3Cbkq6rTmMhSvejUXG8PQAJk3lLt7APsaCV702MWQNUodahIaOh82s hm6QQ0dCzv/ThzveDp5pdT0YgE76v1JSxa3Gr6S0qUPeV6O9gTMaD0GCpdUHjvsGP5Q4mZA9q NSim3VoULpVFX4u7tD1RMgWJrIfA2fiSbI5srkLpxuiwfSY49P0KivGiYW2aWQopqI+XjK8N 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:286425 Archived-At: This is a multi-part message in MIME format. --------------IC2I0Uy7drpTFuo2EwzOlvBQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > Martin, do you agree with this? I tested this patch for a long time. > >> 1. C-x 4 d RET C-h C-t q q -- the bottom window is NOT deleted >> 2. C-x 4 d RET C-h C-t C-x k RET q -- the bottom window is deleted >> 3. C-x 4 d RET C-h C-n C-x k RET q -- the bottom window is NOT deleted >> >> The accidental difference between the last two is that the former uses >> `switch-to-buffer' whereas the latter uses `pop-to-buffer-same-window'. 'switch-to-buffer' leaves the 'quit-restore' parameter the way it was set up by C-x 4 d. 'pop-to-buffer-same-window' changes it to the 'reuse' type. So one fix is to have 'switch-to-buffer' record the window when it does not obey display actions and it gets the 'reuse' type as well. This way there are no more accidental differences when quitting the help buffer. >> The root of the problem is that displaying a buffer in an existing >> window, or quitting a buffer in an existing window overwrites its >> window parameter `quit-restore', and thus invalidates the history of >> how the first window was displayed. We could fix the former in 'display-buffer-record-window' by having it not overwrite an existing 'quit-restore' parameter when it displays another buffer. Then 'quit-window' would always delete the window in the scenarios above instead of showing the dir buffer. The backside is that additional information recorded by 'display-buffer-record-window' like the now selected window or window sizes would no more get recorded. >> A partial fix that solves only the first test case above is at least >> not to overwrite `quit-restore' on quitting other buffers in the same >> window: You cannot simply fix the third test in 'quit-restore-window' alone because C-x k leaves the 'quit-restore' parameter of the NEWS buffer unchanged. That's arguably a bug: When killing buffers and in some other cases we should remove the 'quit-restore' parameter. >> diff --git a/lisp/window.el b/lisp/window.el >> index a11293d372a..e3b057599d5 100644 >> --- a/lisp/window.el >> +++ b/lisp/window.el >> @@ -5275,14 +5276,14 @@ quit-restore-window >> (set-window-prev-buffers >> window (append (window-prev-buffers window) (list entry)))) >> ;; Reset the quit-restore parameter. >> - (set-window-parameter window 'quit-restore nil) Why keep it here? After all, this one has accomplished its mission so keeping it looks like an UXB to me. >> ;; Select old window. >> ;; If the previously selected window is still alive, select it. >> (window--quit-restore-select-window quit-restore-2)) >> (t >> ;; Show some other buffer in WINDOW and reset the quit-restore >> ;; parameter. >> - (set-window-parameter window 'quit-restore nil) Keeping this one looks OK. If the buffer shown in the window is not the one the parameter mentions, chances are that a 'quit-restore-window' can eventually use it in the future. >> But the proper fix for other problems would be to replace the window >> parameter `quit-restore' currently shared by all buffers in the same window >> by a stack where every window buffer should keep own quit-restore data. >> There is already such a stack in `window-prev-buffers', so a possible >> solution would be to add quit-restore data to each buffer >> in window-prev-buffers. And how would such a stack handle intertwined 'next-buffer' and 'prev-buffer' calls? Stacks are one of those things that set apart computers from human beings. >> Alternatively, it would be nice to have an option that would prevent >> overwriting the initial value of the window parameter `quit-restore', >> thus `quit-restore-window' could delete the window regardless of >> how many buffers were displayed in that window, like it does in case >> of dedicated windows. I attach a patch that tries to do that. Here it handles all scenarios you describe above. However, it's by no means trivial and requires at least _one month_ of testing on your side. I have not addressed the (eq (nth 1 quit-restore) 'tab) case in 'quit-restore-window'. You have to look into this yourself. And there might obviously be other cases missing. martin --------------IC2I0Uy7drpTFuo2EwzOlvBQ Content-Type: text/x-patch; charset=UTF-8; name="quit-restore.diff" Content-Disposition: attachment; filename="quit-restore.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3Avd2luZG93LmVsIGIvbGlzcC93aW5kb3cuZWwKaW5kZXggYjAx NGJlNmE3Y2YuLjhiNzlhODkyNzBiIDEwMDY0NAotLS0gYS9saXNwL3dpbmRvdy5lbAorKysg Yi9saXNwL3dpbmRvdy5lbApAQCAtNTEwOCw4ICs1MTA4LDggQEAgZGVsZXRlLXdpbmRvd3Mt b24KICAgKGxldCAoKGJ1ZmZlciAod2luZG93LW5vcm1hbGl6ZS1idWZmZXIgYnVmZmVyLW9y LW5hbWUpKQogCTs7IEhhbmRsZSB0aGUgImludmVydGVkIiBtZWFuaW5nIG9mIHRoZSBGUkFN RSBhcmd1bWVudCB3cnQgb3RoZXIKIAk7OyBgd2luZG93LWxpc3QtMScgYmFzZWQgZnVuY3Rp b24uCi0JKGFsbC1mcmFtZXMgKGNvbmQgKChub3QgZnJhbWUpIHQpICgoZXEgZnJhbWUgdCkg bmlsKSAodCBmcmFtZSkpKSkKLSAgICAoZG9saXN0ICh3aW5kb3cgKHdpbmRvdy1saXN0LTEg bmlsIG5pbCBhbGwtZnJhbWVzKSkKKwkoZnJhbWVzIChjb25kICgobm90IGZyYW1lKSB0KSAo KGVxIGZyYW1lIHQpIG5pbCkgKHQgZnJhbWUpKSkpCisgICAgKGRvbGlzdCAod2luZG93ICh3 aW5kb3ctbGlzdC0xIG5pbCAnbm9taW5pIGZyYW1lcykpCiAgICAgICAoaWYgKGVxICh3aW5k b3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQogCSAgKGxldCAoKGRlbGV0YWJsZSAod2luZG93 LWRlbGV0YWJsZS1wIHdpbmRvdykpCiAgICAgICAgICAgICAgICAgKGRlZGljYXRlZCAod2lu ZG93LWRlZGljYXRlZC1wIHdpbmRvdykpKQpAQCAtNTEyMSwxMiArNTEyMSwxOCBAQCBkZWxl dGUtd2luZG93cy1vbgogCSAgICAgIDs7IERlbGV0ZSB3aW5kb3cuCiAJICAgICAgKGRlbGV0 ZS13aW5kb3cgd2luZG93KSkKIAkgICAgICh0Ci0JICAgICAgOzsgSW4gd2luZG93IHN3aXRj aCB0byBwcmV2aW91cyBidWZmZXIuCi0JICAgICAgKHNldC13aW5kb3ctZGVkaWNhdGVkLXAg d2luZG93IG5pbCkKLQkgICAgICAoc3dpdGNoLXRvLXByZXYtYnVmZmVyIHdpbmRvdyAnYnVy eSkKLSAgICAgICAgICAgICAgOzsgUmVzdG9yZSB0aGUgZGVkaWNhdGVkICdzaWRlJyBmbGFn LgotICAgICAgICAgICAgICAod2hlbiAoZXEgZGVkaWNhdGVkICdzaWRlKQotICAgICAgICAg ICAgICAgIChzZXQtd2luZG93LWRlZGljYXRlZC1wIHdpbmRvdyAnc2lkZSkpKSkpCisJICAg ICAgKHdoZW4gKGVxICh3aW5kb3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQorCQkocXVpdC1y ZXN0b3JlLXdpbmRvdyB3aW5kb3cpKQorCSAgICAgIDs7IFJlbW92ZSBxdWl0LXJlc3RvcmUo LXByZXYpIGVudHJpZXMgdGhhdCBtZW50aW9uIEJVRkZFUi4KKwkgICAgICAobGV0ICgocXVp dC1yZXN0b3JlICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1yZXN0b3JlKSkKKwkJ ICAgIChxdWl0LXJlc3RvcmUtcHJldiAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQt cmVzdG9yZS1wcmV2KSkpCisJCSh3aGVuIChlcSBidWZmZXIgKG50aCAzIHF1aXQtcmVzdG9y ZS1wcmV2KSkKKwkJICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3Rv cmUtcHJldiBuaWwpKQorCQkod2hlbiAoZXEgYnVmZmVyIChudGggMyBxdWl0LXJlc3RvcmUp KQorCQkgIChzZXQtd2luZG93LXBhcmFtZXRlcgorCQkgICB3aW5kb3cgJ3F1aXQtcmVzdG9y ZSAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZS1wcmV2KSkpKQorCSAg ICAgIDs7IFVucmVjb3JkIEJVRkZFUiBpbiB0aGlzIHdpbmRvdy4KKwkgICAgICAodW5yZWNv cmQtd2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyKSkpKQogCTs7IElmIGEgd2luZG93IGRv ZXNuJ3Qgc2hvdyBCVUZGRVIsIHVucmVjb3JkIEJVRkZFUiBpbiBpdC4KIAkodW5yZWNvcmQt d2luZG93LWJ1ZmZlciB3aW5kb3cgYnVmZmVyKSkpKSkKIApAQCAtNTE0NiwxNyArNTE1Miwx OCBAQCByZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzCiAgIChpbnRlcmFjdGl2ZSAiYkJ1ZmZl ciB0byByZXBsYWNlOiAiKQogICAobGV0ICgoYnVmZmVyICh3aW5kb3ctbm9ybWFsaXplLWJ1 ZmZlciBidWZmZXItb3ItbmFtZSkpKQogICAgIChkb2xpc3QgKHdpbmRvdyAod2luZG93LWxp c3QtMSBuaWwgbmlsIHQpKQotICAgICAgKGlmIChlcSAod2luZG93LWJ1ZmZlciB3aW5kb3cp IGJ1ZmZlcikKLSAgICAgICAgICA7OyBEZWxldGUgYSBkZWRpY2F0ZWQgd2luZG93IHVubGVz cyBpdCBpcyBhIHNpZGUgd2luZG93LgotICAgICAgICAgIChsZXQgKChkZWRpY2F0ZWQtc2lk ZSAoZXEgKHdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cpICdzaWRlKSkpCi0gICAgICAgICAg ICAod2hlbiAob3IgZGVkaWNhdGVkLXNpZGUgKG5vdCAod2luZG93LS1kZWxldGUgd2luZG93 IHQgdCkpKQotICAgICAgICAgICAgICA7OyBTd2l0Y2ggdG8gYW5vdGhlciBidWZmZXIgaW4g dGhhdCB3aW5kb3cuCi0gICAgICAgICAgICAgIChzZXQtd2luZG93LWRlZGljYXRlZC1wIHdp bmRvdyBuaWwpCi0gICAgICAgICAgICAgIChpZiAoc3dpdGNoLXRvLXByZXYtYnVmZmVyIHdp bmRvdyAna2lsbCkKLSAgICAgICAgICAgICAgICAgIChhbmQgZGVkaWNhdGVkLXNpZGUgKHNl dC13aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93ICdzaWRlKSkKLSAgICAgICAgICAgICAgICAo d2luZG93LS1kZWxldGUgd2luZG93IG5pbCAna2lsbCkpKSkKLQk7OyBVbnJlY29yZCBCVUZG RVIgaW4gV0lORE9XLgotCSh1bnJlY29yZC13aW5kb3ctYnVmZmVyIHdpbmRvdyBidWZmZXIp KSkpKQorICAgICAgKHdoZW4gKGVxICh3aW5kb3ctYnVmZmVyIHdpbmRvdykgYnVmZmVyKQor CShxdWl0LXJlc3RvcmUtd2luZG93IHdpbmRvdyAna2lsbCkpCisgICAgICA7OyBSZW1vdmUg cXVpdC1yZXN0b3JlKC1wcmV2KSBlbnRyaWVzIHRoYXQgbWVudGlvbiBCVUZGRVIuCisgICAg ICAobGV0ICgocXVpdC1yZXN0b3JlICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1y ZXN0b3JlKSkKKwkgICAgKHF1aXQtcmVzdG9yZS1wcmV2ICh3aW5kb3ctcGFyYW1ldGVyIHdp bmRvdyAncXVpdC1yZXN0b3JlLXByZXYpKSkKKwkod2hlbiAoZXEgYnVmZmVyIChudGggMyBx dWl0LXJlc3RvcmUtcHJldikpCisJICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdx dWl0LXJlc3RvcmUtcHJldiBuaWwpKQorCSh3aGVuIChlcSBidWZmZXIgKG50aCAzIHF1aXQt cmVzdG9yZSkpCisJICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXIKKwkgICB3aW5kb3cgJ3F1aXQt cmVzdG9yZSAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZS1wcmV2KSkp KQorICAgICAgOzsgVW5yZWNvcmQgQlVGRkVSIGluIHRoaXMgd2luZG93LgorICAgICAgKHVu cmVjb3JkLXdpbmRvdy1idWZmZXIgd2luZG93IGJ1ZmZlcikpKSkKIAogKGRlZmN1c3RvbSBx dWl0LXdpbmRvdy1ob29rIG5pbAogICAiSG9vayBydW4gYmVmb3JlIHBlcmZvcm1pbmcgYW55 IG90aGVyIGFjdGlvbnMgaW4gdGhlIGBxdWl0LXdpbmRvdycgY29tbWFuZC4iCkBAIC01MjEw LDEzICs1MjE3LDE1IEBAIHF1aXQtcmVzdG9yZS13aW5kb3cKICAgKHNldHEgd2luZG93ICh3 aW5kb3ctbm9ybWFsaXplLXdpbmRvdyB3aW5kb3cgdCkpCiAgIChsZXQqICgoYnVmZmVyICh3 aW5kb3ctYnVmZmVyIHdpbmRvdykpCiAJIChxdWl0LXJlc3RvcmUgKHdpbmRvdy1wYXJhbWV0 ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUpKQorCSAocXVpdC1yZXN0b3JlLXByZXYgKHdpbmRv dy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUtcHJldikpCiAJIChxdWl0LXJlc3Rv cmUtMiAobnRoIDIgcXVpdC1yZXN0b3JlKSkKKwkgKHF1aXQtcmVzdG9yZS1wcmV2LTIgKG50 aCAyIHF1aXQtcmVzdG9yZS1wcmV2KSkKICAgICAgICAgIChwcmV2LWJ1ZmZlciAoY2F0Y2gg J3ByZXYtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAoZG9saXN0IChidWYgKHdp bmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg KHVubGVzcyAoZXEgKGNhciBidWYpIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAodGhyb3cgJ3ByZXYtYnVmZmVyIChjYXIgYnVmKSkpKSkpCiAgICAgICAgICAoZGVk aWNhdGVkICh3aW5kb3ctZGVkaWNhdGVkLXAgd2luZG93KSkKLQkgcXVhZCBlbnRyeSkKKwkg cXVhZCBlbnRyeSByZXNldC1wcmV2KQogICAgIChjb25kCiAgICAgIDs7IEZpcnN0IHRyeSB0 byBkZWxldGUgZGVkaWNhdGVkIHdpbmRvd3MgdGhhdCBhcmUgbm90IHNpZGUgd2luZG93cy4K ICAgICAgKChhbmQgZGVkaWNhdGVkIChub3QgKGVxIGRlZGljYXRlZCAnc2lkZSkpCkBAIC01 MjMwLDIxICs1MjM5LDM1IEBAIHF1aXQtcmVzdG9yZS13aW5kb3cKICAgICAgIDs7IElmIHRo ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdpbmRvdyBpcyBzdGlsbCBhbGl2ZSwgc2VsZWN0IGl0 LgogICAgICAgKHdpbmRvdy0tcXVpdC1yZXN0b3JlLXNlbGVjdC13aW5kb3cgcXVpdC1yZXN0 b3JlLTIpKQogICAgICAoKGFuZCAobm90IHByZXYtYnVmZmVyKQotCSAgIChvciAoZXEgKG50 aCAxIHF1aXQtcmVzdG9yZSkgJ2ZyYW1lKQotCSAgICAgICAoYW5kIChlcSAobnRoIDEgcXVp dC1yZXN0b3JlKSAnd2luZG93KQotCQkgICAgOzsgSWYgdGhlIHdpbmRvdyBoYXMgYmVlbiBj cmVhdGVkIG9uIGFuIGV4aXN0aW5nCi0JCSAgICA7OyBmcmFtZSBhbmQgZW5kZWQgdXAgYXMg dGhlIHNvbGUgd2luZG93IG9uIHRoYXQKLQkJICAgIDs7IGZyYW1lLCBkbyBub3QgZGVsZXRl IGl0IChCdWcjMTI3NjQpLgotCQkgICAgKG5vdCAoZXEgd2luZG93IChmcmFtZS1yb290LXdp bmRvdyB3aW5kb3cpKSkpKQotCSAgIChlcSAobnRoIDMgcXVpdC1yZXN0b3JlKSBidWZmZXIp CisJICAgKG9yIChhbmQgKG9yIChlcSAobnRoIDEgcXVpdC1yZXN0b3JlKSAnZnJhbWUpCisJ CQkoYW5kIChlcSAobnRoIDEgcXVpdC1yZXN0b3JlKSAnd2luZG93KQorCQkJICAgICA7OyBJ ZiB0aGUgd2luZG93IGhhcyBiZWVuIGNyZWF0ZWQgb24gYW4KKwkJCSAgICAgOzsgZXhpc3Rp bmcgZnJhbWUgYW5kIGVuZGVkIHVwIGFzIHRoZSBzb2xlCisJCQkgICAgIDs7IHdpbmRvdyBv biB0aGF0IGZyYW1lLCBkbyBub3QgZGVsZXRlIGl0CisJCQkgICAgIDs7IChCdWcjMTI3NjQp LgorCQkJICAgICAobm90IChlcSB3aW5kb3cgKGZyYW1lLXJvb3Qtd2luZG93IHdpbmRvdykp KSkpCisJCSAgICAoZXEgKG50aCAzIHF1aXQtcmVzdG9yZSkgYnVmZmVyKSkKKwkgICAgICAg KGFuZCAob3IgKGVxIChudGggMSBxdWl0LXJlc3RvcmUtcHJldikgJ2ZyYW1lKQorCQkJKGFu ZCAoZXEgKG50aCAxIHF1aXQtcmVzdG9yZS1wcmV2KSAnd2luZG93KQorCQkJICAgICAobm90 IChlcSB3aW5kb3cgKGZyYW1lLXJvb3Qtd2luZG93IHdpbmRvdykpKSkpCisJCSAgICAoZXEg KG50aCAzIHF1aXQtcmVzdG9yZS1wcmV2KSBidWZmZXIpCisJCSAgICA7OyBVc2Ugc2VsZWN0 ZWQgd2luZG93IGZyb20gcXVpdC1yZXN0b3JlLXByZXYuCisJCSAgICAoc2V0cSBxdWl0LXJl c3RvcmUtMiBxdWl0LXJlc3RvcmUtcHJldi0yKSkpCiAJICAgOzsgRGVsZXRlIFdJTkRPVyBp ZiBwb3NzaWJsZS4KIAkgICAod2luZG93LS1kZWxldGUgd2luZG93IG5pbCAoZXEgYnVyeS1v ci1raWxsICdraWxsKSkpCiAgICAgICA7OyBJZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCB3 aW5kb3cgaXMgc3RpbGwgYWxpdmUsIHNlbGVjdCBpdC4KICAgICAgICh3aW5kb3ctLXF1aXQt cmVzdG9yZS1zZWxlY3Qtd2luZG93IHF1aXQtcmVzdG9yZS0yKSkKLSAgICAgKChhbmQgKGxp c3RwIChzZXRxIHF1YWQgKG50aCAxIHF1aXQtcmVzdG9yZSkpKQotCSAgIChidWZmZXItbGl2 ZS1wIChjYXIgcXVhZCkpCi0JICAgKGVxIChudGggMyBxdWl0LXJlc3RvcmUpIGJ1ZmZlcikp Ci0gICAgICA7OyBTaG93IGFub3RoZXIgYnVmZmVyIHN0b3JlZCBpbiBxdWl0LXJlc3RvcmUg cGFyYW1ldGVyLgorICAgICAoKG9yIChhbmQgKGxpc3RwIChzZXRxIHF1YWQgKG50aCAxIHF1 aXQtcmVzdG9yZSkpKQorCSAgICAgICAoYnVmZmVyLWxpdmUtcCAoY2FyIHF1YWQpKQorCSAg ICAgICAoZXEgKG50aCAzIHF1aXQtcmVzdG9yZSkgYnVmZmVyKSkKKwkgIChhbmQgKGxpc3Rw IChzZXRxIHF1YWQgKG50aCAxIHF1aXQtcmVzdG9yZS1wcmV2KSkpCisJICAgICAgIChidWZm ZXItbGl2ZS1wIChjYXIgcXVhZCkpCisJICAgICAgIChlcSAobnRoIDMgcXVpdC1yZXN0b3Jl LXByZXYpIGJ1ZmZlcikKKwkgICAgICAgOzsgVXNlIHNlbGVjdGVkIHdpbmRvdyBmcm9tIHF1 aXQtcmVzdG9yZS1wcmV2LgorCSAgICAgICAoc2V0cSBxdWl0LXJlc3RvcmUtMiBxdWl0LXJl c3RvcmUtcHJldi0yKQorCSAgICAgICA7OyBXZSB3YW50IHRvIHJlc2V0IHF1aXQtcmVzdG9y ZS1wcmV2IG9ubHkuCisJICAgICAgIChzZXRxIHJlc2V0LXByZXYgdCkpKQorICAgICAgOzsg U2hvdyBhbm90aGVyIGJ1ZmZlciBzdG9yZWQgaW4gcXVpdC1yZXN0b3JlKC1wcmV2KSBwYXJh bWV0ZXIuCiAgICAgICAod2hlbiAoYW5kIChpbnRlZ2VycCAobnRoIDMgcXVhZCkpCiAJCSAo aWYgKHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdykKICAgICAgICAgICAgICAgICAgICAgICgv PSAobnRoIDMgcXVhZCkgKHdpbmRvdy10b3RhbC1oZWlnaHQgd2luZG93KSkKQEAgLTUyODEs MTUgKzUzMDQsMTUgQEAgcXVpdC1yZXN0b3JlLXdpbmRvdwogCTs7IGBkaXNwbGF5LWJ1ZmZl ci1pbi1wcmV2aW91cy13aW5kb3cnIGNhbiBuZXZlcnRoZWxlc3MgZmluZCBpdC4KIAkoc2V0 LXdpbmRvdy1wcmV2LWJ1ZmZlcnMKIAkgd2luZG93IChhcHBlbmQgKHdpbmRvdy1wcmV2LWJ1 ZmZlcnMgd2luZG93KSAobGlzdCBlbnRyeSkpKSkKLSAgICAgIDs7IFJlc2V0IHRoZSBxdWl0 LXJlc3RvcmUgcGFyYW1ldGVyLgotICAgICAgKHNldC13aW5kb3ctcGFyYW1ldGVyIHdpbmRv dyAncXVpdC1yZXN0b3JlIG5pbCkKKyAgICAgIDs7IFJlc2V0IHRoZSBxdWl0LXJlc3RvcmUo LXByZXYpIHBhcmFtZXRlci4KKyAgICAgIChzZXQtd2luZG93LXBhcmFtZXRlcgorICAgICAg IHdpbmRvdyAoaWYgcmVzZXQtcHJldiAncXVpdC1yZXN0b3JlLXByZXYgJ3F1aXQtcmVzdG9y ZSkgbmlsKQogICAgICAgOzsgU2VsZWN0IG9sZCB3aW5kb3cuCiAgICAgICA7OyBJZiB0aGUg cHJldmlvdXNseSBzZWxlY3RlZCB3aW5kb3cgaXMgc3RpbGwgYWxpdmUsIHNlbGVjdCBpdC4K ICAgICAgICh3aW5kb3ctLXF1aXQtcmVzdG9yZS1zZWxlY3Qtd2luZG93IHF1aXQtcmVzdG9y ZS0yKSkKICAgICAgKHQKLSAgICAgIDs7IFNob3cgc29tZSBvdGhlciBidWZmZXIgaW4gV0lO RE9XIGFuZCByZXNldCB0aGUgcXVpdC1yZXN0b3JlCi0gICAgICA7OyBwYXJhbWV0ZXIuCi0g ICAgICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUgbmlsKQor ICAgICAgOzsgU2hvdyBzb21lIG90aGVyIGJ1ZmZlciBpbiBXSU5ET1cgYW5kIGxlYXZlIHRo ZQorICAgICAgOzsgcXVpdC1yZXN0b3JlKC1wcmV2KSBwYXJhbWV0ZXJzIGFsb25lIChKdXJp J3MgaWRlYSkuCiAgICAgICA7OyBNYWtlIHN1cmUgdGhhdCBXSU5ET1cgaXMgbm8gbW9yZSBk ZWRpY2F0ZWQuCiAgICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgbmlsKQog ICAgICAgOzsgVHJ5IHRvIHN3aXRjaCB0byBhIHByZXZpb3VzIGJ1ZmZlci4gIERlbGV0ZSB0 aGUgd2luZG93IG9ubHkgaWYKQEAgLTUyOTcsMTAgKzUzMjAsNyBAQCBxdWl0LXJlc3RvcmUt d2luZG93CiAgICAgICAoaWYgKHN3aXRjaC10by1wcmV2LWJ1ZmZlciB3aW5kb3cgYnVyeS1v ci1raWxsKQogICAgICAgICAgICh3aGVuIChlcSBkZWRpY2F0ZWQgJ3NpZGUpCiAgICAgICAg ICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCB3aW5kb3cgJ3NpZGUpKQotICAgICAgICAo d2luZG93LS1kZWxldGUgd2luZG93IG5pbCAoZXEgYnVyeS1vci1raWxsICdraWxsKSkKLSAg ICAgIDs7IElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHdpbmRvdyBpcyBzdGlsbCBhbGl2 ZSwgc2VsZWN0IGl0LgotICAgICAgKHdpbmRvdy0tcXVpdC1yZXN0b3JlLXNlbGVjdC13aW5k b3cgcXVpdC1yZXN0b3JlLTIpKSkpCi0KKyAgICAgICAgKHdpbmRvdy0tZGVsZXRlIHdpbmRv dyBuaWwgKGVxIGJ1cnktb3Ita2lsbCAna2lsbCkpKSkpCiAgICAgOzsgRGVhbCB3aXRoIHRo ZSBidWZmZXIuCiAgICAgKGNvbmQKICAgICAgKChub3QgKGJ1ZmZlci1saXZlLXAgYnVmZmVy KSkpCkBAIC01MzQyLDEyICs1MzYyLDIwIEBAIHF1aXQtd2luZG93cy1vbgogICAobGV0ICgo YnVmZmVyICh3aW5kb3ctbm9ybWFsaXplLWJ1ZmZlciBidWZmZXItb3ItbmFtZSkpCiAJOzsg SGFuZGxlIHRoZSAiaW52ZXJ0ZWQiIG1lYW5pbmcgb2YgdGhlIEZSQU1FIGFyZ3VtZW50IHdy dCBvdGhlcgogCTs7IGB3aW5kb3ctbGlzdC0xJyBiYXNlZCBmdW5jdGlvbi4KLQkoYWxsLWZy YW1lcyAoY29uZCAoKG5vdCBmcmFtZSkgdCkgKChlcSBmcmFtZSB0KSBuaWwpICh0IGZyYW1l KSkpKQotICAgIChkb2xpc3QgKHdpbmRvdyAod2luZG93LWxpc3QtMSBuaWwgbmlsIGFsbC1m cmFtZXMpKQotICAgICAgKGlmIChlcSAod2luZG93LWJ1ZmZlciB3aW5kb3cpIGJ1ZmZlcikK LQkgIChxdWl0LXdpbmRvdyBraWxsIHdpbmRvdykKLQk7OyBJZiBhIHdpbmRvdyBkb2Vzbid0 IHNob3cgQlVGRkVSLCB1bnJlY29yZCBCVUZGRVIgaW4gaXQuCi0JKHVucmVjb3JkLXdpbmRv dy1idWZmZXIgd2luZG93IGJ1ZmZlcikpKSkpCisJKGZyYW1lcyAoY29uZCAoKG5vdCBmcmFt ZSkgdCkgKChlcSBmcmFtZSB0KSBuaWwpICh0IGZyYW1lKSkpKQorICAgIChkb2xpc3QgKHdp bmRvdyAod2luZG93LWxpc3QtMSBuaWwgbmlsIGZyYW1lcykpCisgICAgICAod2hlbiAoZXEg KHdpbmRvdy1idWZmZXIgd2luZG93KSBidWZmZXIpCisJKHF1aXQtcmVzdG9yZS13aW5kb3cg d2luZG93IGtpbGwpKQorICAgICAgOzsgUmVtb3ZlIHF1aXQtcmVzdG9yZSgtcHJldikgZW50 cmllcyB0aGF0IG1lbnRpb24gQlVGRkVSLgorICAgICAgKGxldCAoKHF1aXQtcmVzdG9yZSAo d2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZSkpCisJICAgIChxdWl0LXJl c3RvcmUtcHJldiAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3F1aXQtcmVzdG9yZS1wcmV2 KSkpCisJKHdoZW4gKGVxIGJ1ZmZlciAobnRoIDMgcXVpdC1yZXN0b3JlLXByZXYpKQorCSAg KHNldC13aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAncXVpdC1yZXN0b3JlLXByZXYgbmlsKSkK Kwkod2hlbiAoZXEgYnVmZmVyIChudGggMyBxdWl0LXJlc3RvcmUpKQorCSAgKHNldC13aW5k b3ctcGFyYW1ldGVyCisJICAgd2luZG93ICdxdWl0LXJlc3RvcmUgKHdpbmRvdy1wYXJhbWV0 ZXIgd2luZG93ICdxdWl0LXJlc3RvcmUtcHJldikpKSkKKyAgICAgIDs7IFVucmVjb3JkIEJV RkZFUiBpbiB0aGlzIHdpbmRvdy4KKyAgICAgICh1bnJlY29yZC13aW5kb3ctYnVmZmVyIHdp bmRvdyBidWZmZXIpKSkpCiAMCiAoZGVmdW4gd2luZG93LS1jb21iaW5hdGlvbi1yZXNpemFi bGUgKHBhcmVudCAmb3B0aW9uYWwgaG9yaXpvbnRhbCkKICAgIlJldHVybiBudW1iZXIgb2Yg cGl4ZWxzIHJlY292ZXJhYmxlIGZyb20gaGVpZ2h0IG9mIHdpbmRvdyBQQVJFTlQuCkBAIC02 NjczLDcgKzY3MDEsNyBAQCBkaXNwbGF5LWJ1ZmZlci1yZWNvcmQtd2luZG93CiAgICAgICA7 OyBXSU5ET1cgc2hvd3MgYW5vdGhlciBidWZmZXIuCiAgICAgICAod2l0aC1jdXJyZW50LWJ1 ZmZlciAod2luZG93LWJ1ZmZlciB3aW5kb3cpCiAJKHNldC13aW5kb3ctcGFyYW1ldGVyCi0J IHdpbmRvdyAncXVpdC1yZXN0b3JlCisJIHdpbmRvdyAncXVpdC1yZXN0b3JlLXByZXYKIAkg KGxpc3QgJ290aGVyCiAJICAgICAgIDs7IEEgcXVhZHJ1cGxlIG9mIFdJTkRPVydzIGJ1ZmZl ciwgc3RhcnQsIHBvaW50IGFuZCBoZWlnaHQuCiAJICAgICAgIChsaXN0IChjdXJyZW50LWJ1 ZmZlcikgKHdpbmRvdy1zdGFydCB3aW5kb3cpCg== --------------IC2I0Uy7drpTFuo2EwzOlvBQ--