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#71605: 30.0.50; [PATCH] Support variable-width text in 'visual-wrap-prefix-mode' Date: Mon, 17 Jun 2024 10:42:56 -0700 Message-ID: <201c2285-012f-fa29-03b5-78a2e26aa134@gmail.com> References: <868qz3ssu0.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------fiT0Rab0roZKyB3qsvnzQXTk" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17220"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 71605@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jun 17 19:45:20 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 1sJGPv-0004G1-KF for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 17 Jun 2024 19:45:19 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sJGPg-00042t-3s; Mon, 17 Jun 2024 13:45:04 -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 1sJGPd-00042H-IV for bug-gnu-emacs@gnu.org; Mon, 17 Jun 2024 13:45:01 -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 1sJGPc-0000sF-Q4 for bug-gnu-emacs@gnu.org; Mon, 17 Jun 2024 13:45:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sJGPe-00077g-2R for bug-gnu-emacs@gnu.org; Mon, 17 Jun 2024 13:45:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jim Porter Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 17 Jun 2024 17:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 71605 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 71605-submit@debbugs.gnu.org id=B71605.171864624827279 (code B ref 71605); Mon, 17 Jun 2024 17:45:02 +0000 Original-Received: (at 71605) by debbugs.gnu.org; 17 Jun 2024 17:44:08 +0000 Original-Received: from localhost ([127.0.0.1]:35297 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sJGOk-00075u-UX for submit@debbugs.gnu.org; Mon, 17 Jun 2024 13:44:07 -0400 Original-Received: from mail-pl1-f182.google.com ([209.85.214.182]:51224) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sJGOi-00075G-01 for 71605@debbugs.gnu.org; Mon, 17 Jun 2024 13:44:05 -0400 Original-Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1f6da06ba24so39035235ad.2 for <71605@debbugs.gnu.org>; Mon, 17 Jun 2024 10:44:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718646176; x=1719250976; darn=debbugs.gnu.org; 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=NEIPR9v+T221y8H8QwnVEZatrlOxRkdsm8bCwP+DwvE=; b=U4opmeAXKvug3ED0QL54FVq5wAzmCFxzSwyz74dRJB07yhDsD3uj8Y1voE6P++kvAT hMG2gamU5rEx7zkEUhQX7EXaGN4Xml6T+ILKUnaR7FyTaObU76kAP/bMPokxF5UPCY08 WvTKtIrrY5w2xxL71vQkY4HZvnA6OjU1ebLyi7e/kuCMUPPXRFdoTz4iiRcFxpJg0d5U LTB3g1GBrWbkAeiX4HAiIiFZBl4IS2wVbvXWDbii3PcsurfV+waQegxJO4wMOloaz+Rp fFBnr9xUze9XAXO4kDukfwguGxblganxOioBGognVwJQjidXgFtDnEm72OTxf+ZbGZ9e u/1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718646176; x=1719250976; 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=NEIPR9v+T221y8H8QwnVEZatrlOxRkdsm8bCwP+DwvE=; b=TTF+6fNydIi1mkYb/bocwts/rudW3fLi9zZAndUs+Z3E5iACyuIO9xn2bhDNB/kIdo Ky2DTBCU79C/zG6I/Gi/3doDAHDSf5WZdgE62GpTDj+Kja2fljaV3ZOqWqt9EwjoG87m UZk6MdlaAGANMlWlx60AO0IoGExPjtVVm8mqJOmiz5gnvk0TORNCKudi1txHTX8OgaNg GTIrmaQIgodVe3cp9RFumJhUBBFGN4S5pJ+6LWfizCblGTyk+0+0FmTZwokJ5e8Eo33a oL3oL5MSwz93IlB9CXePLKn/162VTm0/Tq7sRqUTa0khsCX0D8ihhBuDG5YroiXJUm3u 8skQ== X-Gm-Message-State: AOJu0YydMi/7pcwIJ4VV1btr5H+oNZR/WDLNmBcTtXrGyVFIfD+ThsMv gZDrDsfL/wNujHJnQ1I4LT0PtaLTKVeGpJ4Z6jJDdmV3/odsm8aN X-Google-Smtp-Source: AGHT+IEIhTaCHyEjVUvpc04PSXuaZy+B5ee0nC0+FFCM1cqozqfDINwHd7D6F+SV1L4ewn2gi5PDCQ== X-Received: by 2002:a17:902:db04:b0:1f6:ff48:1cdb with SMTP id d9443c01a7336-1f8629006fbmr126005715ad.52.1718646175367; Mon, 17 Jun 2024 10:42:55 -0700 (PDT) Original-Received: from [192.168.1.2] (syn-023-240-098-037.res.spectrum.com. [23.240.98.37]) by smtp.googlemail.com with ESMTPSA id d9443c01a7336-1f855ee808bsm81559445ad.142.2024.06.17.10.42.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Jun 2024 10:42:54 -0700 (PDT) Content-Language: en-US In-Reply-To: <868qz3ssu0.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:287410 Archived-At: This is a multi-part message in MIME format. --------------fiT0Rab0roZKyB3qsvnzQXTk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 6/17/2024 4:37 AM, Eli Zaretskii wrote: >> Date: Sun, 16 Jun 2024 19:56:44 -0700 >> From: Jim Porter >> The attached patch adds a display spec in this case so that the text >> lines up perfectly. > > Can you explain the idea of the patch? I don't think I understand why > you use '(space :width)' rather than '(space :align-to)'. I tried using :align-to, and it doesn't seem to take effect for the 'wrap-prefix' text property. I haven't looked closely at why that doesn't work, but even if it did, I think it might make things more complex than they already are. I'll try to describe the current process: 1. 'visual-wrap-prefix-mode' goes a line at a time, finding the first-line prefix (for a bulleted item, this is something like "* "). 2. Then it constructs the wrap-prefix string (for a bulleted item, something like " "; for other items it might be the same as the first-line prefix). 3. Finally, it applies the the wrap-prefix to the entire line it's examining. The problem comes up for variable-pitch fonts, where "* " and " " have different pixel widths. Before my patch, this results in the second line not lining up correctly. See the attached image for an example. My patch just sets a display-spec on the " " to make it have the same pixel-width as "* ". Then it all lines up. If I understand your :align-to suggestion, setting :align-to on everything after the "* " bullet could work in theory, but I don't know what value you could set there to make everything correct. If it's a fixed number of pixels, then scaling up the text could mean the "* " becomes too wide for the space we reserved for it, and then things would probably look wrong. If it's based on the canonical character width, that might work so long as that updates when needed, but it might still look off depending on how the canonical width and the pixel width compare. (Ideally, we'd align to the exact pixel-width of "* " or whatever the first-line prefix is.) I couldn't get :align-to to work in the first place though so this is all hypothetical... >> There's currently one problem though: I'm not sure >> how to regenerate the wrap prefix automatically if the face changes. >> It's not hard to handle for 'text-scale-adjust', but I don't know how to >> handle 'global-text-scale-adjust' (or other things that could change the >> face[1]). >> >> Does anyone have any ideas for this part? > > Perhaps we could provide a function "face-change (&optional frame)" > which would access the frame's face_change flag and the global > face_change flag. Then you could test those in a post-command-hook or > somesuch. (However, using :align-to, if feasible, sounds like a > better solution to me.) The 'face-change' idea could work, or here's another possibility: what about using :relative-width? If I set that correctly, then the pixel-size should adjust as the text scales. It wouldn't handle the case where the actual font changes though. It would also have some loss of precision, but I tested out a hacky patch using :relative-width and it looks good in practice. >> -@defun string-pixel-width string >> +@defun string-pixel-width string &optional buffer >> This is a convenience function that uses @code{window-text-pixel-size} >> -to compute the width of @var{string} (in pixels). >> +to compute the width of @var{string} (in pixels). If @var{buffer} is >> +non-@code{nil}, use the face remappings from that buffer when >> +determining the width (@pxref{Face Remapping}). > > An alternative would be to provide a face to use. > > In any case, using BUFFER only for face-remapping-alist is only a > small part of what a buffer can do to a string: there's the major mode > with its fontifications and whatnot. Yeah, I'm not entirely happy with this BUFFER argument either. I don't think we need to worry about fontification in this case though, since you can pass in a fontified string. Maybe this should take the face-remapping-alist directly? Or maybe we should pass in a window? The latter might be better for handling things like frame-specific font settings. (Although as Po Lu points out, frame-specific fonts are challenging to handle correctly here.) >> +(defun visual-wrap--adjust-display-width (fcp n) >> + (when-let ((display (get-text-property 0 'display fcp)) >> + ((eq (car-safe display) 'space)) > > Doesn't this only work with very simple 'display' specs? The 'space' > part could be in some place deep in the spec, not just the second > symbol. Yeah, though the FCP argument is always the prefix we constructed, so we know what the display-spec looks like if it's present. The extra checks are just my natural paranoia. I've added a comment here explaining though. >> (defun visual-wrap-fill-context-prefix (beg end) >> "Compute visual wrap prefix from text between BEG and END. >> -This is like `fill-context-prefix', but with prefix length adjusted >> -by `visual-wrap-extra-indent'." >> - (let* ((fcp >> - ;; `fill-context-prefix' ignores prefixes that look like >> - ;; paragraph starts, in order to avoid inadvertently >> - ;; creating a new paragraph while filling, but here we're >> - ;; only dealing with single-line "paragraphs" and we don't >> - ;; actually modify the buffer, so this restriction doesn't >> - ;; make much sense (and is positively harmful in >> - ;; taskpaper-mode where paragraph-start matches everything). >> - (or (let ((paragraph-start regexp-unmatchable)) >> - (fill-context-prefix beg end)) >> - ;; Note: fill-context-prefix may return nil; See: >> - ;; http://article.gmane.org/gmane.emacs.devel/156285 >> - "")) > > The comment above and the URL it included are deleted: is that because > they are no longer relevant? If not, maybe move them with the code, > so that the information is not lost. Correct, they're no longer relevant. I extracted the logic that we need out of 'fill-content-prefix' and into 'visual-wrap--content-prefix'. The former didn't behave quite the way we wanted (hence all the comments), and it made handling the display-spec parts of my patch even harder, so I just took the relevant logic out and made a function that does exactly what we want. I've added more detail to the commit message explaining the change. --------------fiT0Rab0roZKyB3qsvnzQXTk Content-Type: image/png; name="misaligned.png" Content-Disposition: attachment; filename="misaligned.png" Content-Transfer-Encoding: base64 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 --------------fiT0Rab0roZKyB3qsvnzQXTk Content-Type: text/plain; charset=UTF-8; name="0001-Add-support-for-variable-width-text-in-visual-wrap-p.patch" Content-Disposition: attachment; filename*0="0001-Add-support-for-variable-width-text-in-visual-wrap-p.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxMjA3NDgzNThiNmE3MTdjNzQwZThkNGYxMzljZTYyYTMwYmU3NjA2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFN1biwgMTYgSnVuIDIwMjQgMTU6MjE6NTIgLTA3MDAKU3ViamVjdDogW1BB VENIIDEvMl0gQWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxlLXdpZHRoIHRleHQgaW4KICd2aXN1 YWwtd3JhcC1wcmVmaXgtbW9kZScKClRoaXMgdXNlcyBhIGRpc3BsYXkgc3BlYyB0byBzZXQg dGhlIHdpZHRoIGNvcnJlY3RseSB3aGVuIGluZGVudGluZyB3aXRoCnNwYWNlcy4KCiogbGlz cC9lbWFjcy1saXNwL3N1YnIteC5lbCAoc3RyaW5nLXBpeGVsLXdpZHRoKTogTmV3IGFyZ3Vt ZW50IEJVRkZFUi4KCiogbGlzcC92aXN1YWwtd3JhcC5lbCAodmlzdWFsLXdyYXAtLWNvbnRl bnQtcHJlZml4KQoodmlzdWFsLXdyYXAtLWFkanVzdC1kaXNwbGF5LXdpZHRoKTogTmV3IGZ1 bmN0aW9ucy4KKHZpc3VhbC13cmFwLS1leHRyYS1pbmRlbnQpOiBSZW5hbWUgZnJvbSAndmlz dWFsLXdyYXAtLXByZWZpeCcgYW5kIGNhbGwKJ3Zpc3VhbC13cmFwLS1hZGp1c3QtZGlzcGxh eS13aWR0aCcuCih2aXN1YWwtd3JhcC1maWxsLWNvbnRleHQtcHJlZml4KTogU3VwcG9ydCBk aXNwbGF5IHdpZHRoLiAgVXNlCid2aXN1YWwtd3JhcC0tY29udGVudC1wcmVmaXgnIGluc3Rl YWQgb2YgJ2ZpbGwtY29udGVudC1wcmVmaXgnLCB3aGljaApsZXRzIHVzIHJlbW92ZSB0aGUg b2xkIHdvcmthcm91bmRzLgoodmlzdWFsLXdyYXAtcHJlZml4LWZ1bmN0aW9uKTogQWxsb3cg J2xicCcgdG8gYmUgYXQgJ3BvaW50LW1pbicuCih2aXN1YWwtd3JhcC1wcmVmaXgtbW9kZSk6 IFJlZm9udGlmeSB3aGVuIGNoYW5naW5nIHRleHQgc2NhbGUuCgoqIGRvYy9saXNwcmVmL2Rp c3BsYXkudGV4aSAoU2l6ZSBvZiBEaXNwbGF5ZWQgVGV4dCk6IERvY3VtZW50IEJVRkZFUgph cmd1bWVudCBmb3IgJ3N0cmluZy1waXhlbC13aWR0aCcuCgoqIGV0Yy9ORVdTOiBBbm5vdW5j ZSB0aGlzIGNoYW5nZS4KLS0tCiBkb2MvbGlzcHJlZi9kaXNwbGF5LnRleGkgIHwgIDYgKyst CiBldGMvTkVXUyAgICAgICAgICAgICAgICAgIHwgIDggKysrLQogbGlzcC9lbWFjcy1saXNw L3N1YnIteC5lbCB8IDExICsrKystCiBsaXNwL3Zpc3VhbC13cmFwLmVsICAgICAgIHwgODYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiA0IGZpbGVzIGNoYW5n ZWQsIDgzIGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Rv Yy9saXNwcmVmL2Rpc3BsYXkudGV4aSBiL2RvYy9saXNwcmVmL2Rpc3BsYXkudGV4aQppbmRl eCBkNWM5NmQxM2UwMi4uNTI5NTdmMmFkMDcgMTAwNjQ0Ci0tLSBhL2RvYy9saXNwcmVmL2Rp c3BsYXkudGV4aQorKysgYi9kb2MvbGlzcHJlZi9kaXNwbGF5LnRleGkKQEAgLTIzNTEsOSAr MjM1MSwxMSBAQCBTaXplIG9mIERpc3BsYXllZCBUZXh0CiBtZWFuaW5nIGFzIHdpdGggQGNv ZGV7d2luZG93LXRleHQtcGl4ZWwtc2l6ZX0uCiBAZW5kIGRlZnVuCiAKLUBkZWZ1biBzdHJp bmctcGl4ZWwtd2lkdGggc3RyaW5nCitAZGVmdW4gc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmlu ZyAmb3B0aW9uYWwgYnVmZmVyCiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhh dCB1c2VzIEBjb2Rle3dpbmRvdy10ZXh0LXBpeGVsLXNpemV9Ci10byBjb21wdXRlIHRoZSB3 aWR0aCBvZiBAdmFye3N0cmluZ30gKGluIHBpeGVscykuCit0byBjb21wdXRlIHRoZSB3aWR0 aCBvZiBAdmFye3N0cmluZ30gKGluIHBpeGVscykuICBJZiBAdmFye2J1ZmZlcn0gaXMKK25v bi1AY29kZXtuaWx9LCB1c2UgdGhlIGZhY2UgcmVtYXBwaW5ncyBmcm9tIHRoYXQgYnVmZmVy IHdoZW4KK2RldGVybWluaW5nIHRoZSB3aWR0aCAoQHB4cmVme0ZhY2UgUmVtYXBwaW5nfSku CiBAZW5kIGRlZnVuCiAKIEBkZWZ1biBsaW5lLXBpeGVsLWhlaWdodApkaWZmIC0tZ2l0IGEv ZXRjL05FV1MgYi9ldGMvTkVXUwppbmRleCBiMmZkYmM0YTg4Zi4uMjdhNGZkMTFhODcgMTAw NjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0Yy9ORVdTCkBAIC01NDksNyArNTQ5LDggQEAg dGV4dCBpbiBhbnkgd2F5LiAgVGhlIGdsb2JhbCBtaW5vciBtb2RlCiBidWZmZXJzLgogCiAo VGhpcyBtaW5vciBtb2RlIGlzIHRoZSAnYWRhcHRpdmUtd3JhcCcgRUxQQSBwYWNrYWdlIHJl bmFtZWQgYW5kCi1saWdodGx5IGVkaXRlZCBmb3IgaW5jbHVzaW9uIGluIEVtYWNzLikKK2Vu aGFuY2VkIGZvciBpbmNsdXNpb24gaW4gRW1hY3MuICBJdCBhZGRpdGlvbmFsbHkgc3VwcG9y dHMgcHJlZml4ZXMgZm9yCit2YXJpYWJsZS13aWR0aCB0ZXh0LikKIAogKysrCiAqKiBOZXcg dXNlciBvcHRpb24gJ2d1ZC1oaWdobGlnaHQtY3VycmVudC1saW5lJy4KQEAgLTI3ODksNiAr Mjc5MCwxMSBAQCBUaGVzZSBmdW5jdGlvbnMgYXJlIGxpa2UgJ3VzZXItdWlkJyBhbmQgJ2dy b3VwLWdpZCcsIHJlc3BlY3RpdmVseSwgYnV0CiBhcmUgYXdhcmUgb2YgZmlsZSBuYW1lIGhh bmRsZXJzLCBzbyB0aGV5IHdpbGwgcmV0dXJuIHRoZSByZW1vdGUgVUlEIG9yCiBHSUQgZm9y IHJlbW90ZSBmaWxlcyAob3IgLTEgaWYgdGhlIGNvbm5lY3Rpb24gaGFzIG5vIGFzc29jaWF0 ZWQgdXNlcikuCiAKKysrKworKiogJ3N0cmluZy1waXhlbC13aWR0aCcgbm93IGFjY2VwdHMg YSBCVUZGRVIgYXJndW1lbnQuCitJZiBCVUZGRVIgaXMgbm9uLW5pbCwgJ3N0cmluZy1waXhl bC13aWR0aCcgd2lsbCBhcHBseSBCVUZGRVIncyBmYWNlCityZW1hcHBpbmdzIHdoZW4gY29t cHV0aW5nIHRoZSBzdHJpbmcncyB3aWR0aC4KKwogKysrCiAqKiAnZnNldCcsICdkZWZhbGlh cycgYW5kICdkZWZ2YXJhbGlhcycgbm93IHNpZ25hbCBhbiBlcnJvciBmb3IgY3ljbGljIGFs aWFzZXMuCiBQcmV2aW91c2x5LCAnZnNldCcsICdkZWZhbGlhcycgYW5kICdkZWZ2YXJhbGlh cycgY291bGQgYmUgbWFkZSB0bwpkaWZmIC0tZ2l0IGEvbGlzcC9lbWFjcy1saXNwL3N1YnIt eC5lbCBiL2xpc3AvZW1hY3MtbGlzcC9zdWJyLXguZWwKaW5kZXggNjk5YmU3NjdlZTcuLjJj YmUxYmViOWYxIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3Avc3Vici14LmVsCisrKyBi L2xpc3AvZW1hY3MtbGlzcC9zdWJyLXguZWwKQEAgLTMzMyw4ICszMzMsMTAgQEAgbmFtZWQt bGV0CiAgICAgICAuICxhYXJncykpKQogCiA7OzsjIyNhdXRvbG9hZAotKGRlZnVuIHN0cmlu Zy1waXhlbC13aWR0aCAoc3RyaW5nKQotICAiUmV0dXJuIHRoZSB3aWR0aCBvZiBTVFJJTkcg aW4gcGl4ZWxzLiIKKyhkZWZ1biBzdHJpbmctcGl4ZWwtd2lkdGggKHN0cmluZyAmb3B0aW9u YWwgYnVmZmVyKQorICAiUmV0dXJuIHRoZSB3aWR0aCBvZiBTVFJJTkcgaW4gcGl4ZWxzLgor SWYgQlVGRkVSIGlzIG5vbi1uaWwsIHVzZSB0aGUgZmFjZSByZW1hcHBpbmdzIGZyb20gdGhh dCBidWZmZXIgd2hlbgorZGV0ZXJtaW5pbmcgdGhlIHdpZHRoLiIKICAgKGRlY2xhcmUgKGlt cG9ydGFudC1yZXR1cm4tdmFsdWUgdCkpCiAgIChpZiAoemVyb3AgKGxlbmd0aCBzdHJpbmcp KQogICAgICAgMApAQCAtMzQ4LDYgKzM1MCwxMSBAQCBzdHJpbmctcGl4ZWwtd2lkdGgKICAg ICAgIDs7IERpc2FibGUgbGluZS1wcmVmaXggYW5kIHdyYXAtcHJlZml4LCBmb3IgdGhlIHNh bWUgcmVhc29uLgogICAgICAgKHNldHEgbGluZS1wcmVmaXggbmlsCiAJICAgIHdyYXAtcHJl Zml4IG5pbCkKKyAgICAgIChpZiBidWZmZXIKKyAgICAgICAgICAoc2V0cS1sb2NhbCBmYWNl LXJlbWFwcGluZy1hbGlzdAorICAgICAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQt YnVmZmVyIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS1yZW1hcHBpbmct YWxpc3QpKQorICAgICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnZmFjZS1yZW1hcHBpbmct YWxpc3QpKQogICAgICAgKGluc2VydCAocHJvcGVydGl6ZSBzdHJpbmcgJ2xpbmUtcHJlZml4 IG5pbCAnd3JhcC1wcmVmaXggbmlsKSkKICAgICAgIChjYXIgKGJ1ZmZlci10ZXh0LXBpeGVs LXNpemUgbmlsIG5pbCB0KSkpKSkKIApkaWZmIC0tZ2l0IGEvbGlzcC92aXN1YWwtd3JhcC5l bCBiL2xpc3AvdmlzdWFsLXdyYXAuZWwKaW5kZXggZDk1Y2Y0YmI1NjkuLjg4NjIxOWNmZjU0 IDEwMDY0NAotLS0gYS9saXNwL3Zpc3VhbC13cmFwLmVsCisrKyBiL2xpc3AvdmlzdWFsLXdy YXAuZWwKQEAgLTk3LDM4ICs5Nyw3MyBAQCB2aXN1YWwtd3JhcC0tcHJlZml4LWZhY2UKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAodmlzdWFsLXdyYXAtLWZhY2Ut ZXh0ZW5kLXAgZikgZikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9sLWZh Y2UpKSkpKSkpCiAKLShkZWZ1biB2aXN1YWwtd3JhcC0tcHJlZml4IChmY3ApCisoZGVmdW4g dmlzdWFsLXdyYXAtLWNvbnRlbnQtcHJlZml4IChwb3NpdGlvbikKKyAgIkdldCB0aGUgY29u dGVudCBwcmVmaXggZm9yIHRoZSBsaW5lIHN0YXJ0aW5nIGF0IFBPU0lUSU9OLgorVGhpcyBp cyBsaWtlIGBmaWxsLWNvbnRlbnQtcHJlZml4JyBidXQgZG9lc24ndCBjaGVjayBzdWJzZXF1 ZW50IGxpbmVzCithbmQgdXNlcyBkaXNwbGF5IHNwZWNzIHRvIGhhbmRsZSB2YXJpYWJsZS1w aXRjaCBmYWNlcy4iCisgIChzYXZlLWV4Y3Vyc2lvbgorICAgIChnb3RvLWNoYXIgcG9zaXRp b24pCisgICAgKGlmIChlb2xwKSAoZm9yd2FyZC1saW5lIDEpKQorICAgIDs7IE1vdmUgdG8g dGhlIHNlY29uZCBsaW5lIHVubGVzcyB0aGVyZSBpcyBqdXN0IG9uZS4KKyAgICAobW92ZS10 by1sZWZ0LW1hcmdpbikKKyAgICAobGV0ICgocHJlZml4IChmaWxsLW1hdGNoLWFkYXB0aXZl LXByZWZpeCkpKQorICAgICAgOzsgQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgdXNlIG91ciBm aXJzdC1saW5lIGNvbnRlbnQgcHJlZml4LgorICAgICAgKGlmIChvciAoYW5kIGFkYXB0aXZl LWZpbGwtZmlyc3QtbGluZS1yZWdleHAKKwkJICAgKHN0cmluZy1tYXRjaCBhZGFwdGl2ZS1m aWxsLWZpcnN0LWxpbmUtcmVnZXhwIHByZWZpeCkpCisJICAgICAgKGFuZCBjb21tZW50LXN0 YXJ0LXNraXAKKwkJICAgKHN0cmluZy1tYXRjaCBjb21tZW50LXN0YXJ0LXNraXAgcHJlZml4 KSkpCisJICBwcmVmaXgKKyAgICAgICAgOzsgV2Ugd2FudCB0aGUgcHJlZml4IHRvIGJlIHdo aXRlc3BhY2Ugb2YgdGhlIHNhbWUgd2lkdGggYXMgdGhlCisgICAgICAgIDs7IGZpcnN0LWxp bmUgcHJlZml4LgorICAgICAgICAobGV0ICgoc3BhY2VzIChtYWtlLXN0cmluZyAoc3RyaW5n LXdpZHRoIHByZWZpeCkgP1xzKSkpCisgICAgICAgICAgOzsgSWYgdGhlIGZvbnQgZm9yIG91 ciBmaXJzdC1saW5lIHByZWZpeCBpcyB2YXJpYWJsZS1waXRjaCwKKyAgICAgICAgICA7OyB1 c2UgYSBkaXNwbGF5IHNwZWMgdG8gbGluZSB0aGUgc3Vic2VxdWVudCBsaW5lcyB1cAorICAg ICAgICAgIDs7IGNvcnJlY3RseS4KKyAgICAgICAgICAod2hlbi1sZXQgKChmb250IChmb250 LWF0IHBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgICgobWVtcSAoZm9udC1nZXQg Zm9udCA6c3BhY2luZykgJyhuaWwgMCkpKSkKKyAgICAgICAgICAgIChwdXQtdGV4dC1wcm9w ZXJ0eSAwIChsZW5ndGggc3BhY2VzKSAnZGlzcGxheQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGAoc3BhY2UgOndpZHRoICgsKHN0cmluZy1waXhlbC13aWR0aAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCAoY3Vy cmVudC1idWZmZXIpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2Vz KSkKKyAgICAgICAgICBzcGFjZXMpKSkpKQorCisoZGVmdW4gdmlzdWFsLXdyYXAtLWFkanVz dC1kaXNwbGF5LXdpZHRoIChmY3AgbikKKyAgKHdoZW4tbGV0ICgoZGlzcGxheSAoZ2V0LXRl eHQtcHJvcGVydHkgMCAnZGlzcGxheSBmY3ApKQorICAgICAgICAgICAgIDs7IElmIHdlIGhh dmUgYSBkaXNwbGF5IHNwZWMgaGVyZSwgaXQgc2hvdWxkIGJlIHdoYXQgd2UKKyAgICAgICAg ICAgICA7OyBzcGVjaWZpZWQgaW4gYHZpc3VhbC13cmFwLS1jb250ZW50LXByZWZpeCcsIGJ1 dAorICAgICAgICAgICAgIDs7IGRvdWJsZS1jaGVjayBqdXN0IHRvIGJlIHNhZmUuCisgICAg ICAgICAgICAgKChlcSAoY2FyLXNhZmUgZGlzcGxheSkgJ3NwYWNlKSkKKyAgICAgICAgICAg ICAod2lkdGggKGNhciAocGxpc3QtZ2V0IChjZHIgZGlzcGxheSkgOndpZHRoKSkpKQorICAg IChwdXQtdGV4dC1wcm9wZXJ0eSAwIChsZW5ndGggZmNwKSAnZGlzcGxheQorICAgICAgICAg ICAgICAgICAgICAgICBgKHNwYWNlIDp3aWR0aCAoLCgrIHdpZHRoIG4pKSkgZmNwKSkKKyAg ZmNwKQorCisoZGVmdW4gdmlzdWFsLXdyYXAtLWV4dHJhLWluZGVudCAoZmNwKQogICAobGV0 ICgoZmNwLWxlbiAoc3RyaW5nLXdpZHRoIGZjcCkpKQogICAgIChjb25kCiAgICAgICgoPSAw IHZpc3VhbC13cmFwLWV4dHJhLWluZGVudCkKICAgICAgIGZjcCkKICAgICAgKCg8IDAgdmlz dWFsLXdyYXAtZXh0cmEtaW5kZW50KQotICAgICAgKGNvbmNhdCBmY3AgKG1ha2Utc3RyaW5n IHZpc3VhbC13cmFwLWV4dHJhLWluZGVudCA/XHMpKSkKKyAgICAgIChsZXQqICgoZXh0cmEg KG1ha2Utc3RyaW5nIHZpc3VhbC13cmFwLWV4dHJhLWluZGVudCA/XHMpKQorICAgICAgICAg ICAgIChyZXN1bHQgKGNvbmNhdCBmY3AgZXh0cmEpKSkKKyAgICAgICAgKHZpc3VhbC13cmFw LS1hZGp1c3QtZGlzcGxheS13aWR0aAorICAgICAgICAgcmVzdWx0IChzdHJpbmctcGl4ZWwt d2lkdGggZXh0cmEgKGN1cnJlbnQtYnVmZmVyKSkpKSkKICAgICAgKCg8IDAgKCsgdmlzdWFs LXdyYXAtZXh0cmEtaW5kZW50IGZjcC1sZW4pKQotICAgICAgKHN1YnN0cmluZyBmY3AKLSAg ICAgICAgICAgICAgICAgMAotICAgICAgICAgICAgICAgICAoKyB2aXN1YWwtd3JhcC1leHRy YS1pbmRlbnQgZmNwLWxlbikpKQorICAgICAgKGxldCogKChpZHggKCsgdmlzdWFsLXdyYXAt ZXh0cmEtaW5kZW50IGZjcC1sZW4pKQorICAgICAgICAgICAgICh0cmltIChzdWJzdHJpbmcg ZmNwIGlkeCkpCisgICAgICAgICAgICAgKHJlc3VsdCAoc3Vic3RyaW5nIGZjcCAwIGlkeCkp KQorICAgICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAwIChsZW5ndGggdHJpbSkgJyhk aXNwbGF5KSB0cmltKQorICAgICAgICAodmlzdWFsLXdyYXAtLWFkanVzdC1kaXNwbGF5LXdp ZHRoCisgICAgICAgICByZXN1bHQgKC0gKHN0cmluZy1waXhlbC13aWR0aCB0cmltIChjdXJy ZW50LWJ1ZmZlcikpKSkpKQogICAgICAodAogICAgICAgIiIpKSkpCiAKIChkZWZ1biB2aXN1 YWwtd3JhcC1maWxsLWNvbnRleHQtcHJlZml4IChiZWcgZW5kKQogICAiQ29tcHV0ZSB2aXN1 YWwgd3JhcCBwcmVmaXggZnJvbSB0ZXh0IGJldHdlZW4gQkVHIGFuZCBFTkQuCi1UaGlzIGlz IGxpa2UgYGZpbGwtY29udGV4dC1wcmVmaXgnLCBidXQgd2l0aCBwcmVmaXggbGVuZ3RoIGFk anVzdGVkCi1ieSBgdmlzdWFsLXdyYXAtZXh0cmEtaW5kZW50Jy4iCi0gIChsZXQqICgoZmNw Ci0gICAgICAgICAgOzsgYGZpbGwtY29udGV4dC1wcmVmaXgnIGlnbm9yZXMgcHJlZml4ZXMg dGhhdCBsb29rIGxpa2UKLSAgICAgICAgICA7OyBwYXJhZ3JhcGggc3RhcnRzLCBpbiBvcmRl ciB0byBhdm9pZCBpbmFkdmVydGVudGx5Ci0gICAgICAgICAgOzsgY3JlYXRpbmcgYSBuZXcg cGFyYWdyYXBoIHdoaWxlIGZpbGxpbmcsIGJ1dCBoZXJlIHdlJ3JlCi0gICAgICAgICAgOzsg b25seSBkZWFsaW5nIHdpdGggc2luZ2xlLWxpbmUgInBhcmFncmFwaHMiIGFuZCB3ZSBkb24n dAotICAgICAgICAgIDs7IGFjdHVhbGx5IG1vZGlmeSB0aGUgYnVmZmVyLCBzbyB0aGlzIHJl c3RyaWN0aW9uIGRvZXNuJ3QKLSAgICAgICAgICA7OyBtYWtlIG11Y2ggc2Vuc2UgKGFuZCBp cyBwb3NpdGl2ZWx5IGhhcm1mdWwgaW4KLSAgICAgICAgICA7OyB0YXNrcGFwZXItbW9kZSB3 aGVyZSBwYXJhZ3JhcGgtc3RhcnQgbWF0Y2hlcyBldmVyeXRoaW5nKS4KLSAgICAgICAgICAo b3IgKGxldCAoKHBhcmFncmFwaC1zdGFydCByZWdleHAtdW5tYXRjaGFibGUpKQotICAgICAg ICAgICAgICAgICAgICAoZmlsbC1jb250ZXh0LXByZWZpeCBiZWcgZW5kKSkKLSAgICAgICAg ICAgICAgICAgIDs7IE5vdGU6IGZpbGwtY29udGV4dC1wcmVmaXggbWF5IHJldHVybiBuaWw7 IFNlZToKLSAgICAgICAgICAgICAgICAgIDs7IGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9n bWFuZS5lbWFjcy5kZXZlbC8xNTYyODUKLSAgICAgICAgICAgICAgIiIpKQotICAgICAgICAg KHByZWZpeCAodmlzdWFsLXdyYXAtLXByZWZpeCBmY3ApKQorVGhpcyBpcyBsaWtlIGBmaWxs LWNvbnRleHQtcHJlZml4JywgYnV0IHN1cHBvcnRpbmcgdmFyaWFibGUtd2lkdGggZmFjZXMK K2FuZCB3aXRoIHRoZSBwcmVmaXggbGVuZ3RoIGFkanVzdGVkIGJ5IGB2aXN1YWwtd3JhcC1l eHRyYS1pbmRlbnQnLiIKKyAgKGxldCogKChmY3AgKHZpc3VhbC13cmFwLS1jb250ZW50LXBy ZWZpeCBiZWcpKQorICAgICAgICAgKHByZWZpeCAodmlzdWFsLXdyYXAtLWV4dHJhLWluZGVu dCBmY3ApKQogICAgICAgICAgKGZhY2UgKHZpc3VhbC13cmFwLS1wcmVmaXgtZmFjZSBmY3Ag YmVnIGVuZCkpKQogICAgIChpZiBmYWNlCiAgICAgICAgIChwcm9wZXJ0aXplIHByZWZpeCAn ZmFjZSBmYWNlKQpAQCAtMTYwLDcgKzE5NSw4IEBAIHZpc3VhbC13cmFwLXByZWZpeC1mdW5j dGlvbgogCSAocmVtb3ZlLXRleHQtcHJvcGVydGllcwogCSAgMCAobGVuZ3RoIHBmeCkgJyh3 cmFwLXByZWZpeCkgcGZ4KQogICAgICAgICAgKGxldCAoKGRwIChnZXQtdGV4dC1wcm9wZXJ0 eSAwICdkaXNwbGF5IHBmeCkpKQotICAgICAgICAgICAod2hlbiAoYW5kIGRwIChlcSBkcCAo Z2V0LXRleHQtcHJvcGVydHkgKDEtIGxicCkgJ2Rpc3BsYXkpKSkKKyAgICAgICAgICAgKHdo ZW4gKGFuZCBkcCAoPiBsYnAgKHBvaW50LW1pbikpCisgICAgICAgICAgICAgICAgICAgICAg KGVxIGRwIChnZXQtdGV4dC1wcm9wZXJ0eSAoMS0gbGJwKSAnZGlzcGxheSkpKQogICAgICAg ICAgICAgIDs7IFRoZXJlJ3MgYSBgZGlzcGxheScgcHJvcGVydHkgd2hpY2ggY292ZXJzIG5v dCBqdXN0IHRoZQogICAgICAgICAgICAgIDs7IHByZWZpeCBidXQgYWxzbyB0aGUgcHJldmlv dXMgbmV3bGluZS4gIFNvIGl0J3Mgbm90CiAgICAgICAgICAgICAgOzsganVzdCBtYWtpbmcg dGhlIHByZWZpeCBtb3JlIHByZXR0eSBhbmQgY291bGQgaW50ZXJmZXJlCkBAIC0xODcsOCAr MjIzLDEyIEBAIHZpc3VhbC13cmFwLXByZWZpeC1tb2RlCiAgICAgICAgIDs7IG9mIHRoZSBo b29rIChidWcjMTUxNTUpLgogICAgICAgICAoYWRkLWhvb2sgJ2ppdC1sb2NrLWZ1bmN0aW9u cwogICAgICAgICAgICAgICAgICAgIyd2aXN1YWwtd3JhcC1wcmVmaXgtZnVuY3Rpb24gJ2Fw cGVuZCB0KQotICAgICAgICAoaml0LWxvY2stcmVnaXN0ZXIgIyd2aXN1YWwtd3JhcC1wcmVm aXgtZnVuY3Rpb24pKQorICAgICAgICAoaml0LWxvY2stcmVnaXN0ZXIgIyd2aXN1YWwtd3Jh cC1wcmVmaXgtZnVuY3Rpb24pCisgICAgICAgIDs7IEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBk byBhYm91dCBgZ2xvYmFsLXRleHQtc2NhbGUtYWRqdXN0JyBvcgorICAgICAgICA7OyBvdGhl ciB0aGluZ3MgdGhhdCBjYW4gY2hhbmdlIHRoZSB0ZXh0IHNpemU/CisgICAgICAgIChhZGQt aG9vayAndGV4dC1zY2FsZS1tb2RlLWhvb2sgIydqaXQtbG9jay1yZWZvbnRpZnkgbmlsIHQp KQogICAgIChqaXQtbG9jay11bnJlZ2lzdGVyICMndmlzdWFsLXdyYXAtcHJlZml4LWZ1bmN0 aW9uKQorICAgIChyZW1vdmUtaG9vayAndGV4dC1zY2FsZS1tb2RlLWhvb2sgIydqaXQtbG9j ay1yZWZvbnRpZnkpCiAgICAgKHdpdGgtc2lsZW50LW1vZGlmaWNhdGlvbnMKICAgICAgIChz YXZlLXJlc3RyaWN0aW9uCiAgICAgICAgICh3aWRlbikKLS0gCjIuMjUuMQoK --------------fiT0Rab0roZKyB3qsvnzQXTk--