GNU bug report logs - #70122
29.3.50; transpose-regions can crash Emacs

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Braun Gábor <braungb88@HIDDEN>; dated Mon, 1 Apr 2024 10:04:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 12 Apr 2024 09:42:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 12 05:42:39 2024
Received: from localhost ([127.0.0.1]:57907 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rvDQc-0003zb-ND
	for submit <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:42:39 -0400
Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]:52702)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <braungb88@HIDDEN>) id 1rvDQa-0003z4-1s
 for 70122 <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:42:38 -0400
Received: by mail-ed1-x535.google.com with SMTP id
 4fb4d7f45d1cf-56e32b439c5so263608a12.1
 for <70122 <at> debbugs.gnu.org>; Fri, 12 Apr 2024 02:42:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1712914940; x=1713519740; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=F+qMoeKMaOpY+HLufrnHv3R8C3tdj5l1OztXSWXTaTE=;
 b=TskiJqD6aV/byoGDQQuqzTTsgbAeoIJDvJ0I0Y0DM9+eERx5VSJ3A/iJDeMuYpt0Rp
 dZqjmz/BSXnAUY22Dbl6F+6D3NDjQPSkox1aaU8lSDMKRxGpK+vjyDNv+gpsDBXu3SFQ
 h8T3WUpqZ/hNkhV8DLnBMocNwHUDgKD+6bmmY6ea8lVluNLo6xKQqvjEySpS28aeYfYy
 6iKTEvn6j0QKClT5ZY4d1cXk5erq2SAl0p3s0YsQ5t2BZWuh/oiHlza/Fty1T0X6zEMl
 Ee3O/uuyf6dR+x7PZFZths6z2tBcniIcJBhx4u1Wqms5/AZcARSz3nwaA+2zv8vAnNPY
 w4/w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1712914940; x=1713519740;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=F+qMoeKMaOpY+HLufrnHv3R8C3tdj5l1OztXSWXTaTE=;
 b=GA2E6Cjftvz7rWn4rPakHp8Dy6AHXdNlgCiByTBf/FqrfychZEXHX+S5ZeIV4oXCBH
 06HCf5psNrYNZY5MZ0VTPdPBjcT1jWM5SALs2flsmP4yIrS7rTB37r5/jLEez+hnNRnB
 7jUTHNF77C3stQbifNve0Kd5x/hkgPLLKqKbP9N5jt/IcDflXyUOg/rNTq7yzT8nSUhM
 izDKjJ5cn0qKmB+h8iAX1UthADdFO60MZBtmiwuZ+9ErLqfV4PDkgbypcMSRhiz44MpA
 m5O1JLdckf+hY+9eOy5dlSkmEWZrLIN6lffDe4XiFlHidqYsnWp4QHBjNPzilZWQKEeU
 xOwA==
X-Gm-Message-State: AOJu0YzDLG2w3xzyIZxND4FHGO8JKBfoGh4RtjlkF/wmLT14zVX8PUa4
 SkSlK6S3jvVGPzyoe+nl1yAceVV9anT8MGBslINqK8SaS14FSJwb80NUIw==
X-Google-Smtp-Source: AGHT+IGul3OIEQVf8rL0wqw4a9lMpC5i3RgvJg/mvs5oFFO8u28LjgFe7uBrnD3XdjMPsPbiZNlbJg==
X-Received: by 2002:a50:ab15:0:b0:56e:2bf4:fe02 with SMTP id
 s21-20020a50ab15000000b0056e2bf4fe02mr1695401edc.11.1712914939986; 
 Fri, 12 Apr 2024 02:42:19 -0700 (PDT)
Received: from gabor.localnet ([2001:9e8:1565:7c00:3935:88e7:95c6:1e91])
 by smtp.gmail.com with ESMTPSA id
 qh27-20020a170906ecbb00b00a519054d7ddsm1618611ejb.61.2024.04.12.02.42.18
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 12 Apr 2024 02:42:18 -0700 (PDT)
From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
Date: Fri, 12 Apr 2024 11:42:17 +0200
Message-ID: <3478329.QJadu78ljV@gabor>
In-Reply-To: <8400498.NyiUUSuA9g@gabor>
References: <2318820.ElGaqSPkdT@gabor> <86frw191ht.fsf@HIDDEN>
 <8400498.NyiUUSuA9g@gabor>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="nextPart1888251.CQOukoFCf9"
Content-Transfer-Encoding: 7Bit
X-Spam-Score: 0.3 (/)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.7 (/)

This is a multi-part message in MIME format.

--nextPart1888251.CQOukoFCf9
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

Hi,

Sorry, I've forgotten to attach the new version of the patch
in the previous email.

Best wishes,

	G=C3=A1bor

--nextPart1888251.CQOukoFCf9
Content-Disposition: attachment;
 filename="0001-transpose-regions-fix-wrong-lengths-and-case-of-equa.patch"
Content-Transfer-Encoding: quoted-printable
Content-Type: text/x-patch; charset="unicode-2-0-utf-8";
 name="0001-transpose-regions-fix-wrong-lengths-and-case-of-equa.patch"

=46rom fd7f6b9c63f3989863dc789e76fc1dd85f0ab630 Mon Sep 17 00:00:00 2001
=46rom: =3D?UTF-8?q?G=3DC3=3DA1bor=3D20Braun?=3D <gabor.braun@uni-duisburg-=
essen.de>
Date: Wed, 3 Apr 2024 20:03:40 +0200
Subject: [PATCH] transpose-regions: fix wrong lengths and case of equal
 length.

Case len1_byte =3D=3D len2_byte:
  Adjust everything assuming len1 =3D=3D len2:
  1. Adjust intervals even between the two regions,
     as positions may change.
  2. undo entries: make a simple replacement change as in the other
     branches instead of separately on the two regions.
     This is to work around
     set_text_properties_1 and
     graft_intervals_into_buffer
     recording text property changes in undo history
     (which is unwanted here).
  3. Adjust positions and position differences which rely
     on len1 =3D=3D len2.

Replace len_mid with end1 - start2 where number of characters
is expected instead of number of bytes.
=2D--
 src/editfns.c             | 35 ++++++++++-------
 test/src/editfns-tests.el | 79 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 14 deletions(-)

diff --git a/src/editfns.c b/src/editfns.c
index 85f7739df07..dd174e8dfcd 100644
=2D-- a/src/editfns.c
+++ b/src/editfns.c
@@ -4661,18 +4661,18 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str=
anspose_regions, 4, 5,
 	  USE_SAFE_ALLOCA;
=20
           modify_text (start1, end2);
=2D          record_change (start1, len1);
=2D          record_change (start2, len2);
+	  record_change (start1, (end2 - start1));
+
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
=2D          tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
+	  /* Intervals in-between need adjustment unless len1 =3D=3D len2.
+	   */
+	  tmp_interval_mid =3D copy_intervals (cur_intv, end1,
+					     start2 - end1);
+	  tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
=20
=2D	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr1, 0);
+	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0);
 	  if (tmp_interval3)
=2D	    set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3);
=2D
=2D	  tmp_interval3 =3D validate_interval_range (buf, &startr2, &endr2, 0);
=2D	  if (tmp_interval3)
=2D	    set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3);
+	    set_text_properties_1 (startr1, endr2, Qnil, buf, tmp_interval3);
=20
 	  temp =3D SAFE_ALLOCA (len1_byte);
 	  start1_addr =3D BYTE_POS_ADDR (start1_byte);
@@ -4682,8 +4682,11 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stra=
nspose_regions, 4, 5,
           memcpy (start2_addr, temp, len1_byte);
 	  SAFE_FREE ();
=20
=2D          graft_intervals_into_buffer (tmp_interval1, start2,
+	  graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
+	  graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
+				       start2 - end1,
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
@@ -4696,7 +4699,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           modify_text (start1, end2);
           record_change (start1, (end2 - start1));
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
=2D          tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid);
+	  tmp_interval_mid =3D copy_intervals (cur_intv, end1,
+					     start2 - end1);
           tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
=20
 	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4716,7 +4720,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
=2D                                       len_mid, current_buffer, 0);
+				       start2 - end1,
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
@@ -4729,7 +4734,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           modify_text (start1, end2);
=20
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
=2D          tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid);
+	  tmp_interval_mid =3D copy_intervals (cur_intv, end1,
+					     start2 - end1);
           tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
=20
 	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4749,7 +4755,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
=2D                                       len_mid, current_buffer, 0);
+				       start2 - end1,
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index b3b7da65ad3..7c3e3837c8c 100644
=2D-- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -132,6 +132,85 @@ propertize/error-even-number-of-args
   "Number of args for `propertize' must be odd."
   (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments))
=20
+;; Tests for `transpose-region'
+
+(ert-deftest transpose-regions-text-properties-2 ()
+  "Test `transpose-regions' thoroughly with text properties."
+  (let* ((string1pre (propertize "a\x2013" :test 1))
+         (middle (propertize "c\x00e9h" :test 0))
+         (string2 (propertize "\x25cf\x25cb" :test 2))
+         (bytes1 (string-bytes string1pre))
+         (bytes2 (string-bytes string2)))
+    ;; (cl-assert (< bytes1 bytes2))
+    (dotimes (i (+ 3 (- bytes2 bytes1)))
+      (let ((string1 (concat string1pre
+                             (propertize (make-string i ?X)
+                                         :test t))))
+        (with-temp-buffer
+          (insert string1 middle string2)
+          (buffer-enable-undo)
+          (transpose-regions
+           1 (1+ (length string1))
+           (- (point) (length string2)) (point))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string2 middle string1)))
+          (undo-boundary)
+          (let ((this-command #'undo)
+                (last-command #'ert)) ; anything but undo
+            (undo))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string1 middle string2))))))))
+
+(ert-deftest transpose-regions-text-properties ()
+  "Test `transpose-regions' with text properties.
+This test is known to crash Emacs 28.2, 29.2, 29.3."
+  (with-temp-buffer
+    (insert (propertize "a" 'face 'font-lock-variable-name-face))
+    (insert ":\n")
+    (insert (propertize "b" 'face 'font-lock-variable-name-face))
+    (insert ": \x2113\x2080\n")
+    (insert (propertize "v" 'face 'font-lock-variable-name-face))
+    (insert ": scaling\n")
+    ;; Move last line to the beginning
+    (transpose-regions 1 1 10 21)
+    (should (equal-including-properties
+             (buffer-string)
+             (concat
+              (propertize "v" 'face 'font-lock-variable-name-face)
+              ": scaling\n"
+              (propertize "a" 'face 'font-lock-variable-name-face)
+              ":\n"
+              (propertize "b" 'face 'font-lock-variable-name-face)
+              ": \x2113\x2080\n")))))
+
+(ert-deftest transpose-regions-equal-size ()
+  "Test `transpose-regions' on regions equal-size regions.
+Both the number of characters and bytes are equal of the transposed
+regions."
+  (let* ((string1 (propertize "a\x2013\ bc" :test 1))
+         (middle (propertize "R=C5=90T" :test 0))
+         (string2 (propertize "f\x2013nd" :test 2)))
+    (cl-assert (=3D (length string1) (length string2)))
+    (cl-assert (=3D (string-bytes string1) (string-bytes string2)))
+    (with-temp-buffer
+      (insert string1 middle string2)
+      (buffer-enable-undo)
+      (transpose-regions
+       1 (1+ (length string1))
+       (- (point) (length string2)) (point))
+      (should (equal-including-properties
+               (buffer-string)
+               (concat string2 middle string1)))
+      (undo-boundary)
+      (let ((this-command #'undo)
+            (last-command #'ert)) ; anything but undo
+        (undo))
+      (should (equal-including-properties
+               (buffer-string)
+               (concat string1 middle string2))))))
+
 ;; Tests for bug#5131.
 (defun transpose-test-reverse-word (start end)
   "Reverse characters in a word by transposing pairs of characters."
=2D-=20
2.39.2


--nextPart1888251.CQOukoFCf9--







Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 12 Apr 2024 09:39:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 12 05:39:56 2024
Received: from localhost ([127.0.0.1]:57902 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rvDNz-0003aw-1R
	for submit <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:39:56 -0400
Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]:60621)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <braungb88@HIDDEN>) id 1rvDNv-0003ZI-KV
 for 70122 <at> debbugs.gnu.org; Fri, 12 Apr 2024 05:39:53 -0400
Received: by mail-ed1-x52e.google.com with SMTP id
 4fb4d7f45d1cf-56c5d05128dso713064a12.0
 for <70122 <at> debbugs.gnu.org>; Fri, 12 Apr 2024 02:39:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1712914776; x=1713519576; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=bjbytr0Aqb2kd/e1leOlUz6+pbXTwMpenuFau/eQhjs=;
 b=fQS+XNzw1ZN5h8PmFVLt0aUfJ+qUKIc8O9mnBwNGunWkkWOQZkFaDKSzL2ERBKgvry
 clkFBjBIqn3nBQqfburYn7MidBvVjQj2v1P2zAD0xQecnO9PbbS/WXmeBm3IlOOxMZNw
 6/UA9mUPNehgTjj3Nzf7WxhvDl8DMwa0I1lalWFx/u0LFZNnk7rmNOPK8mqg4QaIdMOH
 wkfm7SN2KDcXRwCRhhDZwGdRpn8Zt47sqIC58acrGXFlowfLJeHYIe246EE24zaC/YTD
 Fp5vjUEVvllnvIQw5nqS4dCaQ1NRdzw3OetGqSynu9JNs+geFCREmqTiAEinFZcAlVod
 +M2g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1712914776; x=1713519576;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=bjbytr0Aqb2kd/e1leOlUz6+pbXTwMpenuFau/eQhjs=;
 b=updx879Y/6r6u6G7oC46r2Zebzi5LY2AmDumEPKuhrvfaCv3ksCKiUaU3DrwsS9BHA
 0aV7QdfK3lxlCkxWeq67S9B0gMU+7IV0oMwvKNlCoUsC7jdJ90ls8Eg+TXIPlbP91VqY
 6j8xSxpG9zex9dnhZfnauE0n+FMKDUgnx9YuwuIpcK+SSOyNBUeVp7L3O6g6gBIu9pWp
 j/z1/rSrnzmaHsOfsqg1eI6ZoYe5XPvdYWtRGkWagPMCiMu2qZ+lWjN1K8Xjz+bnWed1
 XyZv4PEoT4F1RY6ua6FKwIUGLbyOmGg2PLajllmaI4ZDnuGV+ljIGFel57+lUa40nKtu
 ftJg==
X-Gm-Message-State: AOJu0Yw1XQbX33kHqg7YDvRN3zyQb92EC/qOCFs964TeqO/GnUGHoxWy
 WaFJll7tV6EyCM6brfrcCCAazcR+57yk4sTgGcKZ0m19BJos2hQQ
X-Google-Smtp-Source: AGHT+IHIy98NNwvuTjNQ0piHallIqOJtLOcsDHE5+8Eqc+LTwtqBEnG7Ly3UAvNX5b9j0EHAR0Pxsw==
X-Received: by 2002:a50:d611:0:b0:56f:e609:743 with SMTP id
 x17-20020a50d611000000b0056fe6090743mr1435889edi.35.1712914775810; 
 Fri, 12 Apr 2024 02:39:35 -0700 (PDT)
Received: from gabor.localnet ([2001:9e8:1565:7c00:3935:88e7:95c6:1e91])
 by smtp.gmail.com with ESMTPSA id
 n16-20020a05640205d000b0056fea963056sm1317964edx.7.2024.04.12.02.39.35
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Fri, 12 Apr 2024 02:39:35 -0700 (PDT)
From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
Date: Fri, 12 Apr 2024 11:39:34 +0200
Message-ID: <8400498.NyiUUSuA9g@gabor>
In-Reply-To: <86frw191ht.fsf@HIDDEN>
References: <2318820.ElGaqSPkdT@gabor> <3216728.5fSG56mABF@gabor>
 <86frw191ht.fsf@HIDDEN>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"
X-Spam-Score: 0.3 (/)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.7 (/)

Hi Eli,

Sorry for answering late.

> Can we lift that restriction by augmenting the len1_byte =3D=3D=20
len2_byte
> branch so that the len1 =3D=3D len2 condition is not needed?

I could only come up with one that has minimal difference to
to the other branches.  I've attached it.

I've tried to preserve the undo entries as changes in the two=20
regions, but I couldn't make it (one of my tests failed),
so now it is a change in the large region as in the other=20
branches, and the tests pass.

The issue I was unable to solve is that the functions
set_text_properties_1 and graft_intervals_into_buffer
record text property changes in undo history, but this is unwanted=20
here as transpose-regions handles undo history itself.
These entries don't cause trouble because they happen to be=20
followed by a deletion of the text where properties change,
and this applies to all branches of transpose-regions.

I'd really like to use a version of these functions with: "change=20
text properties, but leave it to us to record it in undo history".

=20
> This says the test that crashed was the one of the two new ones=20
you
> added, and it is different from the one you presented at the=20
beginning
> of this bug report.

OK, sorry for that.

> > With the tests I intended to test all the branches in the code
> > where the regions don't touch each other, catching mistakes
> > where the wrong length is used.
>=20
> Can we also have a test where the byte lengths are equal, but=20
the
> character lengths aren't?

There is already one there:
the test which loops over examples and adds characters
is meant to cover various cases for the byte lengths,
including when they are equal.

As mentioned above,=20
I had this test failing in this case during patch development.

> > I hoped that byte length is not system dependent,
>=20
> It isn't, not if you consider the internal representation of
> characters in Emacs buffers and strings.

OK, maybe the issue was that I've sent a different test,
as you mentioned.

> Last, but not least: with the added tests your patch becomes=20
larger
> than what we can accept without your assigning the copyright to=20
the
> FSF.  Would you like to start the legal paperwork of copyright
> assignment at this time

Let's start the paperwork.

Best wishes,

	G=C3=A1bor Braun







Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 4 Apr 2024 04:49:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 04 00:49:08 2024
Received: from localhost ([127.0.0.1]:60138 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rsF2B-0001Nv-RI
	for submit <at> debbugs.gnu.org; Thu, 04 Apr 2024 00:49:08 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:51064)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rsF29-0001Mp-DG
 for 70122 <at> debbugs.gnu.org; Thu, 04 Apr 2024 00:49:06 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1rsF1w-0001IW-Ip; Thu, 04 Apr 2024 00:48:53 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=VWHZqM2AomXn8HU+AiRR9OP4JLjrf5G43pACF64wURY=; b=KoR/FUplntYBw6/519V8
 NP1egiI1XlzvoXjd/nROECjbRjoP99lMBhqimviRLw9s1YbGnXAZ1b4qkCs9pdoQXveuYjiuE4YgZ
 /xGOybkcZsTIKzP8C6jadRH9FnL0u8+bEguROBJV6FKUqxIjoT8WIdE+AqhQC07tCXQp0vCVtZmUR
 VLgTUyv8JTU8EOeMbqcgkJqfiQYFpw4/u0gJ4E5Ka5vhlRsAJwVnyYfkkKggMSGTTGYQA8yY3Ondl
 i3H0Piv8GLQzBwN/El8X9MpuKA1CYMwzqk+WkJXusO2SLIRQROtZZOQz72MVd147Jrj3HpI/2dlRp
 6WZEcjt55RS+EQ==;
Date: Thu, 04 Apr 2024 07:48:46 +0300
Message-Id: <86frw191ht.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Braun =?utf-8?Q?G=C3=A1bor?= <braungb88@HIDDEN>
In-Reply-To: <3216728.5fSG56mABF@gabor> (message from Braun =?utf-8?Q?G?=
 =?utf-8?Q?=C3=A1bor?= on Wed, 03 Apr 2024 20:52:47 +0200)
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN>
 <86ttkl9q9b.fsf@HIDDEN> <3216728.5fSG56mABF@gabor>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Braun Gábor <braungb88@HIDDEN>
> Cc: 70122 <at> debbugs.gnu.org
> Date: Wed, 03 Apr 2024 20:52:47 +0200
> 
> I've attached a new self-contained patch based on yours,
> thank you for coming up with it.
> 
> In my opinion, one of the problems is really as you said
> that len_mid (length in bytes)
> is uses where length of characters is expected.
> The patch contains an additional such case,
> and replaces (start1 + len1) in your patch with the equivalent
> but shorter end1.
> 
> The other problem is that the branch len1_byte == len2_byte
> assumes len1 == len2 in several places:
> undo records, positions after the transposition,
> and the least obvious one is that even intervals between the 
> region seem to need adjustment of positions.

Can we lift that restriction by augmenting the len1_byte == len2_byte
branch so that the len1 == len2 condition is not needed?

> (I don't know enough of intervals to understand it, but had failed 
> tests with text properties at wrong places.)

Intervals work with character positions, that's all.  Any call to
functions that examine or modify intervals should use character
positions, not byte positions, and accordingly length in terms of
characters, not bytes.  Is this sufficient for you to come up with
changes to remove the len1 == len2 restriction from that branch?

> Anyway, I've just added len1 == len2 as a condition to that branch
> with comments where I think the assumption is used.

If we cannot easily lift that restriction, that is the right fallback,
yes.

> I've also added a new test for this case.

Thanks.

> > The patch
> > below passes both your test and the already-existing tests in
> > test/src/editfns-tests.el.
> 
> For me after applying your patch, the tests crashed.
> The crash message was hidden in the end of the output:
> 
>    passed  21/24  transpose-nonascii-regions-test-1 (0.000067 sec)
>    passed  22/24  transpose-nonascii-regions-test-2 (0.000068 sec)
>    passed  23/24  transpose-regions-text-properties (0.000074 sec)
> Undo
> Undo
> make[1]: *** [Makefile:181: src/editfns-tests.log] segmentation 
> fault
> make[1]: Leaving directory "/home/gabor/src/build/emacs-29.3/test"
> make: *** [Makefile:247: src/editfns-tests] Error 2

This says the test that crashed was the one of the two new ones you
added, and it is different from the one you presented at the beginning
of this bug report.  So it is a small wonder I didn't see any crash in
my testing.

> With the tests I intended to test all the branches in the code
> where the regions don't touch each other, catching mistakes
> where the wrong length is used.

Can we also have a test where the byte lengths are equal, but the
character lengths aren't?

> I hoped that byte length is not system dependent,

It isn't, not if you consider the internal representation of
characters in Emacs buffers and strings.

> So what differences exist or byte length?

I don't think there are differences, but if you show an example where
you see such a difference, we can discuss the example and see what
happens there.

Last, but not least: with the added tests your patch becomes larger
than what we can accept without your assigning the copyright to the
FSF.  Would you like to start the legal paperwork of copyright
assignment at this time, so that we could accept all of your
contributions without limitations, including any future contributions?
If yes, I will send you the form to fill and instructions to email the
filled form, to start the process.

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 3 Apr 2024 18:53:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Apr 03 14:53:32 2024
Received: from localhost ([127.0.0.1]:59607 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rs5jn-00062V-Mp
	for submit <at> debbugs.gnu.org; Wed, 03 Apr 2024 14:53:32 -0400
Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:59434)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <braungb88@HIDDEN>) id 1rs5jk-00061g-J9
 for 70122 <at> debbugs.gnu.org; Wed, 03 Apr 2024 14:53:30 -0400
Received: by mail-lf1-x132.google.com with SMTP id
 2adb3069b0e04-513e134f73aso228627e87.2
 for <70122 <at> debbugs.gnu.org>; Wed, 03 Apr 2024 11:53:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1712170398; x=1712775198; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:from:to:cc:subject:date
 :message-id:reply-to;
 bh=KjZxb+0xElzjjLkd5UZMZvv8cqW/f/uhi8hcNqudcnA=;
 b=R2CS3dXFrMQ/9+pjmR7Z0WfvxmLN3EtR6MiQFwauTDsLmhnALz9rJLQ1GVFL6H/TJf
 GP5+FECBC6QhO7sO/b4huaHdTAldTcdpojLU5nxnFYiNjrBMlDoA3aLKgmjsj1HCyMgc
 f/xoVmkj8t/K/v8BEYvQY9fENBTGhdFHpqIHcmzvHtjPMZU2C7gh3cLN1QMjJcpjpcHU
 8mwOZtDNMl4P9CtXyyNNBS5OVeXg+xisPhGnhYGLgr3WsBgkME1CJ1L0EZQnjJ6RCpc6
 bxBG4w+BajehbfWXJniK/Yiy1biTUzFBaxlvYmXjKUXDzTdhFgI3uzsM4oRuSuRtPEdu
 SBYA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1712170398; x=1712775198;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=KjZxb+0xElzjjLkd5UZMZvv8cqW/f/uhi8hcNqudcnA=;
 b=TLIsw0EJienlfSja8+2HG0RQIkpiWqz6e2ezqEdi2tNOBuhd3h12Ieut6tnHhfFuwK
 iWIX3ndMINymhSkVYRKT5X3fGScsvTlRT2AKyGuIbt+nVuMOp/sJUu9ZH6AJC4V9P9/u
 Ih2eyASqW3O5zH9mj6FaA1H7QengNxxMfrTFmRdaolQKXWSxcD5CoWUHum1loUVNvjkB
 Af2dz6zlXLFquJj4NTg3eD09yqI7QbdkQ9I9ppoXE0TvHT8Equb5mQiok7OoZghEtpYN
 QsWYmXDzLIXwM/7LY13DVU2glGaX6ajYVn6pbZ4QjXcHJLcPMbgzD60XznEY12DeZGyU
 bbcA==
X-Gm-Message-State: AOJu0YwbcL4ysJlFpVhG1OavxyVPtT6i5AzuCBqKnXhrX0uJvL86k2cZ
 0V9L+ObZqoUQkis4a5SbVKAwV67ipwUgG08v+L3Rsi4726HAnsyt
X-Google-Smtp-Source: AGHT+IH3866bkJ6Vl2SUGBXGCbUC3iCYVuRqQSMafI1hC1bcl7jh2C0oJPxpWx7yKNACSWVwyjeiLw==
X-Received: by 2002:ac2:5b5d:0:b0:513:c2e4:9daf with SMTP id
 i29-20020ac25b5d000000b00513c2e49dafmr284288lfp.52.1712170397706; 
 Wed, 03 Apr 2024 11:53:17 -0700 (PDT)
Received: from gabor.localnet ([2001:9e8:1548:b200:c5ff:2148:8b70:b48f])
 by smtp.gmail.com with ESMTPSA id
 u17-20020a17090626d100b00a4e1aa345f6sm8010610ejc.115.2024.04.03.11.53.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 03 Apr 2024 11:53:17 -0700 (PDT)
From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
Date: Wed, 03 Apr 2024 20:52:47 +0200
Message-ID: <3216728.5fSG56mABF@gabor>
In-Reply-To: <86ttkl9q9b.fsf@HIDDEN>
References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN>
 <86ttkl9q9b.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="nextPart5928865.MhkbZ0Pkbq"
Content-Transfer-Encoding: 7Bit
X-Spam-Score: 0.3 (/)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.7 (/)

This is a multi-part message in MIME format.

--nextPart5928865.MhkbZ0Pkbq
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

Hi Eli,

> Thanks, but could you please show the minimal change required to=20
fix
> just the particular problem with this scenario

I've attached a new self-contained patch based on yours,
thank you for coming up with it.

In my opinion, one of the problems is really as you said
that len_mid (length in bytes)
is uses where length of characters is expected.
The patch contains an additional such case,
and replaces (start1 + len1) in your patch with the equivalent
but shorter end1.

The other problem is that the branch len1_byte =3D=3D len2_byte
assumes len1 =3D=3D len2 in several places:
undo records, positions after the transposition,
and the least obvious one is that even intervals between the=20
region seem to need adjustment of positions.
(I don't know enough of intervals to understand it, but had failed=20
tests with text properties at wrong places.)

Anyway, I've just added len1 =3D=3D len2 as a condition to that branch
with comments where I think the assumption is used.
I've also added a new test for this case.

> The patch
> below passes both your test and the already-existing tests in
> test/src/editfns-tests.el.

=46or me after applying your patch, the tests crashed.
The crash message was hidden in the end of the output:

   passed  21/24  transpose-nonascii-regions-test-1 (0.000067 sec)
   passed  22/24  transpose-nonascii-regions-test-2 (0.000068 sec)
   passed  23/24  transpose-regions-text-properties (0.000074 sec)
Undo
Undo
make[1]: *** [Makefile:181: src/editfns-tests.log] segmentation=20
fault
make[1]: Leaving directory "/home/gabor/src/build/emacs-29.3/test"
make: *** [Makefile:247: src/editfns-tests] Error 2


With the tests I intended to test all the branches in the code
where the regions don't touch each other, catching mistakes
where the wrong length is used.
I hoped that byte length is not system dependent,
it seems I have been mistaken, and the tests still need
improvement to be thorough on all systems.

So what differences exist or byte length?

Best wishes,

	G=C3=A1bor

--nextPart5928865.MhkbZ0Pkbq
Content-Disposition: attachment;
 filename="0001-transpose-regions-fix-wrong-lengths-add-missing-cond.patch"
Content-Transfer-Encoding: quoted-printable
Content-Type: text/x-patch; charset="utf-8";
 name="0001-transpose-regions-fix-wrong-lengths-add-missing-cond.patch"

=46rom 5a0cf2542388104cde444b2130d994ee36ce5392 Mon Sep 17 00:00:00 2001
=46rom: =3D?UTF-8?q?G=3DC3=3DA1bor=3D20Braun?=3D <gabor.braun@uni-duisburg-=
essen.de>
Date: Wed, 3 Apr 2024 20:03:40 +0200
Subject: [PATCH] transpose-regions: fix wrong lengths; add missing conditio=
n.

Case len1_byte =3D=3D len2_byte:
  The code assumes len1 =3D=3D len2 at several places, see comments.
  As a fix, add that condition to the case.
  (This case is not strictly necessary, as the other
  cases cover it, so restricting the case should be no problem.)

Replace len_mid with end1 - start2 where number of characters
is expected instead of number of bytes.
=2D--
 src/editfns.c             | 19 +++++++---
 test/src/editfns-tests.el | 79 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 5 deletions(-)

diff --git a/src/editfns.c b/src/editfns.c
index 85f7739df07..65570a84472 100644
=2D-- a/src/editfns.c
+++ b/src/editfns.c
@@ -4655,12 +4655,13 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str=
anspose_regions, 4, 5,
     {
       len_mid =3D start2_byte - (start1_byte + len1_byte);
=20
=2D      if (len1_byte =3D=3D len2_byte)
+      if (len1_byte =3D=3D len2_byte && len1 =3D=3D len2)
 	/* Regions are same size, though, how nice.  */
         {
 	  USE_SAFE_ALLOCA;
=20
           modify_text (start1, end2);
+	  /* The undo records are only correct for len1 =3D=3D len2. */
           record_change (start1, len1);
           record_change (start2, len2);
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
@@ -4682,10 +4683,14 @@ DEFUN ("transpose-regions", Ftranspose_regions, Str=
anspose_regions, 4, 5,
           memcpy (start2_addr, temp, len1_byte);
 	  SAFE_FREE ();
=20
+	  /* In the following line start2 is only correct for
+	     len1 =3D=3D len2.  Otherwise it should be end2 - len1. */
           graft_intervals_into_buffer (tmp_interval1, start2,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
+	  /* The intervals between end1 and start2 need no adjustment
+	     only because len1 =3D=3D len2. */
         }
=20
       else if (len1_byte < len2_byte)	/* Second region larger than first */
@@ -4696,7 +4701,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           modify_text (start1, end2);
           record_change (start1, (end2 - start1));
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
=2D          tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid);
+	  tmp_interval_mid =3D copy_intervals (cur_intv, end1,
+					     start2 - end1);
           tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
=20
 	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4716,7 +4722,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
=2D                                       len_mid, current_buffer, 0);
+				       start2 - end1,
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
@@ -4729,7 +4736,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           modify_text (start1, end2);
=20
           tmp_interval1 =3D copy_intervals (cur_intv, start1, len1);
=2D          tmp_interval_mid =3D copy_intervals (cur_intv, end1, len_mid);
+	  tmp_interval_mid =3D copy_intervals (cur_intv, end1,
+					     start2 - end1);
           tmp_interval2 =3D copy_intervals (cur_intv, start2, len2);
=20
 	  tmp_interval3 =3D validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4749,7 +4757,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stran=
spose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
=2D                                       len_mid, current_buffer, 0);
+				       start2 - end1,
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index b3b7da65ad3..7c3e3837c8c 100644
=2D-- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -132,6 +132,85 @@ propertize/error-even-number-of-args
   "Number of args for `propertize' must be odd."
   (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments))
=20
+;; Tests for `transpose-region'
+
+(ert-deftest transpose-regions-text-properties-2 ()
+  "Test `transpose-regions' thoroughly with text properties."
+  (let* ((string1pre (propertize "a\x2013" :test 1))
+         (middle (propertize "c\x00e9h" :test 0))
+         (string2 (propertize "\x25cf\x25cb" :test 2))
+         (bytes1 (string-bytes string1pre))
+         (bytes2 (string-bytes string2)))
+    ;; (cl-assert (< bytes1 bytes2))
+    (dotimes (i (+ 3 (- bytes2 bytes1)))
+      (let ((string1 (concat string1pre
+                             (propertize (make-string i ?X)
+                                         :test t))))
+        (with-temp-buffer
+          (insert string1 middle string2)
+          (buffer-enable-undo)
+          (transpose-regions
+           1 (1+ (length string1))
+           (- (point) (length string2)) (point))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string2 middle string1)))
+          (undo-boundary)
+          (let ((this-command #'undo)
+                (last-command #'ert)) ; anything but undo
+            (undo))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string1 middle string2))))))))
+
+(ert-deftest transpose-regions-text-properties ()
+  "Test `transpose-regions' with text properties.
+This test is known to crash Emacs 28.2, 29.2, 29.3."
+  (with-temp-buffer
+    (insert (propertize "a" 'face 'font-lock-variable-name-face))
+    (insert ":\n")
+    (insert (propertize "b" 'face 'font-lock-variable-name-face))
+    (insert ": \x2113\x2080\n")
+    (insert (propertize "v" 'face 'font-lock-variable-name-face))
+    (insert ": scaling\n")
+    ;; Move last line to the beginning
+    (transpose-regions 1 1 10 21)
+    (should (equal-including-properties
+             (buffer-string)
+             (concat
+              (propertize "v" 'face 'font-lock-variable-name-face)
+              ": scaling\n"
+              (propertize "a" 'face 'font-lock-variable-name-face)
+              ":\n"
+              (propertize "b" 'face 'font-lock-variable-name-face)
+              ": \x2113\x2080\n")))))
+
+(ert-deftest transpose-regions-equal-size ()
+  "Test `transpose-regions' on regions equal-size regions.
+Both the number of characters and bytes are equal of the transposed
+regions."
+  (let* ((string1 (propertize "a\x2013\ bc" :test 1))
+         (middle (propertize "R=C5=90T" :test 0))
+         (string2 (propertize "f\x2013nd" :test 2)))
+    (cl-assert (=3D (length string1) (length string2)))
+    (cl-assert (=3D (string-bytes string1) (string-bytes string2)))
+    (with-temp-buffer
+      (insert string1 middle string2)
+      (buffer-enable-undo)
+      (transpose-regions
+       1 (1+ (length string1))
+       (- (point) (length string2)) (point))
+      (should (equal-including-properties
+               (buffer-string)
+               (concat string2 middle string1)))
+      (undo-boundary)
+      (let ((this-command #'undo)
+            (last-command #'ert)) ; anything but undo
+        (undo))
+      (should (equal-including-properties
+               (buffer-string)
+               (concat string1 middle string2))))))
+
 ;; Tests for bug#5131.
 (defun transpose-test-reverse-word (start end)
   "Reverse characters in a word by transposing pairs of characters."
=2D-=20
2.39.2


--nextPart5928865.MhkbZ0Pkbq--







Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 1 Apr 2024 13:17:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 09:17:22 2024
Received: from localhost ([127.0.0.1]:49826 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rrHXN-0007o2-Nd
	for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 09:17:22 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:36442)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rrHXI-0007nh-Tv
 for 70122 <at> debbugs.gnu.org; Mon, 01 Apr 2024 09:17:19 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1rrHXA-0001AH-E5; Mon, 01 Apr 2024 09:17:08 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=+qJtfMICxq6uUNqhE6Ah06zhdO82+ugU/hC8xMPjRG0=; b=PMGg802MWpcZ
 u6ekqm6UoKzupKaYtKEG8KvpqvHcvF6HIeOQSq2rfMeKf/Dd6AKeN71YIc0ILqc+C5h1tmTQ5sC5/
 aAZsyvTY4/3U7bd1i1GJyI5xvHvca/Lu4twl08rbPnwihVues3GmSrhuqrfP+v6paljCm5ugR0eee
 fUD3Uqoi0e8ieSw3LZ8ET6eAMNVc5NUSHoDsCh2GKuNll3VFZ9Ivsz/xZpPT5Gs4Dnh2xZ1lrzwVe
 YzSkuqMkao6KmmRv8deHT7BTrZwhvNRrAfA6MvtGkr8I8IDSBsw8tERKATOHLV9VpneJ4rnSfQA8q
 4PI6bSxixeGs8RE1Lsh9Bg==;
Date: Mon, 01 Apr 2024 16:17:04 +0300
Message-Id: <86ttkl9q9b.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: braungb88@HIDDEN
In-Reply-To: <86wmph9u1i.fsf@HIDDEN> (message from Eli Zaretskii on Mon, 01
 Apr 2024 14:55:21 +0300)
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
References: <2318820.ElGaqSPkdT@gabor> <86wmph9u1i.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: 70122 <at> debbugs.gnu.org
> Date: Mon, 01 Apr 2024 14:55:21 +0300
> From: Eli Zaretskii <eliz@HIDDEN>
> 
> > Please find attached a patch to transpose-regions
> > with added tests.  (The patch intends to fix typos:
> > makes sure lengths in bytes and characters are not confused.
> 
> Thanks, but could you please show the minimal change required to fix
> just the particular problem with this scenario (and perhaps explain
> the reason for the crash in words), without any cleanup and
> typo/confusion fixes?  That would make it easier to review the patch,
> whereas with what you sent, it is hard to understand what exactly is
> being fixed.

I came up with the patch below.  The problem is that len_mid, which is
a difference between byte positions, was sometimes used in calls that
expect differences between character positions instead.  The patch
below passes both your test and the already-existing tests in
test/src/editfns-tests.el.  WDYT?

> > One case (likely for optimization only) has been removed,
> > seemed too much trouble to get it right.)
> 
> If you explain the reason for the crash, perhaps we could leave the
> optimization alone.

I found that len_mid was not used in that branch, so we can leave it
alone.

Here's the patch:

diff --git a/src/editfns.c b/src/editfns.c
index 4ccf765..124fd47 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -4677,7 +4677,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
           modify_text (start1, end2);
           record_change (start1, (end2 - start1));
           tmp_interval1 = copy_intervals (cur_intv, start1, len1);
-          tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
+          tmp_interval_mid = copy_intervals (cur_intv, end1,
+					     start2 - (start1 + len1));
           tmp_interval2 = copy_intervals (cur_intv, start2, len2);
 
 	  tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4697,7 +4698,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
-                                       len_mid, current_buffer, 0);
+                                       start2 - (start1 + len1),
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }
@@ -4710,7 +4712,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
           modify_text (start1, end2);
 
           tmp_interval1 = copy_intervals (cur_intv, start1, len1);
-          tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
+          tmp_interval_mid = copy_intervals (cur_intv, end1,
+					     start2 - (start1 + len1));
           tmp_interval2 = copy_intervals (cur_intv, start2, len2);
 
 	  tmp_interval3 = validate_interval_range (buf, &startr1, &endr2, 0);
@@ -4730,7 +4733,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
                                        len1, current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
-                                       len_mid, current_buffer, 0);
+                                       start2 - (start1 + len1),
+				       current_buffer, 0);
           graft_intervals_into_buffer (tmp_interval2, start1,
                                        len2, current_buffer, 0);
         }




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at 70122 <at> debbugs.gnu.org:


Received: (at 70122) by debbugs.gnu.org; 1 Apr 2024 11:55:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 07:55:39 2024
Received: from localhost ([127.0.0.1]:49758 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rrGGI-0002Zc-Qh
	for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 07:55:39 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:60646)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rrGGG-0002ZP-2n
 for 70122 <at> debbugs.gnu.org; Mon, 01 Apr 2024 07:55:37 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
 id 1rrGG7-0000tD-Fi; Mon, 01 Apr 2024 07:55:27 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
 Date; bh=t1CcODlV/5iT0fU8eZBy9p2Q04mWBFFim7qWuoafubE=; b=SCj8Rduv1MUR8RRW8osw
 ScBclKEaHCntkA4GvVBTGtkagBqQbuul6u+LcnVj6sgGVSgWIT9Y7N8g554zD9JqMFpzI8PjfRbc2
 uJ2y5zn4Zloy6sfSHdQTjIGtRQUGQmQre6SIebLiqP7ZBcLxvXGNHEA+Pe4A3rgVWw50aZgsMD8oe
 ixzziOX9XZPzOxrIvJA3ljGMqamcup8VahGzPrnj2GkM75Ny1Dpl61iZKy/kZEF1d/4/I24Lb4SAS
 nCeDHNHrHPYRCYzPQJqGakioIH31Qi+k/78A04rI7OFMxDt4FK8+aU8u6WLRcMO2+diH0+e/iE8RI
 VoFqN3ByUbJatg==;
Date: Mon, 01 Apr 2024 14:55:21 +0300
Message-Id: <86wmph9u1i.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Braun =?utf-8?Q?G=C3=A1bor?= <braungb88@HIDDEN>
In-Reply-To: <2318820.ElGaqSPkdT@gabor> (message from Braun =?utf-8?Q?G?=
 =?utf-8?Q?=C3=A1bor?= on Mon, 01 Apr 2024 12:02:35 +0200)
Subject: Re: bug#70122: 29.3.50; transpose-regions can crash Emacs
References: <2318820.ElGaqSPkdT@gabor>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70122
Cc: 70122 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Braun Gábor <braungb88@HIDDEN>
> Date: Mon, 01 Apr 2024 12:02:35 +0200
> 
> I have the following file:
> 
> File ~/.emacs.d/trans-regions-bug.el:
> 
> (with-temp-buffer
>   (insert (propertize "a" 'face 'font-lock-variable-name-face))
>   (insert ":\n")
>   (insert (propertize "b" 'face 'font-lock-variable-name-face))
>   (insert ": \x2113\x2080\n")
>   (insert (propertize "v" 'face 'font-lock-variable-name-face))
>   (insert ": scaling\n")
>   ;; Move last line to the beginning
>   (transpose-regions 1 1 10 21))
> 
> End of file ~/.emacs.d/trans-regions-bug.el:
> 
> 
> After building Emacs as described in the INSTALL file, the following
> command crashes Emacs:
> 
>   src/emacs -Q --batch -l ~/.emacs.d/trans-regions-bug.el
> 
> The following appears:
> 
> Fatal error 11: Segmentation fault
> 
> 
> See below for debugging information.
> 
> Please find attached a patch to transpose-regions
> with added tests.  (The patch intends to fix typos:
> makes sure lengths in bytes and characters are not confused.

Thanks, but could you please show the minimal change required to fix
just the particular problem with this scenario (and perhaps explain
the reason for the crash in words), without any cleanup and
typo/confusion fixes?  That would make it easier to review the patch,
whereas with what you sent, it is hard to understand what exactly is
being fixed.

> One case (likely for optimization only) has been removed,
> seemed too much trouble to get it right.)

If you explain the reason for the crash, perhaps we could leave the
optimization alone.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 1 Apr 2024 10:03:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 01 06:03:31 2024
Received: from localhost ([127.0.0.1]:49597 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rrEVl-0004b2-OW
	for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 06:03:31 -0400
Received: from lists.gnu.org ([2001:470:142::17]:45518)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <braungb88@HIDDEN>) id 1rrEVh-0004al-So
 for submit <at> debbugs.gnu.org; Mon, 01 Apr 2024 06:03:27 -0400
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 <braungb88@HIDDEN>)
 id 1rrEVX-000771-Jb
 for bug-gnu-emacs@HIDDEN; Mon, 01 Apr 2024 06:03:16 -0400
Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <braungb88@HIDDEN>)
 id 1rrEVS-0002o3-9w
 for bug-gnu-emacs@HIDDEN; Mon, 01 Apr 2024 06:03:14 -0400
Received: by mail-ej1-x62f.google.com with SMTP id
 a640c23a62f3a-a4715d4c2cbso503324366b.1
 for <bug-gnu-emacs@HIDDEN>; Mon, 01 Apr 2024 03:03:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1711965788; x=1712570588; darn=gnu.org;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=LVQ8zYiM5gyw4Zi0IATmg3sD1TLWzRA204wrKMKxExE=;
 b=UiUWkk8eMjP1qRIxITc/dwCfIaP0Ihs7MkxoMv53A++YML/5tovw5SyFexd0MrbYvF
 BImkEoumhcFUgYyXwGJC6jDOZFN+lXexvYLBnNo5sb0sWW08FJfgK4EsiFnbueTMrDBF
 3s5pV7F52HgCF/n+h3SRTK8lfu477BlRpJ0WmRbaDHI518WEo0oG1IVPZFOYuOu5zjEJ
 oDeg1Awr6LNQHoMTaMEdg7UdOus3GxYyonEwVuRSlzsu+J/PqGJZXo/tMzzdCjboMrxx
 akDGReVmBihdA3DHE6hsNHXk4EQ6fQ4S3xF8mIZ5Nt5Uo+8sOPWAeeopRexDiUuGO2/B
 Xrcw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1711965788; x=1712570588;
 h=content-transfer-encoding:mime-version:message-id:date:subject:to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=LVQ8zYiM5gyw4Zi0IATmg3sD1TLWzRA204wrKMKxExE=;
 b=BlSSVCHccWp1jLBD7z28a+iud+1C/g6ISHoDJ4xhfuBa60/0nKseV1Gr/0z8DBFxAf
 Ir0zalBA9KpoOSbodNhtiniWf1sfcT3scnfeU4R6mgW5CxX8yVaz9h9SU5iB26EGf3yK
 K06SqLAsz7WAJZ2H3hvCA+psIpGs6gGjOOh4yNLiAToXTOJMcSdiRRW+gA4osE6Nnzj3
 3nGRcEtryjfi6FhPAhJx+TdOEG7m67S736nqmsbZA58t3oiVKBa2+yio7RFcP8YR7AIN
 oXEatLCUkO3eFyg1TFG6pZWwuSiUxOZ/kBRLt7SaK5TTWxETO8c4jDh1fkazp1kSSrZ/
 cFjw==
X-Gm-Message-State: AOJu0YzX9KmMoLypNp5u5xdaWiQO/ao+BBOq8UZPML3piLRVTwR92I9F
 TIbFvj9WOORt+Wue8hIJu9N2n7juhGVHIe+W5yieoK+pmir+OU05Z3IpTpfA
X-Google-Smtp-Source: AGHT+IG4/hqpJ5Y7diVNpff3AjGxSd2YGXmzHk9MXkdgkhp8nHZxeetFyYyUYg0RA+K5pelxfUpp7w==
X-Received: by 2002:a17:907:8686:b0:a4e:5b16:e2dc with SMTP id
 qa6-20020a170907868600b00a4e5b16e2dcmr2918800ejc.4.1711965788250; 
 Mon, 01 Apr 2024 03:03:08 -0700 (PDT)
Received: from gabor.localnet ([2001:9e8:1577:be00:e9eb:aba6:d290:d015])
 by smtp.gmail.com with ESMTPSA id
 bn25-20020a170906c0d900b00a4e23400982sm4994570ejb.95.2024.04.01.03.03.06
 for <bug-gnu-emacs@HIDDEN>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 01 Apr 2024 03:03:07 -0700 (PDT)
From: Braun =?ISO-8859-1?Q?G=E1bor?= <braungb88@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 29.3.50; transpose-regions can crash Emacs
Date: Mon, 01 Apr 2024 12:02:35 +0200
Message-ID: <2318820.ElGaqSPkdT@gabor>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="nextPart4879618.GXAFRqVoOG"
Content-Transfer-Encoding: 7Bit
Received-SPF: pass client-ip=2a00:1450:4864:20::62f;
 envelope-from=braungb88@HIDDEN; helo=mail-ej1-x62f.google.com
X-Spam_score_int: -17
X-Spam_score: -1.8
X-Spam_bar: -
X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.2 (+)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  Hi,
 I have the following file: File ~/.emacs.d/trans-regions-bug.el:
 Content analysis details:   (1.2 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (braungb88[at]gmail.com)
 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends
 in digit (braungb88[at]gmail.com)
 1.0 SPF_SOFTFAIL           SPF: sender does not match SPF record (softfail)
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.2 (/)

This is a multi-part message in MIME format.

--nextPart4879618.GXAFRqVoOG
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"

SGksCgpJIGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlOgoKRmlsZSB+Ly5lbWFjcy5kL3RyYW5zLXJl
Z2lvbnMtYnVnLmVsOgoKKHdpdGgtdGVtcC1idWZmZXIKICAoaW5zZXJ0IChwcm9wZXJ0aXplICJh
IiAnZmFjZSAnZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkpCiAgKGluc2VydCAiOlxuIikK
ICAoaW5zZXJ0IChwcm9wZXJ0aXplICJiIiAnZmFjZSAnZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUt
ZmFjZSkpCiAgKGluc2VydCAiOiBceDIxMTNceDIwODBcbiIpCiAgKGluc2VydCAocHJvcGVydGl6
ZSAidiIgJ2ZhY2UgJ2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpKQogIChpbnNlcnQgIjog
c2NhbGluZ1xuIikKICA7OyBNb3ZlIGxhc3QgbGluZSB0byB0aGUgYmVnaW5uaW5nCiAgKHRyYW5z
cG9zZS1yZWdpb25zIDEgMSAxMCAyMSkpCgpFbmQgb2YgZmlsZSB+Ly5lbWFjcy5kL3RyYW5zLXJl
Z2lvbnMtYnVnLmVsOgoKCkFmdGVyIGJ1aWxkaW5nIEVtYWNzIGFzIGRlc2NyaWJlZCBpbiB0aGUg
SU5TVEFMTCBmaWxlLCB0aGUgZm9sbG93aW5nCmNvbW1hbmQgY3Jhc2hlcyBFbWFjczoKCiAgc3Jj
L2VtYWNzIC1RIC0tYmF0Y2ggLWwgfi8uZW1hY3MuZC90cmFucy1yZWdpb25zLWJ1Zy5lbAoKVGhl
IGZvbGxvd2luZyBhcHBlYXJzOgoKRmF0YWwgZXJyb3IgMTE6IFNlZ21lbnRhdGlvbiBmYXVsdAoK
ClNlZSBiZWxvdyBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uLgoKUGxlYXNlIGZpbmQgYXR0YWNo
ZWQgYSBwYXRjaCB0byB0cmFuc3Bvc2UtcmVnaW9ucwp3aXRoIGFkZGVkIHRlc3RzLiAgKFRoZSBw
YXRjaCBpbnRlbmRzIHRvIGZpeCB0eXBvczoKbWFrZXMgc3VyZSBsZW5ndGhzIGluIGJ5dGVzIGFu
ZCBjaGFyYWN0ZXJzIGFyZSBub3QgY29uZnVzZWQuCk9uZSBjYXNlIChsaWtlbHkgZm9yIG9wdGlt
aXphdGlvbiBvbmx5KSBoYXMgYmVlbiByZW1vdmVkLApzZWVtZWQgdG9vIG11Y2ggdHJvdWJsZSB0
byBnZXQgaXQgcmlnaHQuKQoKCmdkYiBzZXNzaW9uIHdpdGggbm9uLXNlc3Npb24gc3BlY2lmaWMg
bWF0ZXJpYWwgKGhlbHAsIGNvcHlyaWdodC4uLikgcmVtb3ZlZDoKCkN1cnJlbnQgZGlyZWN0b3J5
IGlzIC9ob21lL2dhYm9yL3NyYy9idWlsZC9lbWFjcy0yOS4zL3NyYy8KR05VIGdkYiAoRGViaWFu
IDEzLjEtMykgMTMuMQpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvaG9tZS9nYWJvci9zcmMvYnVpbGQv
ZW1hY3MtMjkuMy9zcmMvZW1hY3MuLi4KU0lHSU5UIGlzIHVzZWQgYnkgdGhlIGRlYnVnZ2VyLgpB
cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIGl0PyAoeSBvciBuKSBbYW5zd2VyZWQgWTsg
aW5wdXQgbm90IGZyb20gdGVybWluYWxdCkRJU1BMQVkgPSA6MApURVJNID0gZHVtYgpCcmVha3Bv
aW50IDIgYXQgMHgxM2E0ODA6IGZpbGUgLi4vLi4vLi4vZW1hY3Mvc3JjL3h0ZXJtLmMsIGxpbmUg
MjYxMzYuCi5nZGJpbml0OjE6IEVycm9yIGluIHNvdXJjZWQgY29tbWFuZCBmaWxlOgovaG9tZS9n
YWJvci9zcmMvYnVpbGQvZW1hY3MtMjkuMy8uLi8uLi9lbWFjcy9zcmMvLmdkYmluaXQ6MTM3NTog
RXJyb3IgaW4gc291cmNlZCBjb21tYW5kIGZpbGU6ClNjcmlwdGluZyBpbiB0aGUgIlB5dGhvbiIg
bGFuZ3VhZ2UgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNvcHkgb2YgR0RCLgpEb3dubG9hZGlu
ZyBzb3VyY2UgZmlsZSAvaG9tZS9nYWJvci9zcmMvYnVpbGQvZW1hY3MtMjkuMy9zcmMvPGJ1aWx0
LWluPi4uLgooZ2RiKSBydW4KU3RhcnRpbmcgcHJvZ3JhbTogL2hvbWUvZ2Fib3Ivc3JjL2J1aWxk
L2VtYWNzLTI5LjMvc3JjL2VtYWNzIC1RIC0tYmF0Y2ggLWwgXH4vLmVtYWNzLmQvdHJhbnMtcmVn
aW9ucy1idWcuZWwKRG93bmxvYWRpbmcgc2VwYXJhdGUgZGVidWcgaW5mbyBmb3IgL2xpYjY0L2xk
LWxpbnV4LXg4Ni02NC5zby4yLi4uCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8gZm9y
IHN5c3RlbS1zdXBwbGllZCBEU08gYXQgMHg3ZmZmZjdmYzkwMDAuLi4KRG93bmxvYWRpbmcgc2Vw
YXJhdGUgZGVidWcgaW5mbyBmb3IgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmRidXMtMS5zby4z
Li4uCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8gZm9yIC9saWIveDg2XzY0LWxpbnV4
LWdudS9saWJjLnNvLjYuLi4KW1RocmVhZCBkZWJ1Z2dpbmcgdXNpbmcgbGlidGhyZWFkX2RiIGVu
YWJsZWRdClVzaW5nIGhvc3QgbGlidGhyZWFkX2RiIGxpYnJhcnkgIi9saWIveDg2XzY0LWxpbnV4
LWdudS9saWJ0aHJlYWRfZGIuc28uMSIuCkRvd25sb2FkaW5nIHNlcGFyYXRlIGRlYnVnIGluZm8g
Zm9yIC91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvbGliZnJpYmlkaS5zby4wLi4uCgpQcm9ncmFt
IHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCjB4MDAwMDU1NTU1
NTdjNDdiMyBpbiBncmFmdF9pbnRlcnZhbHNfaW50b19idWZmZXIgKHNvdXJjZT1zb3VyY2VAZW50
cnk9MHg1NTU1NTVlMmI1NjgsIHBvc2l0aW9uPXBvc2l0aW9uQGVudHJ5PTEyLCBsZW5ndGg9bGVu
Z3RoQGVudHJ5PTEzLCBidWZmZXI9MHg1NTU1NTVlZDExNzAsIGluaGVyaXQ9aW5oZXJpdEBlbnRy
eT1mYWxzZSkgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2ludGVydmFscy5jOjE2NjkKMTY2OQkgICAg
ICBpZiAoTEVOR1RIIChvdmVyKSAtIG92ZXJfdXNlZCA8IExFTkdUSCAodW5kZXIpKQooZ2RiKSBi
dCBmdWxsCiMwICAweDAwMDA1NTU1NTU3YzQ3YjMgaW4gZ3JhZnRfaW50ZXJ2YWxzX2ludG9fYnVm
ZmVyIChzb3VyY2U9c291cmNlQGVudHJ5PTB4NTU1NTU1ZTJiNTY4LCBwb3NpdGlvbj1wb3NpdGlv
bkBlbnRyeT0xMiwgbGVuZ3RoPWxlbmd0aEBlbnRyeT0xMywgYnVmZmVyPTB4NTU1NTU1ZWQxMTcw
LCBpbmhlcml0PWluaGVyaXRAZW50cnk9ZmFsc2UpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9pbnRl
cnZhbHMuYzoxNjY5CiAgICAgICAgdHJlZSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHVuZGVy
ID0gMHgwCiAgICAgICAgb3ZlciA9IDB4NTU1NTU1ZTJiNWEwCiAgICAgICAgdGhpcyA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIG92ZXJfdXNlZCA9IDAKIzEgIDB4MDAwMDU1NTU1NTc1MTk0YiBp
biBGdHJhbnNwb3NlX3JlZ2lvbnMgKHN0YXJ0cjE9PG9wdGltaXplZCBvdXQ+LCBlbmRyMT08b3B0
aW1pemVkIG91dD4sIHN0YXJ0cjI9PG9wdGltaXplZCBvdXQ+LCBlbmRyMj08b3B0aW1pemVkIG91
dD4sIGxlYXZlX21hcmtlcnM9MHgwKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMvZWRpdGZucy5jOjQ3
NTEKICAgICAgICBzYV9hdmFpbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHNhX2NvdW50ID0g
PG9wdGltaXplZCBvdXQ+CiAgICAgICAgc3RhcnQxID0gMQogICAgICAgIGVuZDEgPSAxCiAgICAg
ICAgc3RhcnQyID0gMTAKICAgICAgICBlbmQyID0gMjEKICAgICAgICBzdGFydDFfYnl0ZSA9IDxv
cHRpbWl6ZWQgb3V0PgogICAgICAgIHN0YXJ0Ml9ieXRlID0gMTQKICAgICAgICBsZW4xX2J5dGUg
PSAwCiAgICAgICAgbGVuMl9ieXRlID0gMTEKICAgICAgICBlbmQyX2J5dGUgPSAyNQogICAgICAg
IGdhcCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGxlbjEgPSAwCiAgICAgICAgbGVuX21pZCA9
IDEzCiAgICAgICAgbGVuMiA9IDExCiAgICAgICAgc3RhcnQxX2FkZHIgPSA8b3B0aW1pemVkIG91
dD4KICAgICAgICBzdGFydDJfYWRkciA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRlbXAgPSAw
eDdmZmZmZmZmZDgzMCAidjogc2NhbGluZ1xuVVVVIgogICAgICAgIGN1cl9pbnR2ID0gPG9wdGlt
aXplZCBvdXQ+CiAgICAgICAgdG1wX2ludGVydmFsMSA9IDB4MAogICAgICAgIHRtcF9pbnRlcnZh
bF9taWQgPSAweDU1NTU1NWUyYjU2OAogICAgICAgIHRtcF9pbnRlcnZhbDIgPSAweDU1NTU1NWUy
YjY0OAogICAgICAgIHRtcF9pbnRlcnZhbDMgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBidWYg
PSA8b3B0aW1pemVkIG91dD4KIzIgIDB4MDAwMDU1NTU1NTc2MDE0NyBpbiBldmFsX3N1YiAoZm9y
bT08b3B0aW1pemVkIG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjUxNgogICAg
ICAgIGkgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYXhhcmdzID0gNQogICAgICAgIGFyZ3Nf
bGVmdCA9IDB4MAogICAgICAgIG51bWFyZ3MgPSA0CiAgICAgICAgb3JpZ2luYWxfZnVuID0gPG9w
dGltaXplZCBvdXQ+CiAgICAgICAgb3JpZ2luYWxfYXJncyA9IDB4NTU1NTU1ZWI0OGYzCiAgICAg
ICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91dD4K
ICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1pemVk
IG91dD4KICAgICAgICBhcmd2YWxzID0gezB4NiwgMHg2LCAweDJhLCAweDU2LCAweDAsIDB4MTAw
MDAwMDAxMCwgMHgxMDAwMDAwMDAzLCAweGUwMDAwMDAxMH0KICAgICAgICByZXRyeSA9IDxvcHRp
bWl6ZWQgb3V0PgojMyAgMHgwMDAwNTU1NTU1NzYwNDNkIGluIEZwcm9nbiAoYm9keT0weDApIGF0
IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9ybSA9IDxvcHRpbWl6ZWQg
b3V0PgogICAgICAgIHZhbCA9IDB4MAojNCAgMHgwMDAwNTU1NTU1NzVmZWY3IGluIGV2YWxfc3Vi
IChmb3JtPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyNDUz
CiAgICAgICAgYXJnc19sZWZ0ID0gMHg1NTU1NTVlYjQ5YjMKICAgICAgICBudW1hcmdzID0gNwog
ICAgICAgIG9yaWdpbmFsX2Z1biA9IDB4ZDY1MAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1
NTU1NWViNDliMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0g
PG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVu
Y2FyID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDU1NTU1NWVhZTQ0MCwg
MHg3ZmZmZjFhN2U3MDgsIDB4N2ZmZmYxYTdlNzA4LCAweDU1NTU1NWQ3ZTc4MCA8bGlzcHN5bT4s
IDB4MSwgMHg1NTU1NTU3NDg3MzkgPGZpbmRfc3ltYm9sX3ZhbHVlKzE4NT4sIDB4MmFhYTliZGMy
YjUwLCAweDU1NTU1NTc0ODc3OSA8RnN5bWJvbF92YWx1ZSs5Pn0KICAgICAgICByZXRyeSA9IDxv
cHRpbWl6ZWQgb3V0PgojNSAgMHgwMDAwNTU1NTU1NzYyMTY3IGluIEZ1bndpbmRfcHJvdGVjdCAo
YXJncz0weDU1NTU1NWViNGE3MykgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2xpc3AuaDoxNTIzCiAg
ICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91
dD4KIzYgIDB4MDAwMDU1NTU1NTc1ZmVmNyBpbiBldmFsX3N1YiAoZm9ybT08b3B0aW1pemVkIG91
dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjQ1MwogICAgICAgIGFyZ3NfbGVmdCA9
IDB4NTU1NTU1ZWI0YTczCiAgICAgICAgbnVtYXJncyA9IDIKICAgICAgICBvcmlnaW5hbF9mdW4g
PSAweDJhYWE5YmQyNTY4MAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1NTU1NWViNGE3Mwog
ICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0gPG9wdGltaXplZCBv
dXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuY2FyID0gPG9wdGlt
aXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDU1NTU1NWVkMTE3NSwgMHgwLCAweDdmZmZm
ZmZmZGJjMCwgMHgzMCwgMHgyLCAweDdmZmZmZmZmZGI1MCwgMHg0NjAsIDB4NTU1NTU1NzYxNjRj
IDxhcHBseV9sYW1iZGErMjA0Pn0KICAgICAgICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojNyAg
MHgwMDAwNTU1NTU1NzYwNDNkIGluIEZwcm9nbiAoYm9keT0weDAsIGJvZHlAZW50cnk9MHg1NTU1
NTVlYjRiZDMpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9ybSA9
IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHZhbCA9IDB4NTU1NTU1ZWQxMTc1CiM4ICAweDAwMDA1
NTU1NTU3NGNhZTcgaW4gRnNhdmVfY3VycmVudF9idWZmZXIgKGFyZ3M9MHg1NTU1NTVlYjRiZDMp
IGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9lZGl0Zm5zLmM6ODc1CiAgICAgICAgY291bnQgPSA8b3B0
aW1pemVkIG91dD4KIzkgIDB4MDAwMDU1NTU1NTc1ZmVmNyBpbiBldmFsX3N1YiAoZm9ybT08b3B0
aW1pemVkIG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MjQ1MwogICAgICAgIGFy
Z3NfbGVmdCA9IDB4NTU1NTU1ZWI0YmQzCiAgICAgICAgbnVtYXJncyA9IDIKICAgICAgICBvcmln
aW5hbF9mdW4gPSAweDJhYWE5YmQyNTVjMAogICAgICAgIG9yaWdpbmFsX2FyZ3MgPSAweDU1NTU1
NWViNGJkMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuID0gPG9w
dGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnVuY2Fy
ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYXJndmFscyA9IHsweDdmZmZmMWE3ZTcwZCwgMHg1
NTU1NTU3NWMxZjIgPHVuYmluZF90bys1OTQ+LCAweDU1NTU1NWViNDAwMCwgMHg1NTU1NTU3NmEz
YTQgPEZuY29uYysyNDQ+LCAweGIsIDB4ZDUwMCwgMHgwLCAweDdmZmZmMWE3ZTcwZH0KICAgICAg
ICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojMTAgMHgwMDAwNTU1NTU1NzYxYmU1IGluIEZwcm9n
biAoYm9keT0weDApIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6NDM2CiAgICAgICAgZm9y
bSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHZhbCA9IDB4MAogICAgICAgIHZhbCA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIGZvcm0gPSA8b3B0aW1pemVkIG91dD4KIzExIEZsZXQgKGFyZ3M9
MHg1NTU1NTVlYjQwYTMpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MTAyNgogICAgICAg
IHRlbXBzID0gMHg3ZmZmZmZmZmRjODAKICAgICAgICB0ZW0gPSA8b3B0aW1pemVkIG91dD4KICAg
ICAgICBsZXhlbnYgPSAweDAKICAgICAgICBlbHQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBj
b3VudCA9IHsKICAgICAgICAgIGJ5dGVzID0gMTEyMAogICAgICAgIH0KICAgICAgICBhcmdudW0g
PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBzYV9hdmFpbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg
ICAgIHNhX2NvdW50ID0gewogICAgICAgICAgYnl0ZXMgPSAxMTIwCiAgICAgICAgfQogICAgICAg
IHZhcmxpc3QgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YXJsaXN0X2xlbiA9IDxvcHRpbWl6
ZWQgb3V0PgogICAgICAgIG52YXJzID0gPG9wdGltaXplZCBvdXQ+CiMxMiAweDAwMDA1NTU1NTU3
NWZlZjcgaW4gZXZhbF9zdWIgKGZvcm09PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8uLi9lbWFj
cy9zcmMvZXZhbC5jOjI0NTMKICAgICAgICBhcmdzX2xlZnQgPSAweDU1NTU1NWViNDBhMwogICAg
ICAgIG51bWFyZ3MgPSAyCiAgICAgICAgb3JpZ2luYWxfZnVuID0gMHhhNTYwCiAgICAgICAgb3Jp
Z2luYWxfYXJncyA9IDB4NTU1NTU1ZWI0MGEzCiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91
dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVk
IG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBhcmd2YWxzID0g
ezB4MCwgMHg1NTU1NTU3ODY5NTQgPHJlYWRldmFsbG9vcF9lYWdlcl9leHBhbmRfZXZhbCszNDA+
LCAweDI5LCAweDEsIDB4MmFhYTljMGQ3NjkwLCAweDU1NTU1NWViNGFlMywgMHgzMCwgMHg3ZmZm
ZmZmZmRlMDB9CiAgICAgICAgcmV0cnkgPSA8b3B0aW1pemVkIG91dD4KIzEzIDB4MDAwMDU1NTU1
NTc4ZTg2OSBpbiByZWFkZXZhbGxvb3AgKHJlYWRjaGFyZnVuPXJlYWRjaGFyZnVuQGVudHJ5PTB4
NTU1NTU1ZWM2ZjhkLCBpbmZpbGUwPWluZmlsZTBAZW50cnk9MHgwLCBzb3VyY2VuYW1lPXNvdXJj
ZW5hbWVAZW50cnk9MHg1NTU1NTVlY2ZkMTQsIHByaW50ZmxhZz1wcmludGZsYWdAZW50cnk9ZmFs
c2UsIHVuaWJ5dGU9dW5pYnl0ZUBlbnRyeT0weDAsIHJlYWRmdW49cmVhZGZ1bkBlbnRyeT0weDAs
IHN0YXJ0PTB4MCwgZW5kPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2xy
ZWFkLmM6MjM0OAogICAgICAgIGNvdW50MSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGMgPSA8
b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSAweDU1NTU1NWViNGUxMwogICAgICAgIGNvdW50
ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYiA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNv
bnRpbnVlX3JlYWRpbmdfcCA9IHRydWUKICAgICAgICBsZXhfYm91bmQgPSA8b3B0aW1pemVkIG91
dD4KICAgICAgICB3aG9sZV9idWZmZXIgPSB0cnVlCiAgICAgICAgZmlyc3Rfc2V4cCA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIG1hY3JvZXhwYW5kID0gMHgyYWFhOWMwZDc2OTAKIzE0IDB4MDAw
MDU1NTU1NTc4Zjk2NyBpbiBGZXZhbF9idWZmZXIgKGJ1ZmZlcj08b3B0aW1pemVkIG91dD4sIHBy
aW50ZmxhZz0weDAsIGZpbGVuYW1lPTB4NTU1NTU1ZWNmZDE0LCB1bmlieXRlPTB4MCwgZG9fYWxs
b3dfcHJpbnQ9PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMvbHJlYWQuYzoy
NDIxCiAgICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB0ZW0gPSA8b3B0aW1p
emVkIG91dD4KICAgICAgICBidWYgPSAweDU1NTU1NWVjNmY4ZAojMTUgMHgwMDAwNTU1NTU1N2E0
ZTkyIGluIGV4ZWNfYnl0ZV9jb2RlIChmdW49PG9wdGltaXplZCBvdXQ+LCBhcmdzX3RlbXBsYXRl
PTxvcHRpbWl6ZWQgb3V0PiwgbmFyZ3M9PG9wdGltaXplZCBvdXQ+LCBhcmdzPTxvcHRpbWl6ZWQg
b3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2J5dGVjb2RlLmM6ODA5CiAgICAgICAgY2FsbF9u
YXJncyA9IDUKICAgICAgICBjYWxsX2Z1biA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNvdW50
MSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRlbXBsYXRlID0gPG9wdGltaXplZCBvdXQ+CiAg
ICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY2FsbF9hcmdzID0gMHg3ZmZmZjEx
ZmYyOTAKICAgICAgICBvcmlnaW5hbF9mdW4gPSAweDJhYWE5YmZlOWQ0MAogICAgICAgIGJ5dGVj
b2RlID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgb3AgPSA1CiAgICAgICAgdHlwZSA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIHRhcmdldHMgPSB7MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9j
b2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTI3ZCA8ZXhlY19ieXRlX2NvZGUrMTk4MT4sIDB4NTU1
NTU1N2E1Mjc4IDxleGVjX2J5dGVfY29kZSsxOTc2PiwgMHg1NTU1NTU3YTUyNzMgPGV4ZWNfYnl0
ZV9jb2RlKzE5NzE+LCAweDU1NTU1NTdhNGM4ZSA8ZXhlY19ieXRlX2NvZGUrNDYyPiwgMHg1NTU1
NTU3YTRjOGUgPGV4ZWNfYnl0ZV9jb2RlKzQ2Mj4sIDB4NTU1NTU1N2E1MjNmIDxleGVjX2J5dGVf
Y29kZSsxOTE5PiwgMHg1NTU1NTU3YTUyMGIgPGV4ZWNfYnl0ZV9jb2RlKzE4Njc+LCAweDU1NTU1
NTdhNTllMSA8ZXhlY19ieXRlX2NvZGUrMzg3Mz4sIDB4NTU1NTU1N2E1OWRjIDxleGVjX2J5dGVf
Y29kZSszODY4PiwgMHg1NTU1NTU3YTU5ZDcgPGV4ZWNfYnl0ZV9jb2RlKzM4NjM+LCAweDU1NTU1
NTdhNTlkMiA8ZXhlY19ieXRlX2NvZGUrMzg1OD4sIDB4NTU1NTU1N2E0Y2JkIDxleGVjX2J5dGVf
Y29kZSs1MDk+LCAweDU1NTU1NTdhNGNjMCA8ZXhlY19ieXRlX2NvZGUrNTEyPiwgMHg1NTU1NTU3
YTU5YzQgPGV4ZWNfYnl0ZV9jb2RlKzM4NDQ+LCAweDU1NTU1NTdhNTllNiA8ZXhlY19ieXRlX2Nv
ZGUrMzg3OD4sIDB4NTU1NTU1N2E1YTcxIDxleGVjX2J5dGVfY29kZSs0MDE3PiwgMHg1NTU1NTU3
YTVhNmMgPGV4ZWNfYnl0ZV9jb2RlKzQwMTI+LCAweDU1NTU1NTdhNWE2NyA8ZXhlY19ieXRlX2Nv
ZGUrNDAwNz4sIDB4NTU1NTU1N2E1YTYyIDxleGVjX2J5dGVfY29kZSs0MDAyPiwgMHg1NTU1NTU3
YTRjMWEgPGV4ZWNfYnl0ZV9jb2RlKzM0Nj4sIDB4NTU1NTU1N2E0YzIwIDxleGVjX2J5dGVfY29k
ZSszNTI+LCAweDU1NTU1NTdhNWE0NiA8ZXhlY19ieXRlX2NvZGUrMzk3ND4sIDB4NTU1NTU1N2E1
YTU0IDxleGVjX2J5dGVfY29kZSszOTg4PiwgMHg1NTU1NTU3YTU5ZjkgPGV4ZWNfYnl0ZV9jb2Rl
KzM4OTc+LCAweDU1NTU1NTdhNTlmNCA8ZXhlY19ieXRlX2NvZGUrMzg5Mj4sIDB4NTU1NTU1N2E1
ZmI1IDxleGVjX2J5dGVfY29kZSs1MzY1PiwgMHg1NTU1NTU3YTVmYjAgPGV4ZWNfYnl0ZV9jb2Rl
KzUzNjA+LCAweDU1NTU1NTdhNGYxYSA8ZXhlY19ieXRlX2NvZGUrMTExND4sIDB4NTU1NTU1N2E0
ZjIwIDxleGVjX2J5dGVfY29kZSsxMTIwPiwgMHg1NTU1NTU3YTVhMGMgPGV4ZWNfYnl0ZV9jb2Rl
KzM5MTY+LCAweDU1NTU1NTdhNTlmZSA8ZXhlY19ieXRlX2NvZGUrMzkwMj4sIDB4NTU1NTU1N2E1
ZjhmIDxleGVjX2J5dGVfY29kZSs1MzI3PiwgMHg1NTU1NTU3YTVmOGEgPGV4ZWNfYnl0ZV9jb2Rl
KzUzMjI+LCAweDU1NTU1NTdhNWY4NSA8ZXhlY19ieXRlX2NvZGUrNTMxNz4sIDB4NTU1NTU1N2E1
ZjgwIDxleGVjX2J5dGVfY29kZSs1MzEyPiwgMHg1NTU1NTU3YTRkMmIgPGV4ZWNfYnl0ZV9jb2Rl
KzYxOT4sIDB4NTU1NTU1N2E0ZDMwIDxleGVjX2J5dGVfY29kZSs2MjQ+LCAweDU1NTU1NTdhNWZh
MiA8ZXhlY19ieXRlX2NvZGUrNTM0Nj4sIDB4NTU1NTU1N2E1Zjk0IDxleGVjX2J5dGVfY29kZSs1
MzMyPiwgMHg1NTU1NTU3YTVmNWYgPGV4ZWNfYnl0ZV9jb2RlKzUyNzk+LCAweDU1NTU1NTdhNWY1
YSA8ZXhlY19ieXRlX2NvZGUrNTI3ND4sIDB4NTU1NTU1N2E1ZjU1IDxleGVjX2J5dGVfY29kZSs1
MjY5PiwgMHg1NTU1NTU3YTVmNTAgPGV4ZWNfYnl0ZV9jb2RlKzUyNjQ+LCAweDU1NTU1NTdhNGY2
MyA8ZXhlY19ieXRlX2NvZGUrMTE4Nz4sIDB4NTU1NTU1N2E0ZjY4IDxleGVjX2J5dGVfY29kZSsx
MTkyPiwgMHg1NTU1NTU3YTVmNzIgPGV4ZWNfYnl0ZV9jb2RlKzUyOTg+LCAweDU1NTU1NTdhNWY2
NCA8ZXhlY19ieXRlX2NvZGUrNTI4ND4sIDB4NTU1NTU1N2E1YmM5IDxleGVjX2J5dGVfY29kZSs0
MzYxPiwgMHg1NTU1NTU3YTViZjYgPGV4ZWNfYnl0ZV9jb2RlKzQ0MDY+LCAweDU1NTU1NTdhNWM2
MCA8ZXhlY19ieXRlX2NvZGUrNDUxMj4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0y
MDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1
NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5
dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+
LCAweDU1NTU1NTdhNmRkZiA8ZXhlY19ieXRlX2NvZGUrODk5MT4sIDB4NTU1NTU1N2E2ZDczIDxl
eGVjX2J5dGVfY29kZSs4ODgzPiwgMHg1NTU1NTU3YTZkMzcgPGV4ZWNfYnl0ZV9jb2RlKzg4MjM+
LCAweDU1NTU1NTdhNmNmYiA8ZXhlY19ieXRlX2NvZGUrODc2Mz4sIDB4NTU1NTU1N2E2Y2JkIDxl
eGVjX2J5dGVfY29kZSs4NzAxPiwgMHg1NTU1NTU3YTVhZTMgPGV4ZWNfYnl0ZV9jb2RlKzQxMzE+
LCAweDU1NTU1NTdhNWFhYSA8ZXhlY19ieXRlX2NvZGUrNDA3ND4sIDB4NTU1NTU1N2E2YzkyIDxl
eGVjX2J5dGVfY29kZSs4NjU4PiwgMHg1NTU1NTU3YTViOTUgPGV4ZWNfYnl0ZV9jb2RlKzQzMDk+
LCAweDU1NTU1NTdhNWE3NiA8ZXhlY19ieXRlX2NvZGUrNDAyMj4sIDB4NTU1NTU1N2E2YzU5IDxl
eGVjX2J5dGVfY29kZSs4NjAxPiwgMHg1NTU1NTU3YTZjMzAgPGV4ZWNfYnl0ZV9jb2RlKzg1NjA+
LCAweDU1NTU1NTdhNmJmNyA8ZXhlY19ieXRlX2NvZGUrODUwMz4sIDB4NTU1NTU1N2E2YmMxIDxl
eGVjX2J5dGVfY29kZSs4NDQ5PiwgMHg1NTU1NTU3YTZiODcgPGV4ZWNfYnl0ZV9jb2RlKzgzOTE+
LCAweDU1NTU1NTdhNmIyMiA8ZXhlY19ieXRlX2NvZGUrODI5MD4sIDB4NTU1NTU1N2E2YWI0IDxl
eGVjX2J5dGVfY29kZSs4MTgwPiwgMHg1NTU1NTU3YTZhM2YgPGV4ZWNfYnl0ZV9jb2RlKzgwNjM+
LCAweDU1NTU1NTdhNmExNiA8ZXhlY19ieXRlX2NvZGUrODAyMj4sIDB4NTU1NTU1N2E2OWVkIDxl
eGVjX2J5dGVfY29kZSs3OTgxPiwgMHg1NTU1NTU3YTY5YjQgPGV4ZWNfYnl0ZV9jb2RlKzc5MjQ+
LCAweDU1NTU1NTdhNjk3YiA8ZXhlY19ieXRlX2NvZGUrNzg2Nz4sIDB4NTU1NTU1N2E2OTQyIDxl
eGVjX2J5dGVfY29kZSs3ODEwPiwgMHg1NTU1NTU3YTY5MDUgPGV4ZWNfYnl0ZV9jb2RlKzc3NDk+
LCAweDU1NTU1NTdhNjhkMiA8ZXhlY19ieXRlX2NvZGUrNzY5OD4sIDB4NTU1NTU1N2E2ODlmIDxl
eGVjX2J5dGVfY29kZSs3NjQ3PiwgMHg1NTU1NTU3YTY4NmMgPGV4ZWNfYnl0ZV9jb2RlKzc1OTY+
LCAweDU1NTU1NTdhNjdkYiA8ZXhlY19ieXRlX2NvZGUrNzQ1MT4sIDB4NTU1NTU1N2E2Nzg2IDxl
eGVjX2J5dGVfY29kZSs3MzY2PiwgMHg1NTU1NTU3YTY3M2MgPGV4ZWNfYnl0ZV9jb2RlKzcyOTI+
LCAweDU1NTU1NTdhNjZlZiA8ZXhlY19ieXRlX2NvZGUrNzIxNT4sIDB4NTU1NTU1N2E2NmEyIDxl
eGVjX2J5dGVfY29kZSs3MTM4PiwgMHg1NTU1NTU3YTY2NTUgPGV4ZWNfYnl0ZV9jb2RlKzcwNjE+
LCAweDU1NTU1NTdhNjYwOCA8ZXhlY19ieXRlX2NvZGUrNjk4ND4sIDB4NTU1NTU1N2E2NWI3IDxl
eGVjX2J5dGVfY29kZSs2OTAzPiwgMHg1NTU1NTU3YTY1NjEgPGV4ZWNfYnl0ZV9jb2RlKzY4MTc+
LCAweDU1NTU1NTdhNjUxMCA8ZXhlY19ieXRlX2NvZGUrNjczNj4sIDB4NTU1NTU1N2E2NGJmIDxl
eGVjX2J5dGVfY29kZSs2NjU1PiwgMHg1NTU1NTU3YTY0NmUgPGV4ZWNfYnl0ZV9jb2RlKzY1NzQ+
LCAweDU1NTU1NTdhNjQxYyA8ZXhlY19ieXRlX2NvZGUrNjQ5Mj4sIDB4NTU1NTU1N2E2MzQwIDxl
eGVjX2J5dGVfY29kZSs2MjcyPiwgMHg1NTU1NTU3YTRmYTkgPGV4ZWNfYnl0ZV9jb2RlKzEyNTc+
LCAweDU1NTU1NTdhNjMxNyA8ZXhlY19ieXRlX2NvZGUrNjIzMT4sIDB4NTU1NTU1N2E2MmU5IDxl
eGVjX2J5dGVfY29kZSs2MTg1PiwgMHg1NTU1NTU3YTYyNmEgPGV4ZWNfYnl0ZV9jb2RlKzYwNTg+
LCAweDU1NTU1NTdhNjIyNyA8ZXhlY19ieXRlX2NvZGUrNTk5MT4sIDB4NTU1NTU1N2E2MWZlIDxl
eGVjX2J5dGVfY29kZSs1OTUwPiwgMHg1NTU1NTU3YTYxZDMgPGV4ZWNfYnl0ZV9jb2RlKzU5MDc+
LCAweDU1NTU1NTdhNjFhOCA8ZXhlY19ieXRlX2NvZGUrNTg2ND4sIDB4NTU1NTU1N2E2MTc1IDxl
eGVjX2J5dGVfY29kZSs1ODEzPiwgMHg1NTU1NTU3YTYxNGEgPGV4ZWNfYnl0ZV9jb2RlKzU3NzA+
LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E2MTFm
IDxleGVjX2J5dGVfY29kZSs1NzI3PiwgMHg1NTU1NTU3YTYwZjQgPGV4ZWNfYnl0ZV9jb2RlKzU2
ODQ+LCAweDU1NTU1NTdhNjBjOSA8ZXhlY19ieXRlX2NvZGUrNTY0MT4sIDB4NTU1NTU1N2E2MDll
IDxleGVjX2J5dGVfY29kZSs1NTk4PiwgMHg1NTU1NTU3YTYwNzMgPGV4ZWNfYnl0ZV9jb2RlKzU1
NTU+LCAweDU1NTU1NTdhNjA0YSA8ZXhlY19ieXRlX2NvZGUrNTUxND4sIDB4NTU1NTU1N2E0ZmE5
IDxleGVjX2J5dGVfY29kZSsxMjU3PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIw
OTYyMTQ+LCAweDU1NTU1NTdhNjAwYyA8ZXhlY19ieXRlX2NvZGUrNTQ1Mj4sIDB4NTU1NTU1N2E1
ZmUzIDxleGVjX2J5dGVfY29kZSs1NDExPiwgMHg1NTU1NTU3YTVmYmEgPGV4ZWNfYnl0ZV9jb2Rl
KzUzNzA+LCAweDU1NTU1NTdhNThjYiA8ZXhlY19ieXRlX2NvZGUrMzU5NT4sIDB4NTU1NTU1N2E1
ODkyIDxleGVjX2J5dGVfY29kZSszNTM4PiwgMHg1NTU1NTU3YTU4NjkgPGV4ZWNfYnl0ZV9jb2Rl
KzM0OTc+LCAweDU1NTU1NTdhNTg0MCA8ZXhlY19ieXRlX2NvZGUrMzQ1Nj4sIDB4NTU1NTU1N2E1
ODA3IDxleGVjX2J5dGVfY29kZSszMzk5PiwgMHg1NTU1NTU3YTU3Y2UgPGV4ZWNfYnl0ZV9jb2Rl
KzMzNDI+LCAweDU1NTU1NTdhNTc5NSA8ZXhlY19ieXRlX2NvZGUrMzI4NT4sIDB4NTU1NTU1N2E1
NzZhIDxleGVjX2J5dGVfY29kZSszMjQyPiwgMHg1NTU1NTU3YTU3NDEgPGV4ZWNfYnl0ZV9jb2Rl
KzMyMDE+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1
N2E1ZDUwIDxleGVjX2J5dGVfY29kZSs0NzUyPiwgMHg1NTU1NTU3YTVlZTEgPGV4ZWNfYnl0ZV9j
b2RlKzUxNTM+LCAweDU1NTU1NTdhNTk4YSA8ZXhlY19ieXRlX2NvZGUrMzc4Nj4sIDB4NTU1NTU1
N2E1ZWE3IDxleGVjX2J5dGVfY29kZSs1MDk1PiwgMHg1NTU1NTU3YTVlNzAgPGV4ZWNfYnl0ZV9j
b2RlKzUwNDA+LCAweDU1NTU1NTdhNWUzOSA8ZXhlY19ieXRlX2NvZGUrNDk4NT4sIDB4NTU1NTU1
N2E1ZGEyIDxleGVjX2J5dGVfY29kZSs0ODM0PiwgMHg1NTU1NTU3YTVkODQgPGV4ZWNfYnl0ZV9j
b2RlKzQ4MDQ+LCAweDU1NTU1NTdhNWExYSA8ZXhlY19ieXRlX2NvZGUrMzkzMD4sIDB4NTU1NTU1
N2E1ZDMyIDxleGVjX2J5dGVfY29kZSs0NzIyPiwgMHg1NTU1NTU3YTVjZDYgPGV4ZWNfYnl0ZV9j
b2RlKzQ2MzA+LCAweDU1NTU1NTdhNWNhOCA8ZXhlY19ieXRlX2NvZGUrNDU4ND4sIDB4NTU1NTU1
N2E1YzY4IDxleGVjX2J5dGVfY29kZSs0NTIwPiwgMHg1NTU1NTU3YTZlZmIgPGV4ZWNfYnl0ZV9j
b2RlKzkyNzU+LCAweDU1NTU1NTdhNmViZSA8ZXhlY19ieXRlX2NvZGUrOTIxND4sIDB4NTU1NTU1
N2E2ZTdiIDxleGVjX2J5dGVfY29kZSs5MTQ3PiwgMHg1NTU1NTU3YTZlMjUgPGV4ZWNfYnl0ZV9j
b2RlKzkwNjE+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1
NTU1N2E1NzA0IDxleGVjX2J5dGVfY29kZSszMTQwPiwgMHg1NTU1NTU3YTU2ZGIgPGV4ZWNfYnl0
ZV9jb2RlKzMwOTk+LCAweDU1NTU1NTdhNTZiMiA8ZXhlY19ieXRlX2NvZGUrMzA1OD4sIDB4NTU1
NTU1N2E1Njg5IDxleGVjX2J5dGVfY29kZSszMDE3PiwgMHg1NTU1NTU3YTU2NjAgPGV4ZWNfYnl0
ZV9jb2RlKzI5NzY+LCAweDU1NTU1NTdhNTYyNyA8ZXhlY19ieXRlX2NvZGUrMjkxOT4sIDB4NTU1
NTU1N2E1NWVlIDxleGVjX2J5dGVfY29kZSsyODYyPiwgMHg1NTU1NTU3YTU1YjUgPGV4ZWNfYnl0
ZV9jb2RlKzI4MDU+LCAweDU1NTU1NTdhNTU3YyA8ZXhlY19ieXRlX2NvZGUrMjc0OD4sIDB4NTU1
NTU1N2E1NTJmIDxleGVjX2J5dGVfY29kZSsyNjcxPiwgMHg1NTU1NTU3YTU0ZjYgPGV4ZWNfYnl0
ZV9jb2RlKzI2MTQ+LCAweDU1NTU1NTdhNTRiZCA8ZXhlY19ieXRlX2NvZGUrMjU1Nz4sIDB4NTU1
NTU1N2E1NDk3IDxleGVjX2J5dGVfY29kZSsyNTE5PiwgMHg1NTU1NTU3YTU0M2MgPGV4ZWNfYnl0
ZV9jb2RlKzI0Mjg+LCAweDU1NTU1NTdhNTNlMSA8ZXhlY19ieXRlX2NvZGUrMjMzNz4sIDB4NTU1
NTU1N2E1M2FlIDxleGVjX2J5dGVfY29kZSsyMjg2PiwgMHg1NTU1NTU3YTUzN2IgPGV4ZWNfYnl0
ZV9jb2RlKzIyMzU+LCAweDU1NTU1NTdhNTM0YiA8ZXhlY19ieXRlX2NvZGUrMjE4Nz4sIDB4NTU1
NTU1N2E2M2NiIDxleGVjX2J5dGVfY29kZSs2NDExPiwgMHg1NTU1NTU3YTYzODMgPGV4ZWNfYnl0
ZV9jb2RlKzYzMzk+LCAweDU1NTU1NTdhNTJlNSA8ZXhlY19ieXRlX2NvZGUrMjA4NT4sIDB4NTU1
NTU1N2E1MjgyIDxleGVjX2J5dGVfY29kZSsxOTg2PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0
ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4s
IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg
PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt
MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1
NTU3YTZiNGIgPGV4ZWNfYnl0ZV9jb2RlKzgzMzE+LCAweDU1NTU1NTdhNjgzMCA8ZXhlY19ieXRl
X2NvZGUrNzUzNj4sIDB4NTU1NTU1N2E2MmFkIDxleGVjX2J5dGVfY29kZSs2MTI1PiwgMHg1NTU1
NTU3YTUxY2YgPGV4ZWNfYnl0ZV9jb2RlKzE4MDc+LCAweDU1NTU1NTdhNTE5MyA8ZXhlY19ieXRl
X2NvZGUrMTc0Nz4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1
NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTE2NCA8ZXhl
Y19ieXRlX2NvZGUrMTcwMD4sIDB4NTU1NTU1N2E1OTM0IDxleGVjX2J5dGVfY29kZSszNzAwPiwg
MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8
ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0y
MDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1
NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5
dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+
LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1OTA0
IDxleGVjX2J5dGVfY29kZSszNjUyPiA8cmVwZWF0cyA2NCB0aW1lcz59CiAgICAgICAgcXVpdGNv
dW50ZXIgPSAxICdcMDAxJwogICAgICAgIGJjID0gMHg1NTU1NTVjZjNlNzAgPG1haW5fdGhyZWFk
KzQ5Nj4KICAgICAgICB0b3AgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBwYyA9IDxvcHRpbWl6
ZWQgb3V0PgogICAgICAgIGJ5dGVzdHIgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2ZWN0b3Ig
PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYXhkZXB0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg
ICAgIGNvbnN0X2xlbmd0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGJ5dGVzdHJfbGVuZ3Ro
ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmVjdG9ycCA9IDB4N2ZmZmYxZDY4NWM4CiAgICAg
ICAgbWF4X3N0YWNrID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgZnJhbWVfYmFzZSA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIGZwID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYnl0ZXN0cl9k
YXRhID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcmVzdCA9IDxvcHRpbWl6ZWQgb3V0PgogICAg
ICAgIG1hbmRhdG9yeSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIG5vbnJlc3QgPSA8b3B0aW1p
emVkIG91dD4KICAgICAgICBwdXNoZWRhcmdzID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcmVz
dWx0ID0gPG9wdGltaXplZCBvdXQ+CiMxNiAweDAwMDA1NTU1NTU3NWM2MjYgaW4gRmZ1bmNhbGwg
KG5hcmdzPW5hcmdzQGVudHJ5PTUsIGFyZ3M9YXJnc0BlbnRyeT0weDdmZmZmZmZmZTA0MCkgYXQg
Li4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyOTk5CiAgICAgICAgY291bnQgPSA8b3B0aW1pemVk
IG91dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KIzE3IDB4MDAwMDU1NTU1NTc4ZjVl
ZCBpbiBjYWxsNCAoYXJnND0weDMwLCBhcmczPTxvcHRpbWl6ZWQgb3V0PiwgYXJnMj0weDU1NTU1
NWVjZmQxNCwgYXJnMT08b3B0aW1pemVkIG91dD4sIGZuPTxvcHRpbWl6ZWQgb3V0PikgYXQgLi4v
Li4vLi4vZW1hY3Mvc3JjL2xpc3AuaDozMjcwCk5vIGxvY2Fscy4KIzE4IEZsb2FkIChmaWxlPTB4
NTU1NTU1ZWNmYTM0LCBub2Vycm9yPTxvcHRpbWl6ZWQgb3V0Piwgbm9tZXNzYWdlPTxvcHRpbWl6
ZWQgb3V0Piwgbm9zdWZmaXg9PG9wdGltaXplZCBvdXQ+LCBtdXN0X3N1ZmZpeD08b3B0aW1pemVk
IG91dD4pIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9scmVhZC5jOjE0ODQKICAgICAgICB2YWwgPSA8
b3B0aW1pemVkIG91dD4KICAgICAgICBzdHJlYW0gPSAweDAKICAgICAgICBmZCA9IDQKICAgICAg
ICBmZF9pbmRleCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBv
dXQ+CiAgICAgICAgZm91bmQgPSAweDU1NTU1NWVjZmQxNAogICAgICAgIGVmb3VuZCA9IDxvcHRp
bWl6ZWQgb3V0PgogICAgICAgIGhpc3RfZmlsZV9uYW1lID0gMHg1NTU1NTVlY2ZkMTQKICAgICAg
ICBuZXdlciA9IGZhbHNlCiAgICAgICAgY29tcGlsZWQgPSBmYWxzZQogICAgICAgIGhhbmRsZXIg
PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmbW9kZSA9IDB4NTU1NTU1ODM0YTliICJyIgogICAg
ICAgIHZlcnNpb24gPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBub19uYXRpdmUgPSA8b3B0aW1p
emVkIG91dD4KICAgICAgICBpc19tb2R1bGUgPSBmYWxzZQogICAgICAgIGlzX25hdGl2ZV9lbGlz
cCA9IGZhbHNlCiAgICAgICAgZm91bmRfZWZmID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgaXNf
ZWxjID0gZmFsc2UKICAgICAgICBpbnB1dCA9IHsKICAgICAgICAgIHN0cmVhbSA9IDB4NTU1NTU1
ZWNmYTM0LAogICAgICAgICAgbG9va2FoZWFkID0gOTYgJ2AnLAogICAgICAgICAgYnVmID0gIlww
MDFcMDAwXDAwMCIKICAgICAgICB9CiMxOSAweDAwMDA1NTU1NTU3YTRlOTIgaW4gZXhlY19ieXRl
X2NvZGUgKGZ1bj08b3B0aW1pemVkIG91dD4sIGFyZ3NfdGVtcGxhdGU9PG9wdGltaXplZCBvdXQ+
LCBuYXJncz08b3B0aW1pemVkIG91dD4sIGFyZ3M9PG9wdGltaXplZCBvdXQ+KSBhdCAuLi8uLi8u
Li9lbWFjcy9zcmMvYnl0ZWNvZGUuYzo4MDkKICAgICAgICBjYWxsX25hcmdzID0gMwogICAgICAg
IGNhbGxfZnVuID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgY291bnQxID0gPG9wdGltaXplZCBv
dXQ+CiAgICAgICAgdGVtcGxhdGUgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICB2YWwgPSA8b3B0
aW1pemVkIG91dD4KICAgICAgICBjYWxsX2FyZ3MgPSAweDdmZmZmMTFmZjFiMAogICAgICAgIG9y
aWdpbmFsX2Z1biA9IDB4YTliMAogICAgICAgIGJ5dGVjb2RlID0gPG9wdGltaXplZCBvdXQ+CiAg
ICAgICAgb3AgPSAzCiAgICAgICAgdHlwZSA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHRhcmdl
dHMgPSB7MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdh
NTI3ZCA8ZXhlY19ieXRlX2NvZGUrMTk4MT4sIDB4NTU1NTU1N2E1Mjc4IDxleGVjX2J5dGVfY29k
ZSsxOTc2PiwgMHg1NTU1NTU3YTUyNzMgPGV4ZWNfYnl0ZV9jb2RlKzE5NzE+LCAweDU1NTU1NTdh
NGM4ZSA8ZXhlY19ieXRlX2NvZGUrNDYyPiwgMHg1NTU1NTU3YTRjOGUgPGV4ZWNfYnl0ZV9jb2Rl
KzQ2Mj4sIDB4NTU1NTU1N2E1MjNmIDxleGVjX2J5dGVfY29kZSsxOTE5PiwgMHg1NTU1NTU3YTUy
MGIgPGV4ZWNfYnl0ZV9jb2RlKzE4Njc+LCAweDU1NTU1NTdhNTllMSA8ZXhlY19ieXRlX2NvZGUr
Mzg3Mz4sIDB4NTU1NTU1N2E1OWRjIDxleGVjX2J5dGVfY29kZSszODY4PiwgMHg1NTU1NTU3YTU5
ZDcgPGV4ZWNfYnl0ZV9jb2RlKzM4NjM+LCAweDU1NTU1NTdhNTlkMiA8ZXhlY19ieXRlX2NvZGUr
Mzg1OD4sIDB4NTU1NTU1N2E0Y2JkIDxleGVjX2J5dGVfY29kZSs1MDk+LCAweDU1NTU1NTdhNGNj
MCA8ZXhlY19ieXRlX2NvZGUrNTEyPiwgMHg1NTU1NTU3YTU5YzQgPGV4ZWNfYnl0ZV9jb2RlKzM4
NDQ+LCAweDU1NTU1NTdhNTllNiA8ZXhlY19ieXRlX2NvZGUrMzg3OD4sIDB4NTU1NTU1N2E1YTcx
IDxleGVjX2J5dGVfY29kZSs0MDE3PiwgMHg1NTU1NTU3YTVhNmMgPGV4ZWNfYnl0ZV9jb2RlKzQw
MTI+LCAweDU1NTU1NTdhNWE2NyA8ZXhlY19ieXRlX2NvZGUrNDAwNz4sIDB4NTU1NTU1N2E1YTYy
IDxleGVjX2J5dGVfY29kZSs0MDAyPiwgMHg1NTU1NTU3YTRjMWEgPGV4ZWNfYnl0ZV9jb2RlKzM0
Nj4sIDB4NTU1NTU1N2E0YzIwIDxleGVjX2J5dGVfY29kZSszNTI+LCAweDU1NTU1NTdhNWE0NiA8
ZXhlY19ieXRlX2NvZGUrMzk3ND4sIDB4NTU1NTU1N2E1YTU0IDxleGVjX2J5dGVfY29kZSszOTg4
PiwgMHg1NTU1NTU3YTU5ZjkgPGV4ZWNfYnl0ZV9jb2RlKzM4OTc+LCAweDU1NTU1NTdhNTlmNCA8
ZXhlY19ieXRlX2NvZGUrMzg5Mj4sIDB4NTU1NTU1N2E1ZmI1IDxleGVjX2J5dGVfY29kZSs1MzY1
PiwgMHg1NTU1NTU3YTVmYjAgPGV4ZWNfYnl0ZV9jb2RlKzUzNjA+LCAweDU1NTU1NTdhNGYxYSA8
ZXhlY19ieXRlX2NvZGUrMTExND4sIDB4NTU1NTU1N2E0ZjIwIDxleGVjX2J5dGVfY29kZSsxMTIw
PiwgMHg1NTU1NTU3YTVhMGMgPGV4ZWNfYnl0ZV9jb2RlKzM5MTY+LCAweDU1NTU1NTdhNTlmZSA8
ZXhlY19ieXRlX2NvZGUrMzkwMj4sIDB4NTU1NTU1N2E1ZjhmIDxleGVjX2J5dGVfY29kZSs1MzI3
PiwgMHg1NTU1NTU3YTVmOGEgPGV4ZWNfYnl0ZV9jb2RlKzUzMjI+LCAweDU1NTU1NTdhNWY4NSA8
ZXhlY19ieXRlX2NvZGUrNTMxNz4sIDB4NTU1NTU1N2E1ZjgwIDxleGVjX2J5dGVfY29kZSs1MzEy
PiwgMHg1NTU1NTU3YTRkMmIgPGV4ZWNfYnl0ZV9jb2RlKzYxOT4sIDB4NTU1NTU1N2E0ZDMwIDxl
eGVjX2J5dGVfY29kZSs2MjQ+LCAweDU1NTU1NTdhNWZhMiA8ZXhlY19ieXRlX2NvZGUrNTM0Nj4s
IDB4NTU1NTU1N2E1Zjk0IDxleGVjX2J5dGVfY29kZSs1MzMyPiwgMHg1NTU1NTU3YTVmNWYgPGV4
ZWNfYnl0ZV9jb2RlKzUyNzk+LCAweDU1NTU1NTdhNWY1YSA8ZXhlY19ieXRlX2NvZGUrNTI3ND4s
IDB4NTU1NTU1N2E1ZjU1IDxleGVjX2J5dGVfY29kZSs1MjY5PiwgMHg1NTU1NTU3YTVmNTAgPGV4
ZWNfYnl0ZV9jb2RlKzUyNjQ+LCAweDU1NTU1NTdhNGY2MyA8ZXhlY19ieXRlX2NvZGUrMTE4Nz4s
IDB4NTU1NTU1N2E0ZjY4IDxleGVjX2J5dGVfY29kZSsxMTkyPiwgMHg1NTU1NTU3YTVmNzIgPGV4
ZWNfYnl0ZV9jb2RlKzUyOTg+LCAweDU1NTU1NTdhNWY2NCA8ZXhlY19ieXRlX2NvZGUrNTI4ND4s
IDB4NTU1NTU1N2E1YmM5IDxleGVjX2J5dGVfY29kZSs0MzYxPiwgMHg1NTU1NTU3YTViZjYgPGV4
ZWNfYnl0ZV9jb2RlKzQ0MDY+LCAweDU1NTU1NTdhNWM2MCA8ZXhlY19ieXRlX2NvZGUrNDUxMj4s
IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg
PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt
MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1
NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNmRkZiA8ZXhlY19i
eXRlX2NvZGUrODk5MT4sIDB4NTU1NTU1N2E2ZDczIDxleGVjX2J5dGVfY29kZSs4ODgzPiwgMHg1
NTU1NTU3YTZkMzcgPGV4ZWNfYnl0ZV9jb2RlKzg4MjM+LCAweDU1NTU1NTdhNmNmYiA8ZXhlY19i
eXRlX2NvZGUrODc2Mz4sIDB4NTU1NTU1N2E2Y2JkIDxleGVjX2J5dGVfY29kZSs4NzAxPiwgMHg1
NTU1NTU3YTVhZTMgPGV4ZWNfYnl0ZV9jb2RlKzQxMzE+LCAweDU1NTU1NTdhNWFhYSA8ZXhlY19i
eXRlX2NvZGUrNDA3ND4sIDB4NTU1NTU1N2E2YzkyIDxleGVjX2J5dGVfY29kZSs4NjU4PiwgMHg1
NTU1NTU3YTViOTUgPGV4ZWNfYnl0ZV9jb2RlKzQzMDk+LCAweDU1NTU1NTdhNWE3NiA8ZXhlY19i
eXRlX2NvZGUrNDAyMj4sIDB4NTU1NTU1N2E2YzU5IDxleGVjX2J5dGVfY29kZSs4NjAxPiwgMHg1
NTU1NTU3YTZjMzAgPGV4ZWNfYnl0ZV9jb2RlKzg1NjA+LCAweDU1NTU1NTdhNmJmNyA8ZXhlY19i
eXRlX2NvZGUrODUwMz4sIDB4NTU1NTU1N2E2YmMxIDxleGVjX2J5dGVfY29kZSs4NDQ5PiwgMHg1
NTU1NTU3YTZiODcgPGV4ZWNfYnl0ZV9jb2RlKzgzOTE+LCAweDU1NTU1NTdhNmIyMiA8ZXhlY19i
eXRlX2NvZGUrODI5MD4sIDB4NTU1NTU1N2E2YWI0IDxleGVjX2J5dGVfY29kZSs4MTgwPiwgMHg1
NTU1NTU3YTZhM2YgPGV4ZWNfYnl0ZV9jb2RlKzgwNjM+LCAweDU1NTU1NTdhNmExNiA8ZXhlY19i
eXRlX2NvZGUrODAyMj4sIDB4NTU1NTU1N2E2OWVkIDxleGVjX2J5dGVfY29kZSs3OTgxPiwgMHg1
NTU1NTU3YTY5YjQgPGV4ZWNfYnl0ZV9jb2RlKzc5MjQ+LCAweDU1NTU1NTdhNjk3YiA8ZXhlY19i
eXRlX2NvZGUrNzg2Nz4sIDB4NTU1NTU1N2E2OTQyIDxleGVjX2J5dGVfY29kZSs3ODEwPiwgMHg1
NTU1NTU3YTY5MDUgPGV4ZWNfYnl0ZV9jb2RlKzc3NDk+LCAweDU1NTU1NTdhNjhkMiA8ZXhlY19i
eXRlX2NvZGUrNzY5OD4sIDB4NTU1NTU1N2E2ODlmIDxleGVjX2J5dGVfY29kZSs3NjQ3PiwgMHg1
NTU1NTU3YTY4NmMgPGV4ZWNfYnl0ZV9jb2RlKzc1OTY+LCAweDU1NTU1NTdhNjdkYiA8ZXhlY19i
eXRlX2NvZGUrNzQ1MT4sIDB4NTU1NTU1N2E2Nzg2IDxleGVjX2J5dGVfY29kZSs3MzY2PiwgMHg1
NTU1NTU3YTY3M2MgPGV4ZWNfYnl0ZV9jb2RlKzcyOTI+LCAweDU1NTU1NTdhNjZlZiA8ZXhlY19i
eXRlX2NvZGUrNzIxNT4sIDB4NTU1NTU1N2E2NmEyIDxleGVjX2J5dGVfY29kZSs3MTM4PiwgMHg1
NTU1NTU3YTY2NTUgPGV4ZWNfYnl0ZV9jb2RlKzcwNjE+LCAweDU1NTU1NTdhNjYwOCA8ZXhlY19i
eXRlX2NvZGUrNjk4ND4sIDB4NTU1NTU1N2E2NWI3IDxleGVjX2J5dGVfY29kZSs2OTAzPiwgMHg1
NTU1NTU3YTY1NjEgPGV4ZWNfYnl0ZV9jb2RlKzY4MTc+LCAweDU1NTU1NTdhNjUxMCA8ZXhlY19i
eXRlX2NvZGUrNjczNj4sIDB4NTU1NTU1N2E2NGJmIDxleGVjX2J5dGVfY29kZSs2NjU1PiwgMHg1
NTU1NTU3YTY0NmUgPGV4ZWNfYnl0ZV9jb2RlKzY1NzQ+LCAweDU1NTU1NTdhNjQxYyA8ZXhlY19i
eXRlX2NvZGUrNjQ5Mj4sIDB4NTU1NTU1N2E2MzQwIDxleGVjX2J5dGVfY29kZSs2MjcyPiwgMHg1
NTU1NTU3YTRmYTkgPGV4ZWNfYnl0ZV9jb2RlKzEyNTc+LCAweDU1NTU1NTdhNjMxNyA8ZXhlY19i
eXRlX2NvZGUrNjIzMT4sIDB4NTU1NTU1N2E2MmU5IDxleGVjX2J5dGVfY29kZSs2MTg1PiwgMHg1
NTU1NTU3YTYyNmEgPGV4ZWNfYnl0ZV9jb2RlKzYwNTg+LCAweDU1NTU1NTdhNjIyNyA8ZXhlY19i
eXRlX2NvZGUrNTk5MT4sIDB4NTU1NTU1N2E2MWZlIDxleGVjX2J5dGVfY29kZSs1OTUwPiwgMHg1
NTU1NTU3YTYxZDMgPGV4ZWNfYnl0ZV9jb2RlKzU5MDc+LCAweDU1NTU1NTdhNjFhOCA8ZXhlY19i
eXRlX2NvZGUrNTg2ND4sIDB4NTU1NTU1N2E2MTc1IDxleGVjX2J5dGVfY29kZSs1ODEzPiwgMHg1
NTU1NTU3YTYxNGEgPGV4ZWNfYnl0ZV9jb2RlKzU3NzA+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19i
eXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E2MTFmIDxleGVjX2J5dGVfY29kZSs1NzI3Piwg
MHg1NTU1NTU3YTYwZjQgPGV4ZWNfYnl0ZV9jb2RlKzU2ODQ+LCAweDU1NTU1NTdhNjBjOSA8ZXhl
Y19ieXRlX2NvZGUrNTY0MT4sIDB4NTU1NTU1N2E2MDllIDxleGVjX2J5dGVfY29kZSs1NTk4Piwg
MHg1NTU1NTU3YTYwNzMgPGV4ZWNfYnl0ZV9jb2RlKzU1NTU+LCAweDU1NTU1NTdhNjA0YSA8ZXhl
Y19ieXRlX2NvZGUrNTUxND4sIDB4NTU1NTU1N2E0ZmE5IDxleGVjX2J5dGVfY29kZSsxMjU3Piwg
MHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNjAwYyA8
ZXhlY19ieXRlX2NvZGUrNTQ1Mj4sIDB4NTU1NTU1N2E1ZmUzIDxleGVjX2J5dGVfY29kZSs1NDEx
PiwgMHg1NTU1NTU3YTVmYmEgPGV4ZWNfYnl0ZV9jb2RlKzUzNzA+LCAweDU1NTU1NTdhNThjYiA8
ZXhlY19ieXRlX2NvZGUrMzU5NT4sIDB4NTU1NTU1N2E1ODkyIDxleGVjX2J5dGVfY29kZSszNTM4
PiwgMHg1NTU1NTU3YTU4NjkgPGV4ZWNfYnl0ZV9jb2RlKzM0OTc+LCAweDU1NTU1NTdhNTg0MCA8
ZXhlY19ieXRlX2NvZGUrMzQ1Nj4sIDB4NTU1NTU1N2E1ODA3IDxleGVjX2J5dGVfY29kZSszMzk5
PiwgMHg1NTU1NTU3YTU3Y2UgPGV4ZWNfYnl0ZV9jb2RlKzMzNDI+LCAweDU1NTU1NTdhNTc5NSA8
ZXhlY19ieXRlX2NvZGUrMzI4NT4sIDB4NTU1NTU1N2E1NzZhIDxleGVjX2J5dGVfY29kZSszMjQy
PiwgMHg1NTU1NTU3YTU3NDEgPGV4ZWNfYnl0ZV9jb2RlKzMyMDE+LCAweDU1NTU1NTVhNGU2YSA8
ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1ZDUwIDxleGVjX2J5dGVfY29kZSs0
NzUyPiwgMHg1NTU1NTU3YTVlZTEgPGV4ZWNfYnl0ZV9jb2RlKzUxNTM+LCAweDU1NTU1NTdhNTk4
YSA8ZXhlY19ieXRlX2NvZGUrMzc4Nj4sIDB4NTU1NTU1N2E1ZWE3IDxleGVjX2J5dGVfY29kZSs1
MDk1PiwgMHg1NTU1NTU3YTVlNzAgPGV4ZWNfYnl0ZV9jb2RlKzUwNDA+LCAweDU1NTU1NTdhNWUz
OSA8ZXhlY19ieXRlX2NvZGUrNDk4NT4sIDB4NTU1NTU1N2E1ZGEyIDxleGVjX2J5dGVfY29kZSs0
ODM0PiwgMHg1NTU1NTU3YTVkODQgPGV4ZWNfYnl0ZV9jb2RlKzQ4MDQ+LCAweDU1NTU1NTdhNWEx
YSA8ZXhlY19ieXRlX2NvZGUrMzkzMD4sIDB4NTU1NTU1N2E1ZDMyIDxleGVjX2J5dGVfY29kZSs0
NzIyPiwgMHg1NTU1NTU3YTVjZDYgPGV4ZWNfYnl0ZV9jb2RlKzQ2MzA+LCAweDU1NTU1NTdhNWNh
OCA8ZXhlY19ieXRlX2NvZGUrNDU4ND4sIDB4NTU1NTU1N2E1YzY4IDxleGVjX2J5dGVfY29kZSs0
NTIwPiwgMHg1NTU1NTU3YTZlZmIgPGV4ZWNfYnl0ZV9jb2RlKzkyNzU+LCAweDU1NTU1NTdhNmVi
ZSA8ZXhlY19ieXRlX2NvZGUrOTIxND4sIDB4NTU1NTU1N2E2ZTdiIDxleGVjX2J5dGVfY29kZSs5
MTQ3PiwgMHg1NTU1NTU3YTZlMjUgPGV4ZWNfYnl0ZV9jb2RlKzkwNjE+LCAweDU1NTU1NTVhNGU2
YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1NzA0IDxleGVjX2J5dGVfY29k
ZSszMTQwPiwgMHg1NTU1NTU3YTU2ZGIgPGV4ZWNfYnl0ZV9jb2RlKzMwOTk+LCAweDU1NTU1NTdh
NTZiMiA8ZXhlY19ieXRlX2NvZGUrMzA1OD4sIDB4NTU1NTU1N2E1Njg5IDxleGVjX2J5dGVfY29k
ZSszMDE3PiwgMHg1NTU1NTU3YTU2NjAgPGV4ZWNfYnl0ZV9jb2RlKzI5NzY+LCAweDU1NTU1NTdh
NTYyNyA8ZXhlY19ieXRlX2NvZGUrMjkxOT4sIDB4NTU1NTU1N2E1NWVlIDxleGVjX2J5dGVfY29k
ZSsyODYyPiwgMHg1NTU1NTU3YTU1YjUgPGV4ZWNfYnl0ZV9jb2RlKzI4MDU+LCAweDU1NTU1NTdh
NTU3YyA8ZXhlY19ieXRlX2NvZGUrMjc0OD4sIDB4NTU1NTU1N2E1NTJmIDxleGVjX2J5dGVfY29k
ZSsyNjcxPiwgMHg1NTU1NTU3YTU0ZjYgPGV4ZWNfYnl0ZV9jb2RlKzI2MTQ+LCAweDU1NTU1NTdh
NTRiZCA8ZXhlY19ieXRlX2NvZGUrMjU1Nz4sIDB4NTU1NTU1N2E1NDk3IDxleGVjX2J5dGVfY29k
ZSsyNTE5PiwgMHg1NTU1NTU3YTU0M2MgPGV4ZWNfYnl0ZV9jb2RlKzI0Mjg+LCAweDU1NTU1NTdh
NTNlMSA8ZXhlY19ieXRlX2NvZGUrMjMzNz4sIDB4NTU1NTU1N2E1M2FlIDxleGVjX2J5dGVfY29k
ZSsyMjg2PiwgMHg1NTU1NTU3YTUzN2IgPGV4ZWNfYnl0ZV9jb2RlKzIyMzU+LCAweDU1NTU1NTdh
NTM0YiA8ZXhlY19ieXRlX2NvZGUrMjE4Nz4sIDB4NTU1NTU1N2E2M2NiIDxleGVjX2J5dGVfY29k
ZSs2NDExPiwgMHg1NTU1NTU3YTYzODMgPGV4ZWNfYnl0ZV9jb2RlKzYzMzk+LCAweDU1NTU1NTdh
NTJlNSA8ZXhlY19ieXRlX2NvZGUrMjA4NT4sIDB4NTU1NTU1N2E1MjgyIDxleGVjX2J5dGVfY29k
ZSsxOTg2PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1
NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5
dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+
LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZh
IDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU3YTZiNGIgPGV4ZWNfYnl0ZV9jb2Rl
KzgzMzE+LCAweDU1NTU1NTdhNjgzMCA8ZXhlY19ieXRlX2NvZGUrNzUzNj4sIDB4NTU1NTU1N2E2
MmFkIDxleGVjX2J5dGVfY29kZSs2MTI1PiwgMHg1NTU1NTU3YTUxY2YgPGV4ZWNfYnl0ZV9jb2Rl
KzE4MDc+LCAweDU1NTU1NTdhNTE5MyA8ZXhlY19ieXRlX2NvZGUrMTc0Nz4sIDB4NTU1NTU1NWE0
ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0ZV9j
b2RlLTIwOTYyMTQ+LCAweDU1NTU1NTdhNTE2NCA8ZXhlY19ieXRlX2NvZGUrMTcwMD4sIDB4NTU1
NTU1N2E1OTM0IDxleGVjX2J5dGVfY29kZSszNzAwPiwgMHg1NTU1NTU1YTRlNmEgPGV4ZWNfYnl0
ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUtMjA5NjIxND4s
IDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1NTU1YTRlNmEg
PGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19ieXRlX2NvZGUt
MjA5NjIxND4sIDB4NTU1NTU1NWE0ZTZhIDxleGVjX2J5dGVfY29kZS0yMDk2MjE0PiwgMHg1NTU1
NTU1YTRlNmEgPGV4ZWNfYnl0ZV9jb2RlLTIwOTYyMTQ+LCAweDU1NTU1NTVhNGU2YSA8ZXhlY19i
eXRlX2NvZGUtMjA5NjIxND4sIDB4NTU1NTU1N2E1OTA0IDxleGVjX2J5dGVfY29kZSszNjUyPiA8
cmVwZWF0cyA2NCB0aW1lcz59CiAgICAgICAgcXVpdGNvdW50ZXIgPSAzOCAnJicKICAgICAgICBi
YyA9IDB4NTU1NTU1Y2YzZTcwIDxtYWluX3RocmVhZCs0OTY+CiAgICAgICAgdG9wID0gPG9wdGlt
aXplZCBvdXQ+CiAgICAgICAgcGMgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBieXRlc3RyID0g
PG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmVjdG9yID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAg
bWF4ZGVwdGggPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBjb25zdF9sZW5ndGggPSA8b3B0aW1p
emVkIG91dD4KICAgICAgICBieXRlc3RyX2xlbmd0aCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAg
IHZlY3RvcnAgPSAweDdmZmZmMWQ1YmFjMAogICAgICAgIG1heF9zdGFjayA9IDxvcHRpbWl6ZWQg
b3V0PgogICAgICAgIGZyYW1lX2Jhc2UgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmcCA9IDxv
cHRpbWl6ZWQgb3V0PgogICAgICAgIGJ5dGVzdHJfZGF0YSA9IDxvcHRpbWl6ZWQgb3V0PgogICAg
ICAgIHJlc3QgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBtYW5kYXRvcnkgPSA8b3B0aW1pemVk
IG91dD4KICAgICAgICBub25yZXN0ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgcHVzaGVkYXJn
cyA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIHJlc3VsdCA9IDxvcHRpbWl6ZWQgb3V0PgojMjAg
MHgwMDAwNTU1NTU1NzYxNjRjIGluIGFwcGx5X2xhbWJkYSAoZnVuPWZ1bkBlbnRyeT0weDdmZmZm
MWQ0Mzg0ZCwgYXJncz08b3B0aW1pemVkIG91dD4sIGNvdW50PWNvdW50QGVudHJ5PS4uLikgYXQg
Li4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzozMTA3CiAgICAgICAgYXJnX3ZlY3RvciA9IDB4N2Zm
ZmZmZmZlMWEwCiAgICAgICAgdGVtID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgc2FfYXZhaWwg
PSA8b3B0aW1pemVkIG91dD4KICAgICAgICBzYV9jb3VudCA9IHsKICAgICAgICAgIGJ5dGVzID0g
MTYwCiAgICAgICAgfQogICAgICAgIG51bWFyZ3MgPSAwCiAgICAgICAgYXJnc19sZWZ0ID0gMHgw
CiMyMSAweDAwMDA1NTU1NTU3NWZjMDMgaW4gZXZhbF9zdWIgKGZvcm09Zm9ybUBlbnRyeT0weDdm
ZmZmMjIwNmVmYikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyNTkyCiAgICAgICAgb3Jp
Z2luYWxfZnVuID0gMHgyYWFhOWJmYzUwOTgKICAgICAgICBvcmlnaW5hbF9hcmdzID0gMHgwCiAg
ICAgICAgY291bnQgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW4gPSA8b3B0aW1pemVkIG91
dD4KICAgICAgICB2YWwgPSA8b3B0aW1pemVkIG91dD4KICAgICAgICBmdW5jYXIgPSA8b3B0aW1p
emVkIG91dD4KICAgICAgICBhcmd2YWxzID0gezB4MTIsIDB4ZmZmZmZmZmZmZmZmZmI5MCwgMHg5
MCwgMHg1LCAweDdmZmZmZmZmZTk2MCwgMHg3ZmZmZjU3NTg5ZmEgPG1hbGxvYys0MTA+LCAweDYw
LCAweDU1NTU1NWU4ZTYyM30KICAgICAgICByZXRyeSA9IDxvcHRpbWl6ZWQgb3V0PgojMjIgMHgw
MDAwNTU1NTU1NzYyNzA2IGluIEZldmFsIChmb3JtPTB4N2ZmZmYyMjA2ZWZiLCBsZXhpY2FsPTxv
cHRpbWl6ZWQgb3V0PikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoyMzY1CiAgICAgICAg
Y291bnQgPSA8b3B0aW1pemVkIG91dD4KIzIzIDB4MDAwMDU1NTU1NTc1YWQzNyBpbiBpbnRlcm5h
bF9jb25kaXRpb25fY2FzZSAoYmZ1bj1iZnVuQGVudHJ5PTB4NTU1NTU1NmNlZDQwIDx0b3BfbGV2
ZWxfMj4sIGhhbmRsZXJzPWhhbmRsZXJzQGVudHJ5PTB4OTAsIGhmdW49aGZ1bkBlbnRyeT0weDU1
NTU1NTZkNWY5MCA8Y21kX2Vycm9yPikgYXQgLi4vLi4vLi4vZW1hY3Mvc3JjL2V2YWwuYzoxNDc0
CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgYyA9IDB4NTU1NTU1ZTkzMWQw
CiMyNCAweDAwMDA1NTU1NTU2Y2Y2ODYgaW4gdG9wX2xldmVsXzEgKGlnbm9yZT1pZ25vcmVAZW50
cnk9MHgwKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMva2V5Ym9hcmQuYzoxMTUwCk5vIGxvY2Fscy4K
IzI1IDB4MDAwMDU1NTU1NTc1YWM5MSBpbiBpbnRlcm5hbF9jYXRjaCAodGFnPXRhZ0BlbnRyeT0w
eDEwMDgwLCBmdW5jPWZ1bmNAZW50cnk9MHg1NTU1NTU2Y2Y2NjAgPHRvcF9sZXZlbF8xPiwgYXJn
PWFyZ0BlbnRyeT0weDApIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9ldmFsLmM6MTE5NwogICAgICAg
IHZhbCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIGMgPSAweDU1NTU1NWU3NDQ0MAojMjYgMHgw
MDAwNTU1NTU1NmNlY2JmIGluIGNvbW1hbmRfbG9vcCAoKSBhdCAuLi8uLi8uLi9lbWFjcy9zcmMv
a2V5Ym9hcmQuYzoxMTEwCk5vIGxvY2Fscy4KIzI3IDB4MDAwMDU1NTU1NTZkNWI0MSBpbiByZWN1
cnNpdmVfZWRpdF8xICgpIGF0IC4uLy4uLy4uL2VtYWNzL3NyYy9rZXlib2FyZC5jOjcyMAogICAg
ICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAgdmFsID0gPG9wdGltaXplZCBvdXQ+
CiMyOCAweDAwMDA1NTU1NTU2ZDVlYzAgaW4gRnJlY3Vyc2l2ZV9lZGl0ICgpIGF0IC4uLy4uLy4u
L2VtYWNzL3NyYy9rZXlib2FyZC5jOjgwMwogICAgICAgIGNvdW50ID0gPG9wdGltaXplZCBvdXQ+
CiAgICAgICAgYnVmZmVyID0gPG9wdGltaXplZCBvdXQ+CiMyOSAweDAwMDA1NTU1NTU1YTg5Nzcg
aW4gbWFpbiAoYXJnYz01LCBhcmd2PTB4N2ZmZmZmZmZlNjI4KSBhdCAuLi8uLi8uLi9lbWFjcy9z
cmMvZW1hY3MuYzoyNTIxCiAgICAgICAgc3RhY2tfYm90dG9tX3ZhcmlhYmxlID0gMHgwCiAgICAg
ICAgbm9fbG9hZHVwID0gZmFsc2UKICAgICAgICBqdW5rID0gMHgwCiAgICAgICAgZG5hbWVfYXJn
ID0gMHgwCiAgICAgICAgY2hfdG9fZGlyID0gMHgwCiAgICAgICAgb3JpZ2luYWxfcHdkID0gPG9w
dGltaXplZCBvdXQ+CiAgICAgICAgZHVtcF9tb2RlID0gPG9wdGltaXplZCBvdXQ+CiAgICAgICAg
c2tpcF9hcmdzID0gMQogICAgICAgIHRlbWFjcyA9IDB4MAogICAgICAgIGF0dGVtcHRfbG9hZF9w
ZHVtcCA9IDxvcHRpbWl6ZWQgb3V0PgogICAgICAgIG9ubHlfdmVyc2lvbiA9IGZhbHNlCiAgICAg
ICAgcmxpbSA9IHsKICAgICAgICAgIHJsaW1fY3VyID0gMTAwMjI5MTIsCiAgICAgICAgICBybGlt
X21heCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1CiAgICAgICAgfQogICAgICAgIGxjX2FsbCA9IDxv
cHRpbWl6ZWQgb3V0PgogICAgICAgIHNvY2tmZCA9IC0xCiAgICAgICAgbW9kdWxlX2Fzc2VydGlv
bnMgPSA8b3B0aW1pemVkIG91dD4KCkxpc3AgQmFja3RyYWNlOgoidHJhbnNwb3NlLXJlZ2lvbnMi
ICgweGZmZmZkOTcwKQoicHJvZ24iICgweGZmZmZkYTMwKQoidW53aW5kLXByb3RlY3QiICgweGZm
ZmZkYjAwKQoic2F2ZS1jdXJyZW50LWJ1ZmZlciIgKDB4ZmZmZmRiZjApCiJsZXQiICgweGZmZmZk
ZDIwKQoiZXZhbC1idWZmZXIiICgweGYxMWZmMjkwKQoibG9hZC13aXRoLWNvZGUtY29udmVyc2lv
biIgKDB4ZmZmZmUwNDgpCiJsb2FkIiAoMHhmMTFmZjFiMCkKImNvbW1hbmQtbGluZS0xIiAoMHhm
MTFmZjBiOCkKImNvbW1hbmQtbGluZSIgKDB4ZjExZmYwNDApCiJub3JtYWwtdG9wLWxldmVsIiAo
MHhmZmZmZTFhMCkKKGdkYikgcXVpdApEZWJ1Z2dlciBmaW5pc2hlZAoKRW5kIG9mIGdkYiBzZXNz
aW9uLgoKSW4gR05VIEVtYWNzIDI5LjMuNTAgKGJ1aWxkIDUsIHg4Nl82NC1wYy1saW51eC1nbnUs
IEdUSysgVmVyc2lvbgogMy4yNC4zOCwgY2Fpcm8gdmVyc2lvbiAxLjE2LjApIG9mIDIwMjQtMDQt
MDEgYnVpbHQgb24gZ2Fib3IKUmVwb3NpdG9yeSByZXZpc2lvbjogOTQ2ZDRhYWQxZGZiMjQ0MzUy
ZGZkMDg0NWE4YmMzMDc4ZmU5YmNhNApSZXBvc2l0b3J5IGJyYW5jaDogZW1hY3MtMjkKV2luZG93
aW5nIHN5c3RlbSBkaXN0cmlidXRvciAnVGhlIFguT3JnIEZvdW5kYXRpb24nLCB2ZXJzaW9uIDEx
LjAuMTIxMDEwMDcKU3lzdGVtIERlc2NyaXB0aW9uOiBEZXZ1YW4gR05VL0xpbnV4IDUgKGRhZWRh
bHVzKQoKQ29uZmlndXJlZCB1c2luZzoKICdjb25maWd1cmUgLS13aXRob3V0LWxpYnN5c3RlbWQg
LS13aXRob3V0LXBvcCAtLXdpdGhvdXQtc291bmQKIC0td2l0aG91dC1nY29uZiAtLXdpdGhvdXQt
bWFpbHV0aWxzIC0td2l0aG91dC1uYXRpdmUtY29tcGlsYXRpb24KIC0td2l0aC1jYWlybyAtLXdp
dGgteD15ZXMgLS13aXRoLXgtdG9vbGtpdD1ndGszCiAtLXdpdGgtdG9vbGtpdC1zY3JvbGwtYmFy
cycKCkNvbmZpZ3VyZWQgZmVhdHVyZXM6CkNBSVJPIERCVVMgRlJFRVRZUEUgR0lGIEdMSUIgR01Q
IEdOVVRMUyBHU0VUVElOR1MgSEFSRkJVWlogSlBFRyBKU09OCkxJQlNFTElOVVggTElCWE1MMiBN
T0RVTEVTIE5PVElGWSBJTk9USUZZIFBEVU1QRVIgUE5HIFJTVkcgU0VDQ09NUApTUUxJVEUzIFRI
UkVBRFMgVElGRiBUT09MS0lUX1NDUk9MTF9CQVJTIFRSRUVfU0lUVEVSIFdFQlAgWDExIFhEQkUg
WElNClhJTlBVVDIgWFBNIEdUSzMgWkxJQgoKSW1wb3J0YW50IHNldHRpbmdzOgogIHZhbHVlIG9m
ICRMQU5HOiBodV9IVS5VVEYtOAogIGxvY2FsZS1jb2Rpbmctc3lzdGVtOiB1dGYtOC11bml4CgpC
ZXN0IHdpc2hlcywKCiAgICAgR8OhYm9yCg==


--nextPart4879618.GXAFRqVoOG
Content-Disposition: attachment;
 filename="0001-transpose-regions-fix-crash-add-tests-for-text-prope.patch"
Content-Transfer-Encoding: 7Bit
Content-Type: text/x-patch; charset="unicode-2-0-utf-8";
 name="0001-transpose-regions-fix-crash-add-tests-for-text-prope.patch"

From 4f27eb41c638270a2c421126382cbb5073986288 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=A1bor=20Braun?= <gabor.braun@HIDDEN>
Date: Sun, 31 Mar 2024 12:54:33 +0200
Subject: [PATCH] transpose-regions: fix crash, add tests for text properties.

The tests contain non-ASCII characters and text properties,
and crash previous Emacs versions.

No longer confuse lengths in bytes and characters:
1. For consistent naming split len_mid into len_mid and len_mid_byte.
2. Remove the case len1_byte == len2_byte:
   only one memmove() could be optimized out compared
   to the other cases.
   Even tmp_interval_mid is necessary, as the intervals need position
   adjustments.
   Don't bother with different undo records in this case.
---
 src/editfns.c             | 52 +++++++++-----------------------------
 test/src/editfns-tests.el | 53 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 40 deletions(-)

diff --git a/src/editfns.c b/src/editfns.c
index 85f7739df07..ba589ee497e 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -4495,6 +4495,7 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
 {
   register ptrdiff_t start1, end1, start2, end2;
   ptrdiff_t start1_byte, start2_byte, len1_byte, len2_byte, end2_byte;
+  ptrdiff_t len_mid_byte;
   ptrdiff_t gap, len1, len_mid, len2;
   unsigned char *start1_addr, *start2_addr, *temp;
 
@@ -4653,42 +4654,10 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
   /* Non-adjacent regions, because end1 != start2, bleagh...  */
   else
     {
-      len_mid = start2_byte - (start1_byte + len1_byte);
+      len_mid_byte = start2_byte - (start1_byte + len1_byte);
+      len_mid = start2 - end1;
 
-      if (len1_byte == len2_byte)
-	/* Regions are same size, though, how nice.  */
-        {
-	  USE_SAFE_ALLOCA;
-
-          modify_text (start1, end2);
-          record_change (start1, len1);
-          record_change (start2, len2);
-          tmp_interval1 = copy_intervals (cur_intv, start1, len1);
-          tmp_interval2 = copy_intervals (cur_intv, start2, len2);
-
-	  tmp_interval3 = validate_interval_range (buf, &startr1, &endr1, 0);
-	  if (tmp_interval3)
-	    set_text_properties_1 (startr1, endr1, Qnil, buf, tmp_interval3);
-
-	  tmp_interval3 = validate_interval_range (buf, &startr2, &endr2, 0);
-	  if (tmp_interval3)
-	    set_text_properties_1 (startr2, endr2, Qnil, buf, tmp_interval3);
-
-	  temp = SAFE_ALLOCA (len1_byte);
-	  start1_addr = BYTE_POS_ADDR (start1_byte);
-	  start2_addr = BYTE_POS_ADDR (start2_byte);
-          memcpy (temp, start1_addr, len1_byte);
-          memcpy (start1_addr, start2_addr, len2_byte);
-          memcpy (start2_addr, temp, len1_byte);
-	  SAFE_FREE ();
-
-          graft_intervals_into_buffer (tmp_interval1, start2,
-                                       len1, current_buffer, 0);
-          graft_intervals_into_buffer (tmp_interval2, start1,
-                                       len2, current_buffer, 0);
-        }
-
-      else if (len1_byte < len2_byte)	/* Second region larger than first */
+      if (len1_byte < len2_byte)	/* Second region larger than first */
         /* Non-adjacent & unequal size, area between must also be shifted.  */
         {
 	  USE_SAFE_ALLOCA;
@@ -4708,8 +4677,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
 	  start1_addr = BYTE_POS_ADDR (start1_byte);
 	  start2_addr = BYTE_POS_ADDR (start2_byte);
           memcpy (temp, start2_addr, len2_byte);
-          memcpy (start1_addr + len_mid + len2_byte, start1_addr, len1_byte);
-          memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
+	  memcpy (start1_addr + len_mid_byte + len2_byte, start1_addr, len1_byte);
+	  memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid_byte);
           memcpy (start1_addr, temp, len2_byte);
 	  SAFE_FREE ();
 
@@ -4721,7 +4690,10 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
                                        len2, current_buffer, 0);
         }
       else
-	/* Second region smaller than first.  */
+	/* Second region not larger than first.  */
+	/* The equal-length case is not simpler,
+	   the position stored in intervals for the text inbetween
+	   still needs adjustment. */
         {
 	  USE_SAFE_ALLOCA;
 
@@ -4742,8 +4714,8 @@ DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5,
 	  start2_addr = BYTE_POS_ADDR (start2_byte);
           memcpy (temp, start1_addr, len1_byte);
           memcpy (start1_addr, start2_addr, len2_byte);
-          memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid);
-          memcpy (start1_addr + len2_byte + len_mid, temp, len1_byte);
+	  memmove (start1_addr + len2_byte, start1_addr + len1_byte, len_mid_byte);
+	  memcpy (start1_addr + len2_byte + len_mid_byte, temp, len1_byte);
 	  SAFE_FREE ();
 
           graft_intervals_into_buffer (tmp_interval1, end2 - len1,
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index b3b7da65ad3..82f0bcd1e71 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -132,6 +132,59 @@ propertize/error-even-number-of-args
   "Number of args for `propertize' must be odd."
   (should-error (propertize "foo" 'bar) :type 'wrong-number-of-arguments))
 
+;; Tests for `transpose-region'
+
+(ert-deftest transpose-regions-text-properties2 ()
+  "Test `transpose-regions' thoroughly with text properties."
+  (let* ((string1pre (propertize "a\x2013" :test 1))
+         (middle (propertize "c\x00e9h" :test 0))
+         (string2 (propertize "\x25cf\x25cb" :test 2))
+         (bytes1 (string-bytes string1pre))
+         (bytes2 (string-bytes string2)))
+    ;; (cl-assert (< bytes1 bytes2))
+    (dotimes (i (+ 3 (- bytes2 bytes1)))
+      (let ((string1 (concat string1pre
+                             (propertize (make-string i ?X)
+                                         :test t))))
+        (with-temp-buffer
+          (insert string1 middle string2)
+          (buffer-enable-undo)
+          (transpose-regions
+           1 (1+ (length string1))
+           (- (point) (length string2)) (point))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string2 middle string1)))
+          (undo-boundary)
+          (let ((this-command #'undo)
+                (last-command #'ert)) ; anything but undo
+            (undo))
+          (should (equal-including-properties
+                   (buffer-string)
+                   (concat string1 middle string2))))))))
+
+(ert-deftest transpose-regions-text-properties ()
+  "Test `transpose-regions' with text properties.
+This test is known to crash Emacs 28.2, 29.2, 29.3."
+  (with-temp-buffer
+    (insert (propertize "a" 'face 'font-lock-variable-name-face))
+    (insert ":\n")
+    (insert (propertize "b" 'face 'font-lock-variable-name-face))
+    (insert ": \x2113\x2080\n")
+    (insert (propertize "v" 'face 'font-lock-variable-name-face))
+    (insert ": scaling\n")
+    ;; Move last line to the beginning
+    (transpose-regions 1 1 10 21)
+    (should (equal-including-properties
+             (buffer-string)
+             (concat
+              (propertize "v" 'face 'font-lock-variable-name-face)
+              ": scaling\n"
+              (propertize "a" 'face 'font-lock-variable-name-face)
+              ":\n"
+              (propertize "b" 'face 'font-lock-variable-name-face)
+              ": \x2113\x2080\n")))))
+
 ;; Tests for bug#5131.
 (defun transpose-test-reverse-word (start end)
   "Reverse characters in a word by transposing pairs of characters."
-- 
2.39.2


--nextPart4879618.GXAFRqVoOG--







Acknowledgement sent to Braun Gábor <braungb88@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#70122; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Fri, 12 Apr 2024 09:45:01 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.