GNU logs - #79859, boring messages


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Tue, 18 Nov 2025 19:19:02 +0000
Resent-Message-ID: <handler.79859.B.176349350820894 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: 79859 <at> debbugs.gnu.org
Cc: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.176349350820894
          (code B ref -1); Tue, 18 Nov 2025 19:19:02 +0000
Received: (at submit) by debbugs.gnu.org; 18 Nov 2025 19:18:28 +0000
Received: from localhost ([127.0.0.1]:59379 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vLRDf-0005Qw-Rw
	for submit <at> debbugs.gnu.org; Tue, 18 Nov 2025 14:18:28 -0500
Received: from lists.gnu.org ([2001:470:142::17]:54570)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vLRDd-0005Pk-FX
 for submit <at> debbugs.gnu.org; Tue, 18 Nov 2025 14:18:26 -0500
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 <shipmints@HIDDEN>)
 id 1vLRDJ-0005Nr-Vv
 for bug-gnu-emacs@HIDDEN; Tue, 18 Nov 2025 14:18:06 -0500
Received: from mail-vs1-xe29.google.com ([2607:f8b0:4864:20::e29])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>)
 id 1vLRDI-0008OA-0O
 for bug-gnu-emacs@HIDDEN; Tue, 18 Nov 2025 14:18:05 -0500
Received: by mail-vs1-xe29.google.com with SMTP id
 ada2fe7eead31-5dfa9e34adbso4127813137.0
 for <bug-gnu-emacs@HIDDEN>; Tue, 18 Nov 2025 11:18:02 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763493481; x=1764098281; darn=gnu.org;
 h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=jTczCU7/za1L9o7pKdz9UrWCzWkfQ4lb/WTt4hvDZnw=;
 b=Af3sBmQc44a4144pfuC9gCnerYudDIkHVxh8TxWrfkVNDxxKGNR7/w8O4uBsJDc0mK
 wLZYWnY2dIDjT44AU6SFz+hDBHZykAUqohBkHiykRhHGbVvUsjfjTc1pqmZW3rgUBEJ2
 apPyw7W5eDGQMemba3MFV523H5MGwXN1ztH4r5CYTZ8REmLUuwYlJ7dGm/6qPQ2T4/u/
 qup3D812U8iGZIo/5X3UrqnK5R3ljJ2lIPPG9lXAuySFoiJfwYTSV1EVsfudk32EGgcu
 WN3EO3vZap2ojp5Ung8fQt0oqniqBGISb0b6jgEHlstu8vJlOiQcOZMj8oUHchHFZ9l7
 Bdeg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763493481; x=1764098281;
 h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=jTczCU7/za1L9o7pKdz9UrWCzWkfQ4lb/WTt4hvDZnw=;
 b=pV7TgcKrx3kFmPBkFYSi+/jnReg6TST/T1LcpNbJVcQbe+W5jnuV3Ww/C56GnNaChL
 Fsg/pMONi2AItyVSogGtcfWVd7WeNkCJErIpZ3B/MbOsoVFPYfwNu0FDmc0cO3wKqzhC
 /j8b3dZdphsYBEiWLXIOXeIISf4dWB/W4NGFNHunytdYfla+vPdcr2CtHm9RktDA6MsV
 5tEaN3tVNtkpY1jMqvx1nCHXjIo8XUve4kqJ+7xxiEAebvcu/c2ZujSq+J4MJCCsVppm
 jQsRZGJWKWqBlRafZLB0GAJLK/SIvo+A/magjGIp08ka5l+6b7KL09ettOmPOkfHU3Mj
 lXqQ==
X-Gm-Message-State: AOJu0Yzk0x6QuwPxqT0FwTEDBUy86FJWodaO5CT59wR8WtlO38+K+IeX
 +Ia0Kjn2M5VdhconEqVX9RmgkEZ74AG5BwWpHdJv+4oglYpiXsy/wO3psA8Hl/QrpmtotFE47XU
 Y5nCRNgtp4H0Dtoc6HvnnxK/FGx6w22djSVFP
X-Gm-Gg: ASbGncuJYO16nxMWX72ehCOK9Wrwk3bNi6GVT26t4e0aUfP8VJR4UGdgvDZz8odjMrL
 EPZ1TuQ8UO8jyd7DbAG/aqgEA2wEAUoK304jbqg7kMvTuADzEGyk7kJumq9QKkyPulUNx30iyjF
 d5U/NbIF4JJBTMXd3FscrwQ8JZSyV/PP/rreOsCDmroAx4OtpsXX8DQ8DhxppIfZDVcM8luJDn0
 TY062dLOJcaEAfvZxHVoucFKzJf6/m5430zYE8NzVVwd+pCMjTa3Xdx9GY1o01CCrXmfM2MHaO3
 juAJDJlKgVT2uKse
X-Google-Smtp-Source: AGHT+IGGB3zlF8g0WW6QzCe5PXd+JcW5M4Z5RwCK7YDOVrNO1QqUv3ecJQaE3IhoUXk0ki+WKK3XOickTARiQoey9lw=
X-Received: by 2002:a05:6102:c91:b0:5db:cfb2:e610 with SMTP id
 ada2fe7eead31-5dfc5bf1a3emr5570633137.41.1763493481411; Tue, 18 Nov 2025
 11:18:01 -0800 (PST)
MIME-Version: 1.0
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Tue, 18 Nov 2025 14:17:45 -0500
X-Gm-Features: AWmQ_bmd8H7dg8uq0Pp3tF95RpsYLisIfxG8X0CemUmCpMYO9ftY7xOmmbLxzSI
Message-ID: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
Content-Type: multipart/mixed; boundary="0000000000008613b00643e352cb"
Received-SPF: pass client-ip=2607:f8b0:4864:20::e29;
 envelope-from=shipmints@HIDDEN; helo=mail-vs1-xe29.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 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_FROM=0.001,
 HTML_MESSAGE=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.0 (+)
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.0 (/)

--0000000000008613b00643e352cb
Content-Type: multipart/alternative; boundary="0000000000008613af0643e352c9"

--0000000000008613af0643e352c9
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

This patch implements system GUI dock features for icon badges, icon
progress indicator, and icon attention request with implementations for
GNU/Linux KDE & GNOME, NS/macOS, and MS-Windows.

GNU/Linux shells need to use an extension or include built-in support for
the protocol documented here https://wiki.ubuntu.com/Unity/LauncherAPI.  I
tested using this "standard" shell extension
https://extensions.gnome.org/extension/307/dash-to-dock/ on GNOME and
assistance and testing on KDE from the reddit user GeneAutomatic3471.

I'd appreciate thoughtful feedback, and of course, testing.

-St=C3=A9phane

--0000000000008613af0643e352c9
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac=
e">This patch implements system GUI dock features for icon badges, icon pro=
gress indicator, and icon attention request with implementations for GNU/Li=
nux KDE &amp; GNOME, NS/macOS, and MS-Windows.</div><div class=3D"gmail_def=
ault" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default=
" style=3D"font-family:monospace">GNU/Linux shells need to use an extension=
 or include built-in support for the protocol documented here=C2=A0<a href=
=3D"https://wiki.ubuntu.com/Unity/LauncherAPI">https://wiki.ubuntu.com/Unit=
y/LauncherAPI</a>.=C2=A0 I tested using this &quot;standard&quot; shell ext=
ension=C2=A0<a href=3D"https://extensions.gnome.org/extension/307/dash-to-d=
ock/">https://extensions.gnome.org/extension/307/dash-to-dock/</a>=C2=A0on =
GNOME and assistance and testing on KDE from the reddit user GeneAutomatic3=
471.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br>=
</div><div class=3D"gmail_default" style=3D"font-family:monospace">I&#39;d =
appreciate thoughtful feedback, and of=C2=A0course, testing.</div><div clas=
s=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D=
"gmail_default" style=3D"font-family:monospace">-St=C3=A9phane</div></div>

--0000000000008613af0643e352c9--

--0000000000008613b00643e352cb
Content-Type: application/octet-stream; 
	name="0001-Add-system-GUI-dock-integration.patch"
Content-Disposition: attachment; 
	filename="0001-Add-system-GUI-dock-integration.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mi4yc82x0>
X-Attachment-Id: f_mi4yc82x0

RnJvbSBmMWM0YmJmMDdhNGIxYzBjYjU4Njc0MTJlY2YyMDc0YmZjM2UzN2UxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgOCBOb3YgMjAyNSAxMzozMDozNyAtMDUwMApT
dWJqZWN0OiBbUEFUQ0hdIEFkZCBzeXN0ZW0gR1VJIGRvY2sgaW50ZWdyYXRpb24uCgpJbXBsZW1l
bnQgc3lzdGVtIEdVSSBkb2NrIGljb24gYmFkZ2UsIGljb24gcHJvZ3Jlc3MgaW5kaWNhdG9yLApp
Y29uIGF0dGVudGlvbiBhbGVydCBmZWF0dXJlcyBmb3IgRC1CdXMgcGxhdGZvcm1zICh0ZXN0ZWQg
b24gS0RFCmFuZCBHTk9NRSksIE5TIChHTlVzdGVwL21hY09TKSwgTWljcm9zb2Z0IFdpbmRvd3Mu
CgoqIGxpc3AvZG9jay1tb2RlLmVsOiBOZXcgZmlsZS4KKiBzcmMvbnNmbnMubSAoRm5zX2JhZGdl
LCBGbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yKQooRm5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24pOiBO
ZXcgZnVuY3Rpb24uCihzeW1zX29mX25zZm5zKTogQWRkIGRlZnN1YnIgU25zX2JhZGdlLApTbnNf
cmVxdWVzdF91c2VyX2F0dGVudGlvbiwgU25zX3Byb2dyZXNzX2luZGljYXRvci4gQWRkIERFRlNZ
TQpRaW5mb3JtYXRpb25hbCwgUWNyaXRpY2FsLgoqIHNyYy93MzJmbnMuYyAocmdiX2xpc3RfdG9f
Y29sb3JyZWYsIEZ3MzJfYmFkZ2UpCihGdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIEZ3MzJf
cHJvZ3Jlc3NfaW5kaWNhdG9yKTogTmV3CmZ1bmN0aW9uLgooc3ltc19vZl93MzJmbnMpOiBBZGQg
ZGVmc3ViciBTdzMyX2JhZGdlLApTdzMyX3Byb2dyZXNzX2luZGljYXRvciwgU3czMl9yZXF1ZXN0
X3VzZXJfYXR0ZW50aW9uLiBBZGQgREVGU1lNClFpbmZvcm1hdGlvbmFsLCBRY3JpdGljYWwuCiog
ZG9jL21pc2MvTWFrZWZpbGUuaW46IEFkZGVkIG5ldyBmaWxlLgoqIGRvYy9taXNjL2RvY2stbW9k
ZS50ZXhpOiBOZXcgZmlsZS4KKiBldGMvTkVXUzogQW5ub3VuY2UgdGhlIG5ldyBmZWF0dXJlLgot
LS0KIGRvYy9taXNjL01ha2VmaWxlLmluICAgIHwgICAxICsKIGRvYy9taXNjL2RvY2stbW9kZS50
ZXhpIHwgMjM3ICsrKysrKysrKysrKysrKysrKysrKwogZXRjL05FV1MgICAgICAgICAgICAgICAg
fCAgIDcgKwogbGlzcC9kb2NrLW1vZGUuZWwgICAgICAgfCA0NDUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogc3JjL25zZm5zLm0gICAgICAgICAgICAgfCAxMjggKysr
KysrKysrKysrCiBzcmMvdzMyZm5zLmMgICAgICAgICAgICB8IDQxNSArKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDEyMzMgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9taXNjL2RvY2stbW9kZS50ZXhpCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgbGlzcC9kb2NrLW1vZGUuZWwKCmRpZmYgLS1naXQgYS9kb2MvbWlzYy9NYWtlZmls
ZS5pbiBiL2RvYy9taXNjL01ha2VmaWxlLmluCmluZGV4IDk1YzhhOTJkZWQxLi43YTkyZWMzODg4
NiAxMDA2NDQKLS0tIGEvZG9jL21pc2MvTWFrZWZpbGUuaW4KKysrIGIvZG9jL21pc2MvTWFrZWZp
bGUuaW4KQEAgLTY4LDYgKzY4LDcgQEAgRE9DTUlTQ19XMzIgPQogCiAjIyBJbmZvIGZpbGVzIHRv
IGJ1aWxkIGFuZCBpbnN0YWxsIG9uIGFsbCBwbGF0Zm9ybXMuCiBJTkZPX0NPTU1PTiA9IGF1dGgg
YXV0b3R5cGUgYm92aW5lIGNhbGMgY2Ntb2RlIGNsIGRidXMgZGlyZWQteAkJXAorCWRvY2stbW9k
ZQkJCQkJCQlcCiAJZWJyb3dzZSBlZGUgZWRpZmYgZWR0IGVmYXEgZWdsb3QgZWllaW8gZW1hY3Mt
Z251dGxzCQlcCiAJZW1hY3MtbWltZSBlcGEgZXJjIGVydCBlc2hlbGwgZXVkYyBld3cgZmx5bWFr
ZSBmb3JtcyBnbnVzCVwKIAlodG1sZm9udGlmeSBpZGx3YXZlIGlkbyBpbmZvLmluZm8gbWFpcml4
LWVsIG1lc3NhZ2UgbWgtZQlcCmRpZmYgLS1naXQgYS9kb2MvbWlzYy9kb2NrLW1vZGUudGV4aSBi
L2RvYy9taXNjL2RvY2stbW9kZS50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43MTM1OGMwOWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9taXNjL2RvY2stbW9k
ZS50ZXhpCkBAIC0wLDAgKzEsMjM3IEBACitcaW5wdXQgdGV4aW5mbyAgICBAYyAtKi10ZXhpbmZv
LSotCisKK0BzZXRmaWxlbmFtZSAuLi8uLi9pbmZvL2RvY2stbW9kZS5pbmZvCitAc2V0dGl0bGUg
R1VJIERvY2sgSWNvbiBGZWF0dXJlcworQGluY2x1ZGUgZG9jc3R5bGUudGV4aQorCitAY29weWlu
ZworVGhpcyBmaWxlIGRlc2NyaWJlcyBFbWFjcyBzeXN0ZW0gR1VJIGRvY2sgaW50ZWdyYXRpb24u
CisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAyNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KKworQHF1b3RhdGlvbgorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3Ry
aWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRl
ciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRo
IG5vCitJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5n
IGBgQSBHTlUgTWFudWFsLCcnCithbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcyBpbiAo
YSkgYmVsb3cuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UKK2lzIGluY2x1ZGVkIGluIHRoZSBzZWN0
aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBU
aGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOiBgYFlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGNv
cHkgYW5kCittb2RpZnkgdGhpcyBHTlUgbWFudWFsLicnCitAZW5kIHF1b3RhdGlvbgorQGVuZCBj
b3B5aW5nCisKK0BkaXJjYXRlZ29yeSBFbWFjcyBtaXNjIGZlYXR1cmVzCitAZGlyZW50cnkKKyog
RW1hY3MgR1VJIERvY2s6IChkb2NrKS4gICAgICAgRW1hY3MgR1VJIGRvY2sgaW50ZWdyYXRpb24u
CitAZW5kIGRpcmVudHJ5CisKK0B0aXRsZXBhZ2UKK0B0aXRsZSBFbWFjcyBTeXN0ZW0gR1VJIERv
Y2sgSW50ZWdyYXRpb24KK0BwYWdlCitAdnNraXAgMHB0IHBsdXMgMWZpbGxsCitAaW5zZXJ0Y29w
eWluZworQGVuZCB0aXRsZXBhZ2UKKworQGNvbnRlbnRzCisKK0BpZm5vdHRleAorQG5vZGUgVG9w
CitAdG9wIEVtYWNzIEdVSSBEb2NrIEludGVncmF0aW9uCitUaGlzIG1hbnVhbCBkZXNjcmliZXMg
RW1hY3Mgc3lzdGVtIEdVSSBkb2NrIGludGVncmF0aW9uLgorCitUaGUgQGRmbntkb2NrfSBwYWNr
YWdlIGFkZHMgRW1hY3MgaW50ZWdyYXRpb24gd2l0aCBHVUkgc3lzdGVtIGRvY2sgb3IKK3Rhc2ti
YXIgRW1hY3MgYXBwbGljYXRpb24gaWNvbiBiYWRnZSwgcHJvZ3Jlc3MgaW5kaWNhdG9yLCBhbmQg
aWNvbgorYXR0ZW50aW9uIGFsZXJ0IGZlYXR1cmVzLgorCitAaW5zZXJ0Y29weWluZworCitAbWVu
dQorKiBPdmVydmlldzo6ICAgICAgICAgICAgICAgICAgICBPdmVydmlldyBvZiBHVUkgc3lzdGVt
IGRvY2sgaW50ZWdyYXRpb24KKyogUHJlcmVxdWlzaXRlczo6CisqIFVzZXIgT3B0aW9uczo6Cisq
IEZ1bmN0aW9uIFJlZmVyZW5jZTo6CisqIERvY2sgVXNhZ2UgRXhhbXBsZXM6OgorKiBHTlUgRnJl
ZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U6OiAgVGhlIGxpY2Vuc2UgZm9yIHRoaXMgZG9jdW1lbnRh
dGlvbi4KKyogRnVuY3Rpb24gSW5kZXg6OgorKiBWYXJpYWJsZSBJbmRleDo6CitAZW5kIG1lbnUK
K0BlbmQgaWZub3R0ZXgKKworQG5vZGUgT3ZlcnZpZXcKK0BjaGFwdGVyIE92ZXJ2aWV3CisKK1Ro
ZSBEb2NrIHBhY2thZ2UgcHJvdmlkZXMgaW50ZWdyYXRpb24gd2l0aCB0aGVzZSBzeXN0ZW0gR1VJ
IGRvY2sKK2ZlYXR1cmVzOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBJY29uIGJhZGdlCitA
aXRlbSBJY29uIHByb2dyZXNzIGluZGljYXRvcgorQGl0ZW0gSWNvbiBhdHRlbnRpb24gYWxlcnQK
K0BlbmQgaXRlbWl6ZQorCitAbm9kZSBQcmVyZXF1aXNpdGVzCitAY2hhcHRlciBQcmVyZXF1aXNp
dGVzCisKK0dOVXN0ZXAsIG1hY09TLCBhbmQgTVMtV2luZG93cyB1c2VycyBuZWVkIG5vIGV4dGVy
bmFsIGNvbmZpZ3VyYXRpb24uCisKK09uIEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1wbGVtZW50
YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCitzaGVsbHMgYW5kL29yIHNoZWxsIGV4
dGVuc2lvbnMgc3VjaCBhcworQGZpbGV7aHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRl
bnNpb24vMzA3L2Rhc2gtdG8tZG9jay99IHRoYXQKK2ltcGxlbWVudHMgVWJ1bnR1J3MgVW5pdHkg
bGF1bmNoZXIgc3BlYyB3aGljaCB5b3UgY2FuIHJlYWQgbW9yZSBhYm91dAoraGVyZSBAZmlsZXto
dHRwczovL3dpa2kudWJ1bnR1LmNvbS9Vbml0eS9MYXVuY2hlckFQSX0uCisKK1lvdXIgR05VL0xp
bnV4IEVtYWNzIGluc3RhbmNlIHNob3VsZCBiZSBsYXVuY2hlZCB2aWEgYW4gYXBwcm9wcmlhdGUK
K3NoZWxsICJkZXNrdG9wIiBmaWxlIHN1Y2ggYXMgdGhvc2UgZGlzdHJpYnV0ZWQgd2l0aCBFbWFj
czsgZS5nLiwKKyJldGMvZW1hY3NjbGllbnQuZGVza3RvcCIuCisKK0Bub2RlIFVzZXIgT3B0aW9u
cworQGNoYXB0ZXIgVXNlciBPcHRpb25zCisKK0BkZWZ2YXIgZG9jay1jbGVhci1hdHRlbnRpb24t
b24tZnJhbWUtZm9jdXMKK1RoZSB2YXJpYWJsZSBAY29kZXtkb2NrLWNsZWFyLWF0dGVudGlvbi1v
bi1mcmFtZS1mb2N1c30gY2FuIGJlCitjdXN0b21pemVkIHRvIGNsZWFyIHRoZSBkb2NrIGljb24g
YXR0ZW50aW9uIGluZGljYXRvciB3aGVuIGFueSBFbWFjcyBHVUkKK2ZyYW1lIGlzIGZvY3VzZWQu
ICBUaGlzIGlzIGlnbm9yZWQgb24gYmFjayBlbmRzIHRoYXQgYXV0b21hdGljYWxseSBjbGVhcgor
dGhlIGF0dGVudGlvbiBpbmRpY2F0b3IuICBJdCBkZWZhdWx0cyB0byBAY29kZXt0fS4KK0BlbmQg
ZGVmdmFyCisKK0BkZWZ2YXIgZG9jay1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lCitUaGUgdmFyaWFi
bGUgQGNvZGV7ZG9jay1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lfSBhcHBsaWVzIG9uIEdOVS9MaW51
eAorRC1CdXMgc3lzdGVtcywgYW5kIGNhbiBiZSBjdXN0b21pemVkIHRvIGluZGljYXRlIHdoaWNo
IGRlc2t0b3AgZmlsZSBuYW1lCitELUJ1cyB3aWxsIHVzZSB0byBpZGVudGlmeSB5b3VyIEVtYWNz
IGluc3RhbmNlLiAgSXQgZGVmYXVsdHMgdG8gdGhlCitkZXNrdG9wIGZpbGUgYmFzZSBuYW1lIEBj
b2RleyJlbWFjc2NsaWVudCJ9IGFuZCBtaWdodCBuZWVkIHRvIGJlIHNldCB0bworQGNvZGV7ImVt
YWNzIn0gb24geW91ciBzeXN0ZW0uICBJbnN0YWxsZWQgRW1hY3MgYnVpbGRzIHR5cGljYWxseSBp
bmNsdWRlCitkZWZhdWx0IGRlc2t0b3AgZmlsZXMgZm9yIGJvdGgsIGFuZCBhcmUgY2FsbGVkCitA
Y29kZXsiZW1hY3NjbGllbnQuZGVza3RvcCJ9IGFuZCBAY29kZXsiZW1hY3MuZGVza3RvcCJ9LCBy
ZXNwZWN0aXZlbHkuCitAZW5kIGRlZnZhcgorCitAZGVmdmFyIGRvY2stZGJ1cy10aW1lb3V0LW1z
CitUaGUgdmFyaWFibGUgQGNvZGV7ZG9jay1kYnVzLXRpbWVvdXQtbXN9IGFwcGxpZXMgb24gR05V
L0xpbnV4IEQtQnVzCitzeXN0ZW1zLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gc3BlY2lmeSB0
aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcworRW1hY3Mgd2lsbCB3YWl0IGZvciBELUJ1cyByZXNw
b25zZXMgYmVmb3JlIHRpbWluZyBvdXQgYW5kIGNvbnNpZGVyaW5nCittZXNzYWdlcyB1bmRlbGl2
ZXJhYmxlLiAgSXQgZGVmYXVsdHMgdG8gMjUwMDAgbWlsbGlzZWNvbmRzLCB3aGljaCBpcyB0aGUK
K3JlY29tbWVuZGVkIGRlZmF1bHQgYnkgdGhlIEQtQnVzIHBhY2thZ2UsIHdoaWNoIHNlZSwgQHB4
cmVme1RvcCwsLCBkYnVzLAorRC1CdXMgaW50ZWdyYXRpb24gaW4gRW1hY3N9LgorQGVuZCBkZWZ2
YXIKKworQG5vZGUgRnVuY3Rpb24gUmVmZXJlbmNlCitAY2hhcHRlciBGdW5jdGlvbiBSZWZlcmVu
Y2UKKworQGZpbmRleCBkb2NrLW1vZGUKK0BkZWZ1biBkb2NrLW1vZGUKK0Bjb2Rle2RvY2stbW9k
ZX0gbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvZiBpdHMgZnVuY3Rpb25zLCB0
bworaW5pdGlhbGl6ZSB0aGUgc3lzdGVtIGJhY2sgZW5kLiAgT24gR05VL0xpbnV4IEQtQnVzLCBp
bml0aWFsaXphdGlvbiB3aWxsCit0ZXN0IHRoYXQgdGhlIEQtQnVzIGRvY2sgcHJvdG9jb2wgaXMg
ZXN0YWJsaXNoZWQsIGFuZCBzaWduYWwgYW4gZXJyb3IgaWYKK2l0IGlzIG5vdC4KK0BlbmQgZGVm
dW4KKworQGZpbmRleCBkb2NrLWJhZGdlCitAZGVmdW4gZG9jay1iYWRnZSAmb3B0aW9uYWwgY291
bnQtb3Itc3RyaW5nCitTZXQgdGhlIGRvY2sgaWNvbiBiYWRnZSB0byBAdmFye2NvdW50LW9yLXN0
cmluZ30uICBJZgorQHZhcntjb3VudC1vci1zdHJpbmd9IGlzIEBjb2Rle25pbH0sIGNsZWFyIHRo
ZSBiYWRnZS4KKworSWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkIG9uIGJhY2sgZW5kcyB3aGljaCBk
byBub3Qgc3VwcG9ydCBzdHJpbmdzLCBpdAoraXMgY29udmVydGVkIHRvIGFuIGludGVnZXIsIGlm
IHBvc3NpYmxlLCBvciB0byBuaWwuICBHTlVzdGVwIGFuZCBtYWNPUworc3VwcG9ydCBzdHJpbmcg
YmFkZ2VzLCB0aGUgR05VL0xpbnV4IEQtQnVzIHByb3RvY29sIHN1cHBvcnRzIG9ubHkKK2ludGVn
ZXJzOyBhbnkgc3RyaW5nIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBpbnRlZ2VyIHdpbGwg
YmUgdHJlYXRlZAorYXMgQGNvZGV7bmlsfS4KK0BlbmQgZGVmdW4KKworQGZpbmRleCBkb2NrLWF0
dGVudGlvbgorQGRlZnVuIGRvY2stYXR0ZW50aW9uICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQK
K1NldCB0aGUgZG9jayBpY29uIHRvIGFsZXJ0IHRoZSB1c2VyLiAgVGhpcyB3aWxsIHJlc3VsdCBp
biBhIGJvdW5jaW5nIG9yCitmbGFzaGluZyBkb2NrIGljb24uICBPbiBzb21lIGJhY2sgZW5kcywg
ZG9jayBpY29uIGF0dGVudGlvbiB3aWxsCitkaXNwbGF5ZWQgb25seSBpZiBFbWFjcyBpcyBub3Qg
dGhlIGZvY3VzZWQgYXBwbGljYXRpb24uCisKK0lmIEB2YXJ7dXJnZW5jeX0gaXMgdGhlIHN5bWJv
bCBAY29kZXtpbmZvcm1hdGlvbmFsfSwgbm9ybWFsIGF0dGVudGlvbiBpcworcmVxdWVzdGVkLiAg
SWYgQHZhcnt1cmdlbmN5fSBpcyB0aGUgc3ltYm9sIEBjb2Rle2NyaXRpY2FsfSwgdXJnZW50Cith
dHRlbnRpb24gaXMgcmVxdWVzdGVkLiAgSWYgQHZhcnt1cmdlbnR9IGlzIEBjb2Rle25pbH0sIGNs
ZWFyIHRoZQorYXR0ZW50aW9uIGluZGljYXRvci4gIEB2YXJ7dGltZW91dH0gaXMgdGhlIG51bWJl
ciBvZiBzZWNvbmRzIHRvIHRpbWUgb3V0CithbmQgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIGlu
ZGljYXRvciwgb3IgQGNvZGV7bmlsfSwgd2hpY2ggZG9lcyBub3QKK3RpbWUgb3V0LgorCitPbiBz
b21lIGJhY2sgZW5kcywgYW4gQGNvZGV7aW5mb3JtYXRpb25hbH0gYXR0ZW50aW9uIHJlcXVlc3Qg
d2lsbCB0aW1lCitvdXQgYXV0b21hdGljYWxseS4gIEluIGNvbnRyYXN0LCBhIGBjcml0aWNhbGAg
cmVxdWVzdCByZXF1aXJlcyB0aGF0IHRoZQordXNlciBicmluZyBFbWFjcyBpbnRvIGZvY3VzIGFu
ZCB3aWxsIG5vdCB0aW1lIG91dC4gIE9uIHNvbWUgYmFjayBlbmRzLAorQGNvZGV7Y3JpdGljYWx9
IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgQGNvZGV7aW5mb3JtYXRpb25hbH0uCitAZW5kIGRlZnVu
CisKK0BmaW5kZXggZG9jay1wcm9ncmVzcworQGRlZnVuIGRvY2stcHJvZ3Jlc3MgJm9wdGlvbmFs
IHByb2dyZXNzCitTZXQgdGhlIGRvY2sgaWNvbiB0byBpbmRpY2F0ZSBgYHByb2dyZXNzJycuICBQ
cm9ncmVzcyBpcyB0eXBpY2FsbHkKK3JlcHJlc2VudGVkIGFzIGEgZ3JhcGhpY2FsIGJhciB0aGF0
IGZyYWN0aW9uYWxseSBzcGFucyB0aGUgZG9jayBpY29uLgorCitAdmFye3Byb2dyZXNzfSBpcyBh
IGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLiAgSWYgQHZhcntwcm9ncmVzc30gaXMKK25p
bCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuCitAZW5kIGRlZnVuCisKK0BmaW5kZXgg
ZG90aW1lcy13aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXIKK0BkZWZtYWMgZG90aW1lcy13aXRo
LWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXIgKHZhciBjb3VudCBbcmVzdWx0XSkgcmVwb3J0ZXItb3It
bWVzc2FnZSBib2R5QGRvdHN7fQorVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIGFuYWxvZ291
cyB0bworQGNvZGV7ZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyfSBhbmQgd29ya3MgdGhl
IHNhbWUgd2F5IGFzCitAY29kZXtkb3RpbWVzfSBkb2VzLCBidXQgYWxzbyByZXBvcnRzIGxvb3Ag
cHJvZ3Jlc3Mgb24gdGhlIEVtYWNzIGRvY2sKK2ljb24uICBJdHMgdXNhZ2UgaXMgZGVzY3JpYmVk
IGluIEBweHJlZntQcm9ncmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUKK0VtYWNzIExpc3AgUmVm
ZXJlbmNlIE1hbnVhbH0uCitAZW5kIGRlZm1hYworCitAZmluZGV4IGRvbGlzdC13aXRoLWRvY2st
cHJvZ3Jlc3MtcmVwb3J0ZXIKK0BkZWZtYWMgZG9saXN0LXdpdGgtZG9jay1wcm9ncmVzcy1yZXBv
cnRlciAodmFyIGxpc3QgW3Jlc3VsdF0pIHJlcG9ydGVyLW9yLW1lc3NhZ2UgYm9keUBkb3Rze30K
K1RoaXMgaXMgYSBjb252ZW5pZW5jZSBtYWNybyBhbmFsb2dvdXMgdG8KK0Bjb2Rle2RvbGlzdC13
aXRoLXByb2dyZXNzLXJlcG9ydGVyfSBhbmQgd29ya3MgdGhlIHNhbWUgd2F5IGFzCitAY29kZXtk
b2xpc3R9IGRvZXMsIGJ1dCBhbHNvIHJlcG9ydHMgbG9vcCBwcm9ncmVzcyBvbiB0aGUgRW1hY3Mg
ZG9jaworaWNvbi4gIEl0cyB1c2FnZSBpcyBkZXNjcmliZWQgaW4gQHB4cmVme1Byb2dyZXNzLCwg
RGlzcGxheSwgZWxpc3AsIFRoZQorRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsfS4KK0BlbmQg
ZGVmbWFjCisKK0Bub2RlIERvY2sgVXNhZ2UgRXhhbXBsZXMKK0BjaGFwdGVyIERvY2sgVXNhZ2Ug
RXhhbXBsZXMKKworQGxpc3AKKzs7IEVuYWJsZSBhbmQgaW5pdGlhbGl6ZSBkb2NrLW1vZGUuCiso
ZG9jay1tb2RlKQorCis7OyBEaXNwbGF5IGEgYmFkZ2Ugb24gdGhlIGRvY2sgaWNvbi4KKyhkb2Nr
LWJhZGdlIGVtYWNzLW1ham9yLXZlcnNpb24pCisoZG9jay1iYWRnZSAiMzEiKQorKGRvY2stYmFk
Z2UgIlRlc3QiKSA7IHNob3J0IHN0cmluZyAob24gc3VwcG9ydGVkIHBsYXRmb3JtcykKKworOzsg
Q2xlYXIgdGhlIGJhZGdlLgorKGRvY2stYmFkZ2UpCisKKzs7IEdldCB0aGUgdXNlcidzIGF0dGVu
dGlvbi4KKworKGRvY2stYXR0ZW50aW9uICdpbmZvcm1hdGlvbmFsIDMpIDsgY2xlYXIgdGhlIHJl
cXVlc3QgYWZ0ZXIgMyBzZWNvbmRzCisoZG9jay1hdHRlbnRpb24gJ2NyaXRpY2FsKQorCis7OyBD
bGVhciB0aGUgYXR0ZW50aW9uIHJlcXVlc3QuCisoZG9jay1hdHRlbnRpb24pCisKKzs7IFJlcG9y
dCBgZG90aW1lc2AgcHJvZ3Jlc3Mgb24gdGhlIGRvY2sgaWNvbi4KKworKGRvdGltZXMtd2l0aC1k
b2NrLXByb2dyZXNzLXJlcG9ydGVyCisgKGkgMTApICJkb3RpbWVzLXdpdGgtZG9jay1wcm9ncmVz
cy1yZXBvcnRlci4uLiIKKyAoc2l0LWZvciAxKSkKKworOzsgUmVwb3J0IGBkb2xpc3RgIHByb2dy
ZXNzIG9uIHRoZSBkb2NrIGljb24uCisKKyhkb2xpc3Qtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9y
dGVyCisgKGkgKG1ha2UtbGlzdCAxMCB0KSkgImRvbGlzdC13aXRoLWRvY2stcHJvZ3Jlc3MtcmVw
b3J0ZXIuLi4iCisgKHNpdC1mb3IgMSkpCitAZW5kIGxpc3AKKworQG5vZGUgR05VIEZyZWUgRG9j
dW1lbnRhdGlvbiBMaWNlbnNlCitAYXBwZW5kaXggR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNl
bnNlCitAaW5jbHVkZSBkb2NsaWNlbnNlLnRleGkKKworQG5vZGUgRnVuY3Rpb24gSW5kZXgKK0B1
bm51bWJlcmVkIEZ1bmN0aW9uIEluZGV4CitAcHJpbnRpbmRleCBmbgorCitAbm9kZSBWYXJpYWJs
ZSBJbmRleAorQHVubnVtYmVyZWQgVmFyaWFibGUgSW5kZXgKK0BwcmludGluZGV4IHZyCisKK0Bi
eWUKKworQGMgRW5kOgpkaWZmIC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUwppbmRleCAzYjY2
ZjRiYWZmMi4uZWQxNjc1ODI3OTIgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0Yy9ORVdT
CkBAIC0yNzQ4LDYgKzI3NDgsMTMgQEAgZGV0ZXJtaW5lZCBieSB0aGUgbmV3IHVzZXIgb3B0aW9u
ICdwdWxzZS1mYWNlLWR1cmF0aW9uJy4KIAogKiogTWlzY2VsbGFuZW91cwogCisrKysKKyoqKiBO
ZXcgZmVhdHVyZSAnZG9jay1tb2RlJy4KK1RoaXMgcGFja2FnZSBpbnRlZ3JhdGVzIEVtYWNzIHdp
dGggc3lzdGVtIEdVSSAiZG9ja3MiIHRvIGRpc3BsYXkgYSBkb2NrCitpY29uIGJhZGdlLCBwcm9n
cmVzcyBpbmRpY2F0b3IsIGFuZCBhdHRlbnRpb24gYWxlcnRzLiAgSW1wbGVtZW50YXRpb25zCith
cmUgYXZhaWxhYmxlIGZvciBELUJ1cyBwbGF0Zm9ybXMgKGUuZy4sIEtERSBhbmQgR05PTUUpLCBt
YWNPUy9HTlVzdGVwLAorYW5kIE1TLVdpbmRvd3MuCisKIC0tLQogKioqICd0b29sdGlwLW1vZGUn
IG5vdyBzaG93cyB0b29sdGlwcyBhZnRlciBkZWxheSBvbiBUVFkgZnJhbWVzLgogRGlzcGxheSBv
ZiB0b29sdGlwcyBvbiB0ZXh0LW9ubHkgdGVybWluYWxzIG5vdyBoYXBwZW5zIGFmdGVyCmRpZmYg
LS1naXQgYS9saXNwL2RvY2stbW9kZS5lbCBiL2xpc3AvZG9jay1tb2RlLmVsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZTI5Nzg3NGIxOQotLS0gL2Rldi9udWxsCisr
KyBiL2xpc3AvZG9jay1tb2RlLmVsCkBAIC0wLDAgKzEsNDQ1IEBACis7OzsgZG9jay1tb2RlLmVs
IC0tLSBHVUkgZGVza3RvcCBkb2NrIHN0YXR1cyAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0IC0qLQor
Cis7OyBDb3B5cmlnaHQgKEMpIDIwMjUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK
Kzs7IEF1dGhvcjogU3RlcGhhbmUgTWFya3MKKzs7IE1haW50YWluZXI6IGVtYWNzLWRldmVsQGdu
dS5vcmcKKzs7IEtleXdvcmRzOiBjb252ZW5pZW5jZQorOzsgUGFja2FnZS1SZXF1aXJlczogKChl
bWFjcyAiMzEuMSIpKQorCis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7
IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5Cis7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKzs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Cis7OyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBVc2UgdGhpcyBwYWNrYWdl
IHRvIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBvbiB5b3VyIHN1cHBvcnRlZCBHVUkgImRvY2siOgor
OzsKKzs7IGBkb2NrLWJhZGdlJyBvdmVybGF5cyBhIHZlcnkgc2hvcnQgc3RyaW5nIG9yIG51bWJl
ciBvbiB0aGUgRW1hY3MgZG9jaworOzsgaWNvbi4gIFlvdSBjYW4gdXNlIHRoaXMsIGZvciBleGFt
cGxlLCB0byBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mCis7OyB1bnJlYWQgZW1haWwgbWVzc2FnZXMu
Cis7OworOzsgYGRvY2stYXR0ZW50aW9uJyBmbGFzaGVzIG9yIGJvdW5jZXMgdGhlIEVtYWNzIGRv
Y2sgaWNvbiB0byBpbmRpY2F0ZQorOzsgdGhhdCB5b3VyIEVtYWNzIHNlc3Npb24gd2FudHMgYXR0
ZW50aW9uLiAgSXRzIGJlaGF2aW9ycyBhcmUgYmFjay1lbmQKKzs7IHNwZWNpZmljLgorOzsKKzs7
IGBkb2NrLXByb2dyZXNzJyBvdmVybGF5cyBhIGdyYXBoaWNhbCBwcm9ncmVzcyBiYXIgb24gdGhl
IEVtYWNzIGRvY2sKKzs7IGljb24gdG8gaWxsdXN0cmF0ZSBwcm9ncmVzcyBvZiBhIHBvdGVudGlh
bGx5IGxvbmctcnVubmluZyBvcGVyYXRpb24uCis7OworOzsgVGhlIGNvbnZlbmllbmNlIG1hY3Jv
cyBgZG90aW1lcy13aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXInIGFuZAorOzsgYGRvbGlzdC13
aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXInIGRpc3BsYXkgcHJvZ3Jlc3MgaW4gdGhlCis7OyBl
Y2hvLWFyZWEgYW5kIG9uIHRoZSBkb2NrIGljb24uICBUaGV5IGFyZSBhbmFsb2dvdXMgdG8gdGhl
aXIKKzs7IGVjaG8tYXJlYSBvbmx5IGNvdW50ZXJwYXJ0cyBgZG90aW1lcy13aXRoLXByb2dyZXNz
LXJlcG9ydGVyJyBhbmQKKzs7IGBkb2xpc3Qtd2l0aC1wcm9ncmVzcy1yZXBvcnRlcicsIHJlc3Bl
Y3RpdmVseS4KKworOzsgT24gR05VL0xpbnV4IHN5c3RlbXMsIHRoZSBpbXBsZW1lbnRhdGlvbiBp
cyB2aWEgRC1CdXMgdG8gY29udHJvbCBHVUkKKzs7IHNoZWxscyBhbmQvb3Igc2hlbGwgZXh0ZW5z
aW9ucyBzdWNoIGFzCis7OyBodHRwczovL2V4dGVuc2lvbnMuZ25vbWUub3JnL2V4dGVuc2lvbi8z
MDcvZGFzaC10by1kb2NrLyB0aGF0Cis7OyBpbXBsZW1lbnQgVWJ1bnR1J3MgVW5pdHkgbGF1bmNo
ZXIgc3BlYywgd2hpY2ggc2VlCis7OyBodHRwczovL3dpa2kudWJ1bnR1LmNvbS9Vbml0eS9MYXVu
Y2hlckFQSS4KKzs7Cis7OyBZb3VyIExpbnV4IEVtYWNzIGluc3RhbmNlIHNob3VsZCBiZSBsYXVu
Y2hlZCB2aWEgYW4gYXBwcm9wcmlhdGUgc2hlbGwKKzs7ICJkZXNrdG9wIiBmaWxlIHN1Y2ggYXMg
dGhvc2UgZGlzdHJpYnV0ZWQgd2l0aCBFbWFjczsgZS5nLiwKKzs7ICJldGMvZW1hY3NjbGllbnQu
ZGVza3RvcCIuCis7OworOzsgT24gR05Vc3RlcCBhbmQgbWFjT1Mgc3lzdGVtcyAoYWthIE5TKSwg
YW5kIE1TLVdpbmRvd3MsIG5hdGl2ZSBBUElzCis7OyBhcmUgdXNlZC4KKzs7Cis7OyBUbyBhZGQg
c3VwcG9ydCBmb3IgYWRkaXRpb25hbCBzeXN0ZW1zLCBwcm92aWRlIGEgYmFjayBlbmQgdGhhdCBp
bXBsZW1lbnRzCis7OyB0aGUgY2wtZ2VuZXJpYyBmdW5jdGlvbnMgYmVsb3cuCisKKzs7OyBDb2Rl
OgorCisoZXZhbC13aGVuLWNvbXBpbGUKKyAgKHJlcXVpcmUgJ2RidXMpKQorCisoZGVmZ3JvdXAg
ZG9jayBuaWwKKyAgIkdVSSBkb2NrIGljb24gYmFkZ2VzLCBwcm9ncmVzcyByZXBvcnQsIGFsZXJ0
cy4iCisgIDpncm91cCAnY29udmVuaWVuY2UpCisKKyhkZWZjdXN0b20gZG9jay1jbGVhci1hdHRl
bnRpb24tb24tZnJhbWUtZm9jdXMgdAorICAiQ2xlYXIgdGhlIGljb24gYXR0ZW50aW9uIGluZGlj
YXRvciB3aGVuIGFueSBHVUkgZnJhbWUgaXMgZm9jdXNlZC4KK1RoaXMgaXMgaWdub3JlZCBvbiBi
YWNrIGVuZHMgdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBhdHRlbnRpb24KK2luZGljYXRv
ci4iCisgIDp0eXBlICdib29sZWFuKQorCisoZGVmY3VzdG9tIGRvY2stZGJ1cy1kZXNrdG9wLWZp
bGUtbmFtZSAiZW1hY3NjbGllbnQiCisgICJELUJ1cyBkZXNrdG9wIGZpbGUgYmFzZSBuYW1lIGRl
c3RpbmF0aW9uIGZvciBkb2NrIG1lc3NhZ2VzLgorVGhpcyBzaG91bGQgYmUgdGhlIGJhc2UgbmFt
ZSBvZiB0aGUgZGVza3RvcCBmaWxlIHVzZWQgdG8gbGF1bmNoIGFuIEVtYWNzCitpbnN0YW5jZS4g
IEZvciBleGFtcGxlLCBpZiB5b3VyIGxhdW5jaGVyIGRlc2t0b3AgZmlsZSBpcyBjYWxsZWQKK1wi
ZW1hY3MuZGVza3RvcFwiLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgXCJlbWFjc1wiLiIKKyAgOnR5
cGUgJ3N0cmluZykKKworKGRlZmN1c3RvbSBkb2NrLWRidXMtdGltZW91dC1tcyAyNTAwMAorICAi
TnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBELUJ1cyByZXNwb25zZXMuCitUaGUg
ZGVmYXVsdCB2YWx1ZSBtaXJyb3JzIHRoZSBgZGJ1c2AgZGVmYXVsdC4iCisgIDp0eXBlICduYXRu
dW0pCisKKyhkZWZ2YXIgZG9jay0tYmFjay1lbmQgbmlsCisgICJHZW5lcmljIGRvY2sgbWV0aG9k
IHN5c3RlbSBkaXNwYXRjaGVyLiIpCisKKyhkZWZ1biBkb2NrLS1zZXQtYmFjay1lbmQgKCkKKyAg
IkRldGVybWluZSBkb2NrIGhvc3Qgc3lzdGVtIHR5cGUuIgorICA7OyBPcmRlciBtYXR0ZXJzIHRv
IGFjY29tbW9kYXRlIHRoZSBjYXNlcyB3aGVyZSBhbiBOUyBvciBNUy1XaW5kb3dzCisgIDs7IGJ1
aWxkIGhhdmUgYSBkYnVzIGZlYXR1cmUuCisgIChjb25kICgoYm91bmRwICducy12ZXJzaW9uLXN0
cmluZykKKyAgICAgICAgIChzZXRxIGRvY2stLWJhY2stZW5kICducykpCisgICAgICAgICgoYm91
bmQtYW5kLXRydWUtcCB3MzItaW5pdGlhbGl6ZWQpCisgICAgICAgICAoc2V0cSBkb2NrLS1iYWNr
LWVuZCAnd2luZG93cy1udCkpCisgICAgICAgICgoYW5kIChmZWF0dXJlcCAnZGJ1c2JpbmQpCisg
ICAgICAgICAgICAgIChtZW1iZXIgIm9yZy5mcmVlZGVza3RvcC5sb2dpbjEiCisgICAgICAgICAg
ICAgICAgICAgICAgKGRidXMtbGlzdC1hY3RpdmF0YWJsZS1uYW1lcyA6c3lzdGVtKSkpCisgICAg
ICAgICAoc2V0cSBkb2NrLS1iYWNrLWVuZCAnZGJ1cykpCisgICAgICAgICh0CisgICAgICAgICAo
c2V0cSBkb2NrLS1iYWNrLWVuZCBuaWwpKSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmaW5lLW1p
bm9yLW1vZGUgZG9jay1tb2RlCisgICJHVUkgZG9jayBpY29uIGJhZGdlcywgcHJvZ3Jlc3MgcmVw
b3J0LCBhbGVydHMuIgorICA6Z2xvYmFsIHQKKyAgKHdoZW4gbm9uaW50ZXJhY3RpdmUKKyAgICAo
d2FybiAiQmF0Y2ggbW9kZSBkb2VzIG5vdCBzdXBwb3J0IGBkb2NrJyIpKQorICAoY29uZCAoZG9j
ay1tb2RlCisgICAgICAgICAoaWYgKGRvY2stLXNldC1iYWNrLWVuZCkKKyAgICAgICAgICAgICAo
ZG9jay0tZW5hYmxlKQorICAgICAgICAgICAod2FybiAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQg
YGRvY2snIikpKQorICAgICAgICAodAorICAgICAgICAgKHdoZW4gZG9jay0tYmFjay1lbmQKKyAg
ICAgICAgICAgKGRvY2stLWRpc2FibGUpCisgICAgICAgICAgIChzZXRxIGRvY2stLWJhY2stZW5k
IG5pbCkpKSkpCisKKyhjbC1kZWZnZW5lcmljIGRvY2stLWVuYWJsZSAoKQorICAiRW5hYmxlIHRo
ZSBkb2NrIGJhY2sgZW5kLiIpCisKKyhjbC1kZWZnZW5lcmljIGRvY2stLWRpc2FibGUgKCkKKyAg
IkRpc2FibGUgdGhlIGRvY2sgYmFjayBlbmQuIikKKworKGNsLWRlZmdlbmVyaWMgZG9jay1iYWRn
ZSAoJm9wdGlvbmFsIGNvdW50LW9yLXN0cmluZykKKyAgIlNldCB0aGUgZG9jayBpY29uIGJhZGdl
IHRvIENPVU5ULU9SLVNUUklORy4KK0lmIENPVU5ULU9SLVNUUklORyBpcyBhbiBpbnRlZ2VyLCBk
aXNwbGF5IHRoYXQgYXMgdGhlIGljb24gYmFkZ2UuCitJZiBDT1VOVC1PUi1TVFJJTkcgaXMgYSBz
dHJpbmcgb24gYmFjayBlbmRzIHdoaWNoIGRvIG5vdCBzdXBwb3J0CitzdHJpbmdzLCBjb252ZXJ0
IENPVU5ULU9SLVNUUklORyB0byBhbiBpbnRlZ2VyLCBvciBuaWwuCitJZiBDT1VOVC1PUi1TVFJJ
TkcgaXMgbmlsLCBvciBpcyBhbiBlbXB0eSBzdHJpbmcsIHJlbW92ZSB0aGUgY291bnRlci4iKQor
CisoY2wtZGVmZ2VuZXJpYyBkb2NrLWF0dGVudGlvbiAoJm9wdGlvbmFsIHVyZ2VuY3kgdGltZW91
dCkKKyAgIlNldCB0aGUgZG9jayBpY29uIHRvIGFsZXJ0IHRoZSB1c2VyLgorSWYgVVJHRU5DWSBp
cyB0aGUgc3ltYm9sIGBpbmZvcm1hdGlvbmFsJywgcmVxdWVzdCBub3JtYWwgYXR0ZW50aW9uLgor
SWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBjcml0aWNhbCcsIHJlcXVlc3QgdXJnZW50IGF0dGVu
dGlvbi4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9uIGluZGljYXRvci4K
K0lmIFRJTUVPVVQgaXMgbm9uLW5pbCwgY2xlYXIgdGhlIGF0dGVudGlvbiBpbmRpY2F0b3IgYWZ0
ZXIgVElNRU9VVAorc2Vjb25kcy4KKworT24gc29tZSBiYWNrIGVuZHMsIGFuIGBpbmZvcm1hdGlv
bmFsJyBhdHRlbnRpb24gcmVxdWVzdCB3aWxsIHRpbWUgb3V0CithdXRvbWF0aWNhbGx5LiAgSW4g
Y29udHJhc3QsIGEgYGNyaXRpY2FsYCByZXF1ZXN0IHJlcXVpcmVzIHRoYXQgdGhlIHVzZXIKK2Jy
aW5nIEVtYWNzIGludG8gZm9jdXMgYW5kIHdpbGwgbm90IHRpbWUgb3V0LiAgT24gc29tZSBiYWNr
IGVuZHMsCitgY3JpdGljYWwnIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgYGluZm9ybWF0aW9uYWwn
LiIpCisKKyhjbC1kZWZnZW5lcmljIGRvY2stcHJvZ3Jlc3MgKCZvcHRpb25hbCBwcm9ncmVzcykK
KyAgIlNldCB0aGUgZG9jayBpY29uIHRvIGluZGljYXRlIHByb2dyZXNzLgorUFJPR1JFU1MgaXMg
YSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwgcmVt
b3ZlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuIikKKworKGRlZnVuIGRvY2stLXZhbGlkYXRlLXBy
b2dyZXNzIChwcm9ncmVzcykKKyAgIlJldHVybiBQUk9HUkVTUyBhcyBhIGZsb2F0IGluIHRoZSBy
YW5nZSAwLjAgdG8gMS4wLCBvciBuaWwuIgorICAod2hlbiAobmF0bnVtcCBwcm9ncmVzcykKKyAg
ICAoc2V0cSBwcm9ncmVzcyAoZmxvYXQgcHJvZ3Jlc3MpKSkKKyAgKGFuZCBwcm9ncmVzcyAoPj0g
cHJvZ3Jlc3MgMC4wKSAoPD0gcHJvZ3Jlc3MgMS4wKSkpCisKKwwKKzs7IGBwcm9ncmVzcy1yZXBv
cnRlcicgc3VwcG9ydC4KKworKGRlZnVuIGRvY2stLXByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0
ZSAob3JpZy1mdW4gcmVwb3J0ZXIgdmFsdWUgJm9wdGlvbmFsIHN1ZmZpeCkKKyAgImBwcm9ncmVz
cy1yZXBvcnRlci1kby11cGRhdGVgIGFkdmljZSBoZWxwZXIuCitQYXNzIE9SSUctRlVOIFJFUE9S
VEVSIFZBTFVFIFNVRkZJWCB0aHJvdWdoIHRvCitgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRl
YC4iCisgIChmdW5jYWxsIG9yaWctZnVuIHJlcG9ydGVyIHZhbHVlIHN1ZmZpeCkKKyAgKGxldCog
KChwYXJhbWV0ZXJzIChjZHIgcmVwb3J0ZXIpKQorICAgICAgICAgKHVwZGF0ZS10aW1lIChhcmVm
IHBhcmFtZXRlcnMgMCkpCisgICAgICAgICAobWluLXZhbHVlIChhcmVmIHBhcmFtZXRlcnMgMSkp
CisgICAgICAgICAobWF4LXZhbHVlIChhcmVmIHBhcmFtZXRlcnMgMikpCisgICAgICAgICAoZW5v
dWdoLXRpbWUtcGFzc2VkCisgICAgICAgICAgKG9yIChub3QgdXBkYXRlLXRpbWUpCisgICAgICAg
ICAgICAgICh0aW1lLWxlc3MtcCB1cGRhdGUtdGltZSBuaWwpKSkpCisgICAgKHdoZW4gKGFuZCBt
aW4tdmFsdWUgbWF4LXZhbHVlKQorICAgICAgKHdoZW4gZW5vdWdoLXRpbWUtcGFzc2VkCisgICAg
ICAgIChsZXQqICgob25lLXBlcmNlbnQgKC8gKC0gbWF4LXZhbHVlIG1pbi12YWx1ZSkgMTAwLjAp
KQorICAgICAgICAgICAgICAgKHBlcmNlbnRhZ2UgKGlmICg9IG1heC12YWx1ZSBtaW4tdmFsdWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodHJ1bmNhdGUgKC8gKC0gdmFsdWUgbWluLXZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lLXBlcmNlbnQpKSkpKQorICAgICAgICAgIChk
b2NrLXByb2dyZXNzICgvIHBlcmNlbnRhZ2UgMTAwLjApKSkpCisgICAgICAod2hlbiAoPj0gdmFs
dWUgbWF4LXZhbHVlKQorICAgICAgICAoZG9jay1wcm9ncmVzcyBuaWwpKSkpKQorCisoZGVmdmFy
IGRvY2stLWRvdGltZXMtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyLWFkdmljZS1jb3VudCAw
CisgICJFbnN1cmUgYWR2aWNlIGlzIG5vdCByZW1vdmVkIHdoZW4gbW9yZSB0aGFuIG9uZSBhY3Rp
dmUgdXNlLiIpCisKKyhkZWZ1biBkb2NrLS1zZXQtdXAtcHJvZ3Jlc3MtcmVwb3J0ZXIgKCkKKyAg
ImBwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGVgIGhlbHBlci4iCisgIChpbmNmIGRvY2stLWRv
dGltZXMtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyLWFkdmljZS1jb3VudCkKKyAgKGFkdmlj
ZS1hZGQgIydwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGUKKyAgICAgICAgICAgICAgOmFyb3Vu
ZAorICAgICAgICAgICAgICAjJ2RvY2stLXByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZSkpCisK
KyhkZWZ1biBkb2NrLS10ZWFyLWRvd24tcHJvZ3Jlc3MtcmVwb3J0ZXIgKCkKKyAgImBwcm9ncmVz
cy1yZXBvcnRlci1kby11cGRhdGVgIGhlbHBlci4iCisgICh3aGVuICg9IDAgKGRlY2YgZG9jay0t
ZG90aW1lcy13aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXItYWR2aWNlLWNvdW50KSkKKyAgICAo
YWR2aWNlLXJlbW92ZSAjJ3Byb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZQorICAgICAgICAgICAg
ICAgICAgICMnZG9jay0tcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlKSkpCisKKyhkZWZtYWNy
byBkb3RpbWVzLXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlciAoc3BlYyByZXBvcnRlci1vci1t
ZXNzYWdlICZyZXN0IGJvZHkpCisgICJMb29wIGEgbnVtYmVyIG9mIHRpbWVzIGFuZCByZXBvcnQg
cHJvZ3Jlc3MgaW4gdGhlIGVjaG8gYXJlYSBhbmQgR1VJIGRvY2suCitFdmFsdWF0ZSBCT0RZIHdp
dGggVkFSIGJvdW5kIHRvIHN1Y2Nlc3NpdmUgaW50ZWdlcnMgcnVubmluZyBmcm9tCiswLCBpbmNs
dXNpdmUsIHRvIENPVU5ULCBleGNsdXNpdmUuICBUaGVuIGV2YWx1YXRlIFJFU1VMVCB0byBnZXQK
K3RoZSByZXR1cm4gdmFsdWUgKG5pbCBpZiBSRVNVTFQgaXMgb21pdHRlZCkuCisKK1NQRUMgUkVQ
T1JURVItT1ItTUVTU0FHRSBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KK2Bkb3RpbWVzLXdp
dGgtcHJvZ3Jlc3MtcmVwb3J0ZXJgLCB3aGljaCBzZWUuIgorICAoZGVjbGFyZSAoaW5kZW50IDIp
IChkZWJ1ZyAoKHN5bWJvbHAgZm9ybSAmb3B0aW9uYWwgZm9ybSkgZm9ybSBib2R5KSkpCisgIGAo
dW53aW5kLXByb3RlY3QKKyAgICAgICAocHJvZ24KKyAgICAgICAgIChkb2NrLS1zZXQtdXAtcHJv
Z3Jlc3MtcmVwb3J0ZXIpCisgICAgICAgICAoZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVy
ICxzcGVjICxyZXBvcnRlci1vci1tZXNzYWdlICxAYm9keSkpCisgICAgIChkb2NrLXByb2dyZXNz
IG5pbCkKKyAgICAgKGRvY2stLXRlYXItZG93bi1wcm9ncmVzcy1yZXBvcnRlcikpKQorCisoZGVm
bWFjcm8gZG9saXN0LXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlciAoc3BlYyByZXBvcnRlci1v
ci1tZXNzYWdlICZyZXN0IGJvZHkpCisgICJMb29wIG92ZXIgYSBsaXN0IGFuZCByZXBvcnQgcHJv
Z3Jlc3MgaW4gdGhlIGVjaG8gYXJlYSBhbmQgR1VJIGRvY2suCitFdmFsdWF0ZSBCT0RZIHdpdGgg
VkFSIGJvdW5kIHRvIGVhY2ggY2FyIGZyb20gTElTVCwgaW4gdHVybi4KK1RoZW4gZXZhbHVhdGUg
UkVTVUxUIHRvIGdldCByZXR1cm4gdmFsdWUsIGRlZmF1bHQgbmlsLgorCitTUEVDIFJFUE9SVEVS
LU9SLU1FU1NBR0UgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCitgZG9saXN0LXdpdGgtZG9j
ay1wcm9ncmVzcy1yZXBvcnRlcmAsIHdoaWNoIHNlZS4iCisgIChkZWNsYXJlIChpbmRlbnQgMikg
KGRlYnVnICgoc3ltYm9scCBmb3JtICZvcHRpb25hbCBmb3JtKSBmb3JtIGJvZHkpKSkKKyAgYCh1
bndpbmQtcHJvdGVjdAorICAgICAgIChwcm9nbgorICAgICAgICAgKGRvY2stLXNldC11cC1wcm9n
cmVzcy1yZXBvcnRlcikKKyAgICAgICAgIChkb2xpc3Qtd2l0aC1wcm9ncmVzcy1yZXBvcnRlciAs
c3BlYyAscmVwb3J0ZXItb3ItbWVzc2FnZSAsQGJvZHkpKQorICAgICAoZG9jay1wcm9ncmVzcyBu
aWwpCisgICAgIChkb2NrLS10ZWFyLWRvd24tcHJvZ3Jlc3MtcmVwb3J0ZXIpKSkKKworDAorOzsg
RC1CdXMgc3VwcG9ydC4KKworKGRlZmNvbnN0IGRvY2stLWRidXMtc2VydmljZSAiY29tLmNhbm9u
aWNhbC5Vbml0eSIpCisoZGVmY29uc3QgZG9jay0tZGJ1cy1pbnRlcmZhY2UgImNvbS5jYW5vbmlj
YWwuVW5pdHkuTGF1bmNoZXJFbnRyeSIpCisKKyhkZWZ2YXIgZG9jay0tZGJ1cy1hdHRlbnRpb24g
bmlsCisgICJOb24tbmlsIHdoZW4gYXR0ZW50aW9uIGlzIGVuYWJsZWQuIikKKworKGRlY2xhcmUt
ZnVuY3Rpb24gZGJ1cy1waW5nICJkYnVzLmVsIikKKyhkZWNsYXJlLWZ1bmN0aW9uIGRidXMtc2Vu
ZC1zaWduYWwgImRidXMuZWwiKQorKGRlY2xhcmUtZnVuY3Rpb24gZGJ1cy1saXN0LWFjdGl2YXRh
YmxlLW5hbWVzICJkYnVzLmVsIikKKworKGRlZnVuIGRvY2stLWRidXMtc2VuZC1zaWduYWwgKG1l
c3NhZ2UpCisgICJTZW5kIE1FU1NBR0UgdG8gdGhlIEQtQnVzIGRvY2sgaGFuZGxlci4iCisgIChs
ZXQgKChhcHAtdXJpCisgICAgICAgICAoZm9ybWF0ICJhcHBsaWNhdGlvbjovLyVzLmRlc2t0b3Ai
CisgICAgICAgICAgICAgICAgIGRvY2stZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSkpKQorICAgIChk
YnVzLXNlbmQtc2lnbmFsCisgICAgIDpzZXNzaW9uCisgICAgIGRvY2stLWRidXMtc2VydmljZQor
ICAgICAiLyIKKyAgICAgZG9jay0tZGJ1cy1pbnRlcmZhY2UKKyAgICAgIlVwZGF0ZSIKKyAgICAg
YXBwLXVyaQorICAgICBtZXNzYWdlKSkpCisKKyhkZWZ1biBkb2NrLS1kYnVzLWNsZWFyLWF0dGVu
dGlvbi1vbi1mcmFtZS1mb2N1cyAoKQorICAiQ2xlYXIgYW4gYWN0aXZlIEQtQnVzIGF0dGVudGlv
biByZXF1ZXN0IGlmIGFueSBmcmFtZSBmb2N1c2VkLiIKKyAgKHdoZW4gKGFuZCBkb2NrLS1kYnVz
LWF0dGVudGlvbgorICAgICAgICAgICAgIChjYXRjaCA6Y2xlYXIKKyAgICAgICAgICAgICAgIChk
b2xpc3QgKGZyYW1lIChmcmFtZS1saXN0KSkKKyAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIChm
cmFtZS1mb2N1cy1zdGF0ZSBmcmFtZSkgdCkKKyAgICAgICAgICAgICAgICAgICAodGhyb3cgOmNs
ZWFyIHQpKSkpKQorICAgIChkb2NrLWF0dGVudGlvbiBuaWwpKSkKKworKGRlZnVuIGRvY2stZGJ1
cy1waW5nLXNlcnZpY2UgKCkKKyAgIlJldHVybiBub24tbmlsIGlmIGBkb2NrLS1kYnVzLXNlcnZp
Y2UnIHJlc3BvbmRzLgorUmV0dXJuIG5pbCBpZiBubyByZXNwb25zZSB3aXRoaW4gYGRvY2stZGJ1
cy10aW1lb3V0LW1zJy4iCisgIChkYnVzLXBpbmcKKyAgIDpzZXNzaW9uCisgICBkb2NrLS1kYnVz
LXNlcnZpY2UKKyAgIGRvY2stZGJ1cy10aW1lb3V0LW1zKSkKKworKGNsLWRlZm1ldGhvZCBkb2Nr
LS1lbmFibGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJh
Y2stZW5kIChlcWwgJ2RidXMpKSkKKyAgKHJlcXVpcmUgJ2RidXMpCisgICh1bmxlc3MgKGRvY2st
ZGJ1cy1waW5nLXNlcnZpY2UpCisgICAgKGVycm9yICJELUJ1cyBzZXJ2aWNlIGAlcycgdW5hdmFp
bGFibGUiIGRvY2stLWRidXMtc2VydmljZSkpCisgICh3aGVuIGRvY2stY2xlYXItYXR0ZW50aW9u
LW9uLWZyYW1lLWZvY3VzCisgICAgKGFkZC1mdW5jdGlvbiA6YWZ0ZXIgYWZ0ZXItZm9jdXMtY2hh
bmdlLWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAjJ2RvY2stLWRidXMtY2xlYXItYXR0ZW50
aW9uLW9uLWZyYW1lLWZvY3VzKSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay0tZGlzYWJsZSAoJmNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwg
J2RidXMpKSkKKyAgKHJlbW92ZS1mdW5jdGlvbiBhZnRlci1mb2N1cy1jaGFuZ2UtZnVuY3Rpb24K
KyAgICAgICAgICAgICAgICAgICAjJ2RvY2stLWRidXMtY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1l
LWZvY3VzKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLWJhZGdlICgmY29udGV4dAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnZGJ1cykpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudC1vci1zdHJpbmcpCisgICJTZXQgYmFkZ2Ug
dG8gQ09VTlQtT1ItU1RSSU5HIGlmIGFuIGludGVnZXIsIG90aGVyd2lzZSB1c2UgbmlsLgorVGhl
IFVuaXR5IHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIGJhZGdlcy4iCisgIChjb25k
ICgoc3RyaW5ncCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1w
IGNvdW50LW9yLXN0cmluZykKKyAgICAgICAgICAgICAoc2V0cSBjb3VudC1vci1zdHJpbmcgbmls
KQorICAgICAgICAgICAobGV0ICgoY291bnQgKHN0cmluZy10by1udW1iZXIgY291bnQtb3Itc3Ry
aW5nKSkpCisgICAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nIChpZiAoaW50ZWdlcnAg
Y291bnQpIGNvdW50IG5pbCkpKSkpCisgICAgICAgICgobm90IChpbnRlZ2VycCBjb3VudC1vci1z
dHJpbmcpKQorICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nIG5pbCkpKQorICAoZG9jay0t
ZGJ1cy1zZW5kLXNpZ25hbAorICAgYCgoOmRpY3QtZW50cnkgImNvdW50LXZpc2libGUiCisgICAg
ICAgICAgICAgICAgICAoOnZhcmlhbnQgOmJvb2xlYW4gLChub3QgKG51bGwgY291bnQtb3Itc3Ry
aW5nKSkpKQorICAgICAoOmRpY3QtZW50cnkgImNvdW50IgorICAgICAgICAgICAgICAgICAgKDp2
YXJpYW50IDp1aW50MzIgLChpZiAobnVsbCBjb3VudC1vci1zdHJpbmcpIDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LW9yLXN0cmluZykpKSkpKQorCisoY2wt
ZGVmbWV0aG9kIGRvY2stYXR0ZW50aW9uICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwgJ2RidXMpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm9wdGlvbmFsIHVyZ2VuY3kgdGltZW91dCkKKyAgIlJlcXVlc3QgVVJHRU5D
WSB1c2VyIGF0dGVudGlvbiB3aXRoaW4gVElNRU9VVCBzZWNvbmRzLgorICBVbml0eSBkb2VzIG5v
dCBzdXBwb3J0IGRpZmZlcmVudGlhdGVkIHVyZ2VuY3kuIgorICAoc2V0cSBkb2NrLS1kYnVzLWF0
dGVudGlvbiB1cmdlbmN5KQorICAoZG9jay0tZGJ1cy1zZW5kLXNpZ25hbAorICAgYCgoOmRpY3Qt
ZW50cnkgInVyZ2VudCIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFudCA6Ym9vbGVhbiAsKG5v
dCAobnVsbCB1cmdlbmN5KSkpKSkpCisgICh3aGVuIChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAg
IChydW4td2l0aC10aW1lcgorICAgICB0aW1lb3V0CisgICAgIG5pbAorICAgICAjJ2RvY2stYXR0
ZW50aW9uIG5pbCkpKQorCisoY2wtZGVmbWV0aG9kIGRvY2stcHJvZ3Jlc3MgKCZjb250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2NrLS1iYWNrLWVuZCAoZXFsICdkYnVzKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByb2dyZXNzKQorICAiRGlz
cGxheSBkb2NrIHByb2dyZXNzIGZvciBQUk9HUkVTUy4iCisgIChzZXRxIHByb2dyZXNzIChkb2Nr
LS12YWxpZGF0ZS1wcm9ncmVzcyBwcm9ncmVzcykpCisgIChkb2NrLS1kYnVzLXNlbmQtc2lnbmFs
CisgICBgKCg6ZGljdC1lbnRyeSAicHJvZ3Jlc3MtdmlzaWJsZSIKKyAgICAgICAgICAgICAgICAg
ICg6dmFyaWFudCA6Ym9vbGVhbiAsKG5vdCAobnVsbCBwcm9ncmVzcykpKSkKKyAgICAgKDpkaWN0
LWVudHJ5ICJwcm9ncmVzcyIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFudCA6ZG91YmxlICwo
aWYgKG51bGwgcHJvZ3Jlc3MpIDAgcHJvZ3Jlc3MpKSkpKSkKKworDAorOzsgTlMgc3VwcG9ydC4K
KworKGRlY2xhcmUtZnVuY3Rpb24gbnMtYmFkZ2UgIm5zZm5zLm0iKQorKGRlY2xhcmUtZnVuY3Rp
b24gbnMtcmVxdWVzdC11c2VyLWF0dGVudGlvbiAibnNmbnMubSIpCisoZGVjbGFyZS1mdW5jdGlv
biBucy1wcm9ncmVzcy1pbmRpY2F0b3IgIm5zZm5zLm0iKQorCisoY2wtZGVmbWV0aG9kIGRvY2st
LWVuYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jay0tYmFj
ay1lbmQgKGVxbCAnbnMpKSkKKyAgKGlnbm9yZSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay0tZGlz
YWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2st
ZW5kIChlcWwgJ25zKSkpCisgIChpZ25vcmUpKQorCisoY2wtZGVmbWV0aG9kIGRvY2stYmFkZ2Ug
KCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2NrLS1iYWNrLWVuZCAoZXFs
ICducykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudC1vci1zdHJp
bmcpCisgICJTZXQgYmFkZ2UgdG8gQ09VTlQtT1ItU1RSSU5HLCBvciBjbGVhciB0aGUgYmFkZ2Uu
CitOUyBzdXBwb3J0cyBvbmx5IHN0cmluZyBiYWRnZXMuIgorICAoY29uZCAoKHN0cmluZ3AgY291
bnQtb3Itc3RyaW5nKQorICAgICAgICAgKHdoZW4gKHN0cmluZy1lbXB0eS1wIGNvdW50LW9yLXN0
cmluZykKKyAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nIG5pbCkpKQorICAgICAgICAo
KGludGVnZXJwIGNvdW50LW9yLXN0cmluZykKKyAgICAgICAgIChzZXRxIGNvdW50LW9yLXN0cmlu
ZyAobnVtYmVyLXRvLXN0cmluZyBjb3VudC1vci1zdHJpbmcpKSkKKyAgICAgICAgKHQgKHNldHEg
Y291bnQtb3Itc3RyaW5nIG5pbCkpKQorICAobnMtYmFkZ2UgY291bnQtb3Itc3RyaW5nKSkKKwor
KGNsLWRlZm1ldGhvZCBkb2NrLWF0dGVudGlvbiAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChkb2NrLS1iYWNrLWVuZCAoZXFsICducykpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdF
TkNZIHVzZXIgYXR0ZW50aW9uIHdpdGhpbiBUSU1FT1VUIHNlY29uZHMuIgorICAobnMtcmVxdWVz
dC11c2VyLWF0dGVudGlvbiB1cmdlbmN5KQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkK
KyAgICAocnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydkb2Nr
LWF0dGVudGlvbiBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLXByb2dyZXNzICgmY29udGV4
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnbnMp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJE
aXNwbGF5IGRvY2sgcHJvZ3Jlc3MgZm9yIFBST0dSRVNTLiIKKyAgKG5zLXByb2dyZXNzLWluZGlj
YXRvciAoZG9jay0tdmFsaWRhdGUtcHJvZ3Jlc3MgcHJvZ3Jlc3MpKSkKKworDAorOzsgTVMtV2lu
ZG93cyBzdXBwb3J0LgorCisoZGVjbGFyZS1mdW5jdGlvbiB3MzItYmFkZ2UgInczMmZucy5jIikK
KyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uICJ3MzJmbnMuYyIp
CisoZGVjbGFyZS1mdW5jdGlvbiB3MzItcHJvZ3Jlc3MtaW5kaWNhdG9yICJ3MzJmbnMuYyIpCisK
KyhkZWZ2YXIgZG9jay13MzItYmFkZ2UtYmcgJygjeGU3ICN4NTggI3g1NykgOyByZWRpc2gKKyAg
IkludGVnZXIgUkdCIHZhbHVlcyBhcyB0aGUgYmFja2dyb3VuZCBmb3IgdzMyIGJhZGdlLiIpCisK
KyhkZWZ2YXIgZG9jay13MzItYmFkZ2UtZmcgJygjeGZmICN4ZmYgI3hmZikgOyB3aGl0ZQorICAi
SW50ZWdlciBSR0IgdmFsdWVzIGFzIHRoZSBmb3JlZ3JvdW5kIGZvciB3MzIgYmFkZ2UgdGV4dC4i
KQorCisoY2wtZGVmbWV0aG9kIGRvY2stLWVuYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnd2luZG93cy1udCkpKQorICAoaWdu
b3JlKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLS1kaXNhYmxlICgmY29udGV4dAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnd2luZG93cy1udCkpKQor
ICAoaWdub3JlKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLWJhZGdlICgmY29udGV4dAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnd2luZG93cy1udCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudC1vci1zdHJpbmcpCisgICJT
ZXQgYmFkZ2UgdG8gQ09VTlQtT1ItU1RSSU5HLCBvciBjbGVhciB0aGUgYmFkZ2UuCitEdWUgdG8g
TVMtV2luIGljb24gc2l6ZSBsaW1pdGF0aW9ucywgYWJicmV2aWF0ZSBpbnRlZ2VycyBvdXRzaWRl
IHRoZQorcmFuZ2UgLTk5LCA5OSB1c2luZyBcIi05OVwiIGFuZCBcIjk5K1wiLCByZXNwZWN0aXZl
bHksCithbmQgdHJ1bmNhdGUgc3RyaW5ncyBsb25nZXIgdGhhbiAyIGNoYXJhY3RlcnMuIgorICAo
Y29uZCAoKHN0cmluZ3AgY291bnQtb3Itc3RyaW5nKQorICAgICAgICAgKGlmIChzdHJpbmctZW1w
dHktcCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5n
IG5pbCkKKyAgICAgICAgICAgKHdoZW4gKGxlbmd0aD4gY291bnQtb3Itc3RyaW5nIDIpCisgICAg
ICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nCisgICAgICAgICAgICAgICAgICAgKHRydW5j
YXRlLXN0cmluZy10by13aWR0aCBjb3VudC1vci1zdHJpbmcgMyAwIG5pbCB0KSkpKSkKKyAgICAg
ICAgKChpbnRlZ2VycCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAoaWYgKGFuZCAoPiBjb3Vu
dC1vci1zdHJpbmcgLTEwMCkKKyAgICAgICAgICAgICAgICAgICg8IGNvdW50LW9yLXN0cmluZyAx
MDApKQorICAgICAgICAgICAgIChzZXRxIGNvdW50LW9yLXN0cmluZyAobnVtYmVyLXRvLXN0cmlu
ZyBjb3VudC1vci1zdHJpbmcpKQorICAgICAgICAgICAoaWYgKDwgY291bnQtb3Itc3RyaW5nIDAp
CisgICAgICAgICAgICAgICAoc2V0cSBjb3VudC1vci1zdHJpbmcgIi05OSIpCisgICAgICAgICAg
ICAgKHNldHEgY291bnQtb3Itc3RyaW5nICI5OSsiKSkpKQorICAgICAgICAodCAoc2V0cSBjb3Vu
dC1vci1zdHJpbmcgbmlsKSkpCisgICh3MzItYmFkZ2UgY291bnQtb3Itc3RyaW5nIGRvY2stdzMy
LWJhZGdlLWJnIGRvY2stdzMyLWJhZGdlLWZnKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLWF0dGVu
dGlvbiAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2NrLS1iYWNr
LWVuZCAoZXFsICd3aW5kb3dzLW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZv
cHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJSZXF1ZXN0IFVSR0VOQ1kgdXNlciBhdHRlbnRp
b24gd2l0aGluIFRJTUVPVVQgc2Vjb25kcy4iCisgICh3MzItcmVxdWVzdC11c2VyLWF0dGVudGlv
biB1cmdlbmN5KQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkKKyAgICAocnVuLXdpdGgt
dGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydkb2NrLWF0dGVudGlvbiBuaWwp
KSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLXByb2dyZXNzICgmY29udGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnd2luZG93cy1udCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBwcm9ncmVzcykKKyAgIkRpc3BsYXkg
ZG9jayBwcm9ncmVzcyBmb3IgUFJPR1JFU1MuIgorICAodzMyLXByb2dyZXNzLWluZGljYXRvciAo
ZG9jay0tdmFsaWRhdGUtcHJvZ3Jlc3MgcHJvZ3Jlc3MpKSkKKworDAorCisocHJvdmlkZSAnZG9j
ay1tb2RlKQorCis7OzsgZG9jay1tb2RlLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvc3JjL25z
Zm5zLm0gYi9zcmMvbnNmbnMubQppbmRleCAzNTI4YzRhY2Q1MC4uMWE4Zjk1YzE0ZWYgMTAwNjQ0
Ci0tLSBhL3NyYy9uc2Zucy5tCisrKyBiL3NyYy9uc2Zucy5tCkBAIC0zNjc0LDYgKzM2NzQsMTI5
IEBAIFRoZSBwb3NpdGlvbiBpcyByZXR1cm5lZCBhcyBhIGNvbnMgY2VsbCAoWCAuIFkpIG9mIHRo
ZQogICByZXR1cm4gUW5pbDsKIH0KIAorREVGVU4gKCJucy1iYWRnZSIsIEZuc19iYWRnZSwgU25z
X2JhZGdlLCAxLCAxLCAwLAorICAgICAgIGRvYzogLyogU2V0IHRoZSBhcHAgaWNvbiBiYWRnZSB0
byBCQURHRS4KK0JBREdFIHNob3VsZCBiZSBhIHN0cmluZyBzaG9ydCBlbm91Z2ggdG8gZGlzcGxh
eSBuaWNlbHkgaW4gdGhlIHNob3J0CitzcGFjZSBpbnRlbmRlZCBmb3IgYmFkZ2VzLgorSWYgQkFE
R0UgaXMgbmlsLCBjbGVhciB0aGUgYXBwIGJhZGdlLiAgKi8pCisgIChMaXNwX09iamVjdCBiYWRn
ZSkKK3sKKyAgYmxvY2tfaW5wdXQgKCk7CisgIGlmIChOSUxQIChiYWRnZSkpCisgICAgW1tOU0Fw
cCBkb2NrVGlsZV0gc2V0QmFkZ2VMYWJlbDogbmlsXTsKKyAgZWxzZQorICAgIHsKKyAgICAgIENI
RUNLX1NUUklORyAoYmFkZ2UpOworICAgICAgW1tOU0FwcCBkb2NrVGlsZV0gc2V0QmFkZ2VMYWJl
bDoKKwkJCSAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOiBTU0RBVEEgKGJhZGdlKV1d
OworICAgIH0KKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKKy8qIFVz
ZSAtMSB0byBpbmRpY2F0ZSBubyBhY3RpdmUgcmVxdWVzdC4gICovCitzdGF0aWMgTlNJbnRlZ2Vy
IG5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faWQgPSAtMTsKKworREVGVU4gKCJucy1yZXF1ZXN0
LXVzZXItYXR0ZW50aW9uIiwKKyAgICAgICBGbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAg
ICAgICBTbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAgICAgICAxLCAxLCAwLAorICAgICAg
IGRvYzogLyogQm91bmNlIHRoZSBhcHAgZG9jayBpY29uIHRvIHJlcXVlc3QgdXNlciBhdHRlbnRp
b24uCitJZiBVUkdFTkNZIG5pbCwgY2FuY2VsIHRoZSBvdXRzdGFuZGluZyByZXF1ZXN0LCBpZiBh
bnkuCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wgYGluZm9ybWF0aW9uYWwnLCBib3VuY2luZyBs
YXN0cyBhIGZldyBzZWNvbmRzLgorSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBjcml0aWNhbCcs
IGJvdW5jaW5nIGxhc3RzIHVudGlsIEVtYWNzIGlzCitmb2N1c2VkLiAgKi8pCisgIChMaXNwX09i
amVjdCB1cmdlbmN5KQoreworICBibG9ja19pbnB1dCAoKTsKKyAgaWYgKG5zX3JlcXVlc3RfdXNl
cl9hdHRlbnRpb25faWQgIT0gLTEpCisgICAgeworICAgICAgW05TQXBwIGNhbmNlbFVzZXJBdHRl
bnRpb25SZXF1ZXN0OiBuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkXTsKKyAgICAgIG5zX3Jl
cXVlc3RfdXNlcl9hdHRlbnRpb25faWQgPSAtMTsKKyAgICB9CisgIGlmICghTklMUCAodXJnZW5j
eSkgJiYgU1lNQk9MUCAodXJnZW5jeSkpCisgICAgeworICAgICAgaWYgKEVRICh1cmdlbmN5LCBR
aW5mb3JtYXRpb25hbCkpCisJbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IFtOU0FwcCBy
ZXF1ZXN0VXNlckF0dGVudGlvbjoKKwkJCQkJCU5TSW5mb3JtYXRpb25hbFJlcXVlc3RdOworICAg
ICAgZWxzZSBpZiAoRVEgKHVyZ2VuY3ksIFFjcml0aWNhbCkpCisJbnNfcmVxdWVzdF91c2VyX2F0
dGVudGlvbl9pZCA9IFtOU0FwcCByZXF1ZXN0VXNlckF0dGVudGlvbjoKKwkJCQkJCU5TQ3JpdGlj
YWxSZXF1ZXN0XTsKKyAgICB9CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiBRbmlsOwor
fQorCitERUZVTiAoIm5zLXByb2dyZXNzLWluZGljYXRvciIsCisgICAgICAgRm5zX3Byb2dyZXNz
X2luZGljYXRvciwKKyAgICAgICBTbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIDEsIDEs
IDAsCisgICAgICAgZG9jOiAvKiBCb3VuY2UgdGhlIGFwcCBkb2NrIGljb24gdG8gcmVxdWVzdCB1
c2VyIGF0dGVudGlvbi4KKwkgICAgICAgUFJPR1JFU1MgaXMgYSBmbG9hdCBiZXR3ZWVuIDAuMCBh
bmQgMS4wLgorCSAgICAgICBJZiBQUk9HUkVTUyBpcyBuaWwsIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mg
aW5kaWNhdG9yLiAgKi8pCisgIChMaXNwX09iamVjdCBwcm9ncmVzcykKK3sKKyAgYmxvY2tfaW5w
dXQgKCk7CisgIE5TRG9ja1RpbGUgKmRvY2tfdGlsZSA9IFtOU0FwcCBkb2NrVGlsZV07CisgIC8q
IFVzZSBOU0xldmVsSW5kaWNhdG9yIHdpdGggcmVsaWFibGUgcmVkcmF3cywgbm90IE5TUHJvZ3Jl
c3NJbmRpY2F0b3IuICAqLworICBOU0xldmVsSW5kaWNhdG9yICpsZXZlbF9pbmRpY2F0b3I7Cisg
IC8qIFJldXNlIHRoZSBpbmRpY2F0b3Igc3VidmlldyBvciBjcmVhdGUgb25lLiAqLworICBpZiAo
ZG9ja190aWxlLmNvbnRlbnRWaWV3CisgICAgICAmJiBbW2RvY2tfdGlsZS5jb250ZW50VmlldyBz
dWJ2aWV3c10gY291bnRdID4gMAorICAgICAgJiYgW1tbZG9ja190aWxlLmNvbnRlbnRWaWV3IHN1
YnZpZXdzXSBsYXN0T2JqZWN0XQorICAgICAgICAgICAgICAgICAgICAgICAgaXNLaW5kT2ZDbGFz
czpbTlNMZXZlbEluZGljYXRvciBjbGFzc11dKQorICAgIGxldmVsX2luZGljYXRvciA9CisgICAg
ICAoTlNMZXZlbEluZGljYXRvciAqKVtbW2RvY2tfdGlsZSBjb250ZW50Vmlld10gc3Vidmlld3Nd
IGxhc3RPYmplY3RdOworICAgIGVsc2UKKyAgICAgIHsKKwlpZiAoIWRvY2tfdGlsZS5jb250ZW50
VmlldykKKwkgIHsKKwkgICAgTlNJbWFnZVZpZXcqIGltYWdlX3ZpZXcgPSBbW05TSW1hZ2VWaWV3
IGFsbG9jXSBpbml0XTsKKwkgICAgW2ltYWdlX3ZpZXcgc2V0SW1hZ2U6IFtOU0FwcCBhcHBsaWNh
dGlvbkljb25JbWFnZV1dOworCSAgICBbZG9ja190aWxlIHNldENvbnRlbnRWaWV3OiBpbWFnZV92
aWV3XTsKKwkgIH0KKwkvKiBTZXQgd2lkdGggdG8gdGhlIHdpZHRoIG9mIHRoZSBhcHBsaWNhdGlv
biBpY29uLCBhbmQgaGVpZ2h0IHRvCisJICAgJSBvZiB0aGUgaWNvbiBoZWlnaHQgdG8gcmVzcGVj
dCBzY2FsZWQgaWNvbnMuICAqLworCWZsb2F0IHdpZHRoID0gW1tOU0FwcCBhcHBsaWNhdGlvbklj
b25JbWFnZV0gc2l6ZV0ud2lkdGg7CisJZmxvYXQgaGVpZ2h0ID0gMC4xMCAqIFtbTlNBcHAgYXBw
bGljYXRpb25JY29uSW1hZ2VdIHNpemVdLmhlaWdodDsKKwlsZXZlbF9pbmRpY2F0b3IgPQorCSAg
W1tOU0xldmVsSW5kaWNhdG9yIGFsbG9jXSBpbml0V2l0aEZyYW1lOgorCQkJCSAgICAgIE5TTWFr
ZVJlY3QgKDAuMCwgMC4wLAorCQkJCQkJICB3aWR0aCwgaGVpZ2h0KV07CisJW2xldmVsX2luZGlj
YXRvciBzZXRXYW50c0xheWVyOiBZRVNdOyAvKiBQZXJmb3JtYW5jZS4gICovCisJW2xldmVsX2lu
ZGljYXRvciBzZXRFbmFibGVkOiBOT107IC8qIElnbm9yZSBtb3VzZSBpbnB1dC4gICovCisJW2xl
dmVsX2luZGljYXRvciBzZXRMZXZlbEluZGljYXRvclN0eWxlOgorCQkJICAgTlNMZXZlbEluZGlj
YXRvclN0eWxlQ29udGludW91c0NhcGFjaXR5XTsKKwkvKiBNYXRjaCBOU1Byb2dyZXNzSW5kaWNh
dG9yIGNvbG9yLiAgKi8KKwlbbGV2ZWxfaW5kaWNhdG9yIHNldEZpbGxDb2xvcjogW05TQ29sb3Ig
Y29udHJvbEFjY2VudENvbG9yXV07CisJW2xldmVsX2luZGljYXRvciBzZXRNaW5WYWx1ZTogMC4w
XTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNldE1heFZhbHVlOiAxLjBdOworCS8qIFRoZSBjb250ZW50
VmlldyB0YWtlcyBvd25lcnNoaXAuICAqLworCVtkb2NrX3RpbGUuY29udGVudFZpZXcgYWRkU3Vi
dmlldzogbGV2ZWxfaW5kaWNhdG9yXTsKKyAgICAgIH0KKyAgZG91YmxlIHByb2dyZXNzX3ZhbHVl
OworICBCT09MIGhpZGUgPSAoTklMUCAocHJvZ3Jlc3MpCisJICAgICAgIHx8ICghTklMUCAocHJv
Z3Jlc3MpICYmICEoRkxPQVRQIChwcm9ncmVzcykpKSk7CisgIGlmICghaGlkZSkKKyAgICB7Cisg
ICAgICBwcm9ncmVzc192YWx1ZSA9IFhGTE9BVF9EQVRBIChwcm9ncmVzcyk7CisgICAgICBoaWRl
ID0gKHByb2dyZXNzX3ZhbHVlIDwgMC4wIHx8IHByb2dyZXNzX3ZhbHVlID4gMS4wKTsKKyAgICB9
CisgIGlmIChoaWRlKQorICAgIHsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0RG91YmxlVmFs
dWU6IDAuMF07CisgICAgICBbbGV2ZWxfaW5kaWNhdG9yIHNldEhpZGRlbjogWUVTXTsKKyAgICB9
CisgIGVsc2UKKyAgICB7CisgICAgICBbbGV2ZWxfaW5kaWNhdG9yIHNldERvdWJsZVZhbHVlOiBw
cm9ncmVzc192YWx1ZV07CisgICAgICBbbGV2ZWxfaW5kaWNhdG9yIHNldEhpZGRlbjogTk9dOwor
ICAgIH0KKyAgW2RvY2tfdGlsZSBkaXNwbGF5XTsKKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0
dXJuIFFuaWw7Cit9CisKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAKIERFRlVOICgibnMtc2VuZC1p
dGVtcyIsCkBAIC0zOTU3LDYgKzQwODAsOSBAQCAtIChMaXNwX09iamVjdClsaXNwU3RyaW5nCiAg
IGRlZnN1YnIgKCZTbnNfc2V0X21vdXNlX2Fic29sdXRlX3BpeGVsX3Bvc2l0aW9uKTsKICAgZGVm
c3ViciAoJlNuc19tb3VzZV9hYnNvbHV0ZV9waXhlbF9wb3NpdGlvbik7CiAgIGRlZnN1YnIgKCZT
bnNfc2hvd19jaGFyYWN0ZXJfcGFsZXR0ZSk7CisgIGRlZnN1YnIgKCZTbnNfYmFkZ2UpOworICBk
ZWZzdWJyICgmU25zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24pOworICBkZWZzdWJyICgmU25zX3By
b2dyZXNzX2luZGljYXRvcik7CiAjaWZkZWYgTlNfSU1QTF9DT0NPQQogICBkZWZzdWJyICgmU25z
X3NlbmRfaXRlbXMpOwogI2VuZGlmCkBAIC00MDIzLDQgKzQxNDksNiBAQCAtIChMaXNwX09iamVj
dClsaXNwU3RyaW5nCiAgIERFRlNZTSAoUWFzc3FfZGVsZXRlX2FsbCwgImFzc3EtZGVsZXRlLWFs
bCIpOwogICBERUZTWU0gKFFydW5fYXRfdGltZSwgInJ1bi1hdC10aW1lIik7CiAgIERFRlNZTSAo
UXhfaGlkZV90aXAsICJ4LWhpZGUtdGlwIik7CisgIERFRlNZTSAoUWluZm9ybWF0aW9uYWwsICJp
bmZvcm1hdGlvbmFsIik7CisgIERFRlNZTSAoUWNyaXRpY2FsLCAiY3JpdGljYWwiKTsKIH0KZGlm
ZiAtLWdpdCBhL3NyYy93MzJmbnMuYyBiL3NyYy93MzJmbnMuYwppbmRleCAzZmMwZjU1MjQ0Zi4u
YzBkN2NhZDNkYzUgMTAwNjQ0Ci0tLSBhL3NyYy93MzJmbnMuYworKysgYi9zcmMvdzMyZm5zLmMK
QEAgLTM4LDYgKzM4LDEwIEBAICNkZWZpbmUgQ09CSk1BQ1JPUyAvKiBBc2sgZm9yIEMgZGVmaW5p
dGlvbnMgZm9yIENPTS4gICovCiAjaW5jbHVkZSA8c2hsb2JqLmg+CiAjaW5jbHVkZSA8b2xlaWRs
Lmg+CiAjaW5jbHVkZSA8b2JqaWRsLmg+CisjaWYgIWRlZmluZWQgTUlOR1dfVzY0ICYmICFkZWZp
bmVkIENZR1dJTgorIyBkZWZpbmUgSU5JVEdVSUQKKyNlbmRpZgorI2luY2x1ZGUgPGluaXRndWlk
Lmg+CiAjaW5jbHVkZSA8b2xlMi5oPgogCiAjaW5jbHVkZSAibGlzcC5oIgpAQCAtMTA5ODUsNiAr
MTA5ODksNDA4IEBAIERFRlVOICgidzMyLXNldC13YWxscGFwZXIiLCBGdzMyX3NldF93YWxscGFw
ZXIsIFN3MzJfc2V0X3dhbGxwYXBlciwgMSwgMSwgMCwKIH0KICNlbmRpZgogCisMCisjaWZkZWYg
V0lORE9XU05UCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJICAgICBUYXNrYmFyIC8gRG9jaworICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCisjaWZuZGVmIElJRF9JVGFza2Jhckxpc3QzCitERUZJTkVfR1VJRChJ
SURfSVRhc2tiYXJMaXN0MywgMHhlYTFhZmI5MSwgMHg5ZTI4LCAweDRiODYsIDB4OTAsMHhlOSwg
MHg5ZSwweDlmLDB4OGEsMHg1ZSwweGVmLDB4YWYpOworI2VuZGlmCisKKy8qIFBhcnNlIFJHQl9M
SVNULCBhbmQgcmV0dXJuIGEgQ09MT1JSRUYuCisgICBSR0JfTElTVCBzaG91bGQgY29udGFpbiAo
YXQgbGVhc3QpIDMgbGlzcCBpbnRlZ2Vycy4KKyAgIFJldHVybiAweGZmMDAwMDAwIGlmZiBSR0Jf
TElTVCBpcyBub3QgT0suICAqLworCitzdGF0aWMgQ09MT1JSRUYKK3JnYl9saXN0X3RvX2NvbG9y
cmVmIChMaXNwX09iamVjdCByZ2JfbGlzdCkKK3sKKyNkZWZpbmUgUEFSU0VfUkdCX0xJU1RfRklF
TEQoZmllbGQpCQkJCQlcCisgIGlmIChDT05TUCAocmdiX2xpc3QpICYmIEZJWE5VTVAgKFhDQVIg
KHJnYl9saXN0KSkpCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBmaWVsZCA9IChCWVRFKSBY
RklYTlVNIChYQ0FSIChyZ2JfbGlzdCkpOwkJCQlcCisgICAgICByZ2JfbGlzdCA9IFhDRFIgKHJn
Yl9saXN0KTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICBlbHNlCQkJCQkJCQkJXAorICAgIHJl
dHVybiAweGZmMDAwMDAwOworCisgIEJZVEUgcmVkLCBncmVlbiwgYmx1ZTsKKyAgUEFSU0VfUkdC
X0xJU1RfRklFTEQgKHJlZCk7CisgIFBBUlNFX1JHQl9MSVNUX0ZJRUxEIChncmVlbik7CisgIFBB
UlNFX1JHQl9MSVNUX0ZJRUxEIChibHVlKTsKKworICByZXR1cm4gUkdCIChyZWQsIGdyZWVuLCBi
bHVlKTsKK30KKworLyogVHJhY2sgdGhlIHdpbmRvdyBoYW5kbGUgZm9yIHRoZSBnbG9iYWwgYmFk
Z2UgaWNvbi4gKi8KK3N0YXRpYyBIV05EIF93MzJfYmFkZ2VfaHduZCA9IE5VTEw7CisKK0RFRlVO
ICgidzMyLWJhZGdlIiwKKyAgICAgICBGdzMyX2JhZGdlLAorICAgICAgIFN3MzJfYmFkZ2UsCisg
ICAgICAgMywgMywgMCwKKyAgICAgICBkb2M6IC8qIFNldCB0aGUgdGFza2JhciBpY29uIG92ZXJs
YXkgaW1hZ2UgYmFzZWQgb24gQkFER0UuCitCQURHRSBpcyBhIFVURi04IHN0cmluZy4gIElmIEJB
REdFIGlzIG5pbCwgcmVtb3ZlIHRoZSBvdmVybGF5LiAgRG8KK25vdGhpbmcgaWYgV2luZG93cyBk
b2VzIG5vdCBzdXBwb3J0IHRoZSBJVGFza2Jhckxpc3QzIGludGVyZmFjZSBhbmQKK3JldHVybiBu
aWwsIG90aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcgaWYgdGhlIGZyYW1lIGlzIG5vdCAo
eWV0KQorYXNzb2NpYXRlZCB3aXRoIGFuIEhXTkQuICBCQUNLR1JPVU5EIGFuZCBGT1JFR1JPVU5E
IGFyZSBsaXN0cyBvZiAoUkVECitHUkVFTiBCTFVFKSA4LWJpdCBpbnRlZ2VyIHZhbHVlcy4gICov
KQorICAoTGlzcF9PYmplY3QgYmFkZ2UsIExpc3BfT2JqZWN0IGJnLCBMaXNwX09iamVjdCBmZykK
K3sKKyAgQ29Jbml0aWFsaXplIChOVUxMKTsKKyAgSVRhc2tiYXJMaXN0MyAqdGFza19iYXJfbGlz
dCA9IE5VTEw7CisgIEhSRVNVTFQgciA9IENvQ3JlYXRlSW5zdGFuY2UoJkNMU0lEX1Rhc2tiYXJM
aXN0LAorCQkJICAgICAgIE5VTEwsCisJCQkgICAgICAgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsCisJ
CQkgICAgICAgJklJRF9JVGFza2Jhckxpc3QzLAorCQkJICAgICAgICh2b2lkICoqKSZ0YXNrX2Jh
cl9saXN0KTsKKyAgaWYgKHIgIT0gU19PSykKKyAgICB7CisgICAgICAvKiBGSVhNRTogRG8gd2Ug
bmVlZCB0byBjYWxsIENvVW5pbml0aWFsaXplPyAgKi8KKyAgICAgIC8qIENvVW5pbml0aWFsaXpl
ICgpOyAgKi8KKyAgICAgIHJldHVybiBRbmlsOworICAgIH0KKworICBIV05EIGh3bmQgPSBOVUxM
OworICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7CisgIGlmIChGUkFNRV9X
MzJfUCAoc2YpICYmIEZSQU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFNRV9XMzJfV0lO
RE9XIChzZik7CisgIGlmIChod25kID09IE5VTEwpCisgICAgeworICAgICAgdGFza19iYXJfbGlz
dC0+bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICAgICAgLyogRklYTUU6IERvIHdl
IG5lZWQgdG8gY2FsbCBDb1VuaW5pdGlhbGl6ZT8gICovCisgICAgICAvKiBDb1VuaW5pdGlhbGl6
ZSAoKTsgICovCisgICAgICByZXR1cm4gUW5pbDsKKyAgICB9CisKKyAgLyogUmVtb3ZlIHRoZSBi
YWRnZSBvdmVybGF5IGZvciB0aGUgb2xkIHdpbmRvdyBoYW5kbGUuICAqLworICBpZiAoX3czMl9i
YWRnZV9od25kICE9IE5VTEwgJiYgX3czMl9iYWRnZV9od25kICE9IGh3bmQpCisgICAgICB0YXNr
X2Jhcl9saXN0LT5scFZ0YmwtPlNldE92ZXJsYXlJY29uICh0YXNrX2Jhcl9saXN0LAorCQkJCQkg
ICAgIF93MzJfYmFkZ2VfaHduZCwKKwkJCQkJICAgICBOVUxMLAorCQkJCQkgICAgIE5VTEwpOwor
CisgIGlmICghTklMUCAoYmFkZ2UpICYmIFNUUklOR1AgKGJhZGdlKQorICAgICAgJiYgQ09OU1Ag
KGJnKSAmJiBDT05TUCAoZmcpKQorICAgIHsKKyAgICAgIENPTE9SUkVGIGJnX3JnYiA9IHJnYl9s
aXN0X3RvX2NvbG9ycmVmIChiZyk7CisgICAgICBDT0xPUlJFRiBmZ19yZ2IgPSByZ2JfbGlzdF90
b19jb2xvcnJlZiAoZmcpOworICAgICAgaWYgKGJnX3JnYiA9PSAweGZmMDAwMDAwKQorCXsKKwkg
IHNpZ25hbF9lcnJvciAoIkludmFsaWQgYmFja2dyb3VuZCBSR0IiLCBiZyk7CisJICByZXR1cm4g
UW5pbDsKKwl9CisgICAgICBpZiAoZmdfcmdiID09IDB4ZmYwMDAwMDApCisJeworCSAgc2lnbmFs
X2Vycm9yICgiSW52YWxpZCBmb3JlZ3JvdW5kIFJHQiIsIGZnKTsKKwkgIHJldHVybiBRbmlsOwor
CX0KKworICAgICAgLyogUHJlcGFyZSBhIHN0cmluZyBmb3IgZHJhd2luZyBhbmQgYXMgYWx0LXRl
eHQuICAqLworICAgICAgTGlzcF9PYmplY3QgYmFkZ2VfdXRmOCA9IEVOQ09ERV9VVEZfOCAoYmFk
Z2UpOworICAgICAgaW50IHdpZGVfbGVuID0gcE11bHRpQnl0ZVRvV2lkZUNoYXIgKENQX1VURjgs
IDAsCisJCQkJCSAgIFNTREFUQSAoYmFkZ2VfdXRmOCksCisJCQkJCSAgIC0xLCBOVUxMLCAwKTsK
KyAgICAgIHdjaGFyX3QgKmJhZGdlX3cgPSBhbGxvY2EgKCh3aWRlX2xlbiArIDEpICogc2l6ZW9m
ICh3Y2hhcl90KSk7CisgICAgICBwTXVsdGlCeXRlVG9XaWRlQ2hhciAoQ1BfVVRGOCwgMCwgU1NE
QVRBIChiYWRnZV91dGY4KSwgLTEsCisJCQkgICAgKExQV1NUUikgYmFkZ2VfdywKKwkJCSAgICB3
aWRlX2xlbik7CisKKyAgICAgIC8qIFVzZSB0aGUgc21hbGwgaWNvbiBzaXplIFdpbmRvd3Mgc3Vn
Z2VzdHMgdG8gbm90IGhhcmQgY29kZSAxNngxNi4gICovCisgICAgICBpbnQgaWNvbl93aWR0aCA9
IEdldFN5c3RlbU1ldHJpY3MgKFNNX0NYU01JQ09OKTsKKyAgICAgIGludCBpY29uX2hlaWdodCA9
IEdldFN5c3RlbU1ldHJpY3MgKFNNX0NYU01JQ09OKTsKKworICAgICAgSERDIGh3bmRfZGMgPSBH
ZXREQyAoaHduZCk7CisgICAgICBIREMgZGMgPSBDcmVhdGVDb21wYXRpYmxlREMgKGh3bmRfZGMp
OworCisgICAgICBCSVRNQVBWNUhFQURFUiBiaTsKKyAgICAgIG1lbXNldCAoJmJpLCAwLCBzaXpl
b2YgKGJpKSk7CisgICAgICBiaS5iVjVTaXplID0gc2l6ZW9mIChiaSk7CisgICAgICBiaS5iVjVX
aWR0aCA9IGljb25fd2lkdGg7CisgICAgICBiaS5iVjVIZWlnaHQgPSAtaWNvbl9oZWlnaHQ7IC8q
IE5lZ2F0aXZlIGZvciBhIHRvcC1kb3duIERJQi4gICovCisgICAgICBiaS5iVjVQbGFuZXMgPSAx
OworICAgICAgYmkuYlY1Qml0Q291bnQgPSAzMjsKKyAgICAgIGJpLmJWNUNvbXByZXNzaW9uID0g
QklfQklURklFTERTOyAgLyogRW5hYmxlIHRoZSBtYXNrcyBiZWxvdy4gICovCisgICAgICBiaS5i
VjVSZWRNYXNrICAgPSAgMHgwMEZGMDAwMDsKKyAgICAgIGJpLmJWNUdyZWVuTWFzayA9ICAweDAw
MDBGRjAwOworICAgICAgYmkuYlY1Qmx1ZU1hc2sgID0gIDB4MDAwMDAwRkY7CisgICAgICBiaS5i
VjVBbHBoYU1hc2sgPSAgMHhGRjAwMDAwMDsKKworICAgICAgRFdPUkQgKmJpdG1hcF9waXhlbHM7
CisgICAgICBIQklUTUFQIGJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24gKGRjLCAoQklUTUFQSU5G
TyAqKSAmYmksCisJCQkJCSBESUJfUkdCX0NPTE9SUywKKwkJCQkJICh2b2lkICoqKSAmYml0bWFw
X3BpeGVscywKKwkJCQkJIE5VTEwsIDApOworICAgICAgSEdESU9CSiBvbGRfYml0bWFwID0gU2Vs
ZWN0T2JqZWN0KGRjLCBiaXRtYXApOworCisgICAgICAvKiBEcmF3IGEgY2lyY2xlIGZpbGxlZCB3
aXRoIGJnLiAgKi8KKyAgICAgIEhCUlVTSCBiZ19icnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2ggKGJn
X3JnYik7CisgICAgICBIR0RJT0JKIG9sZF9icnVzaCA9IFNlbGVjdE9iamVjdCAoZGMsIGJnX2Jy
dXNoKTsKKyAgICAgIEVsbGlwc2UgKGRjLCAwLCAwLCBpY29uX3dpZHRoLCBpY29uX2hlaWdodCk7
CisgICAgICBTZWxlY3RPYmplY3QgKGRjLCBvbGRfYnJ1c2gpOworICAgICAgRGVsZXRlT2JqZWN0
IChiZ19icnVzaCk7CisKKyAgICAgIC8qIERlcml2ZSBhIGZvbnQgc2NhbGVkIHRvIGZpdCB0aGUg
aWNvbi4gIEZpcnN0IGZpbmQgdGhlIHN5c3RlbSdzCisJIGJhc2UgZm9udC4gIFRoZW4gc2NhbGUg
aXQgdG8gZml0IGljb25faGVpZ2h0LiAgKi8KKyAgICAgIEhGT05UIGJhc2VfZm9udDsKKyAgICAg
IEJPT0wgY2xlYW5fdXBfYmFzZV9mb250ID0gRkFMU0U7CisgICAgICBpZiAoc3lzdGVtX3BhcmFt
ZXRlcnNfaW5mb193X2ZuKQorCXsKKwkgIE5PTkNMSUVOVE1FVFJJQ1NXIG5jbTsKKwkgIG1lbXNl
dCAoJm5jbSwgMCwgc2l6ZW9mIChuY20pKTsKKwkgIG5jbS5jYlNpemUgPSBzaXplb2YgKG5jbSk7
CisJICBTeXN0ZW1QYXJhbWV0ZXJzSW5mb1cgKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXpl
b2YgKG5jbSksICZuY20sIDApOworCSAgYmFzZV9mb250ID0gQ3JlYXRlRm9udEluZGlyZWN0VyAo
Jm5jbS5sZlNtQ2FwdGlvbkZvbnQpOworCSAgY2xlYW5fdXBfYmFzZV9mb250ID0gVFJVRTsKKwl9
CisgICAgICBlbHNlCisJYmFzZV9mb250ID0gKEhGT05UKSBHZXRTdG9ja09iamVjdCAoREVGQVVM
VF9HVUlfRk9OVCk7CisgICAgICBpZiAoY2xlYW5fdXBfYmFzZV9mb250KQorCURlbGV0ZU9iamVj
dCAoYmFzZV9mb250KTsKKworICAgICAgTE9HRk9OVCBsZjsKKyAgICAgIEdldE9iamVjdCAoYmFz
ZV9mb250LCBzaXplb2YgKGxmKSwgJmxmKTsKKyAgICAgIGxmLmxmV2VpZ2h0ID0gRldfQk9MRDsK
KyAgICAgIGxmLmxmT3V0UHJlY2lzaW9uID0gT1VUX09VVExJTkVfUFJFQ0lTOworICAgICAgLyog
Q2xlYXJUeXBlIHF1YWxpdHkgbmVlZHMgb3BxYXVlLCBidXQgd2UgZHJhdyB0cmFuc3BhcmVudC4g
ICovCisgICAgICBsZi5sZlF1YWxpdHkgPSBBTlRJQUxJQVNFRF9RVUFMSVRZOworICAgICAgLyog
TmVnYXRpdmUgbGZIZWlnaHQgaW5kaWNhdGVzIHBpeGVsIHVuaXRzIHZzLiBwb3NpdGl2ZSBpbiBw
b2ludHMuCisJIFVzZSB0aGUgTE9HUElYRUxTWSBweC9pbiBvZiB0aGUgcHJpbWFyeSBtb25pdG9y
LiAgKi8KKyAgICAgIGxmLmxmSGVpZ2h0ID0gLU11bERpdihpY29uX2hlaWdodCAvIDIsIC8qIEZp
dCB+MyBjaGFycy4gICovCisJCQkgICAgNzIsCisJCQkgICAgR2V0RGV2aWNlQ2FwcyhHZXREQyAo
TlVMTCksIExPR1BJWEVMU1kpKTsKKyAgICAgIC8qIEVuc3VyZSBsZkhlaWdodCBwaXhlbCBpbnRl
cnByZXRhdGlvbi4gICovCisgICAgICBpbnQgb2xkX21hcF9tb2RlID0gU2V0TWFwTW9kZSAoZGMs
IE1NX1RFWFQpOworICAgICAgSEZPTlQgc2NhbGVkX2ZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3Qg
KCZsZik7CisgICAgICBIR0RJT0JKIG9sZF9mb250ID0gU2VsZWN0T2JqZWN0IChkYywgc2NhbGVk
X2ZvbnQpOworICAgICAgU2V0TWFwTW9kZSAoZGMsIG9sZF9tYXBfbW9kZSk7CisKKyAgICAgIC8q
IERyYXcgYmFkZ2UgdGV4dC4gICovCisgICAgICBTZXRCa01vZGUgKGRjLCBUUkFOU1BBUkVOVCk7
CisgICAgICBTZXRUZXh0Q29sb3IgKGRjLCBmZ19yZ2IpOworICAgICAgUkVDVCByZWN0OworICAg
ICAgcmVjdC5sZWZ0ID0gcmVjdC50b3AgPSAwOworICAgICAgcmVjdC5yaWdodCA9IGljb25fd2lk
dGg7CisgICAgICByZWN0LmJvdHRvbSA9IGljb25faGVpZ2h0OworICAgICAgRHJhd1RleHRXIChk
YywgYmFkZ2VfdywKKwkJIC0xLCAvKiBJbmRpY2F0ZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLiAg
Ki8KKwkJICZyZWN0LAorCQkgRFRfQ0VOVEVSIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUg
fCBEVF9OT0NMSVApOworICAgICAgU2VsZWN0T2JqZWN0IChkYywgb2xkX2ZvbnQpOworICAgICAg
RGVsZXRlT2JqZWN0IChzY2FsZWRfZm9udCk7CisKKyAgICAgIC8qIE1ha2UgdGhlIGNpcmNsZSBh
bmQgaXRzIHRleHQgb3BhcXVlIGJ5IHNldHRpbmcgdGhlIGFscGhhCisJIGNoYW5uZWwgb24gZWFj
aCBwaXhlbCBmYWxsaW5nIHdpdGhpbiB0aGUgY2lyY2xlLiAgKi8KKyAgICAgIGludCBjaXJjbGVf
Y2VudGVyX3ggPSBpY29uX3dpZHRoIC8gMjsKKyAgICAgIGludCBjaXJjbGVfY2VudGVyX3kgPSBp
Y29uX2hlaWdodCAvIDI7CisgICAgICBpbnQgY2lyY2xlX3JhZGl1cyA9IChpY29uX3dpZHRoIDwg
aWNvbl9oZWlnaHQKKwkJCSAgID8gaWNvbl93aWR0aAorCQkJICAgOiBpY29uX2hlaWdodCkgLyAy
IC0gMjsKKyAgICAgIGludCBjaXJjbGVfcmFkaXVzX3NxID0gY2lyY2xlX3JhZGl1cyAqIGNpcmNs
ZV9yYWRpdXM7CisgICAgICBEV09SRCAqcGl4ZWw7CisgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGljb25faGVpZ2h0OyArK3kpCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaWNvbl93aWR0
aDsgKyt4KQorCSAgeworICAgICAgICAgICAgaW50IGR4ID0geCAtIGNpcmNsZV9jZW50ZXJfeDsK
KyAgICAgICAgICAgIGludCBkeSA9IHkgLSBjaXJjbGVfY2VudGVyX3k7CisgICAgICAgICAgICBp
ZiAoZHggKiBkeCArIGR5ICogZHkgPD0gY2lyY2xlX3JhZGl1c19zcSkKKwkgICAgICB7CisJCSAg
cGl4ZWwgPSBiaXRtYXBfcGl4ZWxzICsgKHkgKiBpY29uX3dpZHRoICsgeCk7CisJCSAgKnBpeGVs
IHw9IDB4ZmYwMDAwMDA7CisJICAgICAgfQorCSAgfQorCisgICAgICAvKiBEdW1teSBtb25vY2hy
b21lIGJpdG1hcCBtYXNrLCBpZ25vcmVkIHdoZW4gdGhlIGNvbG9yIGJpdG1hcCBoYXMKKwkgYW4g
YWxwaGEgY2hhbm5lbCwgYnV0IG5lZWRlZCB0byBzYXRpc2Z5IENyZWF0ZUljb25JbmRpcmVjdC4g
ICovCisgICAgICBIQklUTUFQIG1hc2tfYml0bWFwID0gQ3JlYXRlQml0bWFwIChpY29uX3dpZHRo
LCBpY29uX2hlaWdodCwgMSwgMSwgTlVMTCk7CisKKyAgICAgIC8qIGh0dHBzOi8vbGVhcm4ubWlj
cm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2FwaS93aW51c2VyL25mLXdpbnVzZXItY3Jl
YXRlaWNvbmluZGlyZWN0CisJIGhibU1hc2sgYW5kIGhibUNvbG9yIG1lbWJlcnMgb2YgdGhlIElD
T05JTkZPIHN0cnVjdHVyZSBzaG91bGQKKwkgbm90IGFscmVhZHkgYmUgc2VsZWN0ZWQgaW50byBh
IGRldmljZSBjb250ZXh0LiAgKi8KKyAgICAgIFNlbGVjdE9iamVjdCAoZGMsIG9sZF9iaXRtYXAp
OworCisgICAgICBJQ09OSU5GTyBpY29uX2luZm87CisgICAgICBtZW1zZXQgKCZpY29uX2luZm8s
IDAsIHNpemVvZiAoaWNvbl9pbmZvKSk7CisgICAgICBpY29uX2luZm8uZkljb24gPSBUUlVFOwor
ICAgICAgaWNvbl9pbmZvLmhibU1hc2sgPSBtYXNrX2JpdG1hcDsKKyAgICAgIGljb25faW5mby5o
Ym1Db2xvciA9IGJpdG1hcDsKKworICAgICAgSElDT04gaWNvbiA9IENyZWF0ZUljb25JbmRpcmVj
dCAoJmljb25faW5mbyk7CisgICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlNldE92ZXJsYXlJ
Y29uICh0YXNrX2Jhcl9saXN0LCBod25kLCBpY29uLCBiYWRnZV93KTsKKworICAgICAgRGVzdHJv
eUljb24gKGljb24pOworICAgICAgRGVsZXRlT2JqZWN0IChtYXNrX2JpdG1hcCk7CisgICAgICBE
ZWxldGVPYmplY3QgKGJpdG1hcCk7CisgICAgICBEZWxldGVEQyAoZGMpOworICAgICAgUmVsZWFz
ZURDIChod25kLCBod25kX2RjKTsKKyAgICAgIF93MzJfYmFkZ2VfaHduZCA9IGh3bmQ7CisgICAg
fQorICBlbHNlCisgICAgeworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRPdmVybGF5
SWNvbiAodGFza19iYXJfbGlzdCwgaHduZCwgTlVMTCwgTlVMTCk7CisgICAgICBfdzMyX2JhZGdl
X2h3bmQgPSBOVUxMOworICAgIH0KKworICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlJlbGVhc2Uo
dGFza19iYXJfbGlzdCk7CisgIC8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNhbGwgQ29VbmluaXRp
YWxpemU/ICAqLworICAvKiBDb1VuaW5pdGlhbGl6ZSAoKTsgICovCisgIHJldHVybiBRdDsKK30K
KwordHlwZWRlZiBCT09MIChXSU5BUEkgKiBGbGFzaFdpbmRvd0V4X1Byb2MpIChQRkxBU0hXSU5G
TyBwZndpKTsKKworc3RhdGljIEZsYXNoV2luZG93RXhfUHJvYyBfZmxhc2hfd2luZG93X2V4X2Zu
ID0gTlVMTDsKKworLyogVHJhY2sgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCB3aW5kb3cgaGFuZGxl
LiAgKi8KK3N0YXRpYyBIV05EIF93MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9od25kID0gTlVM
TDsKKworREVGVU4gKCJ3MzItcmVxdWVzdC11c2VyLWF0dGVudGlvbiIsCisgICAgICAgRnczMl9y
ZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAgICAgIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlv
biwKKyAgICAgICAxLCAxLCAwLAorICAgICAgIGRvYzogLyogRmxhc2ggdGhlIHRhc2tiYXIgaWNv
biBiYXNlZCBvbiBVUkdFTkNZLgorSWYgVVJHRU5DWSBpcyBuaWwsIGNhbmNlbCB0aGUgcmVxdWVz
dCwgaWYgYW55LiAgSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sCitgaW5mb3JtYXRpb25hbCcsIGZs
YXNoaW5nIGxhc3RzIHVudGlsIGNsZWFyZWQuICBJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wKK2Bj
cml0aWNhbCcsIGZsYXNoIHVudGlsIEVtYWNzIGlzIGZvY3VzZWQuICBEbyBub3RoaW5nIGlmIFdp
bmRvd3MgZG9lcworbm90IHN1cHBvcnQgRmxhc2hXaW5kb3dFeCBhbmQgcmV0dXJuIG5pbCwgb3Ro
ZXJ3aXNlIHJldHVybiB0LiAgRG8KK25vdGhpbmcgaWYgdGhlIGZyYW1lIGlzIG5vdCAoeWV0KSBh
c3NvY2lhdGVkIHdpdGggYW4gSFdORC4gICovKQorICAoTGlzcF9PYmplY3QgdXJnZW5jeSkKK3sK
KyAgaWYgKF9mbGFzaF93aW5kb3dfZXhfZm4gPT0gTlVMTCkKKyAgICB7CisgICAgICBfZmxhc2hf
d2luZG93X2V4X2ZuID0gKEZsYXNoV2luZG93RXhfUHJvYykKKwlnZXRfcHJvY19hZGRyIChHZXRN
b2R1bGVIYW5kbGUgKCJ1c2VyMzIuZGxsIiksICJGbGFzaFdpbmRvd0V4Iik7CisgICAgICBpZiAo
X2ZsYXNoX3dpbmRvd19leF9mbiA9PSBOVUxMKQorCXJldHVybiBRbmlsOworICAgIH0KKworICBz
dHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7CisgIGlmICghRlJBTUVfVzMyX1Ag
KHNmKSB8fCAhRlJBTUVfTElWRV9QIChzZikpCisgICAgcmV0dXJuIFFuaWw7CisKKyAgSFdORCBo
d25kID0gRlJBTUVfVzMyX1dJTkRPVyAoc2YpOworICBpZiAoaHduZCA9PSAwKQorICAgIHJldHVy
biBRbmlsOworCisgIEZMQVNIV0lORk8gZmxhc2hfaW5mbzsKKyAgZmxhc2hfaW5mby5jYlNpemUg
PSBzaXplb2YoZmxhc2hfaW5mbyk7CisgIGZsYXNoX2luZm8udUNvdW50ID0gMDsKKyAgZmxhc2hf
aW5mby5kd1RpbWVvdXQgPSAwOworCisgIC8qIGR3RmxhZ3MKKyAgICAgRkxBU0hXX0FMTCAgICAg
ICAweDAwMDAwMDAzIEZsYXNoIGJvdGggd2luZG93IGNhcHRpb24gYW5kIHRhc2tiYXIgYnV0dG9u
LgorICAgICBGTEFTSFdfQ0FQVElPTiAgIDB4MDAwMDAwMDEgRmxhc2ggdGhlIHdpbmRvdyBjYXB0
aW9uLgorICAgICBGTEFTSFdfU1RPUCAgICAgIDB4MDAwMDAwMDAgU3RvcCBmbGFzaGluZy4KKyAg
ICAgRkxBU0hXX1RJTUVSICAgICAweDAwMDAwMDA0IEZsYXNoIGNvbnRpbnVvdXNseSwgdW50aWwg
RkxBU0hXX1NUT1AuCisgICAgIEZMQVNIV19USU1FUk5PRkcgMHgwMDAwMDAwQyBGbGFzaCB1bnRp
bCB3aW5kb3cgY29tZXMgdG8gdGhlIGZvcmVncm91bmQuCisgICAgIEZMQVNIV19UUkFZICAgICAg
MHgwMDAwMDAwMiBGbGFzaCB0aGUgdGFza2JhciBidXR0b24uICAqLworCisgIGZsYXNoX2luZm8u
ZHdGbGFncyA9IDB4MDAwMDAwMDA7IC8qIEZMQVNIV19TVE9QICAqLworICBpZiAoX3czMl9yZXF1
ZXN0X3VzZXJfYXR0ZW50aW9uX2h3bmQgIT0gTlVMTAorICAgICAgJiYgX3czMl9yZXF1ZXN0X3Vz
ZXJfYXR0ZW50aW9uX2h3bmQgIT0gaHduZCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIGF0dGVu
dGlvbiBvbiB0aGUgb2xkIHdpbmRvdyBoYW5kbGUuICAqLworICAgICAgZmxhc2hfaW5mby5od25k
ID0gX3czMl9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2h3bmQ7CisgICAgICBfZmxhc2hfd2luZG93
X2V4X2ZuICgmZmxhc2hfaW5mbyk7CisgICAgICBfdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25f
aHduZCA9IGh3bmQ7CisgICAgfQorICBmbGFzaF9pbmZvLmh3bmQgPSBod25kOworCisgIGlmICgh
TklMUCAodXJnZW5jeSkgJiYgU1lNQk9MUCAodXJnZW5jeSkpCisgICAgeworICAgICAgLyogVGhl
IGludGVuZGVkIGNhbGxlciwgZG9jay1tb2RlLmVsICdkb2NrLWF0dGVudGlvbicsIGhhcyBpdHMg
b3duCisJIHRpbWVyIHRvIGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yIHNvIHRoaXMgd2ls
bCBmbGFzaCB1bnRpbAorCSBjbGVhcmVkIHZpYSB0aGUgdGltZXIgZm9yIGluZm9ybWF0aW9uYWwg
YXR0ZW50aW9uLCBvciB0aGUKKwkgd2luZG93IGNvbWVzIHRvIHRoZSBmb3JlZ3JvdW5kIGZvciBj
cml0aWNhbCBhdHRlbnRpb24uICAqLworICAgICAgaWYgKEVRICh1cmdlbmN5LCBRaW5mb3JtYXRp
b25hbCkpCisJZmxhc2hfaW5mby5kd0ZsYWdzID0gMHgwMDAwMDAwMyB8IDB4MDAwMDAwMDQ7IC8q
IEZMQVNIV19USU1FUiAgKi8KKyAgICAgIGVsc2UgaWYgKEVRICh1cmdlbmN5LCBRY3JpdGljYWwp
KQorCWZsYXNoX2luZm8uZHdGbGFncyA9IDB4MDAwMDAwMDMgfCAweDAwMDAwMDBDOyAvKiBGTEFT
SFdfVElNRVJOT0ZHICAqLworICAgIH0KKworICBfZmxhc2hfd2luZG93X2V4X2ZuICgmZmxhc2hf
aW5mbyk7CisgIHJldHVybiBRdDsKK30KKworLyogVHJhY2sgdGhlIHdpbmRvdyBoYW5kbGUgZm9y
IHRoZSBnbG9iYWwgcHJvZ3Jlc3MgaW5kaWNhdG9yLiAqLworc3RhdGljIEhXTkQgX3czMl9wcm9n
cmVzc19pbmRpY2F0b3JfaHduZCA9IE5VTEw7CisKK0RFRlVOICgidzMyLXByb2dyZXNzLWluZGlj
YXRvciIsCisgICAgICAgRnczMl9wcm9ncmVzc19pbmRpY2F0b3IsCisgICAgICAgU3czMl9wcm9n
cmVzc19pbmRpY2F0b3IsCisgICAgICAgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFNob3cgYSBw
cm9ncmVzcyBiYXIgb24gdGhlIHRhc2tiYXIgaWNvbiBmb3IgUFJPR1JFU1MuCitQUk9HUkVTUyBp
cyBhIGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLiAgSWYgUFJPR1JFU1MgaXMgbmlsLCBy
ZW1vdmUKK3RoZSBwcm9ncmVzcyBpbmRpY2F0b3IuICBEbyBub3RoaW5nIGlmIFdpbmRvd3MgZG9l
cyBub3Qgc3VwcG9ydCB0aGUKK0lUYXNrYmFyTGlzdDMgaW50ZXJmYWNlIGFuZCByZXR1cm4gbmls
LCBvdGhlcndpc2UgcmV0dXJuIHQuICBEbyBub3RoaW5nCitpZiB0aGUgZnJhbWUgaXMgbm90ICh5
ZXQpIGFzc29jaWF0ZWQgd2l0aCBhbiBIV05ELiAgKi8pCisgIChMaXNwX09iamVjdCBwcm9ncmVz
cykKK3sKKyAgQ29Jbml0aWFsaXplIChOVUxMKTsKKyAgSVRhc2tiYXJMaXN0MyAqdGFza19iYXJf
bGlzdCA9IE5VTEw7CisgIEhSRVNVTFQgciA9IENvQ3JlYXRlSW5zdGFuY2UoJkNMU0lEX1Rhc2ti
YXJMaXN0LAorCQkJICAgICAgIE5VTEwsCisJCQkgICAgICAgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIs
CisJCQkgICAgICAgJklJRF9JVGFza2Jhckxpc3QzLAorCQkJICAgICAgICh2b2lkICoqKSZ0YXNr
X2Jhcl9saXN0KTsKKyAgaWYgKHIgIT0gU19PSykKKyAgICB7CisgICAgICAvKiBGSVhNRTogRG8g
d2UgbmVlZCB0byBjYWxsIENvVW5pbml0aWFsaXplPyAgKi8KKyAgICAgIC8qIENvVW5pbml0aWFs
aXplICgpOyAgKi8KKyAgICAgIHJldHVybiBRbmlsOworICAgIH0KKworICBzdHJ1Y3QgZnJhbWUg
KnNmID0gU0VMRUNURURfRlJBTUUgKCk7CisgIEhXTkQgaHduZCA9IE5VTEw7CisgIGlmIChGUkFN
RV9XMzJfUCAoc2YpICYmIEZSQU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFNRV9XMzJf
V0lORE9XIChzZik7CisgIGlmIChod25kID09IE5VTEwpCisgICAgeworICAgICAgdGFza19iYXJf
bGlzdC0+bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICAgICAgLyogRklYTUU6IERv
IHdlIG5lZWQgdG8gY2FsbCBDb1VuaW5pdGlhbGl6ZT8gICovCisgICAgICAvKiBDb1VuaW5pdGlh
bGl6ZSAoKTsgICovCisgICAgICByZXR1cm4gUW5pbDsKKyAgICB9CisKKyAgaWYgKF93MzJfcHJv
Z3Jlc3NfaW5kaWNhdG9yX2h3bmQgIT0gTlVMTAorICAgICAgJiYgX3czMl9wcm9ncmVzc19pbmRp
Y2F0b3JfaHduZCAhPSBod25kKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIGluZGljYXRv
ciBmb3IgdGhlIG9sZCB3aW5kb3cgaGFuZGxlLiAgKi8KKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxw
VnRibC0+U2V0UHJvZ3Jlc3NTdGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIF93MzJf
cHJvZ3Jlc3NfaW5kaWNhdG9yX2h3bmQsCisJCQkJCSAgICAgICBUQlBGX05PUFJPR1JFU1MpOwor
ICAgIH0KKyAgX3czMl9wcm9ncmVzc19pbmRpY2F0b3JfaHduZCA9IGh3bmQ7CisKKyAgLyogU2Nh
bGUgdGFzayBiYXIgcHJvZ3Jlc3MgZnJvbSAwLjAtMS4wIHRvIDAtMTAwLiAgKi8KKyAgdW5zaWdu
ZWQgaW50IGFkal9wcm9ncmVzcyA9IDA7CisgIGlmICghTklMUCAocHJvZ3Jlc3MpICYmIEZMT0FU
UCAocHJvZ3Jlc3MpKQorICAgICAgYWRqX3Byb2dyZXNzID0gKHVuc2lnbmVkIGludCkgKDEwMC4w
ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRkxPQVRfREFUQSAocHJv
Z3Jlc3MpKTsKKyAgaWYgKGFkal9wcm9ncmVzcyA+IDApCisgICAgeworICAgICAgdGFza19iYXJf
bGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1N0YXRlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAg
ICAgaHduZCwgVEJQRl9OT1JNQUwpOworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQ
cm9ncmVzc1ZhbHVlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgYWRqX3Byb2dy
ZXNzLCAxMDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxw
VnRibC0+U2V0UHJvZ3Jlc3NTdGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIGh3bmQs
IFRCUEZfTk9QUk9HUkVTUyk7CisgICAgICBfdzMyX3Byb2dyZXNzX2luZGljYXRvcl9od25kID0g
TlVMTDsKKyAgICB9CisKKyAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFy
X2xpc3QpOworICAvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBjYWxsIENvVW5pbml0aWFsaXplPyAg
Ki8KKyAgLyogQ29VbmluaXRpYWxpemUgKCk7ICAqLworICByZXR1cm4gUXQ7Cit9CisKKyNlbmRp
ZiAvKiBXSU5ET1dTTlQgKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCQkgICAgSW5pdGlhbGl6YXRp
b24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KQEAgLTExNDg1LDYgKzExODkxLDE1IEBAIHN5bXNfb2ZfdzMy
Zm5zICh2b2lkKQogICBERUZTWU0gKFFjYXBzbG9jaywgImNhcHNsb2NrIik7CiAgIERFRlNZTSAo
UWtwX251bWxvY2ssICJrcC1udW1sb2NrIik7CiAgIERFRlNZTSAoUXNjcm9sbCwgInNjcm9sbCIp
OworCisgICNpZmRlZiBXSU5ET1dTTlQKKyAgLyogVGFza2Jhci9kb2NrICovCisgIGRlZnN1YnIg
KCZTdzMyX2JhZGdlKTsKKyAgZGVmc3ViciAoJlN3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yKTsKKyAg
ZGVmc3ViciAoJlN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbik7CisgIERFRlNZTSAoUWluZm9y
bWF0aW9uYWwsICJpbmZvcm1hdGlvbmFsIik7CisgIERFRlNZTSAoUWNyaXRpY2FsLCAiY3JpdGlj
YWwiKTsKKyAgI2VuZGlmCiB9CiAKIAwKLS0gCjIuNDcuMQoK
--0000000000008613b00643e352cb--




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Subject: bug#79859: Acknowledgement (Add dock-mode for system GUI dock
 icon support)
Message-ID: <handler.79859.B.176349350820894.ack <at> debbugs.gnu.org>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
X-Gnu-PR-Message: ack 79859
X-Gnu-PR-Package: emacs
Reply-To: 79859 <at> debbugs.gnu.org
Date: Tue, 18 Nov 2025 19:19:03 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 79859 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
79859: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D79859
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 20 Nov 2025 10:29:01 +0000
Resent-Message-ID: <handler.79859.B79859.176363448432460 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176363448432460
          (code B ref 79859); Thu, 20 Nov 2025 10:29:01 +0000
Received: (at 79859) by debbugs.gnu.org; 20 Nov 2025 10:28:04 +0000
Received: from localhost ([127.0.0.1]:46268 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vM1tS-0008RR-Vv
	for submit <at> debbugs.gnu.org; Thu, 20 Nov 2025 05:28:04 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:48016)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vM1tP-0008Qd-70
 for 79859 <at> debbugs.gnu.org; Thu, 20 Nov 2025 05:28:00 -0500
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 1vM1tJ-0000Rj-7X; Thu, 20 Nov 2025 05:27:53 -0500
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=XhMylOYMDW2AlTGjlmlpN5tqvpXt4OiVzNCmImPdumA=; b=mZDiCQQQtfgEWmuJ/yBr
 XY6AWr/Aw2HLdFcacYrmgB5E+jYzJR7qnYKq6+LhF64WzK4U3Wcdv0UV/j3L5f+wDd7yhE0O7HyuV
 Sc43R6UC6LIGJranRYF13z4HOoc0ygZzDsjvOdh+oDwnFFmppR9GQa8YGaGaksZqZLyfe/V32YM3z
 7UQIC1CdUwK6e7jMbgOkMqwnpWrTtAh0LBx9LM0M2jzVqiiBYUWTuOI92BiJFWKGzwjs9wACxgsOM
 fbVCHMhMJD41YINZ4wJ6oE5iSpz0R2njrlkXB6U6B+TSimkaHYL0uQVFQFOu+AdTvICalnurf9Vok
 09vnF4aNhwpV1Q==;
Date: Thu, 20 Nov 2025 12:27:49 +0200
Message-Id: <86bjkxhuca.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Tue, 18 Nov 2025 14:17:45
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Björn Bidar <bjorn.bidar@HIDDEN>
> From: Stéphane Marks <shipmints@HIDDEN>
> Date: Tue, 18 Nov 2025 14:17:45 -0500
> 
> This patch implements system GUI dock features for icon badges, icon progress indicator, and icon attention
> request with implementations for GNU/Linux KDE & GNOME, NS/macOS, and MS-Windows.

Thank you for working on this important feature.

> GNU/Linux shells need to use an extension or include built-in support for the protocol documented here
> https://wiki.ubuntu.com/Unity/LauncherAPI.  I tested using this "standard" shell extension
> https://extensions.gnome.org/extension/307/dash-to-dock/ on GNOME and assistance and testing on KDE
> from the reddit user GeneAutomatic3471.

This information should be in the NEWS entry.

> I'd appreciate thoughtful feedback, and of course, testing.

I wanted to test this on MS-Windows, but the w32fns.c patch failed to
apply to the master branch, even if I use --ignore-whitespace option
to "git apply".  Could you please rebase on the current master and
post an updated patch?

So the below comments are based on reading the patch and nothing else.

> From f1c4bbf07a4b1c0cb5867412ecf2074bfc3e37e1 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?St=C3=A9phane=20Marks?= <shipmints@HIDDEN>
> Date: Sat, 8 Nov 2025 13:30:37 -0500
> Subject: [PATCH] Add system GUI dock integration.
> 
> Implement system GUI dock icon badge, icon progress indicator,
> icon attention alert features for D-Bus platforms (tested on KDE
> and GNOME), NS (GNUstep/macOS), Microsoft Windows.
> 
> * lisp/dock-mode.el: New file.

First, the name of the mode and related symbols: I find the name
"dock" to be problematic, as it seems to be well-known to macOS users
and maybe also to some users of GNU/Linux desktops, but might be
unknown to others.  Also, "dock" has multiple meanings, which might be
confusing.  I would prefer something like dock-taskbar-* instead, or
maybe gui-dock-*, or even gui-desktop-* (if we envision more features
being added to this in the future).  I'm also open to other ideas
about better naming this class of features.

> diff --git a/doc/misc/dock-mode.texi b/doc/misc/dock-mode.texi
> new file mode 100644
> index 00000000000..71358c09b7e
> --- /dev/null
> +++ b/doc/misc/dock-mode.texi

I don't think this should be a separate Info file.  Instead, we should
split this information into a user-level part and Lisp-programmer
level part, and have the former in the user manual and the latter in
the ELisp reference.  Most of the Texinfo documentation you wrote
naturally belongs to the latter category.

A separate Info manual has a significant disadvantage that it is not
part of the two main manuals, and is thus harder to discover.

> +@node Overview
> +@chapter Overview
> +
> +The Dock package provides integration with these system GUI dock
> +features:

This should start by explaining what is a "GUI dock".  It is an
obscure term that is unlikely to be widely known, IME.

> +Your GNU/Linux Emacs instance should be launched via an appropriate
> +shell "desktop" file such as those distributed with Emacs; e.g.,
> +"etc/emacsclient.desktop".

File names should have the @file markup, instead of quoting them (here
and elsewhere in the patch).

> +@node User Options
> +@chapter User Options

This node should go to the Emacs user manual.  But it should begin by
describing the features in user-facing terms: what will the user see
for each aspect of the mode: how badges look, what is "attention
indicator", etc.  This stuff is unlikely to be well-known to users,
and without that, the following description of user options makes very
little sense.

> +@defvar dock-dbus-desktop-file-name
> +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux
> +D-Bus systems, and can be customized to indicate which desktop file name
> +D-Bus will use to identify your Emacs instance.  It defaults to the
> +desktop file base name @code{"emacsclient"} and might need to be set to
> +@code{"emacs"} on your system.  Installed Emacs builds typically include
> +default desktop files for both, and are called
> +@code{"emacsclient.desktop"} and @code{"emacs.desktop"}, respectively.
> +@end defvar

Do users frequently need to customize this?  If in most cases this
doesn't need to be customized, we don't need to mention the option in
the manual.

> +@defvar dock-dbus-timeout-ms
> +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus
> +systems, and can be customized to specify the number of milliseconds
> +Emacs will wait for D-Bus responses before timing out and considering
> +messages undeliverable.  It defaults to 25000 milliseconds, which is the
> +recommended default by the D-Bus package, which see, @pxref{Top,,, dbus,
> +D-Bus integration in Emacs}.

This doesn't seem to be a user-level option, at least not an important
one.  I presume that the default is fine for almost all uses, and the
option only needs customization when troubleshooting.

> +@node Function Reference
> +@chapter Function Reference
> +
> +@findex dock-mode
> +@defun dock-mode
> +@code{dock-mode} must be enabled before calling any of its functions, to
> +initialize the system back end.  On GNU/Linux D-Bus, initialization will
> +test that the D-Bus dock protocol is established, and signal an error if
> +it is not.
> +@end defun

This mode, and the description of GUI features it activates, should in
the user manual.

> +@findex dock-badge
> +@defun dock-badge &optional count-or-string
> +Set the dock icon badge to @var{count-or-string}.  If
> +@var{count-or-string} is @code{nil}, clear the badge.

I'm missing here the description of where will the badge appear if
Emacs has several visible frames.  Will the badge appear on all of
them? only one? something else?

> +If a string is specified on back ends which do not support strings, it
> +is converted to an integer, if possible, or to nil.  GNUstep and macOS
> +support string badges, the GNU/Linux D-Bus protocol supports only
> +integers; any string that cannot be converted to integer will be treated
> +as @code{nil}.

This describes the implementation, but says nothing about the effect.
What would be displayed when a string is converted to an integer (and
how can an arbitrary string be converted to a number anyway)?
Depending on the answers to those questions, it is possible that we
don't have to mention the specific systems and backends.

> +@findex dock-attention
> +@defun dock-attention &optional urgency timeout

There's no need to have @findex for a @defun (here and elsewhere in
the patch), because @defun automatically generates an index entry in
the function index.

> +Set the dock icon to alert the user.  This will result in a bouncing or
> +flashing dock icon.  On some back ends, dock icon attention will
> +displayed only if Emacs is not the focused application.     ^^^^
   ^^^^^^^^^
"will be displayed"

> +out automatically.  In contrast, a `critical` request requires that the

Please don't quote `like this` in Texinfo documents, please use @code
or @samp instead.

> +@defun dock-progress &optional progress
> +Set the dock icon to indicate ``progress''.  Progress is typically
> +represented as a graphical bar that fractionally spans the dock icon.

This should have a cross-reference to the node "Progress" in the ELisp
manual, which describes progress indicators.  It is also a good idea
to have the cross-reference in "Progress" pointing to this
description.

> +icon.  Its usage is described in @pxref{Progress,, Display, elisp, The
> +Emacs Lisp Reference Manual}.

This kind of "HTML-style" cross-references doesn't look good in Info
and in the printed versions of the manual.  It is better to use
something simpler, like

  This is a convenience macro analogous to
  @code{dotimes-with-progress-reporter} and works the same way as
  @code{dotimes} does, but also reports loop progress on the Emacs dock
  icon.  @xref{Progress,, Display, elisp, The Emacs Lisp Reference Manual}.

(Btw, that "Display" part in the cross-reference is wrong, and will
not do what you thought it would.)

> +@defmac dolist-with-dock-progress-reporter (var list [result]) reporter-or-message body@dots{}
> +This is a convenience macro analogous to
> +@code{dolist-with-progress-reporter} and works the same way as
> +@code{dolist} does, but also reports loop progress on the Emacs dock
> +icon.  Its usage is described in @pxref{Progress,, Display, elisp, The
> +Emacs Lisp Reference Manual}.

Same comments here.

> +@lisp
> +;; Enable and initialize dock-mode.
> +(dock-mode)
> +
> +;; Display a badge on the dock icon.
> +(dock-badge emacs-major-version)
> +(dock-badge "31")
> +(dock-badge "Test") ; short string (on supported platforms)

Such long @lisp snippets should be subdivided into groups, using
@group..@end group, to prevent the group from being split between two
pages, which makes reading the examples harder.

> +        ((bound-and-true-p w32-initialized)
> +         (setq dock--back-end 'windows-nt))
                                 ^^^^^^^^^^^
I'd prefer the symbol 'w32' here.

> +(define-minor-mode dock-mode
> +  "GUI dock icon badges, progress report, alerts."

This doc string should be significantly expanded to describe the mode
features, with links to relevant commands and user options.

Also, please add a :version tag.

> +(cl-defgeneric dock-badge (&optional count-or-string)
> +  "Set the dock icon badge to COUNT-OR-STRING.
> +If COUNT-OR-STRING is an integer, display that as the icon badge.
> +If COUNT-OR-STRING is a string on back ends which do not support
> +strings, convert COUNT-OR-STRING to an integer, or nil.
> +If COUNT-OR-STRING is nil, or is an empty string, remove the counter.")

If a string is converted to nil, will that remove the counter?

> +(cl-defgeneric dock-attention (&optional urgency timeout)
> +  "Set the dock icon to alert the user.

I think "Display the dock icon to alert the user." is a better
description.

And I wonder whether we should, under dock-mode, call dock-attention
as part of bell and visible-bell, at least as a user option?

> +(cl-defgeneric dock-progress (&optional progress)
> +  "Set the dock icon to indicate progress.

Likewise.

> +(defvar dock--dotimes-with-dock-progress-reporter-advice-count 0
> +  "Ensure advice is not removed when more than one active use.")
> +
> +(defun dock--set-up-progress-reporter ()
> +  "`progress-reporter-do-update` helper."
> +  (incf dock--dotimes-with-dock-progress-reporter-advice-count)
> +  (advice-add #'progress-reporter-do-update
> +              :around
> +              #'dock--progress-reporter-do-update))

Our conventions frown on using advice in our code.  How about adding a
hook to progress-reporter-do-update instead, so that it could call
this indication of progress when the mode is active?

> +(defun dock--tear-down-progress-reporter ()
> +  "`progress-reporter-do-update` helper."
> +  (when (= 0 (decf dock--dotimes-with-dock-progress-reporter-advice-count))
> +    (advice-remove #'progress-reporter-do-update
> +                   #'dock--progress-reporter-do-update)))

Same here.

> +(defvar dock-w32-badge-bg '(#xe7 #x58 #x57) ; redish
> +  "Integer RGB values as the background for w32 badge.")
> +
> +(defvar dock-w32-badge-fg '(#xff #xff #xff) ; white
> +  "Integer RGB values as the foreground for w32 badge text.")

Can't we use the normal#RRRGGGBBB color notations here? why invent
something new when we already have infrastructure for specifying
colors flexibly and easily?

> diff --git a/src/w32fns.c b/src/w32fns.c
> index 3fc0f55244f..c0d7cad3dc5 100644
> --- a/src/w32fns.c
> +++ b/src/w32fns.c

As mentioned above, I was unable to compile the code, so the comments
below are based only on reading the patch.

> @@ -38,6 +38,10 @@ #define COBJMACROS /* Ask for C definitions for COM.  */
>  #include <shlobj.h>
>  #include <oleidl.h>
>  #include <objidl.h>
> +#if !defined MINGW_W64 && !defined CYGWIN
> +# define INITGUID
> +#endif

I don't understand this: why only MINGW_W64? does this code work only
in 64bit builds or something?

And why define INITGUID to nothing?

> +#ifndef IID_ITaskbarList3
> +DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91, 0x9e28, 0x4b86, 0x90,0xe9, 0x9e,0x9f,0x8a,0x5e,0xef,0xaf);

Please add a comment here explaining what these constants are and what
is their effect.  Or maybe these constants are required by Windows to
be that and only that?  This should be documented, preferably with a
reference.

> +/* Parse RGB_LIST, and return a COLORREF.
> +   RGB_LIST should contain (at least) 3 lisp integers.
> +   Return 0xff000000 iff RGB_LIST is not OK.  */
> +
> +static COLORREF
> +rgb_list_to_colorref (Lisp_Object rgb_list)

I believe this function will be unnecessary if you use the usual
#RRRGGGBBB color spec instead of a list of RGB components.

> +/* Track the window handle for the global badge icon. */
> +static HWND _w32_badge_hwnd = NULL;

Please don't use variables with leading underscores, that's only
appropriate for libraries.

Also, does this mean we can only have a single badge on display at any
given time?  And what happens if the frame corresponding to this
handle is deleted?

> +DEFUN ("w32-badge",
> +       Fw32_badge,
> +       Sw32_badge,
> +       3, 3, 0,
> +       doc: /* Set the taskbar icon overlay image based on BADGE.
> +BADGE is a UTF-8 string.  If BADGE is nil, remove the overlay.  Do

Please say "BADGE is a string", without mentioning UTF-8.  Callers of
primitives should pass Emacs Lisp strings, and the primitive should
then encode the string as needed (which your code already does).

> +                                 Do nothing if the frame is not (yet)
> +associated with an HWND.

Which frame?  And there's no argument named HWND.

>                           BACKGROUND and FOREGROUND are lists of (RED
> +GREEN BLUE) 8-bit integer values.  */)
> +  (Lisp_Object badge, Lisp_Object bg, Lisp_Object fg)

The color arguments are named BG and FG, not BACKGROUND and
FOREGROUND.

> +{
> +  CoInitialize (NULL);
> +  ITaskbarList3 *task_bar_list = NULL;
> +  HRESULT r = CoCreateInstance(&CLSID_TaskbarList,
> +			       NULL,
> +			       CLSCTX_INPROC_SERVER,
> +			       &IID_ITaskbarList3,
> +			       (void **)&task_bar_list);
> +  if (r != S_OK)
> +    {
> +      /* FIXME: Do we need to call CoUninitialize?  */

I don't think we need to do that.

> +  HWND hwnd = NULL;
> +  struct frame *sf = SELECTED_FRAME ();
> +  if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf))
> +    hwnd = FRAME_W32_WINDOW (sf);

If we always use the selected frame, it should be documented.  If the
same frame should be selected when removing the badge, that should
also be documented (it means the caller will need to track which frame
sets the badge).  And what happens if the caller attempts to remove
the badge when a different frame is select, or if the original frame
was deleted?

> +      if (bg_rgb == 0xff000000)
> +	{
> +	  signal_error ("Invalid background RGB", bg);
> +	  return Qnil;
> +	}
> +      if (fg_rgb == 0xff000000)
> +	{
> +	  signal_error ("Invalid foreground RGB", fg);
> +	  return Qnil;
> +	}

I'd prefer not to signal errors from these functions, but instead to
silently return nil.

> +      /* Derive a font scaled to fit the icon.  First find the system's
> +	 base font.  Then scale it to fit icon_height.  */
> +      HFONT base_font;
> +      BOOL clean_up_base_font = FALSE;
> +      if (system_parameters_info_w_fn)
> +	{
> +	  NONCLIENTMETRICSW ncm;
> +	  memset (&ncm, 0, sizeof (ncm));
> +	  ncm.cbSize = sizeof (ncm);
> +	  SystemParametersInfoW (SPI_GETNONCLIENTMETRICS, sizeof (ncm), &ncm, 0);
> +	  base_font = CreateFontIndirectW (&ncm.lfSmCaptionFont);
> +	  clean_up_base_font = TRUE;

Do we really need to call the "wide" variants of these functions?
See w32-set-wallpaper for what we do about SystemParametersInfoW, and
CreateFontIndirectW is not used anywhere in Emacs.  Can we use
CreateFontIndirect instead, or only use CreateFontIndirectW when it is
supported, like w32-set-wallpaper does with SystemParametersInfoW?

Are badges at all supported on old Windows versions?  If not, then we
can use the "wide" APIs, but we need to do that through function
pointers, which are filled at startup time using get_proc_addr, like
we do with MultiByteToWideChar.  Because otherwise older versions of
Windows will refuse to run Emacs that refers to these wide APIs which
don't exist on those old versions.

> +      /* Negative lfHeight indicates pixel units vs. positive in points.
> +	 Use the LOGPIXELSY px/in of the primary monitor.  */
> +      lf.lfHeight = -MulDiv(icon_height / 2, /* Fit ~3 chars.  */
                             ^^
> +			    72,
> +			    GetDeviceCaps(GetDC (NULL), LOGPIXELSY));
                                        ^^
Our style is to leave one space between the function's name and the
opening parenthesis.

> +      for (int y = 0; y < icon_height; ++y)
> +        for (int x = 0; x < icon_width; ++x)
> +	  {
> +            int dx = x - circle_center_x;
> +            int dy = y - circle_center_y;
> +            if (dx * dx + dy * dy <= circle_radius_sq)
> +	      {
> +		  pixel = bitmap_pixels + (y * icon_width + x);
> +		  *pixel |= 0xff000000;
                            ^^^^^^^^^^
Please add a comment explaining that "magic constant".

> +static FlashWindowEx_Proc _flash_window_ex_fn = NULL;

This variable should also be NULL-ified in globals_of_w32fns, so that
we don't risk carrying stale values from when Emacs was dumped.

> +static HWND _w32_request_user_attention_hwnd = NULL;

Again, please don't use variables whose names begin with an
underscore.

> +DEFUN ("w32-request-user-attention",
> +       Fw32_request_user_attention,
> +       Sw32_request_user_attention,
> +       1, 1, 0,
> +       doc: /* Flash the taskbar icon based on URGENCY.

AFAIU, FlashWindowEx flashes the frame itself as well, not only the
task-bar icon, doesn't it?

> +  /* dwFlags
> +     FLASHW_ALL       0x00000003 Flash both window caption and taskbar button.
> +     FLASHW_CAPTION   0x00000001 Flash the window caption.
> +     FLASHW_STOP      0x00000000 Stop flashing.
> +     FLASHW_TIMER     0x00000004 Flash continuously, until FLASHW_STOP.
> +     FLASHW_TIMERNOFG 0x0000000C Flash until window comes to the foreground.
> +     FLASHW_TRAY      0x00000002 Flash the taskbar button.  */

Should we allow flashing only the task-bar icon, as an option?

> +  flash_info.dwFlags = 0x00000000; /* FLASHW_STOP  */
> +  if (_w32_request_user_attention_hwnd != NULL
> +      && _w32_request_user_attention_hwnd != hwnd)
> +    {
> +      /* Disable attention on the old window handle.  */
> +      flash_info.hwnd = _w32_request_user_attention_hwnd;
> +      _flash_window_ex_fn (&flash_info);
> +      _w32_request_user_attention_hwnd = hwnd;

Does the fact that we store the handle to the frame's window in a
global static variable mean that we cannot flash more than one frame
at a time?

And what happens if the frame is deleted before flashing ends?

> +  if (!NILP (urgency) && SYMBOLP (urgency))
> +    {
> +      /* The intended caller, dock-mode.el 'dock-attention', has its own
> +	 timer to clear the attention indicator so this will flash until
> +	 cleared via the timer for informational attention, or the
> +	 window comes to the foreground for critical attention.  */
> +      if (EQ (urgency, Qinformational))
> +	flash_info.dwFlags = 0x00000003 | 0x00000004; /* FLASHW_TIMER  */
> +      else if (EQ (urgency, Qcritical))
> +	flash_info.dwFlags = 0x00000003 | 0x0000000C; /* FLASHW_TIMERNOFG  */
> +    }

Why are you using numerical values instead of FLASHW_ALL etc.?

> +  if (_w32_progress_indicator_hwnd != NULL
> +      && _w32_progress_indicator_hwnd != hwnd)
> +    {
> +      /* Disable the indicator for the old window handle.  */
> +      task_bar_list->lpVtbl->SetProgressState (task_bar_list,
> +					       _w32_progress_indicator_hwnd,
> +					       TBPF_NOPROGRESS);
> +    }
> +  _w32_progress_indicator_hwnd = hwnd;

Same questions as above about displaying progress for more than one
frame at a time.

> +  /* Scale task bar progress from 0.0-1.0 to 0-100.  */
> +  unsigned int adj_progress = 0;

The MS documentation says the 2 last arguments of SetProgressValue
method are of type ULONGLONG, so why not use that here?

> +  #ifdef WINDOWSNT
> +  /* Taskbar/dock */
                    ^^
Our conventions are to and a C comment with a period and two spaces
before "*/".




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Tue, 25 Nov 2025 20:17:25 +0000
Resent-Message-ID: <handler.79859.B79859.176410182720157 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Eli Zaretskii <eliz@HIDDEN>
Cc: bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176410182720157
          (code B ref 79859); Tue, 25 Nov 2025 20:17:25 +0000
Received: (at 79859) by debbugs.gnu.org; 25 Nov 2025 20:17:07 +0000
Received: from localhost ([127.0.0.1]:55369 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzTF-0005Ev-V5
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:17:06 -0500
Received: from mail-ua1-x92f.google.com ([2607:f8b0:4864:20::92f]:50571)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vMUUy-0001PS-Nx
 for 79859 <at> debbugs.gnu.org; Fri, 21 Nov 2025 12:00:40 -0500
Received: by mail-ua1-x92f.google.com with SMTP id
 a1e0cc1a2514c-932e6d498b2so1350553241.1
 for <79859 <at> debbugs.gnu.org>; Fri, 21 Nov 2025 09:00:40 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1763744433; x=1764349233; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=OLnSIhQzRQMHlwd8x1zXKAurbV5AiUpI7kzPmZx2P6Y=;
 b=PK8uRXsNYZ5lzPUpQsTBbKepda2gWJR94Yk+5Exb832zn51B7r0u+xRJ+JQfwl39KQ
 7acYfeHvteLYfndgG0GWvbDZ6JJzR+R3zKXE2OsM2cyHMDiyxyYMwvXDjLTcpocRtScV
 b6wUqV/CqwDlo3SrH5bvLEeTl0cIbEo/yCTCc/qZOy++4tKFIrCrPaMFk/+LOAnaeNg8
 vkVyNjfEyMIhXmgzmONWlyw42cFU2Z0aaySuqTN5U0Yuh3RE19iQBtQ5ygZ/78eV0MXt
 dMoW5WJaMga0A19M/I0dQ60rOBEMWCv6/c9IGPjRkad5qCDvO1fMXUT0DCgPo/lE+x/Z
 SrVQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1763744433; x=1764349233;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=OLnSIhQzRQMHlwd8x1zXKAurbV5AiUpI7kzPmZx2P6Y=;
 b=Rfz9G1tiPINqvZD0kxm+r7dkxxY4yvntspin56nt66U04RJOhF8zmMXBPWLs4Tb40C
 sYia5vA8uM4uYQHojKMLUO3KuABHtGWsTIikjjn34gbpnjISOJqFkpsvu3DCz2tiXNlI
 w5xKR9TWPDOSk/+ZMdIMxFhPsTdMnhNi1wRqZZwviInSv3jzn959SPghmdsB+GUhYcOl
 aWckN6gGYtZ3mvD+1Lrq2TslG2GlZbKr9PiocaEHblaezFqe9opG5mv5axaZka6xM9Hx
 d3AAobaYeL4pMQyNoL8w3i171K2apRt138PuaVTf0QGThBQ05Nd/6Kn4kSilu8KBWqlB
 29Ig==
X-Gm-Message-State: AOJu0YyZ/CwxW6WUwJXcL9tfPzuiJ2931hS96PKrJJEl9cwu36kBfqRc
 BJeTEArGEs1yjo6x80qF5WxGgog7oFnVi3uIHzeCuUEIBtXZBJY6nPF6xJ28O80+gv1Oavh3kYA
 IxCPWOUMW2+NOwd6RX/wNyHIBpywfuY9Ywacj
X-Gm-Gg: ASbGncuTSjXY4/ypZsqQN4bTmOtgOZdB0KEY7gfwzCsZqNBvM+YWSQ5/9egdWr2ocWm
 dEqBeug9Hmha6Uub1qxrQuUWG3FmQM7QGYz0cUmqBvPrnPsQv4/nDAFoq0zlie8Ua7yx9nf6J4Y
 DZjfi9UgZI9S5V2CXF/wO9AownRtwLkx/O/i4ToSdueuKLc4ZUFvELiw1Hb5DjJiRy5Df4Jbn70
 DVn8kNmaTTXkbrbN/DDKjnFGM4jyagMXCekpzIuFy/pnz8Q+kKMz0zO6lV/PRuTFrFlsEk=
X-Google-Smtp-Source: AGHT+IH+5AeNxBFx3KUg3X/SWTnibRXqGFajBHjwym1SYIsD8NAnDAmABXIvajvE1l4l2uA77lriQP9NuK27gvaAX+U=
X-Received: by 2002:a05:6102:3e0a:b0:5dd:8991:d761 with SMTP id
 ada2fe7eead31-5e1de166a0bmr1001327137.8.1763744431144; Fri, 21 Nov 2025
 09:00:31 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
In-Reply-To: <86bjkxhuca.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Fri, 21 Nov 2025 12:00:03 -0500
X-Gm-Features: AWmQ_bnR8luHOHe06j04pEpYkBhoiNZ5Fj8cXMt7I-yYS9IB8n32ZAuVI9QTg9w
Message-ID: <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
Content-Type: multipart/mixed; boundary="0000000000004b241006441dc01c"
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>

--0000000000004b241006441dc01c
Content-Type: multipart/alternative; boundary="0000000000004b240e06441dc01a"

--0000000000004b240e06441dc01a
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thank you for reviewing the patch and your thoughtful feedback.  I'll
incorporate more feedback after you get it compiled and you give it a try,
and perhaps other people, too.  My Windows 11 virtual machine is less than
a real-world Windows set up, though sufficient for developing this feature.

I've attached a patch rebased on master
2cc6c812788281c05ca9687afd7bedf597b1e942
which also incorporates your feedback.

Responses interspersed below.

On Thu, Nov 20, 2025 at 5:27=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > Cc: Bj=C3=B6rn Bidar <bjorn.bidar@HIDDEN>
> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Tue, 18 Nov 2025 14:17:45 -0500
> >
> > This patch implements system GUI dock features for icon badges, icon
> progress indicator, and icon attention
> > request with implementations for GNU/Linux KDE & GNOME, NS/macOS, and
> MS-Windows.
>
> Thank you for working on this important feature.
>
> > GNU/Linux shells need to use an extension or include built-in support
> for the protocol documented here
> > https://wiki.ubuntu.com/Unity/LauncherAPI.  I tested using this
> "standard" shell extension
> > https://extensions.gnome.org/extension/307/dash-to-dock/ on GNOME and
> assistance and testing on KDE
> > from the reddit user GeneAutomatic3471.
>
> This information should be in the NEWS entry.
>

Done.

> I'd appreciate thoughtful feedback, and of course, testing.
>
> I wanted to test this on MS-Windows, but the w32fns.c patch failed to
> apply to the master branch, even if I use --ignore-whitespace option
> to "git apply".  Could you please rebase on the current master and
> post an updated patch?
>

Please try the attached patch.

So the below comments are based on reading the patch and nothing else.
>
> > From f1c4bbf07a4b1c0cb5867412ecf2074bfc3e37e1 Mon Sep 17 00:00:00 2001
> > From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> > Date: Sat, 8 Nov 2025 13:30:37 -0500
> > Subject: [PATCH] Add system GUI dock integration.
> >
> > Implement system GUI dock icon badge, icon progress indicator,
> > icon attention alert features for D-Bus platforms (tested on KDE
> > and GNOME), NS (GNUstep/macOS), Microsoft Windows.
> >
> > * lisp/dock-mode.el: New file.
>
> First, the name of the mode and related symbols: I find the name
> "dock" to be problematic, as it seems to be well-known to macOS users
> and maybe also to some users of GNU/Linux desktops, but might be
> unknown to others.  Also, "dock" has multiple meanings, which might be
> confusing.  I would prefer something like dock-taskbar-* instead, or
> maybe gui-dock-*, or even gui-desktop-* (if we envision more features
> being added to this in the future).  I'm also open to other ideas
> about better naming this class of features.
>

I have no strong opinion on this other than I thought the scope would be
best limited to "dock" features.  If you can envision other "desktop"
features to add (and we can avoid any confusion with desktop.el), I'm happy
to call it whatever we want.  If there are things you'd like to see sooner
than later, I can take a stab at those if the scope is on the small side.


> > diff --git a/doc/misc/dock-mode.texi b/doc/misc/dock-mode.texi
> > new file mode 100644
> > index 00000000000..71358c09b7e
> > --- /dev/null
> > +++ b/doc/misc/dock-mode.texi
>
> I don't think this should be a separate Info file.  Instead, we should
> split this information into a user-level part and Lisp-programmer
> level part, and have the former in the user manual and the latter in
> the ELisp reference.  Most of the Texinfo documentation you wrote
> naturally belongs to the latter category.
>
> A separate Info manual has a significant disadvantage that it is not
> part of the two main manuals, and is thus harder to discover.
>

I'll tackle documentation feedback later after some more testing, and
renaming if we do that.

> +@node Overview
> > +@chapter Overview
> > +
> > +The Dock package provides integration with these system GUI dock
> > +features:
>
> This should start by explaining what is a "GUI dock".  It is an
> obscure term that is unlikely to be widely known, IME.
>
> > +Your GNU/Linux Emacs instance should be launched via an appropriate
> > +shell "desktop" file such as those distributed with Emacs; e.g.,
> > +"etc/emacsclient.desktop".
>
> File names should have the @file markup, instead of quoting them (here
> and elsewhere in the patch).
>
> > +@node User Options
> > +@chapter User Options
>
> This node should go to the Emacs user manual.  But it should begin by
> describing the features in user-facing terms: what will the user see
> for each aspect of the mode: how badges look, what is "attention
> indicator", etc.  This stuff is unlikely to be well-known to users,
> and without that, the following description of user options makes very
> little sense.
>
> > +@defvar dock-dbus-desktop-file-name
> > +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux
> > +D-Bus systems, and can be customized to indicate which desktop file na=
me
> > +D-Bus will use to identify your Emacs instance.  It defaults to the
> > +desktop file base name @code{"emacsclient"} and might need to be set t=
o
> > +@code{"emacs"} on your system.  Installed Emacs builds typically inclu=
de
> > +default desktop files for both, and are called
> > +@code{"emacsclient.desktop"} and @code{"emacs.desktop"}, respectively.
> > +@end defvar
>
> Do users frequently need to customize this?  If in most cases this
> doesn't need to be customized, we don't need to mention the option in
> the manual.
>

Sadly, the testing on both KDE and GNOME indicated the default distro
Emacsen use one or the other (and I can't now remember which is which), so
people have had to use both values I documented.

> +@defvar dock-dbus-timeout-ms
> > +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus
> > +systems, and can be customized to specify the number of milliseconds
> > +Emacs will wait for D-Bus responses before timing out and considering
> > +messages undeliverable.  It defaults to 25000 milliseconds, which is t=
he
> > +recommended default by the D-Bus package, which see, @pxref{Top,,, dbu=
s,
> > +D-Bus integration in Emacs}.
>
> This doesn't seem to be a user-level option, at least not an important
> one.  I presume that the default is fine for almost all uses, and the
> option only needs customization when troubleshooting.
>

This is a default hard coded in `dbus-call-method` and I thought it best to
raise it up for this package as it is something people may have trouble
with, even if unlikely, and we need to pass the timeout downstream.


> > +@node Function Reference
> > +@chapter Function Reference
> > +
> > +@findex dock-mode
> > +@defun dock-mode
> > +@code{dock-mode} must be enabled before calling any of its functions, =
to
> > +initialize the system back end.  On GNU/Linux D-Bus, initialization wi=
ll
> > +test that the D-Bus dock protocol is established, and signal an error =
if
> > +it is not.
> > +@end defun
>
> This mode, and the description of GUI features it activates, should in
> the user manual.
>
> > +@findex dock-badge
> > +@defun dock-badge &optional count-or-string
> > +Set the dock icon badge to @var{count-or-string}.  If
> > +@var{count-or-string} is @code{nil}, clear the badge.
>
> I'm missing here the description of where will the badge appear if
> Emacs has several visible frames.  Will the badge appear on all of
> them? only one? something else?
>

On GNU/Linux and NS, there is only a single dock icon for the Emacs
process.  It's on w32 that things get more complex as  Windows has options
to collapse or not multiple frames into a group or not.  I thought it best
for now to unify the behavior to keep it simple and stick to a single badge
per process rather than introduce complexity in the API for all platforms.

> +If a string is specified on back ends which do not support strings, it
> > +is converted to an integer, if possible, or to nil.  GNUstep and macOS
> > +support string badges, the GNU/Linux D-Bus protocol supports only
> > +integers; any string that cannot be converted to integer will be treat=
ed
> > +as @code{nil}.
>
> This describes the implementation, but says nothing about the effect.
> What would be displayed when a string is converted to an integer (and
> how can an arbitrary string be converted to a number anyway)?
> Depending on the answers to those questions, it is possible that we
> don't have to mention the specific systems and backends.
>
> > +@findex dock-attention
> > +@defun dock-attention &optional urgency timeout
>
> There's no need to have @findex for a @defun (here and elsewhere in
> the patch), because @defun automatically generates an index entry in
> the function index.
>
> > +Set the dock icon to alert the user.  This will result in a bouncing o=
r
> > +flashing dock icon.  On some back ends, dock icon attention will
> > +displayed only if Emacs is not the focused application.     ^^^^
>    ^^^^^^^^^
> "will be displayed"
>
> > +out automatically.  In contrast, a `critical` request requires that th=
e
>
> Please don't quote `like this` in Texinfo documents, please use @code
> or @samp instead.
>
> > +@defun dock-progress &optional progress
> > +Set the dock icon to indicate ``progress''.  Progress is typically
> > +represented as a graphical bar that fractionally spans the dock icon.
>
> This should have a cross-reference to the node "Progress" in the ELisp
> manual, which describes progress indicators.  It is also a good idea
> to have the cross-reference in "Progress" pointing to this
> description.
>
> > +icon.  Its usage is described in @pxref{Progress,, Display, elisp, The
> > +Emacs Lisp Reference Manual}.
>
> This kind of "HTML-style" cross-references doesn't look good in Info
> and in the printed versions of the manual.  It is better to use
> something simpler, like
>
>   This is a convenience macro analogous to
>   @code{dotimes-with-progress-reporter} and works the same way as
>   @code{dotimes} does, but also reports loop progress on the Emacs dock
>   icon.  @xref{Progress,, Display, elisp, The Emacs Lisp Reference Manual=
}.
>
> (Btw, that "Display" part in the cross-reference is wrong, and will
> not do what you thought it would.)
>
> > +@defmac dolist-with-dock-progress-reporter (var list [result])
> reporter-or-message body@dots{}
> > +This is a convenience macro analogous to
> > +@code{dolist-with-progress-reporter} and works the same way as
> > +@code{dolist} does, but also reports loop progress on the Emacs dock
> > +icon.  Its usage is described in @pxref{Progress,, Display, elisp, The
> > +Emacs Lisp Reference Manual}.
>
> Same comments here.
>
> > +@lisp
> > +;; Enable and initialize dock-mode.
> > +(dock-mode)
> > +
> > +;; Display a badge on the dock icon.
> > +(dock-badge emacs-major-version)
> > +(dock-badge "31")
> > +(dock-badge "Test") ; short string (on supported platforms)
>
> Such long @lisp snippets should be subdivided into groups, using
> @group..@end group, to prevent the group from being split between two
> pages, which makes reading the examples harder.
>
> > +        ((bound-and-true-p w32-initialized)
> > +         (setq dock--back-end 'windows-nt))
>                                  ^^^^^^^^^^^
> I'd prefer the symbol 'w32' here.
>

Done.

> +(define-minor-mode dock-mode
> > +  "GUI dock icon badges, progress report, alerts."
>
> This doc string should be significantly expanded to describe the mode
> features, with links to relevant commands and user options.
>
> Also, please add a :version tag.
>

Added to the defgroup and defcustoms.

> +(cl-defgeneric dock-badge (&optional count-or-string)
> > +  "Set the dock icon badge to COUNT-OR-STRING.
> > +If COUNT-OR-STRING is an integer, display that as the icon badge.
> > +If COUNT-OR-STRING is a string on back ends which do not support
> > +strings, convert COUNT-OR-STRING to an integer, or nil.
> > +If COUNT-OR-STRING is nil, or is an empty string, remove the counter."=
)
>
> If a string is converted to nil, will that remove the counter?
>

Yes, in the dbus implementation "Set badge to COUNT-OR-STRING if an
integer, otherwise use nil.
The Unity protocol does not support string badges."


> > +(cl-defgeneric dock-attention (&optional urgency timeout)
> > +  "Set the dock icon to alert the user.
>
> I think "Display the dock icon to alert the user." is a better
> description.
>

Changed to "Flash the dock icon and/or frame to alert the user." which
should cover if we change Windows to do either or both.  There are no
choices on the other platforms.

And I wonder whether we should, under dock-mode, call dock-attention
> as part of bell and visible-bell, at least as a user option?
>

Possible.  Not sure about mashing C-g, though.  Might have to be debounced.

> +(cl-defgeneric dock-progress (&optional progress)
> > +  "Set the dock icon to indicate progress.
>
> Likewise.
>

Now reads "Display a progress indicator on the dock icon."

> +(defvar dock--dotimes-with-dock-progress-reporter-advice-count 0
> > +  "Ensure advice is not removed when more than one active use.")
> > +
> > +(defun dock--set-up-progress-reporter ()
> > +  "`progress-reporter-do-update` helper."
> > +  (incf dock--dotimes-with-dock-progress-reporter-advice-count)
> > +  (advice-add #'progress-reporter-do-update
> > +              :around
> > +              #'dock--progress-reporter-do-update))
>
> Our conventions frown on using advice in our code.  How about adding a
> hook to progress-reporter-do-update instead, so that it could call
> this indication of progress when the mode is active?
>

I had that on my todo list and I'm glad you pointed that out.  I'll propose
something in the next patch or two (+/- my travel schedule it may have to
wait until the middle of the first week of December).

> +(defun dock--tear-down-progress-reporter ()
> > +  "`progress-reporter-do-update` helper."
> > +  (when (=3D 0 (decf
> dock--dotimes-with-dock-progress-reporter-advice-count))
> > +    (advice-remove #'progress-reporter-do-update
> > +                   #'dock--progress-reporter-do-update)))
>
> Same here.
>
> > +(defvar dock-w32-badge-bg '(#xe7 #x58 #x57) ; redish
> > +  "Integer RGB values as the background for w32 badge.")
> > +
> > +(defvar dock-w32-badge-fg '(#xff #xff #xff) ; white
> > +  "Integer RGB values as the foreground for w32 badge text.")
>
> Can't we use the normal#RRRGGGBBB color notations here? why invent
> something new when we already have infrastructure for specifying
> colors flexibly and easily?
>

Changed to standard Emacs color spec.

> diff --git a/src/w32fns.c b/src/w32fns.c
> > index 3fc0f55244f..c0d7cad3dc5 100644
> > --- a/src/w32fns.c
> > +++ b/src/w32fns.c
>
> As mentioned above, I was unable to compile the code, so the comments
> below are based only on reading the patch.
>
> > @@ -38,6 +38,10 @@ #define COBJMACROS /* Ask for C definitions for COM.
> */
> >  #include <shlobj.h>
> >  #include <oleidl.h>
> >  #include <objidl.h>
> > +#if !defined MINGW_W64 && !defined CYGWIN
> > +# define INITGUID
> > +#endif
>
> I don't understand this: why only MINGW_W64? does this code work only
> in 64bit builds or something?
>
> And why define INITGUID to nothing?
>

I blindly copied this from w32dwrite.c.  Including <shobjidl.h> does
require that we include <initguid.h> to get the key COM interface defined
that we need (I've removed the private copy after testing on mingw).

> +#ifndef IID_ITaskbarList3
> > +DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91, 0x9e28, 0x4b86, 0x90,0xe9,
> 0x9e,0x9f,0x8a,0x5e,0xef,0xaf);
>
> Please add a comment here explaining what these constants are and what
> is their effect.  Or maybe these constants are required by Windows to
> be that and only that?  This should be documented, preferably with a
> reference.
>

I got this to compile just fine on mingw so I removed this magic.

> +/* Parse RGB_LIST, and return a COLORREF.
> > +   RGB_LIST should contain (at least) 3 lisp integers.
> > +   Return 0xff000000 iff RGB_LIST is not OK.  */
> > +
> > +static COLORREF
> > +rgb_list_to_colorref (Lisp_Object rgb_list)
>
> I believe this function will be unnecessary if you use the usual
> #RRRGGGBBB color spec instead of a list of RGB components.
>

Replaced with parse_color_spec.

> +/* Track the window handle for the global badge icon. */
> > +static HWND _w32_badge_hwnd =3D NULL;
>
> Please don't use variables with leading underscores, that's only
> appropriate for libraries.
>

Done.

Also, does this mean we can only have a single badge on display at any
> given time?


Yes.  The goal was to unify a simple API and behaviors across platforms.


> And what happens if the frame corresponding to this
> handle is deleted?
>

This w32 API is documented to ignore an invalid window handle.

> +DEFUN ("w32-badge",
> > +       Fw32_badge,
> > +       Sw32_badge,
> > +       3, 3, 0,
> > +       doc: /* Set the taskbar icon overlay image based on BADGE.
> > +BADGE is a UTF-8 string.  If BADGE is nil, remove the overlay.  Do
>
> Please say "BADGE is a string", without mentioning UTF-8.  Callers of
> primitives should pass Emacs Lisp strings, and the primitive should
> then encode the string as needed (which your code already does).
>

Done.

> +                                 Do nothing if the frame is not (yet)
> > +associated with an HWND.
>
> Which frame?  And there's no argument named HWND.
>

Updated to say the selected frame.

>                           BACKGROUND and FOREGROUND are lists of (RED
> > +GREEN BLUE) 8-bit integer values.  */)
> > +  (Lisp_Object badge, Lisp_Object bg, Lisp_Object fg)
>
> The color arguments are named BG and FG, not BACKGROUND and
> FOREGROUND.
>

Done.

> +{
> > +  CoInitialize (NULL);
> > +  ITaskbarList3 *task_bar_list =3D NULL;
> > +  HRESULT r =3D CoCreateInstance(&CLSID_TaskbarList,
> > +                            NULL,
> > +                            CLSCTX_INPROC_SERVER,
> > +                            &IID_ITaskbarList3,
> > +                            (void **)&task_bar_list);
> > +  if (r !=3D S_OK)
> > +    {
> > +      /* FIXME: Do we need to call CoUninitialize?  */
>
> I don't think we need to do that.
>

Done.

> +  HWND hwnd =3D NULL;
> > +  struct frame *sf =3D SELECTED_FRAME ();
> > +  if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf))
> > +    hwnd =3D FRAME_W32_WINDOW (sf);
>
> If we always use the selected frame, it should be documented.  If the
> same frame should be selected when removing the badge, that should
> also be documented (it means the caller will need to track which frame
> sets the badge).  And what happens if the caller attempts to remove
> the badge when a different frame is select, or if the original frame
> was deleted?
>

If the window handle becomes invalid, this w32 API is documented to ignore
it.

If the badge is nullified or replaced, it will first attempt to remove the
existing one, and then set the new one on the selected frame.  This is an
attempt to unify the API across platforms.

I've updated the docstring to say "Only one badge is active at a time and a
badge previously assigned to a frame other than the selected frame is
removed before assigning a new badge."

Attention w32 docstring similarly updated to say "Only one frame is flashed
at a time and any already active flashing is canceled and replaced by the
new request."

> +      if (bg_rgb =3D=3D 0xff000000)
> > +     {
> > +       signal_error ("Invalid background RGB", bg);
> > +       return Qnil;
> > +     }
> > +      if (fg_rgb =3D=3D 0xff000000)
> > +     {
> > +       signal_error ("Invalid foreground RGB", fg);
> > +       return Qnil;
> > +     }
>
> I'd prefer not to signal errors from these functions, but instead to
> silently return nil.
>

Done.

> +      /* Derive a font scaled to fit the icon.  First find the system's
> > +      base font.  Then scale it to fit icon_height.  */
> > +      HFONT base_font;
> > +      BOOL clean_up_base_font =3D FALSE;
> > +      if (system_parameters_info_w_fn)
> > +     {
> > +       NONCLIENTMETRICSW ncm;
> > +       memset (&ncm, 0, sizeof (ncm));
> > +       ncm.cbSize =3D sizeof (ncm);
> > +       SystemParametersInfoW (SPI_GETNONCLIENTMETRICS, sizeof (ncm),
> &ncm, 0);
> > +       base_font =3D CreateFontIndirectW (&ncm.lfSmCaptionFont);
> > +       clean_up_base_font =3D TRUE;
>
> Do we really need to call the "wide" variants of these functions?
>
See w32-set-wallpaper for what we do about SystemParametersInfoW, and
> CreateFontIndirectW is not used anywhere in Emacs.  Can we use
> CreateFontIndirect instead, or only use CreateFontIndirectW when it is
> supported, like w32-set-wallpaper does with SystemParametersInfoW?
>

I've retested with the narrow variants of these calls and it works fine.


> Are badges at all supported on old Windows versions?  If not, then we
> can use the "wide" APIs, but we need to do that through function
> pointers, which are filled at startup time using get_proc_addr, like
> we do with MultiByteToWideChar.  Because otherwise older versions of
> Windows will refuse to run Emacs that refers to these wide APIs which
> don't exist on those old versions.
>

The earliest supported version is Windows 7.

> +      /* Negative lfHeight indicates pixel units vs. positive in points.
> > +      Use the LOGPIXELSY px/in of the primary monitor.  */
> > +      lf.lfHeight =3D -MulDiv(icon_height / 2, /* Fit ~3 chars.  */
>                              ^^
> > +                         72,
> > +                         GetDeviceCaps(GetDC (NULL), LOGPIXELSY));
>                                         ^^
> Our style is to leave one space between the function's name and the
> opening parenthesis.
>

Done.

> +      for (int y =3D 0; y < icon_height; ++y)
> > +        for (int x =3D 0; x < icon_width; ++x)
> > +       {
> > +            int dx =3D x - circle_center_x;
> > +            int dy =3D y - circle_center_y;
> > +            if (dx * dx + dy * dy <=3D circle_radius_sq)
> > +           {
> > +               pixel =3D bitmap_pixels + (y * icon_width + x);
> > +               *pixel |=3D 0xff000000;
>                             ^^^^^^^^^^
> Please add a comment explaining that "magic constant".
>

Done.

> +static FlashWindowEx_Proc _flash_window_ex_fn =3D NULL;
>
> This variable should also be NULL-ified in globals_of_w32fns, so that
> we don't risk carrying stale values from when Emacs was dumped.
>

I moved the lookup into globals.

> +static HWND _w32_request_user_attention_hwnd =3D NULL;
>
> Again, please don't use variables whose names begin with an
> underscore.
>

Done.

> +DEFUN ("w32-request-user-attention",
> > +       Fw32_request_user_attention,
> > +       Sw32_request_user_attention,
> > +       1, 1, 0,
> > +       doc: /* Flash the taskbar icon based on URGENCY.
>
> AFAIU, FlashWindowEx flashes the frame itself as well, not only the
> task-bar icon, doesn't it?
>

Docstring updated to say "Flash the selected frame and/or taskbar icon
based on URGENCY."

> +  /* dwFlags
> > +     FLASHW_ALL       0x00000003 Flash both window caption and taskbar
> button.
> > +     FLASHW_CAPTION   0x00000001 Flash the window caption.
> > +     FLASHW_STOP      0x00000000 Stop flashing.
> > +     FLASHW_TIMER     0x00000004 Flash continuously, until FLASHW_STOP=
.
> > +     FLASHW_TIMERNOFG 0x0000000C Flash until window comes to the
> foreground.
> > +     FLASHW_TRAY      0x00000002 Flash the taskbar button.  */
>
> Should we allow flashing only the task-bar icon, as an option?
>

I've refined the behavior so that it is in line with the other two
platforms.  The task bar will flash until the window is focused (or the
timeout cancels the flash).  'informational urgency will flash only the
task bar where 'critical flashes both the taskbar and the frame.  I think
this is a happy medium.

I've also switched to using the defined win32 magic number names.

> +  flash_info.dwFlags =3D 0x00000000; /* FLASHW_STOP  */
> > +  if (_w32_request_user_attention_hwnd !=3D NULL
> > +      && _w32_request_user_attention_hwnd !=3D hwnd)
> > +    {
> > +      /* Disable attention on the old window handle.  */
> > +      flash_info.hwnd =3D _w32_request_user_attention_hwnd;
> > +      _flash_window_ex_fn (&flash_info);
> > +      _w32_request_user_attention_hwnd =3D hwnd;
>
> Does the fact that we store the handle to the frame's window in a
> global static variable mean that we cannot flash more than one frame
> at a time?
>

Yes.  Ditto on the attempt to unify the API across platforms.

And what happens if the frame is deleted before flashing ends?
>

The win32 API is silent on that.  I assume like other similar functions,
the Windows shell will simply stop flashing since it will have nothing to
flash.

> +  if (!NILP (urgency) && SYMBOLP (urgency))
> > +    {
> > +      /* The intended caller, dock-mode.el 'dock-attention', has its o=
wn
> > +      timer to clear the attention indicator so this will flash until
> > +      cleared via the timer for informational attention, or the
> > +      window comes to the foreground for critical attention.  */
> > +      if (EQ (urgency, Qinformational))
> > +     flash_info.dwFlags =3D 0x00000003 | 0x00000004; /* FLASHW_TIMER  =
*/
> > +      else if (EQ (urgency, Qcritical))
> > +     flash_info.dwFlags =3D 0x00000003 | 0x0000000C; /* FLASHW_TIMERNO=
FG
> */
> > +    }
>
> Why are you using numerical values instead of FLASHW_ALL etc.?
>

I changed to the defined names after checking that mingw headers define all
this stuff.

> +  if (_w32_progress_indicator_hwnd !=3D NULL
> > +      && _w32_progress_indicator_hwnd !=3D hwnd)
> > +    {
> > +      /* Disable the indicator for the old window handle.  */
> > +      task_bar_list->lpVtbl->SetProgressState (task_bar_list,
> > +
> _w32_progress_indicator_hwnd,
> > +                                            TBPF_NOPROGRESS);
> > +    }
> > +  _w32_progress_indicator_hwnd =3D hwnd;
>
> Same questions as above about displaying progress for more than one
> frame at a time.
>

Ditto answer.

> +  /* Scale task bar progress from 0.0-1.0 to 0-100.  */
> > +  unsigned int adj_progress =3D 0;
>
> The MS documentation says the 2 last arguments of SetProgressValue
> method are of type ULONGLONG, so why not use that here?
>

Done.

> +  #ifdef WINDOWSNT
> > +  /* Taskbar/dock */
>                     ^^
> Our conventions are to and a C comment with a period and two spaces
> before "*/".
>

Done.

-St=C3=A9phane

--0000000000004b240e06441dc01a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_defa=
ult" style=3D""><font face=3D"monospace">Thank you for reviewing the patch =
and your thoughtful feedback.=C2=A0=C2=A0I&#39;ll incorporate more feedback=
 after you get it compiled and you give it a try, and perhaps other people,=
 too.=C2=A0 My Windows 11 virtual machine is less than a real-world Windows=
 set up, though sufficient for developing this feature.</font></div><div cl=
ass=3D"gmail_default" style=3D""><font face=3D"monospace"><br></font></div>=
<div class=3D"gmail_default" style=3D""><span style=3D"font-family:monospac=
e">I&#39;ve attached a patch rebased on master </span><span style=3D"font-f=
amily:monospace">2cc6c812788281c05ca9687afd7bed</span><span style=3D"font-f=
amily:monospace">f597b1e942 which also incorporates your feedback.</span></=
div><div class=3D"gmail_default" style=3D""><span style=3D"font-family:mono=
space"><br></span></div><div class=3D"gmail_default" style=3D""><font face=
=3D"monospace">Responses interspersed below.</font></div><div class=3D"gmai=
l_default" style=3D""><font face=3D"monospace"><br></font></div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><span style=3D"font-fami=
ly:Arial,Helvetica,sans-serif">On Thu, Nov 20, 2025 at 5:27=E2=80=AFAM Eli =
Zaretskii &lt;<a href=3D"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN=
g</a>&gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex">&gt; Cc: Bj=C3=B6rn Bidar &lt;<a href=
=3D"mailto:bjorn.bidar@HIDDEN" target=3D"_blank">bjorn.bidar@HIDDEN=
</a>&gt;<br>
&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@HIDDEN" t=
arget=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Tue, 18 Nov 2025 14:17:45 -0500<br>
&gt; <br>
&gt; This patch implements system GUI dock features for icon badges, icon p=
rogress indicator, and icon attention<br>
&gt; request with implementations for GNU/Linux KDE &amp; GNOME, NS/macOS, =
and MS-Windows.<br>
<br>
Thank you for working on this important feature.<br>
<br>
&gt; GNU/Linux shells need to use an extension or include built-in support =
for the protocol documented here<br>
&gt; <a href=3D"https://wiki.ubuntu.com/Unity/LauncherAPI" rel=3D"noreferre=
r" target=3D"_blank">https://wiki.ubuntu.com/Unity/LauncherAPI</a>.=C2=A0 I=
 tested using this &quot;standard&quot; shell extension<br>
&gt; <a href=3D"https://extensions.gnome.org/extension/307/dash-to-dock/" r=
el=3D"noreferrer" target=3D"_blank">https://extensions.gnome.org/extension/=
307/dash-to-dock/</a> on GNOME and assistance and testing on KDE<br>
&gt; from the reddit user GeneAutomatic3471.<br>
<br>
This information should be in the NEWS entry.<br></blockquote><div><br></di=
v><div><div class=3D"gmail_default" style=3D"font-family:monospace">Done.</=
div></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; I&#39;d appreciate thoughtful feedback, and of course, testing.<br>
<br>
I wanted to test this on MS-Windows, but the w32fns.c patch failed to<br>
apply to the master branch, even if I use --ignore-whitespace option<br>
to &quot;git apply&quot;.=C2=A0 Could you please rebase on the current mast=
er and<br>
post an updated patch?<br></blockquote><div><br></div><div class=3D"gmail_d=
efault" style=3D"font-family:monospace">Please try the attached patch.</div=
><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><bl=
ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef=
t:1px solid rgb(204,204,204);padding-left:1ex">
So the below comments are based on reading the patch and nothing else.<br>
<br>
&gt; From f1c4bbf07a4b1c0cb5867412ecf2074bfc3e37e1 Mon Sep 17 00:00:00 2001=
<br>
&gt; From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D &lt;<a href=3D"mailt=
o:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Sat, 8 Nov 2025 13:30:37 -0500<br>
&gt; Subject: [PATCH] Add system GUI dock integration.<br>
&gt; <br>
&gt; Implement system GUI dock icon badge, icon progress indicator,<br>
&gt; icon attention alert features for D-Bus platforms (tested on KDE<br>
&gt; and GNOME), NS (GNUstep/macOS), Microsoft Windows.<br>
&gt; <br>
&gt; * lisp/dock-mode.el: New file.<br>
<br>
First, the name of the mode and related symbols: I find the name<br>
&quot;dock&quot; to be problematic, as it seems to be well-known to macOS u=
sers<br>
and maybe also to some users of GNU/Linux desktops, but might be<br>
unknown to others.=C2=A0 Also, &quot;dock&quot; has multiple meanings, whic=
h might be<br>
confusing.=C2=A0 I would prefer something like dock-taskbar-* instead, or<b=
r>
maybe gui-dock-*, or even gui-desktop-* (if we envision more features<br>
being added to this in the future).=C2=A0 I&#39;m also open to other ideas<=
br>
about better naming this class of features.<br></blockquote><div><br></div>=
<div><div class=3D"gmail_default" style=3D"font-family:monospace">I have no=
 strong opinion on this other than I thought the scope would be best limite=
d to &quot;dock&quot; features.=C2=A0 If you can envision other &quot;deskt=
op&quot; features to add (and we can avoid any confusion with desktop.el), =
I&#39;m happy to call it whatever we want.=C2=A0 If there are things you&#3=
9;d like to see sooner than later, I can take a stab at those if the scope =
is on the small side.</div></div><div>=C2=A0</div><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">
&gt; diff --git a/doc/misc/dock-mode.texi b/doc/misc/dock-mode.texi<br>
&gt; new file mode 100644<br>
&gt; index 00000000000..71358c09b7e<br>
&gt; --- /dev/null<br>
&gt; +++ b/doc/misc/dock-mode.texi<br>
<br>
I don&#39;t think this should be a separate Info file.=C2=A0 Instead, we sh=
ould<br>
split this information into a user-level part and Lisp-programmer<br>
level part, and have the former in the user manual and the latter in<br>
the ELisp reference.=C2=A0 Most of the Texinfo documentation you wrote<br>
naturally belongs to the latter category.<br>
<br>
A separate Info manual has a significant disadvantage that it is not<br>
part of the two main manuals, and is thus harder to discover.<br></blockquo=
te><div><br></div><div class=3D"gmail_default" style=3D"font-family:monospa=
ce">I&#39;ll tackle documentation feedback later after some more testing, a=
nd renaming if we do that.</div><div class=3D"gmail_default" style=3D"font-=
family:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1e=
x">
&gt; +@node Overview<br>
&gt; +@chapter Overview<br>
&gt; +<br>
&gt; +The Dock package provides integration with these system GUI dock<br>
&gt; +features:<br>
<br>
This should start by explaining what is a &quot;GUI dock&quot;.=C2=A0 It is=
 an<br>
obscure term that is unlikely to be widely known, IME.<br>
<br>
&gt; +Your GNU/Linux Emacs instance should be launched via an appropriate<b=
r>
&gt; +shell &quot;desktop&quot; file such as those distributed with Emacs; =
e.g.,<br>
&gt; +&quot;etc/emacsclient.desktop&quot;.<br>
<br>
File names should have the @file markup, instead of quoting them (here<br>
and elsewhere in the patch).<br>
<br>
&gt; +@node User Options<br>
&gt; +@chapter User Options<br>
<br>
This node should go to the Emacs user manual.=C2=A0 But it should begin by<=
br>
describing the features in user-facing terms: what will the user see<br>
for each aspect of the mode: how badges look, what is &quot;attention<br>
indicator&quot;, etc.=C2=A0 This stuff is unlikely to be well-known to user=
s,<br>
and without that, the following description of user options makes very<br>
little sense.<br>
<br>
&gt; +@defvar dock-dbus-desktop-file-name<br>
&gt; +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux<=
br>
&gt; +D-Bus systems, and can be customized to indicate which desktop file n=
ame<br>
&gt; +D-Bus will use to identify your Emacs instance.=C2=A0 It defaults to =
the<br>
&gt; +desktop file base name @code{&quot;emacsclient&quot;} and might need =
to be set to<br>
&gt; +@code{&quot;emacs&quot;} on your system.=C2=A0 Installed Emacs builds=
 typically include<br>
&gt; +default desktop files for both, and are called<br>
&gt; +@code{&quot;emacsclient.desktop&quot;} and @code{&quot;emacs.desktop&=
quot;}, respectively.<br>
&gt; +@end defvar<br>
<br>
Do users frequently need to customize this?=C2=A0 If in most cases this<br>
doesn&#39;t need to be customized, we don&#39;t need to mention the option =
in<br>
the manual.<br></blockquote><div><br></div><div><div class=3D"gmail_default=
" style=3D"font-family:monospace">Sadly, the testing on both KDE and GNOME =
indicated the default distro Emacsen use one or the other (and I can&#39;t =
now remember which is which), so people have had to use both values I docum=
ented.</div></div><div class=3D"gmail_default" style=3D"font-family:monospa=
ce"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px=
 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +@defvar dock-dbus-timeout-ms<br>
&gt; +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus<b=
r>
&gt; +systems, and can be customized to specify the number of milliseconds<=
br>
&gt; +Emacs will wait for D-Bus responses before timing out and considering=
<br>
&gt; +messages undeliverable.=C2=A0 It defaults to 25000 milliseconds, whic=
h is the<br>
&gt; +recommended default by the D-Bus package, which see, @pxref{Top,,, db=
us,<br>
&gt; +D-Bus integration in Emacs}.<br>
<br>
This doesn&#39;t seem to be a user-level option, at least not an important<=
br>
one.=C2=A0 I presume that the default is fine for almost all uses, and the<=
br>
option only needs customization when troubleshooting.<br></blockquote><div>=
<br></div><div><div class=3D"gmail_default" style=3D"font-family:monospace"=
>This is a default hard coded in `dbus-call-method` and I thought it best t=
o raise it up for this package as it is something people may have trouble w=
ith, even if unlikely,=C2=A0and we need to pass the timeout downstream.</di=
v></div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +@node Function Reference<br>
&gt; +@chapter Function Reference<br>
&gt; +<br>
&gt; +@findex dock-mode<br>
&gt; +@defun dock-mode<br>
&gt; +@code{dock-mode} must be enabled before calling any of its functions,=
 to<br>
&gt; +initialize the system back end.=C2=A0 On GNU/Linux D-Bus, initializat=
ion will<br>
&gt; +test that the D-Bus dock protocol is established, and signal an error=
 if<br>
&gt; +it is not.<br>
&gt; +@end defun<br>
<br>
This mode, and the description of GUI features it activates, should in<br>
the user manual.<br>
<br>
&gt; +@findex dock-badge<br>
&gt; +@defun dock-badge &amp;optional count-or-string<br>
&gt; +Set the dock icon badge to @var{count-or-string}.=C2=A0 If<br>
&gt; +@var{count-or-string} is @code{nil}, clear the badge.<br>
<br>
I&#39;m missing here the description of where will the badge appear if<br>
Emacs has several visible frames.=C2=A0 Will the badge appear on all of<br>
them? only one? something else?<br></blockquote><div><br></div><div><div cl=
ass=3D"gmail_default" style=3D"font-family:monospace">On GNU/Linux and NS, =
there is only a single dock icon for the Emacs process.=C2=A0 It&#39;s on w=
32 that things get more complex as=C2=A0 Windows has options to collapse or=
 not multiple frames into a group or not.=C2=A0 I thought it best for now t=
o unify the behavior to keep it simple and stick to a single badge per proc=
ess rather than introduce complexity in the API for all platforms.</div></d=
iv><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><=
blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l=
eft:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +If a string is specified on back ends which do not support strings, i=
t<br>
&gt; +is converted to an integer, if possible, or to nil.=C2=A0 GNUstep and=
 macOS<br>
&gt; +support string badges, the GNU/Linux D-Bus protocol supports only<br>
&gt; +integers; any string that cannot be converted to integer will be trea=
ted<br>
&gt; +as @code{nil}.<br>
<br>
This describes the implementation, but says nothing about the effect.<br>
What would be displayed when a string is converted to an integer (and<br>
how can an arbitrary string be converted to a number anyway)?<br>
Depending on the answers to those questions, it is possible that we<br>
don&#39;t have to mention the specific systems and backends.<br>
<br>
&gt; +@findex dock-attention<br>
&gt; +@defun dock-attention &amp;optional urgency timeout<br>
<br>
There&#39;s no need to have @findex for a @defun (here and elsewhere in<br>
the patch), because @defun automatically generates an index entry in<br>
the function index.<br>
<br>
&gt; +Set the dock icon to alert the user.=C2=A0 This will result in a boun=
cing or<br>
&gt; +flashing dock icon.=C2=A0 On some back ends, dock icon attention will=
<br>
&gt; +displayed only if Emacs is not the focused application.=C2=A0 =C2=A0 =
=C2=A0^^^^<br>
=C2=A0 =C2=A0^^^^^^^^^<br>
&quot;will be displayed&quot;<br>
<br>
&gt; +out automatically.=C2=A0 In contrast, a `critical` request requires t=
hat the<br>
<br>
Please don&#39;t quote `like this` in Texinfo documents, please use @code<b=
r>
or @samp instead.<br>
<br>
&gt; +@defun dock-progress &amp;optional progress<br>
&gt; +Set the dock icon to indicate ``progress&#39;&#39;.=C2=A0 Progress is=
 typically<br>
&gt; +represented as a graphical bar that fractionally spans the dock icon.=
<br>
<br>
This should have a cross-reference to the node &quot;Progress&quot; in the =
ELisp<br>
manual, which describes progress indicators.=C2=A0 It is also a good idea<b=
r>
to have the cross-reference in &quot;Progress&quot; pointing to this<br>
description.<br>
<br>
&gt; +icon.=C2=A0 Its usage is described in @pxref{Progress,, Display, elis=
p, The<br>
&gt; +Emacs Lisp Reference Manual}.<br>
<br>
This kind of &quot;HTML-style&quot; cross-references doesn&#39;t look good =
in Info<br>
and in the printed versions of the manual.=C2=A0 It is better to use<br>
something simpler, like<br>
<br>
=C2=A0 This is a convenience macro analogous to<br>
=C2=A0 @code{dotimes-with-progress-reporter} and works the same way as<br>
=C2=A0 @code{dotimes} does, but also reports loop progress on the Emacs doc=
k<br>
=C2=A0 icon.=C2=A0 @xref{Progress,, Display, elisp, The Emacs Lisp Referenc=
e Manual}.<br>
<br>
(Btw, that &quot;Display&quot; part in the cross-reference is wrong, and wi=
ll<br>
not do what you thought it would.)<br>
<br>
&gt; +@defmac dolist-with-dock-progress-reporter (var list [result]) report=
er-or-message body@dots{}<br>
&gt; +This is a convenience macro analogous to<br>
&gt; +@code{dolist-with-progress-reporter} and works the same way as<br>
&gt; +@code{dolist} does, but also reports loop progress on the Emacs dock<=
br>
&gt; +icon.=C2=A0 Its usage is described in @pxref{Progress,, Display, elis=
p, The<br>
&gt; +Emacs Lisp Reference Manual}.<br>
<br>
Same comments here.<br>
<br>
&gt; +@lisp<br>
&gt; +;; Enable and initialize dock-mode.<br>
&gt; +(dock-mode)<br>
&gt; +<br>
&gt; +;; Display a badge on the dock icon.<br>
&gt; +(dock-badge emacs-major-version)<br>
&gt; +(dock-badge &quot;31&quot;)<br>
&gt; +(dock-badge &quot;Test&quot;) ; short string (on supported platforms)=
<br>
<br>
Such long @lisp snippets should be subdivided into groups, using<br>
@group..@end group, to prevent the group from being split between two<br>
pages, which makes reading the examples harder.<br>
<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 ((bound-and-true-p w32-initialized)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq dock--back-end &#39;windows-n=
t))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^^^^^^^^^^<br>
I&#39;d prefer the symbol &#39;w32&#39; here.<br></blockquote><div><br></di=
v><div class=3D"gmail_default" style=3D"font-family:monospace">Done.</div><=
div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex">
&gt; +(define-minor-mode dock-mode<br>
&gt; +=C2=A0 &quot;GUI dock icon badges, progress report, alerts.&quot;<br>
<br>
This doc string should be significantly expanded to describe the mode<br>
features, with links to relevant commands and user options.<br>
<br>
Also, please add a :version tag.<br></blockquote><div><br></div><div><div c=
lass=3D"gmail_default" style=3D"font-family:monospace">Added to the defgrou=
p and defcustoms.</div></div><div><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex">
&gt; +(cl-defgeneric dock-badge (&amp;optional count-or-string)<br>
&gt; +=C2=A0 &quot;Set the dock icon badge to COUNT-OR-STRING.<br>
&gt; +If COUNT-OR-STRING is an integer, display that as the icon badge.<br>
&gt; +If COUNT-OR-STRING is a string on back ends which do not support<br>
&gt; +strings, convert COUNT-OR-STRING to an integer, or nil.<br>
&gt; +If COUNT-OR-STRING is nil, or is an empty string, remove the counter.=
&quot;)<br>
<br>
If a string is converted to nil, will that remove the counter?<br></blockqu=
ote><div><br></div><div class=3D"gmail_default"><font face=3D"monospace">Ye=
s, in the dbus implementation &quot;Set badge to COUNT-OR-STRING if an inte=
ger, otherwise use nil.</font></div><font face=3D"monospace">The Unity prot=
ocol does not support string badges.&quot;</font><div>=C2=A0</div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex">
&gt; +(cl-defgeneric dock-attention (&amp;optional urgency timeout)<br>
&gt; +=C2=A0 &quot;Set the dock icon to alert the user.<br>
<br>
I think &quot;Display the dock icon to alert the user.&quot; is a better<br=
>
description.<br></blockquote><div><br></div><div class=3D"gmail_default" st=
yle=3D"font-family:monospace">Changed to &quot;Flash the dock icon and/or f=
rame to alert the user.&quot; which should cover if we change Windows to do=
 either or both.=C2=A0 There are no choices on the other platforms.</div><d=
iv class=3D"gmail_default" style=3D"font-family:monospace"><br></div><block=
quote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1=
px solid rgb(204,204,204);padding-left:1ex">
And I wonder whether we should, under dock-mode, call dock-attention<br>
as part of bell and visible-bell, at least as a user option?<br></blockquot=
e><div><br></div><div><div class=3D"gmail_default" style=3D"font-family:mon=
ospace">Possible.=C2=A0 Not sure about mashing C-g, though.=C2=A0 Might hav=
e to be debounced.</div></div><div><br></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex">
&gt; +(cl-defgeneric dock-progress (&amp;optional progress)<br>
&gt; +=C2=A0 &quot;Set the dock icon to indicate progress.<br>
<br>
Likewise.<br></blockquote><div><br></div><div><div class=3D"gmail_default" =
style=3D"font-family:monospace">Now reads &quot;Display a progress indicato=
r on the dock icon.&quot;</div></div><div><br></div><blockquote class=3D"gm=
ail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,=
204,204);padding-left:1ex">
&gt; +(defvar dock--dotimes-with-dock-progress-reporter-advice-count 0<br>
&gt; +=C2=A0 &quot;Ensure advice is not removed when more than one active u=
se.&quot;)<br>
&gt; +<br>
&gt; +(defun dock--set-up-progress-reporter ()<br>
&gt; +=C2=A0 &quot;`progress-reporter-do-update` helper.&quot;<br>
&gt; +=C2=A0 (incf dock--dotimes-with-dock-progress-reporter-advice-count)<=
br>
&gt; +=C2=A0 (advice-add #&#39;progress-reporter-do-update<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :around<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #&#39;dock--progress=
-reporter-do-update))<br>
<br>
Our conventions frown on using advice in our code.=C2=A0 How about adding a=
<br>
hook to progress-reporter-do-update instead, so that it could call<br>
this indication of progress when the mode is active?<br></blockquote><div><=
br></div><div><div class=3D"gmail_default" style=3D"font-family:monospace">=
I had that on my todo list and I&#39;m glad you pointed that out.=C2=A0 I&#=
39;ll propose something in the next patch or two (+/- my travel schedule it=
 may have to wait until the middle of the first week of December).</div></d=
iv><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +(defun dock--tear-down-progress-reporter ()<br>
&gt; +=C2=A0 &quot;`progress-reporter-do-update` helper.&quot;<br>
&gt; +=C2=A0 (when (=3D 0 (decf dock--dotimes-with-dock-progress-reporter-a=
dvice-count))<br>
&gt; +=C2=A0 =C2=A0 (advice-remove #&#39;progress-reporter-do-update<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
#&#39;dock--progress-reporter-do-update)))<br>
<br>
Same here.<br>
<br>
&gt; +(defvar dock-w32-badge-bg &#39;(#xe7 #x58 #x57) ; redish<br>
&gt; +=C2=A0 &quot;Integer RGB values as the background for w32 badge.&quot=
;)<br>
&gt; +<br>
&gt; +(defvar dock-w32-badge-fg &#39;(#xff #xff #xff) ; white<br>
&gt; +=C2=A0 &quot;Integer RGB values as the foreground for w32 badge text.=
&quot;)<br>
<br>
Can&#39;t we use the normal#RRRGGGBBB color notations here? why invent<br>
something new when we already have infrastructure for specifying<br>
colors flexibly and easily?<br></blockquote><div><br></div><div><div class=
=3D"gmail_default" style=3D"font-family:monospace">Changed to standard Emac=
s color spec.</div><div class=3D"gmail_default" style=3D"font-family:monosp=
ace"><br></div></div><blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; diff --git a/src/w32fns.c b/src/w32fns.c<br>
&gt; index 3fc0f55244f..c0d7cad3dc5 100644<br>
&gt; --- a/src/w32fns.c<br>
&gt; +++ b/src/w32fns.c<br>
<br>
As mentioned above, I was unable to compile the code, so the comments<br>
below are based only on reading the patch.<br>
<br>
&gt; @@ -38,6 +38,10 @@ #define COBJMACROS /* Ask for C definitions for COM=
.=C2=A0 */<br>
&gt;=C2=A0 #include &lt;shlobj.h&gt;<br>
&gt;=C2=A0 #include &lt;oleidl.h&gt;<br>
&gt;=C2=A0 #include &lt;objidl.h&gt;<br>
&gt; +#if !defined MINGW_W64 &amp;&amp; !defined CYGWIN<br>
&gt; +# define INITGUID<br>
&gt; +#endif<br>
<br>
I don&#39;t understand this: why only MINGW_W64? does this code work only<b=
r>
in 64bit builds or something?<br>
<br>
And why define INITGUID to nothing?<br></blockquote><div><br></div><div><di=
v class=3D"gmail_default" style=3D"font-family:monospace">I blindly copied =
this from=C2=A0w32dwrite.c.=C2=A0 Including &lt;shobjidl.h&gt; does require=
 that we include &lt;initguid.h&gt; to get the key COM interface defined th=
at we need (I&#39;ve removed the private copy after testing on mingw).</div=
></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +#ifndef IID_ITaskbarList3<br>
&gt; +DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91, 0x9e28, 0x4b86, 0x90,0xe9,=
 0x9e,0x9f,0x8a,0x5e,0xef,0xaf);<br>
<br>
Please add a comment here explaining what these constants are and what<br>
is their effect.=C2=A0 Or maybe these constants are required by Windows to<=
br>
be that and only that?=C2=A0 This should be documented, preferably with a<b=
r>
reference.<br></blockquote><div><br></div><div class=3D"gmail_default" styl=
e=3D"font-family:monospace">I got this to compile just=C2=A0fine on mingw s=
o I removed this magic.</div><div class=3D"gmail_default" style=3D"font-fam=
ily:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +/* Parse RGB_LIST, and return a COLORREF.<br>
&gt; +=C2=A0 =C2=A0RGB_LIST should contain (at least) 3 lisp integers.<br>
&gt; +=C2=A0 =C2=A0Return 0xff000000 iff RGB_LIST is not OK.=C2=A0 */<br>
&gt; +<br>
&gt; +static COLORREF<br>
&gt; +rgb_list_to_colorref (Lisp_Object rgb_list)<br>
<br>
I believe this function will be unnecessary if you use the usual<br>
#RRRGGGBBB color spec instead of a list of RGB components.<br></blockquote>=
<div><br></div><div><div class=3D"gmail_default" style=3D"font-family:monos=
pace">Replaced with=C2=A0parse_color_spec.</div><div class=3D"gmail_default=
" style=3D"font-family:monospace"><br></div></div><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">
&gt; +/* Track the window handle for the global badge icon. */<br>
&gt; +static HWND _w32_badge_hwnd =3D NULL;<br>
<br>
Please don&#39;t use variables with leading underscores, that&#39;s only<br=
>
appropriate for libraries.<br></blockquote><div><br></div><div><div class=
=3D"gmail_default" style=3D"font-family:monospace">Done.</div></div><div><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Also, does this mean we can only have a single badge on display at any<br>
given time?</blockquote><div><br></div><div><div class=3D"gmail_default" st=
yle=3D"font-family:monospace">Yes.=C2=A0 The goal was to unify a simple API=
 and behaviors across platforms.</div></div><div>=C2=A0</div><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex">And what happens if the frame correspon=
ding to this<br>
handle is deleted?<br></blockquote><div><br></div><div><div class=3D"gmail_=
default" style=3D"font-family:monospace">This w32 API is documented to igno=
re an invalid window handle.</div></div><div><br></div><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex">
&gt; +DEFUN (&quot;w32-badge&quot;,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0Fw32_badge,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0Sw32_badge,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A03, 3, 0,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0doc: /* Set the taskbar icon overlay image=
 based on BADGE.<br>
&gt; +BADGE is a UTF-8 string.=C2=A0 If BADGE is nil, remove the overlay.=
=C2=A0 Do<br>
<br>
Please say &quot;BADGE is a string&quot;, without mentioning UTF-8.=C2=A0 C=
allers of<br>
primitives should pass Emacs Lisp strings, and the primitive should<br>
then encode the string as needed (which your code already does).<br></block=
quote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family=
:monospace">Done.</div></div><div class=3D"gmail_default" style=3D"font-fam=
ily:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Do nothing if the frame is=
 not (yet)<br>
&gt; +associated with an HWND.<br>
<br>
Which frame?=C2=A0 And there&#39;s no argument named HWND.<br></blockquote>=
<div><br></div><div><div class=3D"gmail_default" style=3D"font-family:monos=
pace">Updated to say the selected frame.</div></div><div><br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex">
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0BACKGROUND and FOREGROUND are lists of (RED<br>
&gt; +GREEN BLUE) 8-bit integer values.=C2=A0 */)<br>
&gt; +=C2=A0 (Lisp_Object badge, Lisp_Object bg, Lisp_Object fg)<br>
<br>
The color arguments are named BG and FG, not BACKGROUND and<br>
FOREGROUND.<br></blockquote><div><br></div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace">Done.</div><div class=3D"gmail_default" style=
=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex">
&gt; +{<br>
&gt; +=C2=A0 CoInitialize (NULL);<br>
&gt; +=C2=A0 ITaskbarList3 *task_bar_list =3D NULL;<br>
&gt; +=C2=A0 HRESULT r =3D CoCreateInstance(&amp;CLSID_TaskbarList,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 NULL,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 CLSCTX_INPROC_SERVER,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &amp;IID_ITaskbarList3,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (void **)&amp;task_bar_list);<br>
&gt; +=C2=A0 if (r !=3D S_OK)<br>
&gt; +=C2=A0 =C2=A0 {<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 /* FIXME: Do we need to call CoUninitialize?=C2=
=A0 */<br>
<br>
I don&#39;t think we need to do that.<br></blockquote><div><br></div><div c=
lass=3D"gmail_default" style=3D"font-family:monospace">Done.</div><div clas=
s=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex">
&gt; +=C2=A0 HWND hwnd =3D NULL;<br>
&gt; +=C2=A0 struct frame *sf =3D SELECTED_FRAME ();<br>
&gt; +=C2=A0 if (FRAME_W32_P (sf) &amp;&amp; FRAME_LIVE_P (sf))<br>
&gt; +=C2=A0 =C2=A0 hwnd =3D FRAME_W32_WINDOW (sf);<br>
<br>
If we always use the selected frame, it should be documented.=C2=A0 If the<=
br>
same frame should be selected when removing the badge, that should<br>
also be documented (it means the caller will need to track which frame<br>
sets the badge).=C2=A0 And what happens if the caller attempts to remove<br=
>
the badge when a different frame is select, or if the original frame<br>
was deleted?<br></blockquote><div><br></div><div><div class=3D"gmail_defaul=
t" style=3D"font-family:monospace">If the window handle becomes invalid, th=
is w32 API is documented to ignore it.</div></div><div class=3D"gmail_defau=
lt" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" =
style=3D"font-family:monospace">If the badge is nullified or replaced, it w=
ill first attempt to remove the existing one, and then set the new one on t=
he selected frame.=C2=A0 This is an attempt to unify the API across platfor=
ms.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br><=
/div><div class=3D"gmail_default"><font face=3D"monospace">I&#39;ve updated=
 the docstring to say &quot;Only one badge is=C2=A0</font><span style=3D"fo=
nt-family:monospace">active at a time and a badge previously assigned to a =
frame other than</span><span class=3D"gmail_default" style=3D"font-family:m=
onospace">=C2=A0</span><span style=3D"font-family:monospace">the selected f=
rame is removed before assigning a new badge.</span><span class=3D"gmail_de=
fault" style=3D"font-family:monospace">&quot;</span></div></div><div class=
=3D"gmail_quote"><font face=3D"monospace"><br></font></div><div class=3D"gm=
ail_quote"><font face=3D"monospace"><span class=3D"gmail_default">Attention=
 w32 docstring similarly updated to say &quot;</span>Only one frame is flas=
hed at a time and any already active<span class=3D"gmail_default" style=3D"=
font-family:monospace">=C2=A0</span>flashing is canceled and replaced by th=
e new request.<span class=3D"gmail_default">&quot;</span><br></font><div><f=
ont face=3D"monospace"><br></font></div><blockquote class=3D"gmail_quote" s=
tyle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pad=
ding-left:1ex">
&gt; +=C2=A0 =C2=A0 =C2=A0 if (bg_rgb =3D=3D 0xff000000)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0{<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0signal_error (&quot;Invalid background RGB=
&quot;, bg);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0return Qnil;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0}<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 if (fg_rgb =3D=3D 0xff000000)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0{<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0signal_error (&quot;Invalid foreground RGB=
&quot;, fg);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0return Qnil;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0}<br>
<br>
I&#39;d prefer not to signal errors from these functions, but instead to<br=
>
silently return nil.<br></blockquote><div><br></div><div><div class=3D"gmai=
l_default" style=3D"font-family:monospace">Done.</div></div><div class=3D"g=
mail_default" style=3D"font-family:monospace"><br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
&gt; +=C2=A0 =C2=A0 =C2=A0 /* Derive a font scaled to fit the icon.=C2=A0 F=
irst find the system&#39;s<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 base font.=C2=A0 Then scale it to fit icon_heigh=
t.=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 HFONT base_font;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 BOOL clean_up_base_font =3D FALSE;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 if (system_parameters_info_w_fn)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0{<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0NONCLIENTMETRICSW ncm;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0memset (&amp;ncm, 0, sizeof (ncm));<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0ncm.cbSize =3D sizeof (ncm);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0SystemParametersInfoW (SPI_GETNONCLIENTMET=
RICS, sizeof (ncm), &amp;ncm, 0);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0base_font =3D CreateFontIndirectW (&amp;nc=
m.lfSmCaptionFont);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0clean_up_base_font =3D TRUE;<br>
<br>
Do we really need to call the &quot;wide&quot; variants of these functions?=
<br></blockquote><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">See w32-=
set-wallpaper for what we do about SystemParametersInfoW, and<br>
CreateFontIndirectW is not used anywhere in Emacs.=C2=A0 Can we use<br>
CreateFontIndirect instead, or only use CreateFontIndirectW when it is<br>
supported, like w32-set-wallpaper does with SystemParametersInfoW?<br></blo=
ckquote><div>=C2=A0</div><div><div><div class=3D"gmail_default" style=3D"fo=
nt-family:monospace">I&#39;ve retested with the narrow variants of these ca=
lls and it works fine.</div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=C2=A0=
</span></div></div></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Are badges at all supported on old Windows versions?=C2=A0 If not, then we<=
br>
can use the &quot;wide&quot; APIs, but we need to do that through function<=
br>
pointers, which are filled at startup time using get_proc_addr, like<br>
we do with MultiByteToWideChar.=C2=A0 Because otherwise older versions of<b=
r>
Windows will refuse to run Emacs that refers to these wide APIs which<br>
don&#39;t exist on those old versions.<br></blockquote><div><br></div><div>=
<div class=3D"gmail_default" style=3D"font-family:monospace">The earliest s=
upported version is Windows 7.</div></div><div class=3D"gmail_default" styl=
e=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddi=
ng-left:1ex">
&gt; +=C2=A0 =C2=A0 =C2=A0 /* Negative lfHeight indicates pixel units vs. p=
ositive in points.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 Use the LOGPIXELSY px/in of the primary monitor.=
=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 lf.lfHeight =3D -MulDiv(icon_height / 2, /* Fit =
~3 chars.=C2=A0 */<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A072,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0GetDeviceCaps(GetDC (NULL), LOGPIXELSY));<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^^<br>
Our style is to leave one space between the function&#39;s name and the<br>
opening parenthesis.<br></blockquote><div><br></div><div><div class=3D"gmai=
l_default" style=3D"font-family:monospace">Done.</div></div><div><br></div>=
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-=
left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +=C2=A0 =C2=A0 =C2=A0 for (int y =3D 0; y &lt; icon_height; ++y)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (int x =3D 0; x &lt; icon_width; ++x)=
<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0{<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int dx =3D x - circle_cente=
r_x;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 int dy =3D y - circle_cente=
r_y;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (dx * dx + dy * dy &lt;=
=3D circle_radius_sq)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pixel =3D bitm=
ap_pixels + (y * icon_width + x);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*pixel |=3D 0x=
ff000000;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 ^^^^^^^^^^<br>
Please add a comment explaining that &quot;magic constant&quot;.<br></block=
quote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family=
:monospace">Done.</div></div><div><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex">
&gt; +static FlashWindowEx_Proc _flash_window_ex_fn =3D NULL;<br>
<br>
This variable should also be NULL-ified in globals_of_w32fns, so that<br>
we don&#39;t risk carrying stale values from when Emacs was dumped.<br></bl=
ockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">I moved the lookup into globals.</div><div class=3D"gmail_default=
" style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex">
&gt; +static HWND _w32_request_user_attention_hwnd =3D NULL;<br>
<br>
Again, please don&#39;t use variables whose names begin with an<br>
underscore.<br></blockquote><div><br></div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace">Done.</div><div class=3D"gmail_default" style=
=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddin=
g-left:1ex">
&gt; +DEFUN (&quot;w32-request-user-attention&quot;,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0Fw32_request_user_attention,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0Sw32_request_user_attention,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A01, 1, 0,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0doc: /* Flash the taskbar icon based on UR=
GENCY.<br>
<br>
AFAIU, FlashWindowEx flashes the frame itself as well, not only the<br>
task-bar icon, doesn&#39;t it?<br></blockquote><div><br></div><div><div cla=
ss=3D"gmail_default" style=3D"font-family:monospace">Docstring updated to s=
ay &quot;Flash the selected frame and/or taskbar icon based on URGENCY.&quo=
t;</div></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1=
ex">
&gt; +=C2=A0 /* dwFlags<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_ALL=C2=A0 =C2=A0 =C2=A0 =C2=A00x00000003 F=
lash both window caption and taskbar button.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_CAPTION=C2=A0 =C2=A00x00000001 Flash the w=
indow caption.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_STOP=C2=A0 =C2=A0 =C2=A0 0x00000000 Stop f=
lashing.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_TIMER=C2=A0 =C2=A0 =C2=A00x00000004 Flash =
continuously, until FLASHW_STOP.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_TIMERNOFG 0x0000000C Flash until window co=
mes to the foreground.<br>
&gt; +=C2=A0 =C2=A0 =C2=A0FLASHW_TRAY=C2=A0 =C2=A0 =C2=A0 0x00000002 Flash =
the taskbar button.=C2=A0 */<br>
<br>
Should we allow flashing only the task-bar icon, as an option?<br></blockqu=
ote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">I&#39;ve refined=C2=A0the=C2=A0behavior so that it is in line wit=
h the other two platforms.=C2=A0 The task bar will flash until the window i=
s focused (or the timeout cancels the flash).=C2=A0 &#39;informational urge=
ncy will flash only the task bar where &#39;critical flashes both the taskb=
ar and the frame.=C2=A0 I think this is a happy medium.</div></div><div cla=
ss=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=
=3D"gmail_default" style=3D"font-family:monospace">I&#39;ve also switched t=
o using the defined win32 magic number names.</div><div><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex">
&gt; +=C2=A0 flash_info.dwFlags =3D 0x00000000; /* FLASHW_STOP=C2=A0 */<br>
&gt; +=C2=A0 if (_w32_request_user_attention_hwnd !=3D NULL<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 &amp;&amp; _w32_request_user_attention_hwnd !=3D=
 hwnd)<br>
&gt; +=C2=A0 =C2=A0 {<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 /* Disable attention on the old window handle.=
=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 flash_info.hwnd =3D _w32_request_user_attention_=
hwnd;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 _flash_window_ex_fn (&amp;flash_info);<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 _w32_request_user_attention_hwnd =3D hwnd;<br>
<br>
Does the fact that we store the handle to the frame&#39;s window in a<br>
global static variable mean that we cannot flash more than one frame<br>
at a time?<br></blockquote><div><br></div><div><div class=3D"gmail_default"=
 style=3D"font-family:monospace">Yes.=C2=A0 Ditto on the attempt to unify t=
he API across platforms.</div></div><div><br></div><blockquote class=3D"gma=
il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2=
04,204);padding-left:1ex">
And what happens if the frame is deleted before flashing ends?<br></blockqu=
ote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">The win32 API is silent on that.=C2=A0 I assume like other simila=
r functions, the Windows shell will simply stop flashing since it will have=
 nothing to flash.</div></div><div><br></div><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex">
&gt; +=C2=A0 if (!NILP (urgency) &amp;&amp; SYMBOLP (urgency))<br>
&gt; +=C2=A0 =C2=A0 {<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 /* The intended caller, dock-mode.el &#39;dock-a=
ttention&#39;, has its own<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 timer to clear the attention indicator so this w=
ill flash until<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 cleared via the timer for informational attentio=
n, or the<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 window comes to the foreground for critical atte=
ntion.=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 if (EQ (urgency, Qinformational))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0flash_info.dwFlags =3D 0x00000003 | 0x00000004; /=
* FLASHW_TIMER=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 else if (EQ (urgency, Qcritical))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0flash_info.dwFlags =3D 0x00000003 | 0x0000000C; /=
* FLASHW_TIMERNOFG=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 }<br>
<br>
Why are you using numerical values instead of FLASHW_ALL etc.?<br></blockqu=
ote><div><br></div><div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">I changed to the defined names after checking that mingw headers =
define all this stuff.</div></div><div><br></div><blockquote class=3D"gmail=
_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204=
,204);padding-left:1ex">
&gt; +=C2=A0 if (_w32_progress_indicator_hwnd !=3D NULL<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 &amp;&amp; _w32_progress_indicator_hwnd !=3D hwn=
d)<br>
&gt; +=C2=A0 =C2=A0 {<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 /* Disable the indicator for the old window hand=
le.=C2=A0 */<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 task_bar_list-&gt;lpVtbl-&gt;SetProgressState (t=
ask_bar_list,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 _w32_progress_indicator_hwnd,<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 TBPF_NOPROGRESS);<br>
&gt; +=C2=A0 =C2=A0 }<br>
&gt; +=C2=A0 _w32_progress_indicator_hwnd =3D hwnd;<br>
<br>
Same questions as above about displaying progress for more than one<br>
frame at a time.<br></blockquote><div><br></div><div class=3D"gmail_default=
" style=3D"font-family:monospace">Ditto answer.</div><div class=3D"gmail_de=
fault" style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail=
_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204=
,204);padding-left:1ex">
&gt; +=C2=A0 /* Scale task bar progress from 0.0-1.0 to 0-100.=C2=A0 */<br>
&gt; +=C2=A0 unsigned int adj_progress =3D 0;<br>
<br>
The MS documentation says the 2 last arguments of SetProgressValue<br>
method are of type ULONGLONG, so why not use that here?<br></blockquote><di=
v><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">Do=
ne.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br><=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bo=
rder-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +=C2=A0 #ifdef WINDOWSNT<br>
&gt; +=C2=A0 /* Taskbar/dock */<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ^^<br=
>
Our conventions are to and a C comment with a period and two spaces<br>
before &quot;*/&quot;.<br></blockquote><div><br></div><div><div class=3D"gm=
ail_default" style=3D"font-family:monospace">Done.</div><br></div><div><spa=
n style=3D"font-family:monospace">-St=C3=A9phane</span></div></div></div>
</div>

--0000000000004b240e06441dc01a--

--0000000000004b241006441dc01c
Content-Type: application/octet-stream; 
	name="0001-Add-system-GUI-dock-integration.patch"
Content-Disposition: attachment; 
	filename="0001-Add-system-GUI-dock-integration.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mi93v8v90>
X-Attachment-Id: f_mi93v8v90

RnJvbSA4NmExNTc3ZmY4MjkwMjkxMDIwYjEwMjk0ZjY1MzUyNzczYjY5ZGIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjAgTm92IDIwMjUgMTI6NTQ6NDAgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBBZGQgc3lzdGVtIEdVSSBkb2NrIGludGVncmF0aW9uLgoKSW1wbGVt
ZW50IHN5c3RlbSBHVUkgZG9jayBpY29uIGJhZGdlLCBpY29uIHByb2dyZXNzIGluZGljYXRvciwK
aWNvbiBhdHRlbnRpb24gYWxlcnQgZmVhdHVyZXMgZm9yIEQtQnVzIHBsYXRmb3JtcyAodGVzdGVk
IG9uIEtERQphbmQgR05PTUUpLCBOUyAoR05Vc3RlcC9tYWNPUyksIE1TLVdpbmRvd3MuCgoqIGxp
c3AvZG9jay1tb2RlLmVsOiBOZXcgZmlsZS4KKiBzcmMvbnNmbnMubSAoRm5zX2JhZGdlLCBGbnNf
cHJvZ3Jlc3NfaW5kaWNhdG9yKQooRm5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24pOiBOZXcgZnVu
Y3Rpb24uCihzeW1zX29mX25zZm5zKTogQWRkIGRlZnN1YnIgU25zX2JhZGdlLApTbnNfcmVxdWVz
dF91c2VyX2F0dGVudGlvbiwgU25zX3Byb2dyZXNzX2luZGljYXRvci4gQWRkIERFRlNZTQpRaW5m
b3JtYXRpb25hbCwgUWNyaXRpY2FsLgoqIHNyYy93MzJmbnMuYyAocmdiX2xpc3RfdG9fY29sb3Jy
ZWYsIEZ3MzJfYmFkZ2UpCihGdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIEZ3MzJfcHJvZ3Jl
c3NfaW5kaWNhdG9yKTogTmV3CmZ1bmN0aW9uLgooc3ltc19vZl93MzJmbnMpOiBBZGQgZGVmc3Vi
ciBTdzMyX2JhZGdlLApTdzMyX3Byb2dyZXNzX2luZGljYXRvciwgU3czMl9yZXF1ZXN0X3VzZXJf
YXR0ZW50aW9uLiBBZGQgREVGU1lNClFpbmZvcm1hdGlvbmFsLCBRY3JpdGljYWwuCiogZG9jL21p
c2MvTWFrZWZpbGUuaW46IEFkZGVkIG5ldyBmaWxlLgoqIGRvYy9taXNjL2RvY2stbW9kZS50ZXhp
OiBOZXcgZmlsZS4KKiBldGMvTkVXUzogQW5ub3VuY2UgdGhlIG5ldyBmZWF0dXJlLgotLS0KIGRv
Yy9taXNjL01ha2VmaWxlLmluICAgIHwgICAxICsKIGRvYy9taXNjL2RvY2stbW9kZS50ZXhpIHwg
MjM3ICsrKysrKysrKysrKysrKysrKysrKwogZXRjL05FV1MgICAgICAgICAgICAgICAgfCAgMTAg
KwogbGlzcC9kb2NrLW1vZGUuZWwgICAgICAgfCA0NTUgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogc3JjL25zZm5zLm0gICAgICAgICAgICAgfCAxMjggKysrKysrKysr
KysKIHNyYy93MzJmbnMuYyAgICAgICAgICAgIHwgMzY2ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDExOTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGRvYy9taXNjL2RvY2stbW9kZS50ZXhpCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlz
cC9kb2NrLW1vZGUuZWwKCmRpZmYgLS1naXQgYS9kb2MvbWlzYy9NYWtlZmlsZS5pbiBiL2RvYy9t
aXNjL01ha2VmaWxlLmluCmluZGV4IDk1YzhhOTJkZWQxLi43YTkyZWMzODg4NiAxMDA2NDQKLS0t
IGEvZG9jL21pc2MvTWFrZWZpbGUuaW4KKysrIGIvZG9jL21pc2MvTWFrZWZpbGUuaW4KQEAgLTY4
LDYgKzY4LDcgQEAgRE9DTUlTQ19XMzIgPQogCiAjIyBJbmZvIGZpbGVzIHRvIGJ1aWxkIGFuZCBp
bnN0YWxsIG9uIGFsbCBwbGF0Zm9ybXMuCiBJTkZPX0NPTU1PTiA9IGF1dGggYXV0b3R5cGUgYm92
aW5lIGNhbGMgY2Ntb2RlIGNsIGRidXMgZGlyZWQteAkJXAorCWRvY2stbW9kZQkJCQkJCQlcCiAJ
ZWJyb3dzZSBlZGUgZWRpZmYgZWR0IGVmYXEgZWdsb3QgZWllaW8gZW1hY3MtZ251dGxzCQlcCiAJ
ZW1hY3MtbWltZSBlcGEgZXJjIGVydCBlc2hlbGwgZXVkYyBld3cgZmx5bWFrZSBmb3JtcyBnbnVz
CVwKIAlodG1sZm9udGlmeSBpZGx3YXZlIGlkbyBpbmZvLmluZm8gbWFpcml4LWVsIG1lc3NhZ2Ug
bWgtZQlcCmRpZmYgLS1naXQgYS9kb2MvbWlzYy9kb2NrLW1vZGUudGV4aSBiL2RvYy9taXNjL2Rv
Y2stbW9kZS50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MTM1
OGMwOWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9taXNjL2RvY2stbW9kZS50ZXhpCkBAIC0w
LDAgKzEsMjM3IEBACitcaW5wdXQgdGV4aW5mbyAgICBAYyAtKi10ZXhpbmZvLSotCisKK0BzZXRm
aWxlbmFtZSAuLi8uLi9pbmZvL2RvY2stbW9kZS5pbmZvCitAc2V0dGl0bGUgR1VJIERvY2sgSWNv
biBGZWF0dXJlcworQGluY2x1ZGUgZG9jc3R5bGUudGV4aQorCitAY29weWluZworVGhpcyBmaWxl
IGRlc2NyaWJlcyBFbWFjcyBzeXN0ZW0gR1VJIGRvY2sgaW50ZWdyYXRpb24uCisKK0NvcHlyaWdo
dCBAY29weXJpZ2h0e30gMjAyNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworQHF1
b3RhdGlvbgorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29y
IG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERv
Y3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIG5vCitJbnZhcmlh
bnQgU2VjdGlvbnMsIHdpdGggdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIGBgQSBHTlUgTWFu
dWFsLCcnCithbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcyBpbiAoYSkgYmVsb3cuICBB
IGNvcHkgb2YgdGhlIGxpY2Vuc2UKK2lzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVk
IGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgQmFj
ay1Db3ZlciBUZXh0IGlzOiBgYFlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGNvcHkgYW5kCittb2Rp
ZnkgdGhpcyBHTlUgbWFudWFsLicnCitAZW5kIHF1b3RhdGlvbgorQGVuZCBjb3B5aW5nCisKK0Bk
aXJjYXRlZ29yeSBFbWFjcyBtaXNjIGZlYXR1cmVzCitAZGlyZW50cnkKKyogRW1hY3MgR1VJIERv
Y2s6IChkb2NrKS4gICAgICAgRW1hY3MgR1VJIGRvY2sgaW50ZWdyYXRpb24uCitAZW5kIGRpcmVu
dHJ5CisKK0B0aXRsZXBhZ2UKK0B0aXRsZSBFbWFjcyBTeXN0ZW0gR1VJIERvY2sgSW50ZWdyYXRp
b24KK0BwYWdlCitAdnNraXAgMHB0IHBsdXMgMWZpbGxsCitAaW5zZXJ0Y29weWluZworQGVuZCB0
aXRsZXBhZ2UKKworQGNvbnRlbnRzCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIEVtYWNz
IEdVSSBEb2NrIEludGVncmF0aW9uCitUaGlzIG1hbnVhbCBkZXNjcmliZXMgRW1hY3Mgc3lzdGVt
IEdVSSBkb2NrIGludGVncmF0aW9uLgorCitUaGUgQGRmbntkb2NrfSBwYWNrYWdlIGFkZHMgRW1h
Y3MgaW50ZWdyYXRpb24gd2l0aCBHVUkgc3lzdGVtIGRvY2sgb3IKK3Rhc2tiYXIgRW1hY3MgYXBw
bGljYXRpb24gaWNvbiBiYWRnZSwgcHJvZ3Jlc3MgaW5kaWNhdG9yLCBhbmQgaWNvbgorYXR0ZW50
aW9uIGFsZXJ0IGZlYXR1cmVzLgorCitAaW5zZXJ0Y29weWluZworCitAbWVudQorKiBPdmVydmll
dzo6ICAgICAgICAgICAgICAgICAgICBPdmVydmlldyBvZiBHVUkgc3lzdGVtIGRvY2sgaW50ZWdy
YXRpb24KKyogUHJlcmVxdWlzaXRlczo6CisqIFVzZXIgT3B0aW9uczo6CisqIEZ1bmN0aW9uIFJl
ZmVyZW5jZTo6CisqIERvY2sgVXNhZ2UgRXhhbXBsZXM6OgorKiBHTlUgRnJlZSBEb2N1bWVudGF0
aW9uIExpY2Vuc2U6OiAgVGhlIGxpY2Vuc2UgZm9yIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyogRnVu
Y3Rpb24gSW5kZXg6OgorKiBWYXJpYWJsZSBJbmRleDo6CitAZW5kIG1lbnUKK0BlbmQgaWZub3R0
ZXgKKworQG5vZGUgT3ZlcnZpZXcKK0BjaGFwdGVyIE92ZXJ2aWV3CisKK1RoZSBEb2NrIHBhY2th
Z2UgcHJvdmlkZXMgaW50ZWdyYXRpb24gd2l0aCB0aGVzZSBzeXN0ZW0gR1VJIGRvY2sKK2ZlYXR1
cmVzOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbSBJY29uIGJhZGdlCitAaXRlbSBJY29uIHBy
b2dyZXNzIGluZGljYXRvcgorQGl0ZW0gSWNvbiBhdHRlbnRpb24gYWxlcnQKK0BlbmQgaXRlbWl6
ZQorCitAbm9kZSBQcmVyZXF1aXNpdGVzCitAY2hhcHRlciBQcmVyZXF1aXNpdGVzCisKK0dOVXN0
ZXAsIG1hY09TLCBhbmQgTVMtV2luZG93cyB1c2VycyBuZWVkIG5vIGV4dGVybmFsIGNvbmZpZ3Vy
YXRpb24uCisKK09uIEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgdmlh
IEQtQnVzIHRvIGNvbnRyb2wgR1VJCitzaGVsbHMgYW5kL29yIHNoZWxsIGV4dGVuc2lvbnMgc3Vj
aCBhcworQGZpbGV7aHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRlbnNpb24vMzA3L2Rh
c2gtdG8tZG9jay99IHRoYXQKK2ltcGxlbWVudHMgVWJ1bnR1J3MgVW5pdHkgbGF1bmNoZXIgc3Bl
YyB3aGljaCB5b3UgY2FuIHJlYWQgbW9yZSBhYm91dAoraGVyZSBAZmlsZXtodHRwczovL3dpa2ku
dWJ1bnR1LmNvbS9Vbml0eS9MYXVuY2hlckFQSX0uCisKK1lvdXIgR05VL0xpbnV4IEVtYWNzIGlu
c3RhbmNlIHNob3VsZCBiZSBsYXVuY2hlZCB2aWEgYW4gYXBwcm9wcmlhdGUKK3NoZWxsICJkZXNr
dG9wIiBmaWxlIHN1Y2ggYXMgdGhvc2UgZGlzdHJpYnV0ZWQgd2l0aCBFbWFjczsgZS5nLiwKKyJl
dGMvZW1hY3NjbGllbnQuZGVza3RvcCIuCisKK0Bub2RlIFVzZXIgT3B0aW9ucworQGNoYXB0ZXIg
VXNlciBPcHRpb25zCisKK0BkZWZ2YXIgZG9jay1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9j
dXMKK1RoZSB2YXJpYWJsZSBAY29kZXtkb2NrLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1
c30gY2FuIGJlCitjdXN0b21pemVkIHRvIGNsZWFyIHRoZSBkb2NrIGljb24gYXR0ZW50aW9uIGlu
ZGljYXRvciB3aGVuIGFueSBFbWFjcyBHVUkKK2ZyYW1lIGlzIGZvY3VzZWQuICBUaGlzIGlzIGln
bm9yZWQgb24gYmFjayBlbmRzIHRoYXQgYXV0b21hdGljYWxseSBjbGVhcgordGhlIGF0dGVudGlv
biBpbmRpY2F0b3IuICBJdCBkZWZhdWx0cyB0byBAY29kZXt0fS4KK0BlbmQgZGVmdmFyCisKK0Bk
ZWZ2YXIgZG9jay1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lCitUaGUgdmFyaWFibGUgQGNvZGV7ZG9j
ay1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lfSBhcHBsaWVzIG9uIEdOVS9MaW51eAorRC1CdXMgc3lz
dGVtcywgYW5kIGNhbiBiZSBjdXN0b21pemVkIHRvIGluZGljYXRlIHdoaWNoIGRlc2t0b3AgZmls
ZSBuYW1lCitELUJ1cyB3aWxsIHVzZSB0byBpZGVudGlmeSB5b3VyIEVtYWNzIGluc3RhbmNlLiAg
SXQgZGVmYXVsdHMgdG8gdGhlCitkZXNrdG9wIGZpbGUgYmFzZSBuYW1lIEBjb2RleyJlbWFjc2Ns
aWVudCJ9IGFuZCBtaWdodCBuZWVkIHRvIGJlIHNldCB0bworQGNvZGV7ImVtYWNzIn0gb24geW91
ciBzeXN0ZW0uICBJbnN0YWxsZWQgRW1hY3MgYnVpbGRzIHR5cGljYWxseSBpbmNsdWRlCitkZWZh
dWx0IGRlc2t0b3AgZmlsZXMgZm9yIGJvdGgsIGFuZCBhcmUgY2FsbGVkCitAY29kZXsiZW1hY3Nj
bGllbnQuZGVza3RvcCJ9IGFuZCBAY29kZXsiZW1hY3MuZGVza3RvcCJ9LCByZXNwZWN0aXZlbHku
CitAZW5kIGRlZnZhcgorCitAZGVmdmFyIGRvY2stZGJ1cy10aW1lb3V0LW1zCitUaGUgdmFyaWFi
bGUgQGNvZGV7ZG9jay1kYnVzLXRpbWVvdXQtbXN9IGFwcGxpZXMgb24gR05VL0xpbnV4IEQtQnVz
CitzeXN0ZW1zLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9m
IG1pbGxpc2Vjb25kcworRW1hY3Mgd2lsbCB3YWl0IGZvciBELUJ1cyByZXNwb25zZXMgYmVmb3Jl
IHRpbWluZyBvdXQgYW5kIGNvbnNpZGVyaW5nCittZXNzYWdlcyB1bmRlbGl2ZXJhYmxlLiAgSXQg
ZGVmYXVsdHMgdG8gMjUwMDAgbWlsbGlzZWNvbmRzLCB3aGljaCBpcyB0aGUKK3JlY29tbWVuZGVk
IGRlZmF1bHQgYnkgdGhlIEQtQnVzIHBhY2thZ2UsIHdoaWNoIHNlZSwgQHB4cmVme1RvcCwsLCBk
YnVzLAorRC1CdXMgaW50ZWdyYXRpb24gaW4gRW1hY3N9LgorQGVuZCBkZWZ2YXIKKworQG5vZGUg
RnVuY3Rpb24gUmVmZXJlbmNlCitAY2hhcHRlciBGdW5jdGlvbiBSZWZlcmVuY2UKKworQGZpbmRl
eCBkb2NrLW1vZGUKK0BkZWZ1biBkb2NrLW1vZGUKK0Bjb2Rle2RvY2stbW9kZX0gbXVzdCBiZSBl
bmFibGVkIGJlZm9yZSBjYWxsaW5nIGFueSBvZiBpdHMgZnVuY3Rpb25zLCB0bworaW5pdGlhbGl6
ZSB0aGUgc3lzdGVtIGJhY2sgZW5kLiAgT24gR05VL0xpbnV4IEQtQnVzLCBpbml0aWFsaXphdGlv
biB3aWxsCit0ZXN0IHRoYXQgdGhlIEQtQnVzIGRvY2sgcHJvdG9jb2wgaXMgZXN0YWJsaXNoZWQs
IGFuZCBzaWduYWwgYW4gZXJyb3IgaWYKK2l0IGlzIG5vdC4KK0BlbmQgZGVmdW4KKworQGZpbmRl
eCBkb2NrLWJhZGdlCitAZGVmdW4gZG9jay1iYWRnZSAmb3B0aW9uYWwgY291bnQtb3Itc3RyaW5n
CitTZXQgdGhlIGRvY2sgaWNvbiBiYWRnZSB0byBAdmFye2NvdW50LW9yLXN0cmluZ30uICBJZgor
QHZhcntjb3VudC1vci1zdHJpbmd9IGlzIEBjb2Rle25pbH0sIGNsZWFyIHRoZSBiYWRnZS4KKwor
SWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkIG9uIGJhY2sgZW5kcyB3aGljaCBkbyBub3Qgc3VwcG9y
dCBzdHJpbmdzLCBpdAoraXMgY29udmVydGVkIHRvIGFuIGludGVnZXIsIGlmIHBvc3NpYmxlLCBv
ciB0byBuaWwuICBHTlVzdGVwIGFuZCBtYWNPUworc3VwcG9ydCBzdHJpbmcgYmFkZ2VzLCB0aGUg
R05VL0xpbnV4IEQtQnVzIHByb3RvY29sIHN1cHBvcnRzIG9ubHkKK2ludGVnZXJzOyBhbnkgc3Ry
aW5nIHRoYXQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBpbnRlZ2VyIHdpbGwgYmUgdHJlYXRlZAor
YXMgQGNvZGV7bmlsfS4KK0BlbmQgZGVmdW4KKworQGZpbmRleCBkb2NrLWF0dGVudGlvbgorQGRl
ZnVuIGRvY2stYXR0ZW50aW9uICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQKK1NldCB0aGUgZG9j
ayBpY29uIHRvIGFsZXJ0IHRoZSB1c2VyLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhIGJvdW5jaW5n
IG9yCitmbGFzaGluZyBkb2NrIGljb24uICBPbiBzb21lIGJhY2sgZW5kcywgZG9jayBpY29uIGF0
dGVudGlvbiB3aWxsCitkaXNwbGF5ZWQgb25seSBpZiBFbWFjcyBpcyBub3QgdGhlIGZvY3VzZWQg
YXBwbGljYXRpb24uCisKK0lmIEB2YXJ7dXJnZW5jeX0gaXMgdGhlIHN5bWJvbCBAY29kZXtpbmZv
cm1hdGlvbmFsfSwgbm9ybWFsIGF0dGVudGlvbiBpcworcmVxdWVzdGVkLiAgSWYgQHZhcnt1cmdl
bmN5fSBpcyB0aGUgc3ltYm9sIEBjb2Rle2NyaXRpY2FsfSwgdXJnZW50CithdHRlbnRpb24gaXMg
cmVxdWVzdGVkLiAgSWYgQHZhcnt1cmdlbnR9IGlzIEBjb2Rle25pbH0sIGNsZWFyIHRoZQorYXR0
ZW50aW9uIGluZGljYXRvci4gIEB2YXJ7dGltZW91dH0gaXMgdGhlIG51bWJlciBvZiBzZWNvbmRz
IHRvIHRpbWUgb3V0CithbmQgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIGluZGljYXRvciwgb3Ig
QGNvZGV7bmlsfSwgd2hpY2ggZG9lcyBub3QKK3RpbWUgb3V0LgorCitPbiBzb21lIGJhY2sgZW5k
cywgYW4gQGNvZGV7aW5mb3JtYXRpb25hbH0gYXR0ZW50aW9uIHJlcXVlc3Qgd2lsbCB0aW1lCitv
dXQgYXV0b21hdGljYWxseS4gIEluIGNvbnRyYXN0LCBhIGBjcml0aWNhbGAgcmVxdWVzdCByZXF1
aXJlcyB0aGF0IHRoZQordXNlciBicmluZyBFbWFjcyBpbnRvIGZvY3VzIGFuZCB3aWxsIG5vdCB0
aW1lIG91dC4gIE9uIHNvbWUgYmFjayBlbmRzLAorQGNvZGV7Y3JpdGljYWx9IGhhcyB0aGUgc2Ft
ZSBlZmZlY3QgYXMgQGNvZGV7aW5mb3JtYXRpb25hbH0uCitAZW5kIGRlZnVuCisKK0BmaW5kZXgg
ZG9jay1wcm9ncmVzcworQGRlZnVuIGRvY2stcHJvZ3Jlc3MgJm9wdGlvbmFsIHByb2dyZXNzCitT
ZXQgdGhlIGRvY2sgaWNvbiB0byBpbmRpY2F0ZSBgYHByb2dyZXNzJycuICBQcm9ncmVzcyBpcyB0
eXBpY2FsbHkKK3JlcHJlc2VudGVkIGFzIGEgZ3JhcGhpY2FsIGJhciB0aGF0IGZyYWN0aW9uYWxs
eSBzcGFucyB0aGUgZG9jayBpY29uLgorCitAdmFye3Byb2dyZXNzfSBpcyBhIGZsb2F0IGluIHRo
ZSByYW5nZSAwLjAgdG8gMS4wLiAgSWYgQHZhcntwcm9ncmVzc30gaXMKK25pbCwgcmVtb3ZlIHRo
ZSBwcm9ncmVzcyBpbmRpY2F0b3IuCitAZW5kIGRlZnVuCisKK0BmaW5kZXggZG90aW1lcy13aXRo
LWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXIKK0BkZWZtYWMgZG90aW1lcy13aXRoLWRvY2stcHJvZ3Jl
c3MtcmVwb3J0ZXIgKHZhciBjb3VudCBbcmVzdWx0XSkgcmVwb3J0ZXItb3ItbWVzc2FnZSBib2R5
QGRvdHN7fQorVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1hY3JvIGFuYWxvZ291cyB0bworQGNvZGV7
ZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyfSBhbmQgd29ya3MgdGhlIHNhbWUgd2F5IGFz
CitAY29kZXtkb3RpbWVzfSBkb2VzLCBidXQgYWxzbyByZXBvcnRzIGxvb3AgcHJvZ3Jlc3Mgb24g
dGhlIEVtYWNzIGRvY2sKK2ljb24uICBJdHMgdXNhZ2UgaXMgZGVzY3JpYmVkIGluIEBweHJlZntQ
cm9ncmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUKK0VtYWNzIExpc3AgUmVmZXJlbmNlIE1hbnVh
bH0uCitAZW5kIGRlZm1hYworCitAZmluZGV4IGRvbGlzdC13aXRoLWRvY2stcHJvZ3Jlc3MtcmVw
b3J0ZXIKK0BkZWZtYWMgZG9saXN0LXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlciAodmFyIGxp
c3QgW3Jlc3VsdF0pIHJlcG9ydGVyLW9yLW1lc3NhZ2UgYm9keUBkb3Rze30KK1RoaXMgaXMgYSBj
b252ZW5pZW5jZSBtYWNybyBhbmFsb2dvdXMgdG8KK0Bjb2Rle2RvbGlzdC13aXRoLXByb2dyZXNz
LXJlcG9ydGVyfSBhbmQgd29ya3MgdGhlIHNhbWUgd2F5IGFzCitAY29kZXtkb2xpc3R9IGRvZXMs
IGJ1dCBhbHNvIHJlcG9ydHMgbG9vcCBwcm9ncmVzcyBvbiB0aGUgRW1hY3MgZG9jaworaWNvbi4g
IEl0cyB1c2FnZSBpcyBkZXNjcmliZWQgaW4gQHB4cmVme1Byb2dyZXNzLCwgRGlzcGxheSwgZWxp
c3AsIFRoZQorRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsfS4KK0BlbmQgZGVmbWFjCisKK0Bu
b2RlIERvY2sgVXNhZ2UgRXhhbXBsZXMKK0BjaGFwdGVyIERvY2sgVXNhZ2UgRXhhbXBsZXMKKwor
QGxpc3AKKzs7IEVuYWJsZSBhbmQgaW5pdGlhbGl6ZSBkb2NrLW1vZGUuCisoZG9jay1tb2RlKQor
Cis7OyBEaXNwbGF5IGEgYmFkZ2Ugb24gdGhlIGRvY2sgaWNvbi4KKyhkb2NrLWJhZGdlIGVtYWNz
LW1ham9yLXZlcnNpb24pCisoZG9jay1iYWRnZSAiMzEiKQorKGRvY2stYmFkZ2UgIlRlc3QiKSA7
IHNob3J0IHN0cmluZyAob24gc3VwcG9ydGVkIHBsYXRmb3JtcykKKworOzsgQ2xlYXIgdGhlIGJh
ZGdlLgorKGRvY2stYmFkZ2UpCisKKzs7IEdldCB0aGUgdXNlcidzIGF0dGVudGlvbi4KKworKGRv
Y2stYXR0ZW50aW9uICdpbmZvcm1hdGlvbmFsIDMpIDsgY2xlYXIgdGhlIHJlcXVlc3QgYWZ0ZXIg
MyBzZWNvbmRzCisoZG9jay1hdHRlbnRpb24gJ2NyaXRpY2FsKQorCis7OyBDbGVhciB0aGUgYXR0
ZW50aW9uIHJlcXVlc3QuCisoZG9jay1hdHRlbnRpb24pCisKKzs7IFJlcG9ydCBgZG90aW1lc2Ag
cHJvZ3Jlc3Mgb24gdGhlIGRvY2sgaWNvbi4KKworKGRvdGltZXMtd2l0aC1kb2NrLXByb2dyZXNz
LXJlcG9ydGVyCisgKGkgMTApICJkb3RpbWVzLXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlci4u
LiIKKyAoc2l0LWZvciAxKSkKKworOzsgUmVwb3J0IGBkb2xpc3RgIHByb2dyZXNzIG9uIHRoZSBk
b2NrIGljb24uCisKKyhkb2xpc3Qtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyCisgKGkgKG1h
a2UtbGlzdCAxMCB0KSkgImRvbGlzdC13aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXIuLi4iCisg
KHNpdC1mb3IgMSkpCitAZW5kIGxpc3AKKworQG5vZGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBM
aWNlbnNlCitAYXBwZW5kaXggR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCitAaW5jbHVk
ZSBkb2NsaWNlbnNlLnRleGkKKworQG5vZGUgRnVuY3Rpb24gSW5kZXgKK0B1bm51bWJlcmVkIEZ1
bmN0aW9uIEluZGV4CitAcHJpbnRpbmRleCBmbgorCitAbm9kZSBWYXJpYWJsZSBJbmRleAorQHVu
bnVtYmVyZWQgVmFyaWFibGUgSW5kZXgKK0BwcmludGluZGV4IHZyCisKK0BieWUKKworQGMgRW5k
OgpkaWZmIC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUwppbmRleCBmZGIxZWUwMjgxOS4uZjUy
NTJjYzViZjkgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0Yy9ORVdTCkBAIC0yNzcyLDYg
KzI3NzIsMTYgQEAgZGV0ZXJtaW5lZCBieSB0aGUgbmV3IHVzZXIgb3B0aW9uICdwdWxzZS1mYWNl
LWR1cmF0aW9uJy4KIAogKiogTWlzY2VsbGFuZW91cwogCisrKysKKyoqKiBOZXcgZmVhdHVyZSAn
ZG9jay1tb2RlJy4KK1RoaXMgcGFja2FnZSBpbnRlZ3JhdGVzIEVtYWNzIHdpdGggc3lzdGVtIEdV
SSAiZG9ja3MiIHRvIGRpc3BsYXkgYSBkb2NrCitpY29uIGJhZGdlLCBwcm9ncmVzcyBpbmRpY2F0
b3IsIGFuZCBhdHRlbnRpb24gYWxlcnRzLiAgSW1wbGVtZW50YXRpb25zCithcmUgYXZhaWxhYmxl
IGZvciBELUJ1cyBwbGF0Zm9ybXMgKGUuZy4sIEtERSBhbmQgR05PTUUpLCBtYWNPUy9HTlVzdGVw
LAorYW5kIE1TLVdpbmRvd3MuICBPbiBHTlUvTGludXggc3lzdGVtcywgc2hlbGwgZXh0ZW5zaW9u
cyBzdWNoIGFzCisiZGFzaC10by1kb2NrIiBtYXkgYmUgcmVxdWlyZWQuICBTZWUKKzxodHRwczov
L2V4dGVuc2lvbnMuZ25vbWUub3JnL2V4dGVuc2lvbi8zMDcvZGFzaC10by1kb2NrLz4gYW5kCis8
aHR0cHM6Ly93aWtpLnVidW50dS5jb20vVW5pdHkvTGF1bmNoZXJBUEk+LgorCiAtLS0KICoqKiAn
dG9vbHRpcC1tb2RlJyBub3cgc2hvd3MgdG9vbHRpcHMgYWZ0ZXIgZGVsYXkgb24gVFRZIGZyYW1l
cy4KIERpc3BsYXkgb2YgdG9vbHRpcHMgb24gdGV4dC1vbmx5IHRlcm1pbmFscyBub3cgaGFwcGVu
cyBhZnRlcgpkaWZmIC0tZ2l0IGEvbGlzcC9kb2NrLW1vZGUuZWwgYi9saXNwL2RvY2stbW9kZS5l
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWYxODk5ODM1MTUKLS0t
IC9kZXYvbnVsbAorKysgYi9saXNwL2RvY2stbW9kZS5lbApAQCAtMCwwICsxLDQ1NSBAQAorOzs7
IGRvY2stbW9kZS5lbCAtLS0gR1VJIGRlc2t0b3AgZG9jayBzdGF0dXMgLSotIGxleGljYWwtYmlu
ZGluZzogdCAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAyMDI1IEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgorCis7OyBBdXRob3I6IFN0ZXBoYW5lIE1hcmtzCis7OyBNYWludGFpbmVyOiBl
bWFjcy1kZXZlbEBnbnUub3JnCis7OyBLZXl3b3JkczogY29udmVuaWVuY2UKKzs7IFBhY2thZ2Ut
UmVxdWlyZXM6ICgoZW1hY3MgIjMxLjEiKSkKKworOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05V
IEVtYWNzLgorCis7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCis7OyAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis7OyBHTlUgRW1hY3MgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7
OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
Cis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0
cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCis7OzsgQ29tbWVudGFyeToKKworOzsgVXNl
IHRoaXMgcGFja2FnZSB0byBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgb24geW91ciBzdXBwb3J0ZWQg
R1VJICJkb2NrIjoKKzs7Cis7OyBgZG9jay1iYWRnZScgb3ZlcmxheXMgYSB2ZXJ5IHNob3J0IHN0
cmluZyBvciBudW1iZXIgb24gdGhlIEVtYWNzIGRvY2sKKzs7IGljb24uICBZb3UgY2FuIHVzZSB0
aGlzLCBmb3IgZXhhbXBsZSwgdG8gaW5kaWNhdGUgdGhlIG51bWJlciBvZgorOzsgdW5yZWFkIGVt
YWlsIG1lc3NhZ2VzLgorOzsKKzs7IGBkb2NrLWF0dGVudGlvbicgZmxhc2hlcyBvciBib3VuY2Vz
IHRoZSBFbWFjcyBkb2NrIGljb24gdG8gaW5kaWNhdGUKKzs7IHRoYXQgeW91ciBFbWFjcyBzZXNz
aW9uIHdhbnRzIGF0dGVudGlvbi4gIEl0cyBiZWhhdmlvcnMgYXJlIGJhY2stZW5kCis7OyBzcGVj
aWZpYy4KKzs7Cis7OyBgZG9jay1wcm9ncmVzcycgb3ZlcmxheXMgYSBncmFwaGljYWwgcHJvZ3Jl
c3MgYmFyIG9uIHRoZSBFbWFjcyBkb2NrCis7OyBpY29uIHRvIGlsbHVzdHJhdGUgcHJvZ3Jlc3Mg
b2YgYSBwb3RlbnRpYWxseSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLgorOzsKKzs7IFRoZSBjb252
ZW5pZW5jZSBtYWNyb3MgYGRvdGltZXMtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyJyBhbmQK
Kzs7IGBkb2xpc3Qtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyJyBkaXNwbGF5IHByb2dyZXNz
IGluIHRoZQorOzsgZWNoby1hcmVhIGFuZCBvbiB0aGUgZG9jayBpY29uLiAgVGhleSBhcmUgYW5h
bG9nb3VzIHRvIHRoZWlyCis7OyBlY2hvLWFyZWEgb25seSBjb3VudGVycGFydHMgYGRvdGltZXMt
d2l0aC1wcm9ncmVzcy1yZXBvcnRlcicgYW5kCis7OyBgZG9saXN0LXdpdGgtcHJvZ3Jlc3MtcmVw
b3J0ZXInLCByZXNwZWN0aXZlbHkuCisKKzs7IE9uIEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1w
bGVtZW50YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCis7OyBzaGVsbHMgYW5kL29y
IHNoZWxsIGV4dGVuc2lvbnMgc3VjaCBhcworOzsgaHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9y
Zy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9jay8gdGhhdAorOzsgaW1wbGVtZW50IFVidW50dSdz
IFVuaXR5IGxhdW5jaGVyIHNwZWMsIHdoaWNoIHNlZQorOzsgaHR0cHM6Ly93aWtpLnVidW50dS5j
b20vVW5pdHkvTGF1bmNoZXJBUEkuCis7OworOzsgWW91ciBMaW51eCBFbWFjcyBpbnN0YW5jZSBz
aG91bGQgYmUgbGF1bmNoZWQgdmlhIGFuIGFwcHJvcHJpYXRlIHNoZWxsCis7OyAiZGVza3RvcCIg
ZmlsZSBzdWNoIGFzIHRob3NlIGRpc3RyaWJ1dGVkIHdpdGggRW1hY3M7IGUuZy4sCis7OyAiZXRj
L2VtYWNzY2xpZW50LmRlc2t0b3AiLgorOzsKKzs7IE9uIEdOVXN0ZXAgYW5kIG1hY09TIHN5c3Rl
bXMgKGFrYSBOUyksIGFuZCBNUy1XaW5kb3dzLCBuYXRpdmUgQVBJcworOzsgYXJlIHVzZWQuCis7
OworOzsgVG8gYWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3lzdGVtcywgcHJvdmlkZSBhIGJh
Y2sgZW5kIHRoYXQgaW1wbGVtZW50cworOzsgdGhlIGNsLWdlbmVyaWMgZnVuY3Rpb25zIGJlbG93
LgorCis7OzsgQ29kZToKKworKGV2YWwtd2hlbi1jb21waWxlCisgIChyZXF1aXJlICdkYnVzKSkK
KworKGRlZmdyb3VwIGRvY2sgbmlsCisgICJHVUkgZG9jayBpY29uIGJhZGdlcywgcHJvZ3Jlc3Mg
cmVwb3J0LCBhbGVydHMuIgorICA6Z3JvdXAgJ2NvbnZlbmllbmNlCisgIDp2ZXJzaW9uICIzMS4x
IikKKworKGRlZmN1c3RvbSBkb2NrLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1cyB0Cisg
ICJDbGVhciB0aGUgaWNvbiBhdHRlbnRpb24gaW5kaWNhdG9yIHdoZW4gYW55IEdVSSBmcmFtZSBp
cyBmb2N1c2VkLgorVGhpcyBpcyBpZ25vcmVkIG9uIGJhY2sgZW5kcyB0aGF0IGF1dG9tYXRpY2Fs
bHkgY2xlYXIgdGhlIGF0dGVudGlvbgoraW5kaWNhdG9yLiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAg
OnZlcnNpb24gIjMxLjEiKQorCisoZGVmY3VzdG9tIGRvY2stZGJ1cy1kZXNrdG9wLWZpbGUtbmFt
ZSAiZW1hY3NjbGllbnQiCisgICJELUJ1cyBkZXNrdG9wIGZpbGUgYmFzZSBuYW1lIGRlc3RpbmF0
aW9uIGZvciBkb2NrIG1lc3NhZ2VzLgorVGhpcyBzaG91bGQgYmUgdGhlIGJhc2UgbmFtZSBvZiB0
aGUgZGVza3RvcCBmaWxlIHVzZWQgdG8gbGF1bmNoIGFuIEVtYWNzCitpbnN0YW5jZS4gIEZvciBl
eGFtcGxlLCBpZiB5b3VyIGxhdW5jaGVyIGRlc2t0b3AgZmlsZSBpcyBjYWxsZWQKK1wiZW1hY3Mu
ZGVza3RvcFwiLCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgXCJlbWFjc1wiLiIKKyAgOnR5cGUgJ3N0
cmluZworICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gZG9jay1kYnVzLXRpbWVvdXQt
bXMgMjUwMDAKKyAgIk51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgRC1CdXMgcmVz
cG9uc2VzLgorVGhlIGRlZmF1bHQgdmFsdWUgbWlycm9ycyB0aGUgYGRidXNgIGRlZmF1bHQuIgor
ICA6dHlwZSAnbmF0bnVtCisgIDp2ZXJzaW9uICIzMS4xIikKKworKGRlZnZhciBkb2NrLS1iYWNr
LWVuZCBuaWwKKyAgIkdlbmVyaWMgZG9jayBtZXRob2Qgc3lzdGVtIGRpc3BhdGNoZXIuIikKKwor
KGRlZnVuIGRvY2stLXNldC1iYWNrLWVuZCAoKQorICAiRGV0ZXJtaW5lIGRvY2sgaG9zdCBzeXN0
ZW0gdHlwZS4iCisgIDs7IE9yZGVyIG1hdHRlcnMgdG8gYWNjb21tb2RhdGUgdGhlIGNhc2VzIHdo
ZXJlIGFuIE5TIG9yIE1TLVdpbmRvd3MKKyAgOzsgYnVpbGQgaGF2ZSBhIGRidXMgZmVhdHVyZS4K
KyAgKGNvbmQgKChib3VuZHAgJ25zLXZlcnNpb24tc3RyaW5nKQorICAgICAgICAgKHNldHEgZG9j
ay0tYmFjay1lbmQgJ25zKSkKKyAgICAgICAgKChib3VuZC1hbmQtdHJ1ZS1wIHczMi1pbml0aWFs
aXplZCkKKyAgICAgICAgIChzZXRxIGRvY2stLWJhY2stZW5kICd3MzIpKQorICAgICAgICAoKGFu
ZCAoZmVhdHVyZXAgJ2RidXNiaW5kKQorICAgICAgICAgICAgICAobWVtYmVyICJvcmcuZnJlZWRl
c2t0b3AubG9naW4xIgorICAgICAgICAgICAgICAgICAgICAgIChkYnVzLWxpc3QtYWN0aXZhdGFi
bGUtbmFtZXMgOnN5c3RlbSkpKQorICAgICAgICAgKHNldHEgZG9jay0tYmFjay1lbmQgJ2RidXMp
KQorICAgICAgICAodAorICAgICAgICAgKHNldHEgZG9jay0tYmFjay1lbmQgbmlsKSkpKQorCis7
OzsjIyNhdXRvbG9hZAorKGRlZmluZS1taW5vci1tb2RlIGRvY2stbW9kZQorICAiR1VJIGRvY2sg
aWNvbiBiYWRnZXMsIHByb2dyZXNzIHJlcG9ydCwgYWxlcnRzLiIKKyAgOmdsb2JhbCB0CisgICh3
aGVuIG5vbmludGVyYWN0aXZlCisgICAgKHdhcm4gIkJhdGNoIG1vZGUgZG9lcyBub3Qgc3VwcG9y
dCBgZG9jayciKSkKKyAgKGNvbmQgKGRvY2stbW9kZQorICAgICAgICAgKGlmIChkb2NrLS1zZXQt
YmFjay1lbmQpCisgICAgICAgICAgICAgKGRvY2stLWVuYWJsZSkKKyAgICAgICAgICAgKHdhcm4g
IlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGBkb2NrJyIpKSkKKyAgICAgICAgKHQKKyAgICAgICAg
ICh3aGVuIGRvY2stLWJhY2stZW5kCisgICAgICAgICAgIChkb2NrLS1kaXNhYmxlKQorICAgICAg
ICAgICAoc2V0cSBkb2NrLS1iYWNrLWVuZCBuaWwpKSkpKQorCisoY2wtZGVmZ2VuZXJpYyBkb2Nr
LS1lbmFibGUgKCkKKyAgIkVuYWJsZSB0aGUgZG9jayBiYWNrIGVuZC4iKQorCisoY2wtZGVmZ2Vu
ZXJpYyBkb2NrLS1kaXNhYmxlICgpCisgICJEaXNhYmxlIHRoZSBkb2NrIGJhY2sgZW5kLiIpCisK
KyhjbC1kZWZnZW5lcmljIGRvY2stYmFkZ2UgKCZvcHRpb25hbCBjb3VudC1vci1zdHJpbmcpCisg
ICJTZXQgdGhlIGRvY2sgaWNvbiBiYWRnZSB0byBDT1VOVC1PUi1TVFJJTkcuCitJZiBDT1VOVC1P
Ui1TVFJJTkcgaXMgYW4gaW50ZWdlciwgZGlzcGxheSB0aGF0IGFzIHRoZSBpY29uIGJhZGdlLgor
SWYgQ09VTlQtT1ItU1RSSU5HIGlzIGEgc3RyaW5nIG9uIGJhY2sgZW5kcyB3aGljaCBkbyBub3Qg
c3VwcG9ydAorc3RyaW5ncywgY29udmVydCBDT1VOVC1PUi1TVFJJTkcgdG8gYW4gaW50ZWdlciwg
b3IgbmlsLgorSWYgQ09VTlQtT1ItU1RSSU5HIGlzIG5pbCwgb3IgaXMgYW4gZW1wdHkgc3RyaW5n
LCByZW1vdmUgdGhlIGNvdW50ZXIuIikKKworKGNsLWRlZmdlbmVyaWMgZG9jay1hdHRlbnRpb24g
KCZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJGbGFzaCB0aGUgZG9jayBpY29uIGFuZC9v
ciBmcmFtZSB0byBhbGVydCB0aGUgdXNlci4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5m
b3JtYXRpb25hbCcsIHJlcXVlc3Qgbm9ybWFsIGF0dGVudGlvbi4KK0lmIFVSR0VOQ1kgaXMgdGhl
IHN5bWJvbCBgY3JpdGljYWwnLCByZXF1ZXN0IHVyZ2VudCBhdHRlbnRpb24uCitJZiBVUkdFTkNZ
IGlzIG5pbCwgY2xlYXIgdGhlIGF0dGVudGlvbiBpbmRpY2F0b3IuCisKK0lmIFRJTUVPVVQgaXMg
bm9uLW5pbCwgY2xlYXIgdGhlIGF0dGVudGlvbiBpbmRpY2F0b3IgYWZ0ZXIgVElNRU9VVAorc2Vj
b25kcywgb3RoZXJ3aXNlIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yIHdpbGwgYmUgY2xlYXJlZCBl
aXRoZXIgd2hlbgordGhlIGZyYW1lIGlzIGZvY3VzZWQgYnkgdGhlIHVzZXIgb3Igd2hlbiBgZG9j
ay1hdHRlbnRpb24nIGlzIGNhbGxlZCB3aXRoCithIG5pbCBVUkdFTkNZLgorCitPbiBzb21lIGJh
Y2sgZW5kcywgYW4gYGluZm9ybWF0aW9uYWwnIGF0dGVudGlvbiByZXF1ZXN0IHdpbGwgdGltZSBv
dXQKK2F1dG9tYXRpY2FsbHkuICBJbiBjb250cmFzdCwgYSBgY3JpdGljYWxgIHJlcXVlc3QgcmVx
dWlyZXMgdGhhdCB0aGUgdXNlcgorYnJpbmcgRW1hY3MgaW50byBmb2N1cyBhbmQgd2lsbCBub3Qg
dGltZSBvdXQuICBPbiBzb21lIGJhY2sgZW5kcywKK2Bjcml0aWNhbCcgaGFzIHRoZSBzYW1lIGVm
ZmVjdCBhcyBgaW5mb3JtYXRpb25hbCcuIikKKworKGNsLWRlZmdlbmVyaWMgZG9jay1wcm9ncmVz
cyAoJm9wdGlvbmFsIHByb2dyZXNzKQorICAiRGlzcGxheSBhIHByb2dyZXNzIGluZGljYXRvciBv
biB0aGUgZG9jayBpY29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRv
IDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3Iu
IikKKworKGRlZnVuIGRvY2stLXZhbGlkYXRlLXByb2dyZXNzIChwcm9ncmVzcykKKyAgIlJldHVy
biBQUk9HUkVTUyBhcyBhIGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLCBvciBuaWwuIgor
ICAod2hlbiAobmF0bnVtcCBwcm9ncmVzcykKKyAgICAoc2V0cSBwcm9ncmVzcyAoZmxvYXQgcHJv
Z3Jlc3MpKSkKKyAgKHdoZW4gKGFuZCBwcm9ncmVzcyAoPj0gcHJvZ3Jlc3MgMC4wKSAoPD0gcHJv
Z3Jlc3MgMS4wKSkKKyAgICBwcm9ncmVzcykpCisKKwwKKzs7IGBwcm9ncmVzcy1yZXBvcnRlcicg
c3VwcG9ydC4KKworKGRlZnVuIGRvY2stLXByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZSAob3Jp
Zy1mdW4gcmVwb3J0ZXIgdmFsdWUgJm9wdGlvbmFsIHN1ZmZpeCkKKyAgImBwcm9ncmVzcy1yZXBv
cnRlci1kby11cGRhdGVgIGFkdmljZSBoZWxwZXIuCitQYXNzIE9SSUctRlVOIFJFUE9SVEVSIFZB
TFVFIFNVRkZJWCB0aHJvdWdoIHRvCitgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlYC4iCisg
IChmdW5jYWxsIG9yaWctZnVuIHJlcG9ydGVyIHZhbHVlIHN1ZmZpeCkKKyAgKGxldCogKChwYXJh
bWV0ZXJzIChjZHIgcmVwb3J0ZXIpKQorICAgICAgICAgKHVwZGF0ZS10aW1lIChhcmVmIHBhcmFt
ZXRlcnMgMCkpCisgICAgICAgICAobWluLXZhbHVlIChhcmVmIHBhcmFtZXRlcnMgMSkpCisgICAg
ICAgICAobWF4LXZhbHVlIChhcmVmIHBhcmFtZXRlcnMgMikpCisgICAgICAgICAoZW5vdWdoLXRp
bWUtcGFzc2VkCisgICAgICAgICAgKG9yIChub3QgdXBkYXRlLXRpbWUpCisgICAgICAgICAgICAg
ICh0aW1lLWxlc3MtcCB1cGRhdGUtdGltZSBuaWwpKSkpCisgICAgKHdoZW4gKGFuZCBtaW4tdmFs
dWUgbWF4LXZhbHVlKQorICAgICAgKHdoZW4gZW5vdWdoLXRpbWUtcGFzc2VkCisgICAgICAgIChs
ZXQqICgob25lLXBlcmNlbnQgKC8gKC0gbWF4LXZhbHVlIG1pbi12YWx1ZSkgMTAwLjApKQorICAg
ICAgICAgICAgICAgKHBlcmNlbnRhZ2UgKGlmICg9IG1heC12YWx1ZSBtaW4tdmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodHJ1bmNhdGUgKC8gKC0gdmFsdWUgbWluLXZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb25lLXBlcmNlbnQpKSkpKQorICAgICAgICAgIChkb2NrLXBy
b2dyZXNzICgvIHBlcmNlbnRhZ2UgMTAwLjApKSkpCisgICAgICAod2hlbiAoPj0gdmFsdWUgbWF4
LXZhbHVlKQorICAgICAgICAoZG9jay1wcm9ncmVzcyBuaWwpKSkpKQorCisoZGVmdmFyIGRvY2st
LWRvdGltZXMtd2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyLWFkdmljZS1jb3VudCAwCisgICJF
bnN1cmUgYWR2aWNlIGlzIG5vdCByZW1vdmVkIHdoZW4gbW9yZSB0aGFuIG9uZSBhY3RpdmUgdXNl
LiIpCisKKyhkZWZ1biBkb2NrLS1zZXQtdXAtcHJvZ3Jlc3MtcmVwb3J0ZXIgKCkKKyAgImBwcm9n
cmVzcy1yZXBvcnRlci1kby11cGRhdGVgIGhlbHBlci4iCisgIChpbmNmIGRvY2stLWRvdGltZXMt
d2l0aC1kb2NrLXByb2dyZXNzLXJlcG9ydGVyLWFkdmljZS1jb3VudCkKKyAgKGFkdmljZS1hZGQg
Iydwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGUKKyAgICAgICAgICAgICAgOmFyb3VuZAorICAg
ICAgICAgICAgICAjJ2RvY2stLXByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZSkpCisKKyhkZWZ1
biBkb2NrLS10ZWFyLWRvd24tcHJvZ3Jlc3MtcmVwb3J0ZXIgKCkKKyAgImBwcm9ncmVzcy1yZXBv
cnRlci1kby11cGRhdGVgIGhlbHBlci4iCisgICh3aGVuICg9IDAgKGRlY2YgZG9jay0tZG90aW1l
cy13aXRoLWRvY2stcHJvZ3Jlc3MtcmVwb3J0ZXItYWR2aWNlLWNvdW50KSkKKyAgICAoYWR2aWNl
LXJlbW92ZSAjJ3Byb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZQorICAgICAgICAgICAgICAgICAg
ICMnZG9jay0tcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlKSkpCisKKyhkZWZtYWNybyBkb3Rp
bWVzLXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlciAoc3BlYyByZXBvcnRlci1vci1tZXNzYWdl
ICZyZXN0IGJvZHkpCisgICJMb29wIGEgbnVtYmVyIG9mIHRpbWVzIGFuZCByZXBvcnQgcHJvZ3Jl
c3MgaW4gdGhlIGVjaG8gYXJlYSBhbmQgR1VJIGRvY2suCitFdmFsdWF0ZSBCT0RZIHdpdGggVkFS
IGJvdW5kIHRvIHN1Y2Nlc3NpdmUgaW50ZWdlcnMgcnVubmluZyBmcm9tCiswLCBpbmNsdXNpdmUs
IHRvIENPVU5ULCBleGNsdXNpdmUuICBUaGVuIGV2YWx1YXRlIFJFU1VMVCB0byBnZXQKK3RoZSBy
ZXR1cm4gdmFsdWUgKG5pbCBpZiBSRVNVTFQgaXMgb21pdHRlZCkuCisKK1NQRUMgUkVQT1JURVIt
T1ItTUVTU0FHRSBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KK2Bkb3RpbWVzLXdpdGgtcHJv
Z3Jlc3MtcmVwb3J0ZXJgLCB3aGljaCBzZWUuIgorICAoZGVjbGFyZSAoaW5kZW50IDIpIChkZWJ1
ZyAoKHN5bWJvbHAgZm9ybSAmb3B0aW9uYWwgZm9ybSkgZm9ybSBib2R5KSkpCisgIGAodW53aW5k
LXByb3RlY3QKKyAgICAgICAocHJvZ24KKyAgICAgICAgIChkb2NrLS1zZXQtdXAtcHJvZ3Jlc3Mt
cmVwb3J0ZXIpCisgICAgICAgICAoZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyICxzcGVj
ICxyZXBvcnRlci1vci1tZXNzYWdlICxAYm9keSkpCisgICAgIChkb2NrLXByb2dyZXNzIG5pbCkK
KyAgICAgKGRvY2stLXRlYXItZG93bi1wcm9ncmVzcy1yZXBvcnRlcikpKQorCisoZGVmbWFjcm8g
ZG9saXN0LXdpdGgtZG9jay1wcm9ncmVzcy1yZXBvcnRlciAoc3BlYyByZXBvcnRlci1vci1tZXNz
YWdlICZyZXN0IGJvZHkpCisgICJMb29wIG92ZXIgYSBsaXN0IGFuZCByZXBvcnQgcHJvZ3Jlc3Mg
aW4gdGhlIGVjaG8gYXJlYSBhbmQgR1VJIGRvY2suCitFdmFsdWF0ZSBCT0RZIHdpdGggVkFSIGJv
dW5kIHRvIGVhY2ggY2FyIGZyb20gTElTVCwgaW4gdHVybi4KK1RoZW4gZXZhbHVhdGUgUkVTVUxU
IHRvIGdldCByZXR1cm4gdmFsdWUsIGRlZmF1bHQgbmlsLgorCitTUEVDIFJFUE9SVEVSLU9SLU1F
U1NBR0UgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCitgZG9saXN0LXdpdGgtZG9jay1wcm9n
cmVzcy1yZXBvcnRlcmAsIHdoaWNoIHNlZS4iCisgIChkZWNsYXJlIChpbmRlbnQgMikgKGRlYnVn
ICgoc3ltYm9scCBmb3JtICZvcHRpb25hbCBmb3JtKSBmb3JtIGJvZHkpKSkKKyAgYCh1bndpbmQt
cHJvdGVjdAorICAgICAgIChwcm9nbgorICAgICAgICAgKGRvY2stLXNldC11cC1wcm9ncmVzcy1y
ZXBvcnRlcikKKyAgICAgICAgIChkb2xpc3Qtd2l0aC1wcm9ncmVzcy1yZXBvcnRlciAsc3BlYyAs
cmVwb3J0ZXItb3ItbWVzc2FnZSAsQGJvZHkpKQorICAgICAoZG9jay1wcm9ncmVzcyBuaWwpCisg
ICAgIChkb2NrLS10ZWFyLWRvd24tcHJvZ3Jlc3MtcmVwb3J0ZXIpKSkKKworDAorOzsgRC1CdXMg
c3VwcG9ydC4KKworKGRlZmNvbnN0IGRvY2stLWRidXMtc2VydmljZSAiY29tLmNhbm9uaWNhbC5V
bml0eSIpCisoZGVmY29uc3QgZG9jay0tZGJ1cy1pbnRlcmZhY2UgImNvbS5jYW5vbmljYWwuVW5p
dHkuTGF1bmNoZXJFbnRyeSIpCisKKyhkZWZ2YXIgZG9jay0tZGJ1cy1hdHRlbnRpb24gbmlsCisg
ICJOb24tbmlsIHdoZW4gYXR0ZW50aW9uIGlzIGVuYWJsZWQuIikKKworKGRlY2xhcmUtZnVuY3Rp
b24gZGJ1cy1waW5nICJkYnVzLmVsIikKKyhkZWNsYXJlLWZ1bmN0aW9uIGRidXMtc2VuZC1zaWdu
YWwgImRidXMuZWwiKQorKGRlY2xhcmUtZnVuY3Rpb24gZGJ1cy1saXN0LWFjdGl2YXRhYmxlLW5h
bWVzICJkYnVzLmVsIikKKworKGRlZnVuIGRvY2stLWRidXMtc2VuZC1zaWduYWwgKG1lc3NhZ2Up
CisgICJTZW5kIE1FU1NBR0UgdG8gdGhlIEQtQnVzIGRvY2sgaGFuZGxlci4iCisgIChsZXQgKChh
cHAtdXJpCisgICAgICAgICAoZm9ybWF0ICJhcHBsaWNhdGlvbjovLyVzLmRlc2t0b3AiCisgICAg
ICAgICAgICAgICAgIGRvY2stZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSkpKQorICAgIChkYnVzLXNl
bmQtc2lnbmFsCisgICAgIDpzZXNzaW9uCisgICAgIGRvY2stLWRidXMtc2VydmljZQorICAgICAi
LyIKKyAgICAgZG9jay0tZGJ1cy1pbnRlcmZhY2UKKyAgICAgIlVwZGF0ZSIKKyAgICAgYXBwLXVy
aQorICAgICBtZXNzYWdlKSkpCisKKyhkZWZ1biBkb2NrLS1kYnVzLWNsZWFyLWF0dGVudGlvbi1v
bi1mcmFtZS1mb2N1cyAoKQorICAiQ2xlYXIgYW4gYWN0aXZlIEQtQnVzIGF0dGVudGlvbiByZXF1
ZXN0IGlmIGFueSBmcmFtZSBmb2N1c2VkLiIKKyAgKHdoZW4gKGFuZCBkb2NrLS1kYnVzLWF0dGVu
dGlvbgorICAgICAgICAgICAgIChjYXRjaCA6Y2xlYXIKKyAgICAgICAgICAgICAgIChkb2xpc3Qg
KGZyYW1lIChmcmFtZS1saXN0KSkKKyAgICAgICAgICAgICAgICAgKHdoZW4gKGVxIChmcmFtZS1m
b2N1cy1zdGF0ZSBmcmFtZSkgdCkKKyAgICAgICAgICAgICAgICAgICAodGhyb3cgOmNsZWFyIHQp
KSkpKQorICAgIChkb2NrLWF0dGVudGlvbiBuaWwpKSkKKworKGRlZnVuIGRvY2stZGJ1cy1waW5n
LXNlcnZpY2UgKCkKKyAgIlJldHVybiBub24tbmlsIGlmIGBkb2NrLS1kYnVzLXNlcnZpY2UnIHJl
c3BvbmRzLgorUmV0dXJuIG5pbCBpZiBubyByZXNwb25zZSB3aXRoaW4gYGRvY2stZGJ1cy10aW1l
b3V0LW1zJy4iCisgIChkYnVzLXBpbmcKKyAgIDpzZXNzaW9uCisgICBkb2NrLS1kYnVzLXNlcnZp
Y2UKKyAgIGRvY2stZGJ1cy10aW1lb3V0LW1zKSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLS1lbmFi
bGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5k
IChlcWwgJ2RidXMpKSkKKyAgKHJlcXVpcmUgJ2RidXMpCisgICh1bmxlc3MgKGRvY2stZGJ1cy1w
aW5nLXNlcnZpY2UpCisgICAgKGVycm9yICJELUJ1cyBzZXJ2aWNlIGAlcycgdW5hdmFpbGFibGUi
IGRvY2stLWRidXMtc2VydmljZSkpCisgICh3aGVuIGRvY2stY2xlYXItYXR0ZW50aW9uLW9uLWZy
YW1lLWZvY3VzCisgICAgKGFkZC1mdW5jdGlvbiA6YWZ0ZXIgYWZ0ZXItZm9jdXMtY2hhbmdlLWZ1
bmN0aW9uCisgICAgICAgICAgICAgICAgICAjJ2RvY2stLWRidXMtY2xlYXItYXR0ZW50aW9uLW9u
LWZyYW1lLWZvY3VzKSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay0tZGlzYWJsZSAoJmNvbnRleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwgJ2RidXMp
KSkKKyAgKHJlbW92ZS1mdW5jdGlvbiBhZnRlci1mb2N1cy1jaGFuZ2UtZnVuY3Rpb24KKyAgICAg
ICAgICAgICAgICAgICAjJ2RvY2stLWRidXMtY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3Vz
KSkKKworKGNsLWRlZm1ldGhvZCBkb2NrLWJhZGdlICgmY29udGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZG9jay0tYmFjay1lbmQgKGVxbCAnZGJ1cykpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICZvcHRpb25hbCBjb3VudC1vci1zdHJpbmcpCisgICJTZXQgYmFkZ2UgdG8gQ09V
TlQtT1ItU1RSSU5HIGlmIGFuIGludGVnZXIsIG90aGVyd2lzZSB1c2UgbmlsLgorVGhlIFVuaXR5
IHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIGJhZGdlcy4iCisgIChjb25kICgoc3Ry
aW5ncCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1wIGNvdW50
LW9yLXN0cmluZykKKyAgICAgICAgICAgICAoc2V0cSBjb3VudC1vci1zdHJpbmcgbmlsKQorICAg
ICAgICAgICAobGV0ICgoY291bnQgKHN0cmluZy10by1udW1iZXIgY291bnQtb3Itc3RyaW5nKSkp
CisgICAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nIChpZiAoaW50ZWdlcnAgY291bnQp
IGNvdW50IG5pbCkpKSkpCisgICAgICAgICgobm90IChpbnRlZ2VycCBjb3VudC1vci1zdHJpbmcp
KQorICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nIG5pbCkpKQorICAoZG9jay0tZGJ1cy1z
ZW5kLXNpZ25hbAorICAgYCgoOmRpY3QtZW50cnkgImNvdW50LXZpc2libGUiCisgICAgICAgICAg
ICAgICAgICAoOnZhcmlhbnQgOmJvb2xlYW4gLChub3QgKG51bGwgY291bnQtb3Itc3RyaW5nKSkp
KQorICAgICAoOmRpY3QtZW50cnkgImNvdW50IgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50
IDp1aW50MzIgLChpZiAobnVsbCBjb3VudC1vci1zdHJpbmcpIDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50LW9yLXN0cmluZykpKSkpKQorCisoY2wtZGVmbWV0
aG9kIGRvY2stYXR0ZW50aW9uICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGRvY2stLWJhY2stZW5kIChlcWwgJ2RidXMpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm9wdGlvbmFsIHVyZ2VuY3kgdGltZW91dCkKKyAgIlJlcXVlc3QgVVJHRU5DWSB1c2Vy
IGF0dGVudGlvbiB3aXRoaW4gdGhlIFRJTUVPVVQgc2Vjb25kcyBpbnRlcnZhbC4KK1VuaXR5IGRv
ZXMgbm90IHN1cHBvcnQgZGlmZmVyZW50aWF0ZWQgdXJnZW5jeS4iCisgIChzZXRxIGRvY2stLWRi
dXMtYXR0ZW50aW9uIHVyZ2VuY3kpCisgIChkb2NrLS1kYnVzLXNlbmQtc2lnbmFsCisgICBgKCg6
ZGljdC1lbnRyeSAidXJnZW50IgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDpib29sZWFu
ICwobm90IChudWxsIHVyZ2VuY3kpKSkpKSkKKyAgKHdoZW4gKGFuZCB1cmdlbmN5IHRpbWVvdXQp
CisgICAgKHJ1bi13aXRoLXRpbWVyCisgICAgIHRpbWVvdXQKKyAgICAgbmlsCisgICAgICMnZG9j
ay1hdHRlbnRpb24gbmlsKSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay1wcm9ncmVzcyAoJmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwgJ2Ri
dXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisg
ICJEaXNwbGF5IGRvY2sgcHJvZ3Jlc3MgZm9yIFBST0dSRVNTLiIKKyAgKHNldHEgcHJvZ3Jlc3Mg
KGRvY2stLXZhbGlkYXRlLXByb2dyZXNzIHByb2dyZXNzKSkKKyAgKGRvY2stLWRidXMtc2VuZC1z
aWduYWwKKyAgIGAoKDpkaWN0LWVudHJ5ICJwcm9ncmVzcy12aXNpYmxlIgorICAgICAgICAgICAg
ICAgICAgKDp2YXJpYW50IDpib29sZWFuICwobm90IChudWxsIHByb2dyZXNzKSkpKQorICAgICAo
OmRpY3QtZW50cnkgInByb2dyZXNzIgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDpkb3Vi
bGUgLChpZiAobnVsbCBwcm9ncmVzcykgMCBwcm9ncmVzcykpKSkpKQorCisMCis7OyBOUyBzdXBw
b3J0LgorCisoZGVjbGFyZS1mdW5jdGlvbiBucy1iYWRnZSAibnNmbnMubSIpCisoZGVjbGFyZS1m
dW5jdGlvbiBucy1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uICJuc2Zucy5tIikKKyhkZWNsYXJlLWZ1
bmN0aW9uIG5zLXByb2dyZXNzLWluZGljYXRvciAibnNmbnMubSIpCisKKyhjbC1kZWZtZXRob2Qg
ZG9jay0tZW5hYmxlICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2Nr
LS1iYWNrLWVuZCAoZXFsICducykpKQorICAoaWdub3JlKSkKKworKGNsLWRlZm1ldGhvZCBkb2Nr
LS1kaXNhYmxlICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jay0t
YmFjay1lbmQgKGVxbCAnbnMpKSkKKyAgKGlnbm9yZSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay1i
YWRnZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5k
IChlcWwgJ25zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIGNvdW50LW9y
LXN0cmluZykKKyAgIlNldCBiYWRnZSB0byBDT1VOVC1PUi1TVFJJTkcsIG9yIGNsZWFyIHRoZSBi
YWRnZS4KK05TIHN1cHBvcnRzIG9ubHkgc3RyaW5nIGJhZGdlcy4iCisgIChjb25kICgoc3RyaW5n
cCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAod2hlbiAoc3RyaW5nLWVtcHR5LXAgY291bnQt
b3Itc3RyaW5nKQorICAgICAgICAgICAoc2V0cSBjb3VudC1vci1zdHJpbmcgbmlsKSkpCisgICAg
ICAgICgoaW50ZWdlcnAgY291bnQtb3Itc3RyaW5nKQorICAgICAgICAgKHNldHEgY291bnQtb3It
c3RyaW5nIChudW1iZXItdG8tc3RyaW5nIGNvdW50LW9yLXN0cmluZykpKQorICAgICAgICAodCAo
c2V0cSBjb3VudC1vci1zdHJpbmcgbmlsKSkpCisgIChucy1iYWRnZSBjb3VudC1vci1zdHJpbmcp
KQorCisoY2wtZGVmbWV0aG9kIGRvY2stYXR0ZW50aW9uICgmY29udGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwgJ25zKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJSZXF1ZXN0
IFVSR0VOQ1kgdXNlciBhdHRlbnRpb24gd2l0aGluIHRoZSBUSU1FT1VUIHNlY29uZHMgaW50ZXJ2
YWwuIgorICAobnMtcmVxdWVzdC11c2VyLWF0dGVudGlvbiB1cmdlbmN5KQorICAod2hlbiAoYW5k
IHVyZ2VuY3kgdGltZW91dCkKKyAgICAocnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91dAorICAg
ICBuaWwKKyAgICAgIydkb2NrLWF0dGVudGlvbiBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBkb2Nr
LXByb2dyZXNzICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jay0t
YmFjay1lbmQgKGVxbCAnbnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9u
YWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGRvY2sgcHJvZ3Jlc3MgZm9yIFBST0dSRVNTLiIKKyAg
KG5zLXByb2dyZXNzLWluZGljYXRvciAoZG9jay0tdmFsaWRhdGUtcHJvZ3Jlc3MgcHJvZ3Jlc3Mp
KSkKKworDAorOzsgTVMtV2luZG93cyBzdXBwb3J0LgorCisoZGVjbGFyZS1mdW5jdGlvbiB3MzIt
YmFkZ2UgInczMmZucy5jIikKKyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1yZXF1ZXN0LXVzZXItYXR0
ZW50aW9uICJ3MzJmbnMuYyIpCisoZGVjbGFyZS1mdW5jdGlvbiB3MzItcHJvZ3Jlc3MtaW5kaWNh
dG9yICJ3MzJmbnMuYyIpCisKKyhkZWZ2YXIgZG9jay13MzItYmFkZ2UtYmcgIiNlNzU4NTciIDsg
cmVkaXNoCisgICJ3MzIgYmFkZ2UgYmFja2dyb3VuZCBSR0IgdHJpcGxlIHN0cmluZy4iKQorCiso
ZGVmdmFyIGRvY2stdzMyLWJhZGdlLWZnICIjZmZmZmZmIiA7IHdoaXRlCisgICJ3MzIgYmFkZ2Ug
Zm9yZWdyb3VuZCBSR0IgdHJpcGxlIHN0cmluZy4iKQorCisoY2wtZGVmbWV0aG9kIGRvY2stLWVu
YWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jay0tYmFjay1l
bmQgKGVxbCAndzMyKSkpCisgIChpZ25vcmUpKQorCisoY2wtZGVmbWV0aG9kIGRvY2stLWRpc2Fi
bGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2NrLS1iYWNrLWVu
ZCAoZXFsICd3MzIpKSkKKyAgKGlnbm9yZSkpCisKKyhjbC1kZWZtZXRob2QgZG9jay1iYWRnZSAo
JmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY2stLWJhY2stZW5kIChlcWwg
J3czMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudC1vci1zdHJp
bmcpCisgICJTZXQgYmFkZ2UgdG8gQ09VTlQtT1ItU1RSSU5HLCBvciBjbGVhciB0aGUgYmFkZ2Uu
CitEdWUgdG8gTVMtV2luIGljb24gc2l6ZSBsaW1pdGF0aW9ucywgYWJicmV2aWF0ZSBpbnRlZ2Vy
cyBvdXRzaWRlIHRoZQorcmFuZ2UgLTk5LCA5OSB1c2luZyBcIi05OVwiIGFuZCBcIjk5K1wiLCBy
ZXNwZWN0aXZlbHksCithbmQgdHJ1bmNhdGUgc3RyaW5ncyBsb25nZXIgdGhhbiAyIGNoYXJhY3Rl
cnMuIgorICAoY29uZCAoKHN0cmluZ3AgY291bnQtb3Itc3RyaW5nKQorICAgICAgICAgKGlmIChz
dHJpbmctZW1wdHktcCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAgICAgKHNldHEgY291bnQt
b3Itc3RyaW5nIG5pbCkKKyAgICAgICAgICAgKHdoZW4gKGxlbmd0aD4gY291bnQtb3Itc3RyaW5n
IDIpCisgICAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nCisgICAgICAgICAgICAgICAg
ICAgKHRydW5jYXRlLXN0cmluZy10by13aWR0aCBjb3VudC1vci1zdHJpbmcgMyAwIG5pbCB0KSkp
KSkKKyAgICAgICAgKChpbnRlZ2VycCBjb3VudC1vci1zdHJpbmcpCisgICAgICAgICAoaWYgKGFu
ZCAoPiBjb3VudC1vci1zdHJpbmcgLTEwMCkKKyAgICAgICAgICAgICAgICAgICg8IGNvdW50LW9y
LXN0cmluZyAxMDApKQorICAgICAgICAgICAgIChzZXRxIGNvdW50LW9yLXN0cmluZyAobnVtYmVy
LXRvLXN0cmluZyBjb3VudC1vci1zdHJpbmcpKQorICAgICAgICAgICAoaWYgKDwgY291bnQtb3It
c3RyaW5nIDApCisgICAgICAgICAgICAgICAoc2V0cSBjb3VudC1vci1zdHJpbmcgIi05OSIpCisg
ICAgICAgICAgICAgKHNldHEgY291bnQtb3Itc3RyaW5nICI5OSsiKSkpKQorICAgICAgICAodCAo
c2V0cSBjb3VudC1vci1zdHJpbmcgbmlsKSkpCisgICh3MzItYmFkZ2UgY291bnQtb3Itc3RyaW5n
IGRvY2stdzMyLWJhZGdlLWJnIGRvY2stdzMyLWJhZGdlLWZnKSkKKworKGNsLWRlZm1ldGhvZCBk
b2NrLWF0dGVudGlvbiAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChk
b2NrLS1iYWNrLWVuZCAoZXFsICd3MzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm9wdGlvbmFsIHVyZ2VuY3kgdGltZW91dCkKKyAgIlJlcXVlc3QgVVJHRU5DWSB1c2VyIGF0dGVu
dGlvbiB3aXRoaW4gdGhlIFRJTUVPVVQgc2Vjb25kcyBpbnRlcnZhbC4KK0lmIFVSR0VOQ1kgaXMg
dGhlIHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGZsYXNoIHRoZSB0YXNrYmFyIGljb24uCitJZiBV
UkdFTkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2FsJywgZmxhc2ggdGhlIHRhc2tiYXIgaWNvbiBh
bmQgdGhlIGZyYW1lLiIKKyAgKHczMi1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uIHVyZ2VuY3kpCisg
ICh3aGVuIChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAgIChydW4td2l0aC10aW1lcgorICAgICB0
aW1lb3V0CisgICAgIG5pbAorICAgICAjJ2RvY2stYXR0ZW50aW9uIG5pbCkpKQorCisoY2wtZGVm
bWV0aG9kIGRvY2stcHJvZ3Jlc3MgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChkb2NrLS1iYWNrLWVuZCAoZXFsICd3MzIpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGEgcHJvZ3Jlc3MgaW5kaWNhdG9y
IG9uIHRoZSB0YXNrYmFyIGZvciBQUk9HUkVTUy4iCisgICh3MzItcHJvZ3Jlc3MtaW5kaWNhdG9y
IChkb2NrLS12YWxpZGF0ZS1wcm9ncmVzcyBwcm9ncmVzcykpKQorCisMCisKKyhwcm92aWRlICdk
b2NrLW1vZGUpCisKKzs7OyBkb2NrLW1vZGUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9zcmMv
bnNmbnMubSBiL3NyYy9uc2Zucy5tCmluZGV4IDM1MjhjNGFjZDUwLi4xYThmOTVjMTRlZiAxMDA2
NDQKLS0tIGEvc3JjL25zZm5zLm0KKysrIGIvc3JjL25zZm5zLm0KQEAgLTM2NzQsNiArMzY3NCwx
MjkgQEAgVGhlIHBvc2l0aW9uIGlzIHJldHVybmVkIGFzIGEgY29ucyBjZWxsIChYIC4gWSkgb2Yg
dGhlCiAgIHJldHVybiBRbmlsOwogfQogCitERUZVTiAoIm5zLWJhZGdlIiwgRm5zX2JhZGdlLCBT
bnNfYmFkZ2UsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBTZXQgdGhlIGFwcCBpY29uIGJhZGdl
IHRvIEJBREdFLgorQkFER0Ugc2hvdWxkIGJlIGEgc3RyaW5nIHNob3J0IGVub3VnaCB0byBkaXNw
bGF5IG5pY2VseSBpbiB0aGUgc2hvcnQKK3NwYWNlIGludGVuZGVkIGZvciBiYWRnZXMuCitJZiBC
QURHRSBpcyBuaWwsIGNsZWFyIHRoZSBhcHAgYmFkZ2UuICAqLykKKyAgKExpc3BfT2JqZWN0IGJh
ZGdlKQoreworICBibG9ja19pbnB1dCAoKTsKKyAgaWYgKE5JTFAgKGJhZGdlKSkKKyAgICBbW05T
QXBwIGRvY2tUaWxlXSBzZXRCYWRnZUxhYmVsOiBuaWxdOworICBlbHNlCisgICAgeworICAgICAg
Q0hFQ0tfU1RSSU5HIChiYWRnZSk7CisgICAgICBbW05TQXBwIGRvY2tUaWxlXSBzZXRCYWRnZUxh
YmVsOgorCQkJICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6IFNTREFUQSAoYmFkZ2Up
XV07CisgICAgfQorICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKworLyog
VXNlIC0xIHRvIGluZGljYXRlIG5vIGFjdGl2ZSByZXF1ZXN0LiAgKi8KK3N0YXRpYyBOU0ludGVn
ZXIgbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworCitERUZVTiAoIm5zLXJlcXVl
c3QtdXNlci1hdHRlbnRpb24iLAorICAgICAgIEZuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAor
ICAgICAgIFNuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAgICAgIDEsIDEsIDAsCisgICAg
ICAgZG9jOiAvKiBCb3VuY2UgdGhlIGFwcCBkb2NrIGljb24gdG8gcmVxdWVzdCB1c2VyIGF0dGVu
dGlvbi4KK0lmIFVSR0VOQ1kgbmlsLCBjYW5jZWwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3QsIGlm
IGFueS4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGJvdW5jaW5n
IGxhc3RzIGEgZmV3IHNlY29uZHMuCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2Fs
JywgYm91bmNpbmcgbGFzdHMgdW50aWwgRW1hY3MgaXMKK2ZvY3VzZWQuICAqLykKKyAgKExpc3Bf
T2JqZWN0IHVyZ2VuY3kpCit7CisgIGJsb2NrX2lucHV0ICgpOworICBpZiAobnNfcmVxdWVzdF91
c2VyX2F0dGVudGlvbl9pZCAhPSAtMSkKKyAgICB7CisgICAgICBbTlNBcHAgY2FuY2VsVXNlckF0
dGVudGlvblJlcXVlc3Q6IG5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faWRdOworICAgICAgbnNf
cmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworICAgIH0KKyAgaWYgKCFOSUxQICh1cmdl
bmN5KSAmJiBTWU1CT0xQICh1cmdlbmN5KSkKKyAgICB7CisgICAgICBpZiAoRVEgKHVyZ2VuY3ks
IFFpbmZvcm1hdGlvbmFsKSkKKwluc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gW05TQXBw
IHJlcXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNJbmZvcm1hdGlvbmFsUmVxdWVzdF07Cisg
ICAgICBlbHNlIGlmIChFUSAodXJnZW5jeSwgUWNyaXRpY2FsKSkKKwluc19yZXF1ZXN0X3VzZXJf
YXR0ZW50aW9uX2lkID0gW05TQXBwIHJlcXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNDcml0
aWNhbFJlcXVlc3RdOworICAgIH0KKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIFFuaWw7
Cit9CisKK0RFRlVOICgibnMtcHJvZ3Jlc3MtaW5kaWNhdG9yIiwKKyAgICAgICBGbnNfcHJvZ3Jl
c3NfaW5kaWNhdG9yLAorICAgICAgIFNuc19wcm9ncmVzc19pbmRpY2F0b3IsCisgICAgICAgMSwg
MSwgMCwKKyAgICAgICBkb2M6IC8qIEJvdW5jZSB0aGUgYXBwIGRvY2sgaWNvbiB0byByZXF1ZXN0
IHVzZXIgYXR0ZW50aW9uLgorCSAgICAgICBQUk9HUkVTUyBpcyBhIGZsb2F0IGJldHdlZW4gMC4w
IGFuZCAxLjAuCisJICAgICAgIElmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVz
cyBpbmRpY2F0b3IuICAqLykKKyAgKExpc3BfT2JqZWN0IHByb2dyZXNzKQoreworICBibG9ja19p
bnB1dCAoKTsKKyAgTlNEb2NrVGlsZSAqZG9ja190aWxlID0gW05TQXBwIGRvY2tUaWxlXTsKKyAg
LyogVXNlIE5TTGV2ZWxJbmRpY2F0b3Igd2l0aCByZWxpYWJsZSByZWRyYXdzLCBub3QgTlNQcm9n
cmVzc0luZGljYXRvci4gICovCisgIE5TTGV2ZWxJbmRpY2F0b3IgKmxldmVsX2luZGljYXRvcjsK
KyAgLyogUmV1c2UgdGhlIGluZGljYXRvciBzdWJ2aWV3IG9yIGNyZWF0ZSBvbmUuICovCisgIGlm
IChkb2NrX3RpbGUuY29udGVudFZpZXcKKyAgICAgICYmIFtbZG9ja190aWxlLmNvbnRlbnRWaWV3
IHN1YnZpZXdzXSBjb3VudF0gPiAwCisgICAgICAmJiBbW1tkb2NrX3RpbGUuY29udGVudFZpZXcg
c3Vidmlld3NdIGxhc3RPYmplY3RdCisgICAgICAgICAgICAgICAgICAgICAgICBpc0tpbmRPZkNs
YXNzOltOU0xldmVsSW5kaWNhdG9yIGNsYXNzXV0pCisgICAgbGV2ZWxfaW5kaWNhdG9yID0KKyAg
ICAgIChOU0xldmVsSW5kaWNhdG9yICopW1tbZG9ja190aWxlIGNvbnRlbnRWaWV3XSBzdWJ2aWV3
c10gbGFzdE9iamVjdF07CisgICAgZWxzZQorICAgICAgeworCWlmICghZG9ja190aWxlLmNvbnRl
bnRWaWV3KQorCSAgeworCSAgICBOU0ltYWdlVmlldyogaW1hZ2VfdmlldyA9IFtbTlNJbWFnZVZp
ZXcgYWxsb2NdIGluaXRdOworCSAgICBbaW1hZ2VfdmlldyBzZXRJbWFnZTogW05TQXBwIGFwcGxp
Y2F0aW9uSWNvbkltYWdlXV07CisJICAgIFtkb2NrX3RpbGUgc2V0Q29udGVudFZpZXc6IGltYWdl
X3ZpZXddOworCSAgfQorCS8qIFNldCB3aWR0aCB0byB0aGUgd2lkdGggb2YgdGhlIGFwcGxpY2F0
aW9uIGljb24sIGFuZCBoZWlnaHQgdG8KKwkgICAlIG9mIHRoZSBpY29uIGhlaWdodCB0byByZXNw
ZWN0IHNjYWxlZCBpY29ucy4gICovCisJZmxvYXQgd2lkdGggPSBbW05TQXBwIGFwcGxpY2F0aW9u
SWNvbkltYWdlXSBzaXplXS53aWR0aDsKKwlmbG9hdCBoZWlnaHQgPSAwLjEwICogW1tOU0FwcCBh
cHBsaWNhdGlvbkljb25JbWFnZV0gc2l6ZV0uaGVpZ2h0OworCWxldmVsX2luZGljYXRvciA9CisJ
ICBbW05TTGV2ZWxJbmRpY2F0b3IgYWxsb2NdIGluaXRXaXRoRnJhbWU6CisJCQkJICAgICAgTlNN
YWtlUmVjdCAoMC4wLCAwLjAsCisJCQkJCQkgIHdpZHRoLCBoZWlnaHQpXTsKKwlbbGV2ZWxfaW5k
aWNhdG9yIHNldFdhbnRzTGF5ZXI6IFlFU107IC8qIFBlcmZvcm1hbmNlLiAgKi8KKwlbbGV2ZWxf
aW5kaWNhdG9yIHNldEVuYWJsZWQ6IE5PXTsgLyogSWdub3JlIG1vdXNlIGlucHV0LiAgKi8KKwlb
bGV2ZWxfaW5kaWNhdG9yIHNldExldmVsSW5kaWNhdG9yU3R5bGU6CisJCQkgICBOU0xldmVsSW5k
aWNhdG9yU3R5bGVDb250aW51b3VzQ2FwYWNpdHldOworCS8qIE1hdGNoIE5TUHJvZ3Jlc3NJbmRp
Y2F0b3IgY29sb3IuICAqLworCVtsZXZlbF9pbmRpY2F0b3Igc2V0RmlsbENvbG9yOiBbTlNDb2xv
ciBjb250cm9sQWNjZW50Q29sb3JdXTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNldE1pblZhbHVlOiAw
LjBdOworCVtsZXZlbF9pbmRpY2F0b3Igc2V0TWF4VmFsdWU6IDEuMF07CisJLyogVGhlIGNvbnRl
bnRWaWV3IHRha2VzIG93bmVyc2hpcC4gICovCisJW2RvY2tfdGlsZS5jb250ZW50VmlldyBhZGRT
dWJ2aWV3OiBsZXZlbF9pbmRpY2F0b3JdOworICAgICAgfQorICBkb3VibGUgcHJvZ3Jlc3NfdmFs
dWU7CisgIEJPT0wgaGlkZSA9IChOSUxQIChwcm9ncmVzcykKKwkgICAgICAgfHwgKCFOSUxQIChw
cm9ncmVzcykgJiYgIShGTE9BVFAgKHByb2dyZXNzKSkpKTsKKyAgaWYgKCFoaWRlKQorICAgIHsK
KyAgICAgIHByb2dyZXNzX3ZhbHVlID0gWEZMT0FUX0RBVEEgKHByb2dyZXNzKTsKKyAgICAgIGhp
ZGUgPSAocHJvZ3Jlc3NfdmFsdWUgPCAwLjAgfHwgcHJvZ3Jlc3NfdmFsdWUgPiAxLjApOworICAg
IH0KKyAgaWYgKGhpZGUpCisgICAgeworICAgICAgW2xldmVsX2luZGljYXRvciBzZXREb3VibGVW
YWx1ZTogMC4wXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBZRVNdOworICAg
IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0RG91YmxlVmFsdWU6
IHByb2dyZXNzX3ZhbHVlXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBOT107
CisgICAgfQorICBbZG9ja190aWxlIGRpc3BsYXldOworICB1bmJsb2NrX2lucHV0ICgpOworICBy
ZXR1cm4gUW5pbDsKK30KKwogI2lmZGVmIE5TX0lNUExfQ09DT0EKIAogREVGVU4gKCJucy1zZW5k
LWl0ZW1zIiwKQEAgLTM5NTcsNiArNDA4MCw5IEBAIC0gKExpc3BfT2JqZWN0KWxpc3BTdHJpbmcK
ICAgZGVmc3ViciAoJlNuc19zZXRfbW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9zaXRpb24pOwogICBk
ZWZzdWJyICgmU25zX21vdXNlX2Fic29sdXRlX3BpeGVsX3Bvc2l0aW9uKTsKICAgZGVmc3ViciAo
JlNuc19zaG93X2NoYXJhY3Rlcl9wYWxldHRlKTsKKyAgZGVmc3ViciAoJlNuc19iYWRnZSk7Cisg
IGRlZnN1YnIgKCZTbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbik7CisgIGRlZnN1YnIgKCZTbnNf
cHJvZ3Jlc3NfaW5kaWNhdG9yKTsKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAgIGRlZnN1YnIgKCZT
bnNfc2VuZF9pdGVtcyk7CiAjZW5kaWYKQEAgLTQwMjMsNCArNDE0OSw2IEBAIC0gKExpc3BfT2Jq
ZWN0KWxpc3BTdHJpbmcKICAgREVGU1lNIChRYXNzcV9kZWxldGVfYWxsLCAiYXNzcS1kZWxldGUt
YWxsIik7CiAgIERFRlNZTSAoUXJ1bl9hdF90aW1lLCAicnVuLWF0LXRpbWUiKTsKICAgREVGU1lN
IChReF9oaWRlX3RpcCwgIngtaGlkZS10aXAiKTsKKyAgREVGU1lNIChRaW5mb3JtYXRpb25hbCwg
ImluZm9ybWF0aW9uYWwiKTsKKyAgREVGU1lNIChRY3JpdGljYWwsICJjcml0aWNhbCIpOwogfQpk
aWZmIC0tZ2l0IGEvc3JjL3czMmZucy5jIGIvc3JjL3czMmZucy5jCmluZGV4IDY3OWU4MTk3ZmQ4
Li40M2RhYjg0YzRkZCAxMDA2NDQKLS0tIGEvc3JjL3czMmZucy5jCisrKyBiL3NyYy93MzJmbnMu
YwpAQCAtMzUsNyArMzUsMTIgQEAgI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwCiAjaW5jbHVk
ZSA8Yy1jdHlwZS5oPgogCiAjZGVmaW5lIENPQkpNQUNST1MgLyogQXNrIGZvciBDIGRlZmluaXRp
b25zIGZvciBDT00uICAqLworI2lmICFkZWZpbmVkIE1JTkdXX1c2NCAmJiAhZGVmaW5lZCBDWUdX
SU4KKyMgZGVmaW5lIElOSVRHVUlECisjZW5kaWYKKyNpbmNsdWRlIDxpbml0Z3VpZC5oPgogI2lu
Y2x1ZGUgPHNobG9iai5oPgorI2luY2x1ZGUgPHNob2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlaWRs
Lmg+CiAjaW5jbHVkZSA8b2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlMi5oPgpAQCAtMjM3LDYgKzI0
Miw4IEBAIERFQ0xBUkVfSEFORExFKEhNT05JVE9SKTsKIHR5cGVkZWYgQk9PTCAoV0lOQVBJICog
U2V0R2VzdHVyZUNvbmZpZ19wcm9jKSAoSFdORCwgRFdPUkQsIFVJTlQsCiAJCQkJCSAgICAgICBF
bWFjc19QR0VTVFVSRUNPTkZJRywgVUlOVCk7CiAKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICogRmxh
c2hXaW5kb3dFeF9Qcm9jKSAoUEZMQVNIV0lORk8gcGZ3aSk7CisKIHN0YXRpYyBUcmFja01vdXNl
RXZlbnRfUHJvYyB0cmFja19tb3VzZV9ldmVudF9mbiA9IE5VTEw7CiBzdGF0aWMgSW1tR2V0Q29t
cG9zaXRpb25TdHJpbmdfUHJvYyBnZXRfY29tcG9zaXRpb25fc3RyaW5nX2ZuID0gTlVMTDsKIHN0
YXRpYyBJbW1HZXRDb250ZXh0X1Byb2MgZ2V0X2ltZV9jb250ZXh0X2ZuID0gTlVMTDsKQEAgLTI1
OSw2ICsyNjYsNyBAQCBERUNMQVJFX0hBTkRMRShITU9OSVRPUik7CiBzdGF0aWMgV1RTUmVnaXN0
ZXJTZXNzaW9uTm90aWZpY2F0aW9uX1Byb2MgV1RTUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9u
X2ZuID0gTlVMTDsKIHN0YXRpYyBSZWdpc3RlclRvdWNoV2luZG93X3Byb2MgUmVnaXN0ZXJUb3Vj
aFdpbmRvd19mbiA9IE5VTEw7CiBzdGF0aWMgU2V0R2VzdHVyZUNvbmZpZ19wcm9jIFNldEdlc3R1
cmVDb25maWdfZm4gPSBOVUxMOworc3RhdGljIEZsYXNoV2luZG93RXhfUHJvYyBmbGFzaF93aW5k
b3dfZXhfZm4gPSBOVUxMOwogCiBleHRlcm4gQXBwZW5kTWVudVdfUHJvYyB1bmljb2RlX2FwcGVu
ZF9tZW51OwogCkBAIC0xMTAxMCw2ICsxMTAxOCwzNTIgQEAgREVGVU4gKCJ3MzItc3lzdGVtLWlk
bGUtdGltZSIsIEZ3MzJfc3lzdGVtX2lkbGVfdGltZSwgU3czMl9zeXN0ZW1faWRsZV90aW1lLAog
CiAjZW5kaWYKIAorDAorI2lmZGVmIFdJTkRPV1NOVAorCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCSAg
ICAgVGFza2JhciAvIERvY2sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVHJhY2sgdGhlIHdpbmRv
dyBoYW5kbGUgZm9yIHRoZSBnbG9iYWwgYmFkZ2UgaWNvbi4gKi8KK3N0YXRpYyBIV05EIHczMl9i
YWRnZV9od25kID0gTlVMTDsKKworREVGVU4gKCJ3MzItYmFkZ2UiLAorICAgICAgIEZ3MzJfYmFk
Z2UsCisgICAgICAgU3czMl9iYWRnZSwKKyAgICAgICAzLCAzLCAwLAorICAgICAgIGRvYzogLyog
U2V0IHRoZSB0YXNrYmFyIGljb24gb3ZlcmxheSBpbWFnZSBiYXNlZCBvbiBCQURHRS4KK0JBREdF
IGlzIGEgc3RyaW5nLiAgSWYgQkFER0UgaXMgbmlsLCByZW1vdmUgdGhlIG92ZXJsYXkuICBEbyBu
b3RoaW5nIGlmCitXaW5kb3dzIGRvZXMgbm90IHN1cHBvcnQgdGhlIElUYXNrYmFyTGlzdDMgaW50
ZXJmYWNlIGFuZCByZXR1cm4gbmlsLAorb3RoZXJ3aXNlIHJldHVybiB0LiAgRG8gbm90aGluZyBp
ZiB0aGUgc2VsZWN0ZWQgZnJhbWUgaXMgbm90ICh5ZXQpCithc3NvY2lhdGVkIHdpdGggYSB3aW5k
b3cgaGFuZGxlLiAgQkFDS0dST1VORCBhbmQgRk9SRUdST1VORCBhcmUgUkdCCit0cmlwbGV0IHN0
cmluZ3Mgb2YgdGhlIGZvcm0gXCIjUlJHR0JCXCIuICBOb3RlOiBPbmx5IG9uZSBiYWRnZSBpcyBh
Y3RpdmUKK2F0IGEgdGltZSBhbmQgYSBiYWRnZSBwcmV2aW91c2x5IGFzc2lnbmVkIHRvIGEgZnJh
bWUgb3RoZXIgdGhhbiB0aGUKK3NlbGVjdGVkIGZyYW1lIGlzIHJlbW92ZWQgYmVmb3JlIGFzc2ln
bmluZyBhIG5ldyBiYWRnZS4gICovKQorICAoTGlzcF9PYmplY3QgYmFkZ2UsIExpc3BfT2JqZWN0
IGJhY2tncm91bmQsIExpc3BfT2JqZWN0IGZvcmVncm91bmQpCit7CisgIENvSW5pdGlhbGl6ZSAo
TlVMTCk7CisgIElUYXNrYmFyTGlzdDMgKnRhc2tfYmFyX2xpc3QgPSBOVUxMOworICBIUkVTVUxU
IHIgPSBDb0NyZWF0ZUluc3RhbmNlKCZDTFNJRF9UYXNrYmFyTGlzdCwKKwkJCSAgICAgICBOVUxM
LAorCQkJICAgICAgIENMU0NUWF9JTlBST0NfU0VSVkVSLAorCQkJICAgICAgICZJSURfSVRhc2ti
YXJMaXN0MywKKwkJCSAgICAgICAodm9pZCAqKikmdGFza19iYXJfbGlzdCk7CisgIGlmIChyICE9
IFNfT0spCisgICAgcmV0dXJuIFFuaWw7CisKKyAgSFdORCBod25kID0gTlVMTDsKKyAgc3RydWN0
IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBpZiAoRlJBTUVfVzMyX1AgKHNmKSAm
JiBGUkFNRV9MSVZFX1AgKHNmKSkKKyAgICBod25kID0gRlJBTUVfVzMyX1dJTkRPVyAoc2YpOwor
ICBpZiAoaHduZCA9PSBOVUxMKQorICAgIHsKKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+
UmVsZWFzZSh0YXNrX2Jhcl9saXN0KTsKKyAgICAgIHJldHVybiBRbmlsOworICAgIH0KKworICAv
KiBSZW1vdmUgdGhlIGJhZGdlIG92ZXJsYXkgZm9yIHRoZSBvbGQgd2luZG93IGhhbmRsZS4gICov
CisgIGlmICh3MzJfYmFkZ2VfaHduZCAhPSBOVUxMICYmIHczMl9iYWRnZV9od25kICE9IGh3bmQp
CisgICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlNldE92ZXJsYXlJY29uICh0YXNrX2Jhcl9s
aXN0LAorCQkJCQkgICAgIHczMl9iYWRnZV9od25kLAorCQkJCQkgICAgIE5VTEwsCisJCQkJCSAg
ICAgTlVMTCk7CisKKyAgaWYgKCFOSUxQIChiYWRnZSkgJiYgU1RSSU5HUCAoYmFkZ2UpCisgICAg
ICAmJiBTVFJJTkdQIChiYWNrZ3JvdW5kKSAmJiBTVFJJTkdQIChmb3JlZ3JvdW5kKSkKKyAgICB7
CisgICAgICBDT0xPUlJFRiBiZ19yZ2I7CisgICAgICBDT0xPUlJFRiBmZ19yZ2I7CisgICAgICB1
bnNpZ25lZCBzaG9ydCByLCBnLCBiOworICAgICAgaWYgKHBhcnNlX2NvbG9yX3NwZWMgKFNTREFU
QSAoYmFja2dyb3VuZCksICZyLCAmZywgJmIpKQorCWJnX3JnYiA9IFJHQiAociwgYiwgYik7Cisg
ICAgICBlbHNlCisJcmV0dXJuIFFuaWw7CisgICAgICBpZiAocGFyc2VfY29sb3Jfc3BlYyAoU1NE
QVRBIChmb3JlZ3JvdW5kKSwgJnIsICZnLCAmYikpCisJZmdfcmdiID0gUkdCIChyLCBiLCBiKTsK
KyAgICAgIGVsc2UKKwlyZXR1cm4gUW5pbDsKKworICAgICAgLyogUHJlcGFyZSBhIHN0cmluZyBm
b3IgZHJhd2luZyBhbmQgYXMgYWx0LXRleHQuICAqLworICAgICAgTGlzcF9PYmplY3QgYmFkZ2Vf
dXRmOCA9IEVOQ09ERV9VVEZfOCAoYmFkZ2UpOworICAgICAgaW50IHdpZGVfbGVuID0gcE11bHRp
Qnl0ZVRvV2lkZUNoYXIgKENQX1VURjgsIDAsCisJCQkJCSAgIFNTREFUQSAoYmFkZ2VfdXRmOCks
CisJCQkJCSAgIC0xLCBOVUxMLCAwKTsKKyAgICAgIHdjaGFyX3QgKmJhZGdlX3cgPSBhbGxvY2Eg
KCh3aWRlX2xlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAgICBwTXVsdGlCeXRlVG9X
aWRlQ2hhciAoQ1BfVVRGOCwgMCwgU1NEQVRBIChiYWRnZV91dGY4KSwgLTEsCisJCQkgICAgKExQ
V1NUUikgYmFkZ2VfdywKKwkJCSAgICB3aWRlX2xlbik7CisKKyAgICAgIC8qIFVzZSB0aGUgc21h
bGwgaWNvbiBzaXplIFdpbmRvd3Mgc3VnZ2VzdHMgdG8gbm90IGhhcmQgY29kZSAxNngxNi4gICov
CisgICAgICBpbnQgaWNvbl93aWR0aCA9IEdldFN5c3RlbU1ldHJpY3MgKFNNX0NYU01JQ09OKTsK
KyAgICAgIGludCBpY29uX2hlaWdodCA9IEdldFN5c3RlbU1ldHJpY3MgKFNNX0NYU01JQ09OKTsK
KworICAgICAgSERDIGh3bmRfZGMgPSBHZXREQyAoaHduZCk7CisgICAgICBIREMgZGMgPSBDcmVh
dGVDb21wYXRpYmxlREMgKGh3bmRfZGMpOworCisgICAgICBCSVRNQVBWNUhFQURFUiBiaTsKKyAg
ICAgIG1lbXNldCAoJmJpLCAwLCBzaXplb2YgKGJpKSk7CisgICAgICBiaS5iVjVTaXplID0gc2l6
ZW9mIChiaSk7CisgICAgICBiaS5iVjVXaWR0aCA9IGljb25fd2lkdGg7CisgICAgICBiaS5iVjVI
ZWlnaHQgPSAtaWNvbl9oZWlnaHQ7IC8qIE5lZ2F0aXZlIGZvciBhIHRvcC1kb3duIERJQi4gICov
CisgICAgICBiaS5iVjVQbGFuZXMgPSAxOworICAgICAgYmkuYlY1Qml0Q291bnQgPSAzMjsKKyAg
ICAgIGJpLmJWNUNvbXByZXNzaW9uID0gQklfQklURklFTERTOyAgLyogRW5hYmxlIHRoZSBtYXNr
cyBiZWxvdy4gICovCisgICAgICBiaS5iVjVSZWRNYXNrICAgPSAgMHgwMEZGMDAwMDsKKyAgICAg
IGJpLmJWNUdyZWVuTWFzayA9ICAweDAwMDBGRjAwOworICAgICAgYmkuYlY1Qmx1ZU1hc2sgID0g
IDB4MDAwMDAwRkY7CisgICAgICBiaS5iVjVBbHBoYU1hc2sgPSAgMHhGRjAwMDAwMDsKKworICAg
ICAgRFdPUkQgKmJpdG1hcF9waXhlbHM7CisgICAgICBIQklUTUFQIGJpdG1hcCA9IENyZWF0ZURJ
QlNlY3Rpb24gKGRjLCAoQklUTUFQSU5GTyAqKSAmYmksCisJCQkJCSBESUJfUkdCX0NPTE9SUywK
KwkJCQkJICh2b2lkICoqKSAmYml0bWFwX3BpeGVscywKKwkJCQkJIE5VTEwsIDApOworICAgICAg
SEdESU9CSiBvbGRfYml0bWFwID0gU2VsZWN0T2JqZWN0KGRjLCBiaXRtYXApOworCisgICAgICAv
KiBEcmF3IGEgY2lyY2xlIGZpbGxlZCB3aXRoIGJnLiAgKi8KKyAgICAgIEhCUlVTSCBiZ19icnVz
aCA9IENyZWF0ZVNvbGlkQnJ1c2ggKGJnX3JnYik7CisgICAgICBIR0RJT0JKIG9sZF9icnVzaCA9
IFNlbGVjdE9iamVjdCAoZGMsIGJnX2JydXNoKTsKKyAgICAgIEVsbGlwc2UgKGRjLCAwLCAwLCBp
Y29uX3dpZHRoLCBpY29uX2hlaWdodCk7CisgICAgICBTZWxlY3RPYmplY3QgKGRjLCBvbGRfYnJ1
c2gpOworICAgICAgRGVsZXRlT2JqZWN0IChiZ19icnVzaCk7CisKKyAgICAgIC8qIERlcml2ZSBh
IGZvbnQgc2NhbGVkIHRvIGZpdCB0aGUgaWNvbi4gIEZpcnN0IGZpbmQgdGhlIHN5c3RlbSdzCisJ
IGJhc2UgZm9udC4gIFRoZW4gc2NhbGUgaXQgdG8gZml0IGljb25faGVpZ2h0LiAgKi8KKyAgICAg
IEhGT05UIGJhc2VfZm9udDsKKyAgICAgIEJPT0wgY2xlYW5fdXBfYmFzZV9mb250ID0gRkFMU0U7
CisgICAgICBpZiAoc3lzdGVtX3BhcmFtZXRlcnNfaW5mb193X2ZuKQorCXsKKwkgIE5PTkNMSUVO
VE1FVFJJQ1MgbmNtOworCSAgbWVtc2V0ICgmbmNtLCAwLCBzaXplb2YgKG5jbSkpOworCSAgbmNt
LmNiU2l6ZSA9IHNpemVvZiAobmNtKTsKKwkgIFN5c3RlbVBhcmFtZXRlcnNJbmZvIChTUElfR0VU
Tk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mIChuY20pLCAmbmNtLCAwKTsKKwkgIGJhc2VfZm9udCA9
IENyZWF0ZUZvbnRJbmRpcmVjdCAoJm5jbS5sZlNtQ2FwdGlvbkZvbnQpOworCSAgY2xlYW5fdXBf
YmFzZV9mb250ID0gVFJVRTsKKwl9CisgICAgICBlbHNlCisJYmFzZV9mb250ID0gKEhGT05UKSBH
ZXRTdG9ja09iamVjdCAoREVGQVVMVF9HVUlfRk9OVCk7CisgICAgICBpZiAoY2xlYW5fdXBfYmFz
ZV9mb250KQorCURlbGV0ZU9iamVjdCAoYmFzZV9mb250KTsKKworICAgICAgTE9HRk9OVCBsZjsK
KyAgICAgIEdldE9iamVjdCAoYmFzZV9mb250LCBzaXplb2YgKGxmKSwgJmxmKTsKKyAgICAgIGxm
LmxmV2VpZ2h0ID0gRldfQk9MRDsKKyAgICAgIGxmLmxmT3V0UHJlY2lzaW9uID0gT1VUX09VVExJ
TkVfUFJFQ0lTOworICAgICAgLyogQ2xlYXJUeXBlIHF1YWxpdHkgbmVlZHMgb3BxYXVlLCBidXQg
d2UgZHJhdyB0cmFuc3BhcmVudC4gICovCisgICAgICBsZi5sZlF1YWxpdHkgPSBBTlRJQUxJQVNF
RF9RVUFMSVRZOworICAgICAgLyogTmVnYXRpdmUgbGZIZWlnaHQgaW5kaWNhdGVzIHBpeGVsIHVu
aXRzIHZzLiBwb3NpdGl2ZSBpbiBwb2ludHMuCisJIFVzZSB0aGUgTE9HUElYRUxTWSBweC9pbiBv
ZiB0aGUgcHJpbWFyeSBtb25pdG9yLiAgKi8KKyAgICAgIGxmLmxmSGVpZ2h0ID0gLU11bERpdihp
Y29uX2hlaWdodCAvIDIsIC8qIEZpdCB+MyBjaGFycy4gICovCisJCQkgICAgNzIsCisJCQkgICAg
R2V0RGV2aWNlQ2FwcyAoR2V0REMgKE5VTEwpLCBMT0dQSVhFTFNZKSk7CisgICAgICAvKiBFbnN1
cmUgbGZIZWlnaHQgcGl4ZWwgaW50ZXJwcmV0YXRpb24uICAqLworICAgICAgaW50IG9sZF9tYXBf
bW9kZSA9IFNldE1hcE1vZGUgKGRjLCBNTV9URVhUKTsKKyAgICAgIEhGT05UIHNjYWxlZF9mb250
ID0gQ3JlYXRlRm9udEluZGlyZWN0ICgmbGYpOworICAgICAgSEdESU9CSiBvbGRfZm9udCA9IFNl
bGVjdE9iamVjdCAoZGMsIHNjYWxlZF9mb250KTsKKyAgICAgIFNldE1hcE1vZGUgKGRjLCBvbGRf
bWFwX21vZGUpOworCisgICAgICAvKiBEcmF3IGJhZGdlIHRleHQuICAqLworICAgICAgU2V0QmtN
b2RlIChkYywgVFJBTlNQQVJFTlQpOworICAgICAgU2V0VGV4dENvbG9yIChkYywgZmdfcmdiKTsK
KyAgICAgIFJFQ1QgcmVjdDsKKyAgICAgIHJlY3QubGVmdCA9IHJlY3QudG9wID0gMDsKKyAgICAg
IHJlY3QucmlnaHQgPSBpY29uX3dpZHRoOworICAgICAgcmVjdC5ib3R0b20gPSBpY29uX2hlaWdo
dDsKKyAgICAgIERyYXdUZXh0IChkYywgU1NEQVRBIChiYWRnZV91dGY4KSwKKwkJLTEsIC8qIElu
ZGljYXRlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICAqLworCQkmcmVjdCwKKwkJRFRfQ0VOVEVS
IHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUgfCBEVF9OT0NMSVApOworICAgICAgU2VsZWN0
T2JqZWN0IChkYywgb2xkX2ZvbnQpOworICAgICAgRGVsZXRlT2JqZWN0IChzY2FsZWRfZm9udCk7
CisKKyAgICAgIC8qIE1ha2UgdGhlIGNpcmNsZSBhbmQgaXRzIHRleHQgb3BhcXVlIGJ5IHNldHRp
bmcgdGhlIGFscGhhCisJIGNoYW5uZWwgb24gZWFjaCBwaXhlbCBmYWxsaW5nIHdpdGhpbiB0aGUg
Y2lyY2xlLiAgKi8KKyAgICAgIGludCBjaXJjbGVfY2VudGVyX3ggPSBpY29uX3dpZHRoIC8gMjsK
KyAgICAgIGludCBjaXJjbGVfY2VudGVyX3kgPSBpY29uX2hlaWdodCAvIDI7CisgICAgICBpbnQg
Y2lyY2xlX3JhZGl1cyA9IChpY29uX3dpZHRoIDwgaWNvbl9oZWlnaHQKKwkJCSAgID8gaWNvbl93
aWR0aAorCQkJICAgOiBpY29uX2hlaWdodCkgLyAyIC0gMjsKKyAgICAgIGludCBjaXJjbGVfcmFk
aXVzX3NxID0gY2lyY2xlX3JhZGl1cyAqIGNpcmNsZV9yYWRpdXM7CisgICAgICBEV09SRCAqcGl4
ZWw7CisgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGljb25faGVpZ2h0OyArK3kpCisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaWNvbl93aWR0aDsgKyt4KQorCSAgeworICAgICAgICAgICAg
aW50IGR4ID0geCAtIGNpcmNsZV9jZW50ZXJfeDsKKyAgICAgICAgICAgIGludCBkeSA9IHkgLSBj
aXJjbGVfY2VudGVyX3k7CisgICAgICAgICAgICBpZiAoZHggKiBkeCArIGR5ICogZHkgPD0gY2ly
Y2xlX3JhZGl1c19zcSkKKwkgICAgICB7CisJCSAgcGl4ZWwgPSBiaXRtYXBfcGl4ZWxzICsgKHkg
KiBpY29uX3dpZHRoICsgeCk7CisJCSAgKnBpeGVsIHw9IDB4ZmYwMDAwMDA7IC8qIEZsaXAgdGhl
IDB4QUFSUkdHQkIgYWxwaGEgY2hhbm5lbC4gICovCisJICAgICAgfQorCSAgfQorCisgICAgICAv
KiBEdW1teSBtb25vY2hyb21lIGJpdG1hcCBtYXNrLCBpZ25vcmVkIHdoZW4gdGhlIGNvbG9yIGJp
dG1hcCBoYXMKKwkgYW4gYWxwaGEgY2hhbm5lbCwgYnV0IG5lZWRlZCB0byBzYXRpc2Z5IENyZWF0
ZUljb25JbmRpcmVjdC4gICovCisgICAgICBIQklUTUFQIG1hc2tfYml0bWFwID0gQ3JlYXRlQml0
bWFwIChpY29uX3dpZHRoLCBpY29uX2hlaWdodCwgMSwgMSwgTlVMTCk7CisKKyAgICAgIC8qIGh0
dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2FwaS93aW51c2Vy
L25mLXdpbnVzZXItY3JlYXRlaWNvbmluZGlyZWN0CisJIGhibU1hc2sgYW5kIGhibUNvbG9yIG1l
bWJlcnMgb2YgdGhlIElDT05JTkZPIHN0cnVjdHVyZSBzaG91bGQKKwkgbm90IGFscmVhZHkgYmUg
c2VsZWN0ZWQgaW50byBhIGRldmljZSBjb250ZXh0LiAgKi8KKyAgICAgIFNlbGVjdE9iamVjdCAo
ZGMsIG9sZF9iaXRtYXApOworCisgICAgICBJQ09OSU5GTyBpY29uX2luZm87CisgICAgICBtZW1z
ZXQgKCZpY29uX2luZm8sIDAsIHNpemVvZiAoaWNvbl9pbmZvKSk7CisgICAgICBpY29uX2luZm8u
Zkljb24gPSBUUlVFOworICAgICAgaWNvbl9pbmZvLmhibU1hc2sgPSBtYXNrX2JpdG1hcDsKKyAg
ICAgIGljb25faW5mby5oYm1Db2xvciA9IGJpdG1hcDsKKworICAgICAgSElDT04gaWNvbiA9IENy
ZWF0ZUljb25JbmRpcmVjdCAoJmljb25faW5mbyk7CisgICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0
YmwtPlNldE92ZXJsYXlJY29uICh0YXNrX2Jhcl9saXN0LCBod25kLCBpY29uLCBiYWRnZV93KTsK
KworICAgICAgRGVzdHJveUljb24gKGljb24pOworICAgICAgRGVsZXRlT2JqZWN0IChtYXNrX2Jp
dG1hcCk7CisgICAgICBEZWxldGVPYmplY3QgKGJpdG1hcCk7CisgICAgICBEZWxldGVEQyAoZGMp
OworICAgICAgUmVsZWFzZURDIChod25kLCBod25kX2RjKTsKKyAgICAgIHczMl9iYWRnZV9od25k
ID0gaHduZDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0
YmwtPlNldE92ZXJsYXlJY29uICh0YXNrX2Jhcl9saXN0LCBod25kLCBOVUxMLCBOVUxMKTsKKyAg
ICAgIHczMl9iYWRnZV9od25kID0gTlVMTDsKKyAgICB9CisKKyAgdGFza19iYXJfbGlzdC0+bHBW
dGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICByZXR1cm4gUXQ7Cit9CisKKy8qIFRyYWNr
IHRoZSBtb3N0IHJlY2VudGx5IHVzZWQgd2luZG93IGhhbmRsZS4gICovCitzdGF0aWMgSFdORCB3
MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9od25kID0gTlVMTDsKKworREVGVU4gKCJ3MzItcmVx
dWVzdC11c2VyLWF0dGVudGlvbiIsCisgICAgICAgRnczMl9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9u
LAorICAgICAgIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAgICAgICAxLCAxLCAwLAor
ICAgICAgIGRvYzogLyogRmxhc2ggdGhlIHNlbGVjdGVkIGZyYW1lIGFuZC9vciB0YXNrYmFyIGlj
b24gYmFzZWQgb24gVVJHRU5DWS4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjYW5jZWwgdGhlIHJlcXVl
c3QsIGlmIGFueS4gIElmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbAorYGluZm9ybWF0aW9uYWwnLCBm
bGFzaCB0aGUgdGFza2JhciBpY29uLiAgSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sCitgY3JpdGlj
YWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uIGFuZCB0aGUgZnJhbWUuICBXaW5kb3dzIHN0b3Bz
CitmbGFzaGluZyBpZiB0aGUgdXNlciBmb2N1c2VzIHRoZSBmcmFtZS4gIERvIG5vdGhpbmcgaWYg
V2luZG93cyBkb2VzIG5vdAorc3VwcG9ydCBGbGFzaFdpbmRvd0V4IGFuZCByZXR1cm4gbmlsLCBv
dGhlcndpc2UgcmV0dXJuIHQuICBEbyBub3RoaW5nIGlmCit0aGUgZnJhbWUgaXMgbm90ICh5ZXQp
IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdyBoYW5kbGUuICBOb3RlOiBPbmx5IG9uZQorZnJhbWUg
aXMgZmxhc2hlZCBhdCBhIHRpbWUgYW5kIGFueSBhbHJlYWR5IGFjdGl2ZSBmbGFzaGluZyBpcyBj
YW5jZWxlZAorYW5kIHJlcGxhY2VkIGJ5IHRoZSBuZXcgcmVxdWVzdC4gICovKQorICAoTGlzcF9P
YmplY3QgdXJnZW5jeSkKK3sKKyAgaWYgKGZsYXNoX3dpbmRvd19leF9mbiA9PSBOVUxMKQorICAg
IHJldHVybiBRbmlsOworCisgIHN0cnVjdCBmcmFtZSAqc2YgPSBTRUxFQ1RFRF9GUkFNRSAoKTsK
KyAgaWYgKCFGUkFNRV9XMzJfUCAoc2YpIHx8ICFGUkFNRV9MSVZFX1AgKHNmKSkKKyAgICByZXR1
cm4gUW5pbDsKKworICBIV05EIGh3bmQgPSBGUkFNRV9XMzJfV0lORE9XIChzZik7CisgIGlmICho
d25kID09IDApCisgICAgcmV0dXJuIFFuaWw7CisKKyAgRkxBU0hXSU5GTyBmbGFzaF9pbmZvOwor
ICBmbGFzaF9pbmZvLmNiU2l6ZSA9IHNpemVvZihmbGFzaF9pbmZvKTsKKyAgZmxhc2hfaW5mby51
Q291bnQgPSAwOworICBmbGFzaF9pbmZvLmR3VGltZW91dCA9IDA7CisKKyAgZmxhc2hfaW5mby5k
d0ZsYWdzID0gRkxBU0hXX1NUT1A7CisgIGlmICh3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9o
d25kICE9IE5VTEwKKyAgICAgICYmIHczMl9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2h3bmQgIT0g
aHduZCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIGF0dGVudGlvbiBvbiB0aGUgb2xkIHdpbmRv
dyBoYW5kbGUuICAqLworICAgICAgZmxhc2hfaW5mby5od25kID0gdzMyX3JlcXVlc3RfdXNlcl9h
dHRlbnRpb25faHduZDsKKyAgICAgIGZsYXNoX3dpbmRvd19leF9mbiAoJmZsYXNoX2luZm8pOwor
ICAgICAgdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faHduZCA9IGh3bmQ7CisgICAgfQorICBm
bGFzaF9pbmZvLmh3bmQgPSBod25kOworCisgIGlmICghTklMUCAodXJnZW5jeSkgJiYgU1lNQk9M
UCAodXJnZW5jeSkpCisgICAgeworICAgICAgLyogVGhlIGludGVuZGVkIGNhbGxlciwgZG9jay1t
b2RlLmVsICdkb2NrLWF0dGVudGlvbicsIGhhcyBhbgorCSBvcHRpb25hbCB0aW1lciB0byBjbGVh
ciB0aGUgYXR0ZW50aW9uIGluZGljYXRvciBzbyB0aGlzIHdpbGwKKwkgZmxhc2ggdW50aWwgY2xl
YXJlZCB2aWEgdGhlIHRpbWVyLCBvciB0aGUgd2luZG93IGNvbWVzIHRvIHRoZQorCSBmb3JlZ3Jv
dW5kLiAgRm9yIGluZm9ybWF0aW9uYWwgYXR0ZW50aW9uLCBmbGFzaCB0aGUgdHJheSBpY29uLgor
CSBGb3IgY3JpdGljYWwgYXR0ZW50aW9uLCBmbGFzaCB0aGUgdHJheSBpY29uIGFuZCB0aGUgd2lu
ZG93LiAgKi8KKyAgICAgIGlmIChFUSAodXJnZW5jeSwgUWluZm9ybWF0aW9uYWwpKQorCWZsYXNo
X2luZm8uZHdGbGFncyA9IEZMQVNIV19UUkFZIHwgRkxBU0hXX1RJTUVSTk9GRzsKKyAgICAgIGVs
c2UgaWYgKEVRICh1cmdlbmN5LCBRY3JpdGljYWwpKQorCWZsYXNoX2luZm8uZHdGbGFncyA9IEZM
QVNIV19BTEwgfCBGTEFTSFdfVElNRVJOT0ZHOworICAgIH0KKworICBmbGFzaF93aW5kb3dfZXhf
Zm4gKCZmbGFzaF9pbmZvKTsKKyAgcmV0dXJuIFF0OworfQorCisvKiBUcmFjayB0aGUgd2luZG93
IGhhbmRsZSBmb3IgdGhlIGdsb2JhbCBwcm9ncmVzcyBpbmRpY2F0b3IuICovCitzdGF0aWMgSFdO
RCB3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yX2h3bmQgPSBOVUxMOworCitERUZVTiAoInczMi1wcm9n
cmVzcy1pbmRpY2F0b3IiLAorICAgICAgIEZ3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAg
IFN3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIDEsIDEsIDAsCisgICAgICAgZG9jOiAv
KiBTaG93IGEgcHJvZ3Jlc3MgYmFyIG9uIHRoZSB0YXNrYmFyIGljb24gZm9yIFBST0dSRVNTLgor
UFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4gIElmIFBST0dSRVNT
IGlzIG5pbCwgcmVtb3ZlCit0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLiAgRG8gbm90aGluZyBpZiBX
aW5kb3dzIGRvZXMgbm90IHN1cHBvcnQgdGhlCitJVGFza2Jhckxpc3QzIGludGVyZmFjZSBhbmQg
cmV0dXJuIG5pbCwgb3RoZXJ3aXNlIHJldHVybiB0LiAgRG8gbm90aGluZworaWYgdGhlIGZyYW1l
IGlzIG5vdCAoeWV0KSBhc3NvY2lhdGVkIHdpdGggYW4gSFdORC4gICovKQorICAoTGlzcF9PYmpl
Y3QgcHJvZ3Jlc3MpCit7CisgIENvSW5pdGlhbGl6ZSAoTlVMTCk7CisgIElUYXNrYmFyTGlzdDMg
KnRhc2tfYmFyX2xpc3QgPSBOVUxMOworICBIUkVTVUxUIHIgPSBDb0NyZWF0ZUluc3RhbmNlKCZD
TFNJRF9UYXNrYmFyTGlzdCwKKwkJCSAgICAgICBOVUxMLAorCQkJICAgICAgIENMU0NUWF9JTlBS
T0NfU0VSVkVSLAorCQkJICAgICAgICZJSURfSVRhc2tiYXJMaXN0MywKKwkJCSAgICAgICAodm9p
ZCAqKikmdGFza19iYXJfbGlzdCk7CisgIGlmIChyICE9IFNfT0spCisgICAgcmV0dXJuIFFuaWw7
CisKKyAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBIV05EIGh3bmQg
PSBOVUxMOworICBpZiAoRlJBTUVfVzMyX1AgKHNmKSAmJiBGUkFNRV9MSVZFX1AgKHNmKSkKKyAg
ICBod25kID0gRlJBTUVfVzMyX1dJTkRPVyAoc2YpOworICBpZiAoaHduZCA9PSBOVUxMKQorICAg
IHsKKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+UmVsZWFzZSh0YXNrX2Jhcl9saXN0KTsK
KyAgICAgIHJldHVybiBRbmlsOworICAgIH0KKworICBpZiAodzMyX3Byb2dyZXNzX2luZGljYXRv
cl9od25kICE9IE5VTEwKKyAgICAgICYmIHczMl9wcm9ncmVzc19pbmRpY2F0b3JfaHduZCAhPSBo
d25kKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgdGhlIGluZGljYXRvciBmb3IgdGhlIG9sZCB3
aW5kb3cgaGFuZGxlLiAgKi8KKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+U2V0UHJvZ3Jl
c3NTdGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIHczMl9wcm9ncmVzc19pbmRpY2F0
b3JfaHduZCwKKwkJCQkJICAgICAgIFRCUEZfTk9QUk9HUkVTUyk7CisgICAgfQorICB3MzJfcHJv
Z3Jlc3NfaW5kaWNhdG9yX2h3bmQgPSBod25kOworCisgIC8qIFNjYWxlIHRhc2sgYmFyIHByb2dy
ZXNzIGZyb20gMC4wLTEuMCB0byAwLTEwMC4gICovCisgIFVMT05HTE9ORyBhZGpfcHJvZ3Jlc3Mg
PSAwOworICBpZiAoIU5JTFAgKHByb2dyZXNzKSAmJiBGTE9BVFAgKHByb2dyZXNzKSkKKyAgICAg
IGFkal9wcm9ncmVzcyA9IChVTE9OR0xPTkcpICgxMDAuMCAqCisJCQkJICBYRkxPQVRfREFUQSAo
cHJvZ3Jlc3MpKTsKKyAgaWYgKGFkal9wcm9ncmVzcyA+IDApCisgICAgeworICAgICAgdGFza19i
YXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1N0YXRlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkg
ICAgICAgaHduZCwgVEJQRl9OT1JNQUwpOworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5T
ZXRQcm9ncmVzc1ZhbHVlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgYWRqX3By
b2dyZXNzLCAxMDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRhc2tfYmFyX2xpc3Qt
PmxwVnRibC0+U2V0UHJvZ3Jlc3NTdGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIGh3
bmQsIFRCUEZfTk9QUk9HUkVTUyk7CisgICAgICB3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yX2h3bmQg
PSBOVUxMOworICAgIH0KKworICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlJlbGVhc2UodGFza19i
YXJfbGlzdCk7CisgIHJldHVybiBRdDsKK30KKworI2VuZGlmIC8qIFdJTkRPV1NOVCAqLworCiAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKIAkJCSAgICBJbml0aWFsaXphdGlvbgogICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpA
QCAtMTE1MTEsNiArMTE4NjUsMTUgQEAgc3ltc19vZl93MzJmbnMgKHZvaWQpCiAgIERFRlNZTSAo
UWNhcHNsb2NrLCAiY2Fwc2xvY2siKTsKICAgREVGU1lNIChRa3BfbnVtbG9jaywgImtwLW51bWxv
Y2siKTsKICAgREVGU1lNIChRc2Nyb2xsLCAic2Nyb2xsIik7CisKKyAgI2lmZGVmIFdJTkRPV1NO
VAorICAvKiBUYXNrYmFyL2RvY2sgc3VwcG9ydC4gICovCisgIGRlZnN1YnIgKCZTdzMyX2JhZGdl
KTsKKyAgZGVmc3ViciAoJlN3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yKTsKKyAgZGVmc3ViciAoJlN3
MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbik7CisgIERFRlNZTSAoUWluZm9ybWF0aW9uYWwsICJp
bmZvcm1hdGlvbmFsIik7CisgIERFRlNZTSAoUWNyaXRpY2FsLCAiY3JpdGljYWwiKTsKKyAgI2Vu
ZGlmCiB9CiAKIAwKQEAgLTExNzk5LDYgKzEyMTYyLDkgQEAgZ2xvYmFsc19vZl93MzJmbnMgKHZv
aWQpCiAgIFNldEdlc3R1cmVDb25maWdfZm4KICAgICA9IChTZXRHZXN0dXJlQ29uZmlnX3Byb2Mp
IGdldF9wcm9jX2FkZHIgKHVzZXIzMl9saWIsCiAJCQkJCSAgICAgIlNldEdlc3R1cmVDb25maWci
KTsKKyAgZmxhc2hfd2luZG93X2V4X2ZuCisgICAgPSAoRmxhc2hXaW5kb3dFeF9Qcm9jKSBnZXRf
cHJvY19hZGRyICh1c2VyMzJfbGliLAorCQkJCQkgICJGbGFzaFdpbmRvd0V4Iik7CiAKICAgewog
ICAgIEhNT0RVTEUgaW1tMzJfbGliID0gR2V0TW9kdWxlSGFuZGxlICgiaW1tMzIuZGxsIik7Ci0t
IAoyLjQ3LjEKCg==
--0000000000004b241006441dc01c--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Tue, 25 Nov 2025 20:22:22 +0000
Resent-Message-ID: <handler.79859.B79859.17641021344029 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17641021344029
          (code B ref 79859); Tue, 25 Nov 2025 20:22:22 +0000
Received: (at 79859) by debbugs.gnu.org; 25 Nov 2025 20:22:14 +0000
Received: from localhost ([127.0.0.1]:41865 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vNzYD-00012i-EQ
	for submit <at> debbugs.gnu.org; Tue, 25 Nov 2025 15:22:14 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:40388)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vN4jS-0004mk-MM
 for 79859 <at> debbugs.gnu.org; Sun, 23 Nov 2025 02:42:04 -0500
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 1vN4jB-00065I-Cl; Sun, 23 Nov 2025 02:41:45 -0500
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=5GYzW3hJ/yYuB5L0ltxzXs4gzWIr4s9yhvhE33fhAZQ=; b=T9q3k7v3EttKrDFVZM5Q
 v5o0MVdsGlu/qejkbqvvebmLVUG1COSO7e2s7KyTTuFnySq7obTpu2Jhav493t6guflqAsAurMDNW
 w8I2RpWIZHHnhEGAVzsLJS6aTtZU+WRxvVc0UdHskWf3jyGS4WNi1cpDqwdSaH+e3KeVFW2r/LtTL
 EL48DC7ub6CgbdiJ/+6QlLBqR0sLpjqfvBjVhrz0HAM8zIq4ck5NBXaM+woC7mpAYDUtAYCam0oMO
 ZWF8bLa+34o+vqUG449kgEc+wtxv4yJE/Sk2vqRgL/JQMXBATn9y5tT7rJb5CFB3N7DYvUp/5cYK2
 F1act8GKdpCVbw==;
Date: Sun, 23 Nov 2025 09:41:36 +0200
Message-Id: <86see5dwlr.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Fri, 21 Nov 2025 12:00:03
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stéphane Marks <shipmints@HIDDEN>
> Date: Fri, 21 Nov 2025 12:00:03 -0500
> Cc: 79859 <at> debbugs.gnu.org, bjorn.bidar@HIDDEN
> 
>  I wanted to test this on MS-Windows, but the w32fns.c patch failed to
>  apply to the master branch, even if I use --ignore-whitespace option
>  to "git apply".  Could you please rebase on the current master and
>  post an updated patch?
> 
> Please try the attached patch.

It compiles now, thanks.  I needed a small patch on top, to make it
compile with mingw.org's MinGW:

--- src/w32fns.c.orig	2025-11-23 08:11:59.786870000 +0200
+++ src/w32fns.c	2025-11-23 09:13:26.937525200 +0200
@@ -11031,6 +11031,12 @@ Return -1 if the required system API is 
 /* Track the window handle for the global badge icon. */
 static HWND w32_badge_hwnd = NULL;
 
+#ifndef MINGW_W64
+  /* mingw.org's MinGW doesn't have this stuff.  */
+  DEFINE_GUID(CLSID_TaskbarList, 0x56fdf344, 0xfd6d, 0x11d0, 0x95,0x8a, 0x00,0x60,0x97,0xc9,0xa0,0x90);
+  DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91, 0x9e28, 0x4b86, 0x90,0xe9, 0x9e,0x9f,0x8a,0x5e,0xef,0xaf);
+#endif
+
 DEFUN ("w32-badge",
        Fw32_badge,
        Sw32_badge,

>  > * lisp/dock-mode.el: New file.
> 
>  First, the name of the mode and related symbols: I find the name
>  "dock" to be problematic, as it seems to be well-known to macOS users
>  and maybe also to some users of GNU/Linux desktops, but might be
>  unknown to others.  Also, "dock" has multiple meanings, which might be
>  confusing.  I would prefer something like dock-taskbar-* instead, or
>  maybe gui-dock-*, or even gui-desktop-* (if we envision more features
>  being added to this in the future).  I'm also open to other ideas
>  about better naming this class of features.
> 
> I have no strong opinion on this other than I thought the scope would be best limited to "dock" features.  If
> you can envision other "desktop" features to add (and we can avoid any confusion with desktop.el), I'm
> happy to call it whatever we want.  If there are things you'd like to see sooner than later, I can take a stab at
> those if the scope is on the small side.

I suggest to call the new Lisp file dock-taskbar.el, and rename the
functions accordingly.

>  > +@defvar dock-dbus-timeout-ms
>  > +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus
>  > +systems, and can be customized to specify the number of milliseconds
>  > +Emacs will wait for D-Bus responses before timing out and considering
>  > +messages undeliverable.  It defaults to 25000 milliseconds, which is the
>  > +recommended default by the D-Bus package, which see, @pxref{Top,,, dbus,
>  > +D-Bus integration in Emacs}.
> 
>  This doesn't seem to be a user-level option, at least not an important
>  one.  I presume that the default is fine for almost all uses, and the
>  option only needs customization when troubleshooting.
> 
> This is a default hard coded in `dbus-call-method` and I thought it best to raise it up for this package as it is
> something people may have trouble with, even if unlikely, and we need to pass the timeout downstream.

If this is a troubleshooting issue, then the text should be rephrased
accordingly.  It should begin with the description of a possible
problem (what happens if the value is not correct), and then describe
customizing this variable as a solution.

>  > +@findex dock-badge
>  > +@defun dock-badge &optional count-or-string
>  > +Set the dock icon badge to @var{count-or-string}.  If
>  > +@var{count-or-string} is @code{nil}, clear the badge.
> 
>  I'm missing here the description of where will the badge appear if
>  Emacs has several visible frames.  Will the badge appear on all of
>  them? only one? something else?
> 
> On GNU/Linux and NS, there is only a single dock icon for the Emacs process.  It's on w32 that things get
> more complex as  Windows has options to collapse or not multiple frames into a group or not.  I thought it
> best for now to unify the behavior to keep it simple and stick to a single badge per process rather than
> introduce complexity in the API for all platforms.

OK, but still, some kind of general description should be there.  Not
everyone knows what these badges are, where to look for them on the
desktop, and what to expect from their appearance.

>  > +(cl-defgeneric dock-badge (&optional count-or-string)
>  > +  "Set the dock icon badge to COUNT-OR-STRING.
>  > +If COUNT-OR-STRING is an integer, display that as the icon badge.
>  > +If COUNT-OR-STRING is a string on back ends which do not support
>  > +strings, convert COUNT-OR-STRING to an integer, or nil.
>  > +If COUNT-OR-STRING is nil, or is an empty string, remove the counter.")
> 
>  If a string is converted to nil, will that remove the counter?
> 
> Yes, in the dbus implementation "Set badge to COUNT-OR-STRING if an integer, otherwise use nil.
> The Unity protocol does not support string badges."

This should be in the doc string.

Also, I think the doc string and the manual should emphasize that this
is designed to display a numerical string as the badge, so
COUNT-OR-STRING should represent a number.  I would even rename it to
COUNT, and document that it could be either a number or a string
representation of a number.

>  > @@ -38,6 +38,10 @@ #define COBJMACROS /* Ask for C definitions for COM.  */
>  >  #include <shlobj.h>
>  >  #include <oleidl.h>
>  >  #include <objidl.h>
>  > +#if !defined MINGW_W64 && !defined CYGWIN
>  > +# define INITGUID
>  > +#endif
> 
>  I don't understand this: why only MINGW_W64? does this code work only
>  in 64bit builds or something?
> 
>  And why define INITGUID to nothing?
> 
> I blindly copied this from w32dwrite.c.  Including <shobjidl.h> does require that we include <initguid.h> to get
> the key COM interface defined that we need (I've removed the private copy after testing on mingw).

OK, but still: why is INITGUID defined only when !MINGW_W64?  Is
something above specific to MinGW64?

>  > +#ifndef IID_ITaskbarList3
>  > +DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91, 0x9e28, 0x4b86, 0x90,0xe9,
>  0x9e,0x9f,0x8a,0x5e,0xef,0xaf);
> 
>  Please add a comment here explaining what these constants are and what
>  is their effect.  Or maybe these constants are required by Windows to
>  be that and only that?  This should be documented, preferably with a
>  reference.
> 
> I got this to compile just fine on mingw so I removed this magic.

Turns out mingw.org still needs this, see above.

>  Also, does this mean we can only have a single badge on display at any
>  given time?
> 
> Yes.  The goal was to unify a simple API and behaviors across platforms.
>  
>  And what happens if the frame corresponding to this
>  handle is deleted?
> 
> This w32 API is documented to ignore an invalid window handle.

What I see is that when the frame is deleted, the badge stays, and can
be removed from any other frame.  This is true even if the original
frame belonged to a different Emacs session, which meanwhile exited.

> The earliest supported version is Windows 7.

The NEWS entry should then say something like "on capable systems", to
reflect the fact that not all supported systems will have this.

> +(cl-defgeneric dock-badge (&optional count-or-string)
> +  "Set the dock icon badge to COUNT-OR-STRING.
> +If COUNT-OR-STRING is an integer, display that as the icon badge.
> +If COUNT-OR-STRING is a string on back ends which do not support
> +strings, convert COUNT-OR-STRING to an integer, or nil.
> +If COUNT-OR-STRING is nil, or is an empty string, remove the counter.")

Thanks again for working on this.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 26 Nov 2025 19:31:02 +0000
Resent-Message-ID: <handler.79859.B79859.176418544830615 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176418544830615
          (code B ref 79859); Wed, 26 Nov 2025 19:31:02 +0000
Received: (at 79859) by debbugs.gnu.org; 26 Nov 2025 19:30:48 +0000
Received: from localhost ([127.0.0.1]:56576 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vOLE0-0007xi-3b
	for submit <at> debbugs.gnu.org; Wed, 26 Nov 2025 14:30:48 -0500
Received: from thaodan.de ([2a03:4000:4f:f15::1]:36902)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <bjorn.bidar@HIDDEN>)
 id 1vOLDw-0007xE-S9
 for 79859 <at> debbugs.gnu.org; Wed, 26 Nov 2025 14:30:46 -0500
Received: from NordStern (mobile-access-2e8443-220.dhcp.inet.fi
 [46.132.67.220]) by thaodan.de (Postfix) with ESMTPSA id 7E560D00098;
 Wed, 26 Nov 2025 21:30:37 +0200 (EET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=thaodan.de; s=mail;
 t=1764185437; bh=2S/8nK7RJLjfjlQman5mEnI9cNIyCx1XAUOGoj4g/Cs=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=PyHMQ258Yt4Ep0TWHPXfUzf7jV3k7MrEiXyYPVrSTzXVRS6iB4Ese5bgKEfUNz5/a
 y+26C44gaWAhLJ7F+uZJIqlzg/cUHePf8ZV3z0Yslnj75zg9K+uzPHeUAGjFmmHZ98
 zMucu4uA1AHI2K8vi0Ck0KBIpm+k7+MnSCvyWTI7X8Y7lyBTKTgbBjUuf860CmTUyu
 Tx1cEilYrNjNyok46ugoxdu+dajM6niL+fBwWKvkyDNUZs3L0Q0FPmEWo36GAud/xW
 D/jVZ67JoxZwpXTE+c6gut6IQO8Thgr8vHgXSjmq0So9+HrFQe7ohxqP7QwHHhshQ5
 icl1aqQtMPeWyHfBQqUbJoLJd5yOgPWfM8F4BQRQ7aWgrzQZaEKi6zXFUelOGGZVhI
 sHNV75HSCdSYhU57t0gbTtCfMRExTKbFbc5Gp1nZ7HajdBdFY7ikDs2dTFCahhG0X3
 3FN3BufIzPt0H4KyTDb21Z0KCY743RQP08B1w1kUqvqcTWBvh0rZHAkJXn2MPI2Wtw
 3sSySQveqctpvX6m6Sc0etLMvZhxWIm5AvcyDxAWD8JBXF+iGEyYUIGbLU7SNOn/ss
 UA8PNvQMZxxF9aeuwghj/wJArr5eJLE2aBY3Z2ilr6zsUXW87vkPjvLpkmTZg2PBfi
 tkpmuGWo9XLh8yn6pkEH54QA=
From: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
In-Reply-To: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
Autocrypt: addr=bjorn.bidar@HIDDEN; prefer-encrypt=nopreference; keydata=
 mDMEZNfpPhYJKwYBBAHaRw8BAQdACBEmr+0xwIIHZfIDlZmm7sa+lHHSb0g9FZrN6qE6ru60JUJq
 w7ZybiBCaWRhciA8Ympvcm4uYmlkYXJAdGhhb2Rhbi5kZT6IlgQTFgoAPgIbAwULCQgHAgIiAgYV
 CgkICwIEFgIDAQIeBwIXgBYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1/YmAhkBAAoJEFwbdKFl
 HF9oB9cBAJoIIGQKXm4cpap+Flxc/EGnYl0123lcEyzuduqvlDT0AQC3OlFKm/OiqJ8IMTrzJRZ8
 phFssTkSrrFXnM2jm5PYDoiTBBMWCgA7FiEEUfF263VHMB6nKairXBt0oWUcX2gFAmTX6T4CGwMF
 CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQXBt0oWUcX2hbCQEAtru7kvM8hi8zo6z9ux2h
 K+B5xViKuo7Z8K3IXuK5ugwA+wUfKzomzdBPhfxDsqLcEziGRxoyx0Q3ld9aermBUccHtBxCasO2
 cm4gQmlkYXIgPG1lQHRoYW9kYW4uZGU+iJMEExYKADsCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwEC
 HgcCF4AWIQRR8XbrdUcwHqcpqKtcG3ShZRxfaAUCZNf2FQAKCRBcG3ShZRxfaCzSAP4hZ7cSp0YN
 XYpcjHdsySh2MuBhhoPeLGXs+2kSiqBiOwD/TP8AgPEg/R+SI9GI9on7fBJJ0mp2IT8kZ2rhDOjg
 gA6IkwQTFgoAOxYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1+ntAhsDBQsJCAcCAiICBhUKCQgL
 AgQWAgMBAh4HAheAAAoJEFwbdKFlHF9oBgwA/iQHwe0VL4Df4GGTYlNjMSHFlIkBmN4UfYGLYj3E
 TrOUAQC51M+M3cjsL8WHdpBz6VAo6df9d+rVwhQ9vQuFHqevArQrQmrDtnJuIEtldHR1bmVuIDxi
 am9ybi5rZXR0dW5lbkB0aGFvZGFuLmRlPoiTBBMWCgA7FiEEUfF263VHMB6nKairXBt0oWUcX2gF
 Amgtj9ECGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQXBt0oWUcX2hXyQD9GUEnX2eJ
 IOaiqTV4rz5l7N879tkdKjw1cD9FanRkb8AA/RcF03ZGqpJHYPHL3+hdl/yR/toLw7wcoaDWrw4n
 2FsHtCdCasO2cm4gS2V0dHVuZW4gPGIua2V0dHVuZW5AdGhhb2Rhbi5kZT6IkwQTFgoAOxYhBFHx
 dut1RzAepymoq1wbdKFlHF9oBQJoLZAYAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJ
 EFwbdKFlHF9oNbMBAP3uTGa26DW/QXHyZgY3ldOmWHTsRz3uyQxiyU1r+CKIAP94DHA3fEMtHKby
 G0/Jqp5ZhW8xSQGTGijHYCue/e5+Arg4BGTX6T4SCisGAQQBl1UBBQEBB0Cbohc3JEfn005/cm0A
 OGjSsW1ZxAkgaoVNjbpqk4MgNAMBCAeIeAQYFgoAIBYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk
 1+k+AhsMAAoJEFwbdKFlHF9ooHABAKGmrGBic/Vys3BBrOQiRB3Z7izOHwhqTRpAqFZtXS2nAQDZ
 hp/5aYw1TZjTzkm1KVt9QiYnjd/MvxRE9iaY6x4mDbgzBGTX6T4WCSsGAQQB2kcPAQEHQAgRJq/t
 McCCB2XyA5WZpu7GvpRx0m9IPRWazeqhOq7uiO8EGBYKACAWIQRR8XbrdUcwHqcpqKtcG3ShZRxf
 aAUCZNf71AIbIgCBCRBcG3ShZRxfaHYgBBkWCgAdFiEEUfF263VHMB6nKairXBt0oWUcX2gFAmTX
 +9QACgkQXBt0oWUcX2jeSwD6AtWn0cuo8IF35YRo4o3cDRJnUfJnbvJyGxyCDThR+zYBAKG6/jdw
 mZkBQZKslnDAbMMd2WfiZZT5JW3IWC4EaKMO7HkBAKYPGZ3UbfkRvfFKS+pQ9CgtNfkSJQBtT1Ob
 7Y6nsacgAQCpyXN7yppmhW/oBgivITPy9Lkg+V4NK9WZYZCU9Q7LBA==
Date: Wed, 26 Nov 2025 21:30:36 +0200
Message-ID: <87a508h9r7.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.0 (/)
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: -1.0 (-)


I very much like the idea but I don't agree with the term. The term
indicates that it has relation to docks, at least not directly.

It's just a newer feature in regular taskbars. KDE for example similarly
to Unity calls it (Smart)Launcher.

The only platform calls it Launcher is macOS I think.

Another thing is: should these features be activated by one mode or
by one for each feature? I.e. similar as there's a mode for menubar and
toolbar.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 27 Nov 2025 05:54:02 +0000
Resent-Message-ID: <handler.79859.B79859.17642227958110 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
Cc: shipmints@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17642227958110
          (code B ref 79859); Thu, 27 Nov 2025 05:54:02 +0000
Received: (at 79859) by debbugs.gnu.org; 27 Nov 2025 05:53:15 +0000
Received: from localhost ([127.0.0.1]:33328 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vOUwM-00026j-NS
	for submit <at> debbugs.gnu.org; Thu, 27 Nov 2025 00:53:15 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:36906)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vOUwJ-00026G-Ec
 for 79859 <at> debbugs.gnu.org; Thu, 27 Nov 2025 00:53:12 -0500
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 1vOUwD-0006mH-Nm; Thu, 27 Nov 2025 00:53:05 -0500
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=QuzNstTU9D5u14JMno75suMe5+2JQy4Zwi12BBXqzuk=; b=ZRH+YkiOO1+IYMCdRUPh
 kB19XJ76jHm9r9NTsaxDPg6aUD6jMWp27YE3+4EafAPzHJ8BLMjSGKS3j8JexTKRY/dnuJJM0oZ0k
 sryVqBWJoTTrY+7rSwiN1KWtiNwQbYH9mAuO2SXxqwKDeyT2vI6aSItto9pAP91Wb+22tB116JWZb
 wKqwsAyW5lykT0IDuwli/UC37aTMWAW7v/m2n8bsROhTmvmKK80/QXwSRZi1/eC72SonDkL27DNHb
 ZXwto+a1ZZByuVn1R1Sb0++OnTr/Bjbu8GQ1B/u3SSzGCIs8NJISDydvEP/NcSjTadFRpM9gEfv9R
 /abe4A96EGHR0g==;
Date: Thu, 27 Nov 2025 07:53:02 +0200
Message-Id: <86pl94auo1.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <87a508h9r7.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <87a508h9r7.fsf@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: 79859 <at> debbugs.gnu.org
> Date: Wed, 26 Nov 2025 21:30:36 +0200
> From:  Björn Bidar via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> 
> 
> I very much like the idea but I don't agree with the term. The term
> indicates that it has relation to docks, at least not directly.
> 
> It's just a newer feature in regular taskbars. KDE for example similarly
> to Unity calls it (Smart)Launcher.
> 
> The only platform calls it Launcher is macOS I think.
> 
> Another thing is: should these features be activated by one mode or
> by one for each feature? I.e. similar as there's a mode for menubar and
> toolbar.

I would be okay with using "taskbar", but isn't that Windows-specific
terminology?  I do see "dock" used on the Internet where the relevant
D-Bus based features are described.  Can you point me to some pages
which describe this as "taskbar" on GNU/Linux systems?

"Smart Launcher" sounds wrong for us to use, because this is not about
launching programs, it's about displaying indications on the part of
the desktop that is used for launching programs.  I'm guessing KDE
uses that term because of the emphasis on that latter functionality,
but it is not relevant for the Emacs features we want to add here.

We could also think about more general terms, like "gui-desktop" or
maybe "gui-screen", in which case we could later add more features
that pertain to various system features which affect how Emacs-related
windows and icons are shown on typical modern GUI terminals.

Thanks.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 27 Nov 2025 10:06:02 +0000
Resent-Message-ID: <handler.79859.B79859.17642379159252 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Eli Zaretskii <eliz@HIDDEN>
Cc: shipmints@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17642379159252
          (code B ref 79859); Thu, 27 Nov 2025 10:06:02 +0000
Received: (at 79859) by debbugs.gnu.org; 27 Nov 2025 10:05:15 +0000
Received: from localhost ([127.0.0.1]:35002 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vOYsF-0002Oz-4Q
	for submit <at> debbugs.gnu.org; Thu, 27 Nov 2025 05:05:15 -0500
Received: from thaodan.de ([2a03:4000:4f:f15::1]:57804)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <bjorn.bidar@HIDDEN>)
 id 1vOYsB-0002LL-MV
 for 79859 <at> debbugs.gnu.org; Thu, 27 Nov 2025 05:05:13 -0500
Received: from odin (dsl-trebng12-b04887-216.dhcp.inet.fi [176.72.135.216])
 by thaodan.de (Postfix) with ESMTPSA id B87F1D00112;
 Thu, 27 Nov 2025 12:05:04 +0200 (EET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=thaodan.de; s=mail;
 t=1764237904; bh=kK+JNa1seEqWHNsSOTXuGKxj+hG0L28yA+KtQysJIrs=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=KQN9MHhrFa7RvIkX6cEDYegkxis5wksfN2gVPHP7+cBiFw/VZietREOc2uYkS4icU
 WyYMDHLT3/hfcpNQHvADNuR1JJ62HMg+kFljOV81VrlRaP+uKPdXAyqI+1DvRf/EST
 80XVvOZzoliiGABbnRLA54W9BXaO7Nr6dn13V2Nzl6thVMHfWKtZDK4M5XR5c3S39K
 R4KeAHO/T1Vazv+vyszl+SSY9mAUR3oJA6/5ZUX5VfA8YolHDHZvuiGmWU/BqlMyzr
 1rqvJFy4r6LBRlkoaqV+hibfCGEFs6Z0BsepClaNusVIPbePBjHhn8NDMMdgPLqosX
 vO+NGwSNyk8/5B2/udAkTbDny7VKZ6HiQ4Z+40DzhHwwJC+tWSU6uBTebwPqiQs8Ym
 Fib6ZsC8if4qJpDQc18c0v13Htw8AVSWypwv2/pL+J7GaUpWeoLbZ60wG7iVJN4vLq
 K2TVs8RyxFfebgSFMKHhMwfwCHeW9eA+Z81koqGz4FoXx2kaLttgv8S9eTv/OGNOsW
 gZYcKsDC4WFw/vsdHRHX409PzaaHOPIQc1+dWVGd4MgFqEYQpufaZiY3x+zza48AvW
 ifVW/Gn5Jst4SFYzHBKiRnlwobS2r9svKqCCSIPV4YCX1CnXgiu7MU14I6iVaXyEpK
 a+hTQekStsjmIp6hX8rYrKSs=
From: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
In-Reply-To: <86pl94auo1.fsf@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <87a508h9r7.fsf@HIDDEN> <86pl94auo1.fsf@HIDDEN>
Autocrypt: addr=bjorn.bidar@HIDDEN; prefer-encrypt=nopreference; keydata=
 mDMEZNfpPhYJKwYBBAHaRw8BAQdACBEmr+0xwIIHZfIDlZmm7sa+lHHSb0g9FZrN6qE6ru60JUJq
 w7ZybiBCaWRhciA8Ympvcm4uYmlkYXJAdGhhb2Rhbi5kZT6IlgQTFgoAPgIbAwULCQgHAgIiAgYV
 CgkICwIEFgIDAQIeBwIXgBYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1/YmAhkBAAoJEFwbdKFl
 HF9oB9cBAJoIIGQKXm4cpap+Flxc/EGnYl0123lcEyzuduqvlDT0AQC3OlFKm/OiqJ8IMTrzJRZ8
 phFssTkSrrFXnM2jm5PYDoiTBBMWCgA7FiEEUfF263VHMB6nKairXBt0oWUcX2gFAmTX6T4CGwMF
 CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQXBt0oWUcX2hbCQEAtru7kvM8hi8zo6z9ux2h
 K+B5xViKuo7Z8K3IXuK5ugwA+wUfKzomzdBPhfxDsqLcEziGRxoyx0Q3ld9aermBUccHtBxCasO2
 cm4gQmlkYXIgPG1lQHRoYW9kYW4uZGU+iJMEExYKADsCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwEC
 HgcCF4AWIQRR8XbrdUcwHqcpqKtcG3ShZRxfaAUCZNf2FQAKCRBcG3ShZRxfaCzSAP4hZ7cSp0YN
 XYpcjHdsySh2MuBhhoPeLGXs+2kSiqBiOwD/TP8AgPEg/R+SI9GI9on7fBJJ0mp2IT8kZ2rhDOjg
 gA6IkwQTFgoAOxYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1+ntAhsDBQsJCAcCAiICBhUKCQgL
 AgQWAgMBAh4HAheAAAoJEFwbdKFlHF9oBgwA/iQHwe0VL4Df4GGTYlNjMSHFlIkBmN4UfYGLYj3E
 TrOUAQC51M+M3cjsL8WHdpBz6VAo6df9d+rVwhQ9vQuFHqevArg4BGTX6T4SCisGAQQBl1UBBQEB
 B0Cbohc3JEfn005/cm0AOGjSsW1ZxAkgaoVNjbpqk4MgNAMBCAeIeAQYFgoAIBYhBFHxdut1RzAe
 pymoq1wbdKFlHF9oBQJk1+k+AhsMAAoJEFwbdKFlHF9ooHABAKGmrGBic/Vys3BBrOQiRB3Z7izO
 HwhqTRpAqFZtXS2nAQDZhp/5aYw1TZjTzkm1KVt9QiYnjd/MvxRE9iaY6x4mDbgzBGTX6T4WCSsG
 AQQB2kcPAQEHQAgRJq/tMcCCB2XyA5WZpu7GvpRx0m9IPRWazeqhOq7uiO8EGBYKACAWIQRR8Xbr
 dUcwHqcpqKtcG3ShZRxfaAUCZNf71AIbIgCBCRBcG3ShZRxfaHYgBBkWCgAdFiEEUfF263VHMB6n
 KairXBt0oWUcX2gFAmTX+9QACgkQXBt0oWUcX2jeSwD6AtWn0cuo8IF35YRo4o3cDRJnUfJnbvJy
 GxyCDThR+zYBAKG6/jdwmZkBQZKslnDAbMMd2WfiZZT5JW3IWC4EaKMO7HkBAKYPGZ3UbfkRvfFK
 S+pQ9CgtNfkSJQBtT1Ob7Y6nsacgAQCpyXN7yppmhW/oBgivITPy9Lkg+V4NK9WZYZCU9Q7LBA==
Date: Thu, 27 Nov 2025 12:05:02 +0200
Message-ID: <87ikev7pv5.fsf@>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
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:  Eli Zaretskii <eliz@HIDDEN> writes: >> Cc: 79859 <at> debbugs.gnu.org
    >> Date: Wed, 26 Nov 2025 21:30:36 +0200 >> From: =?UTF-8?Q?Bj=C3=B6rn?= Bidar via "Bug reports
    for GNU Emacs, >> the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
    >> >> >> I [...] 
 
 Content analysis details:   (1.2 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  1.2 INVALID_MSGID          Message-Id is not valid, according to RFC 2822
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 (/)

Eli Zaretskii <eliz@HIDDEN> writes:

>> Cc: 79859 <at> debbugs.gnu.org
>> Date: Wed, 26 Nov 2025 21:30:36 +0200
>> From:  Bj=C3=B6rn Bidar via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>>=20
>>=20
>> I very much like the idea but I don't agree with the term. The term
>> indicates that it has relation to docks, at least not directly.
>>=20
>> It's just a newer feature in regular taskbars. KDE for example similarly
>> to Unity calls it (Smart)Launcher.
>>=20
>> The only platform calls it Launcher is macOS I think.
>>=20
>> Another thing is: should these features be activated by one mode or
>> by one for each feature? I.e. similar as there's a mode for menubar and
>> toolbar.
>
> I would be okay with using "taskbar", but isn't that Windows-specific
> terminology?  I do see "dock" used on the Internet where the relevant
> D-Bus based features are described.  Can you point me to some pages
> which describe this as "taskbar" on GNU/Linux systems?

KDE uses the term taskbar or panel for the thing the widget/plasmoid is
on:
https://docs.kde.org/stable5/en/plasma-desktop/plasma-desktop/panel.html#pa=
nel-taskbar

The manual is for Plasma5 (the last manual published) but the
terminology is still current.

GNOME doesn't use a taskbar anymore.
In XFCE it's called Tasklist or Window Buttons:
https://docs.xfce.org/xfce/xfce4-panel/tasklist

This Wikipedia article on the term explains it/summarizes:
https://en.wikipedia.org/wiki/Taskbar
Tldr: the term is widely used outside of Windows, they established
it but has been adapted.

> "Smart Launcher" sounds wrong for us to use, because this is not about
> launching programs, it's about displaying indications on the part of
> the desktop that is used for launching programs.  I'm guessing KDE
> uses that term because of the emphasis on that latter functionality,
> but it is not relevant for the Emacs features we want to add here.

The information is tied to application launcher/taskbar entry (for some
taskbar such as KDE or Unity they can be the same. As you pin the
application similar as in Window which then uses one entry for the
shortcut to launch the application and as well the entry of the running
application. Which is why smart "launcher" makes sense.

The progress report is tied to the launcher in this case, the other
option for a progress report is tied to the notification reporting on
the action. For example if a user copies files in a a file manager,
this requires asynchronous operation thou, e.g. in case of Emacs
dired-async since you need to be able to do the action and report on it
at the same time.


> We could also think about more general terms, like "gui-desktop" or
> maybe "gui-screen", in which case we could later add more features
> that pertain to various system features which affect how Emacs-related
> windows and icons are shown on typical modern GUI terminals.

All of these are tied to the launcher, gui screen or desktop doesn't
make sense,  this would only increase ambiguity . I think I know
what you mean with GUI terminals but where is this lingo used? I haven't
seen the word used anywhere, searching for it results in graphical
terminal emulators.

> Thanks.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 27 Nov 2025 11:37:02 +0000
Resent-Message-ID: <handler.79859.B79859.176424341432353 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
Cc: shipmints@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176424341432353
          (code B ref 79859); Thu, 27 Nov 2025 11:37:02 +0000
Received: (at 79859) by debbugs.gnu.org; 27 Nov 2025 11:36:54 +0000
Received: from localhost ([127.0.0.1]:35658 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vOaIw-0008Pl-3H
	for submit <at> debbugs.gnu.org; Thu, 27 Nov 2025 06:36:54 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:43936)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vOaIt-0008PQ-Iq
 for 79859 <at> debbugs.gnu.org; Thu, 27 Nov 2025 06:36:52 -0500
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 1vOaIn-0002G0-Aq; Thu, 27 Nov 2025 06:36:45 -0500
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=JscUS58CUOZ3An4qZ4DA0eGTjKD8JhLFNlkgz7Hyj3w=; b=OvDM0pPlsVXJTCyNGqGk
 Wra0jOiqFel47/Y8Z6b8nrHj0y0+BwP+hb+IHs/RY1ybajZISmq3Sn/Fo17GOCf+a6ifnP9uOOhYs
 ZJB7pzoGH6LVsK0Cipb5ynlNyVKBDHZq+tvwPU48mBk+WQuYhD+woARSpAxaz/fiwAlw50E6Vy3vG
 SN0frKJsYvdA1tqrbFxNYvNzvVYmLg/Ulm+z62bLi9SuU21R/z8b0YTejd6t0Tk0Au7FV4EfPfJNE
 R/MUCtOeo8o5sr/8yx4FVat2OqmKoC/OtlOqeRCrJZ1LrQKzwaFZBrzTfp78PHH85vAYtVkklQB/c
 GeXZwBRNdG0W/w==;
Date: Thu, 27 Nov 2025 13:36:43 +0200
Message-Id: <865xavbtbo.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <87ikev7pv5.fsf@> (message from =?UTF-8?Q?Bj=C3=B6rn?= Bidar on
 Thu, 27 Nov 2025 12:05:02 +0200)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <87a508h9r7.fsf@HIDDEN> <86pl94auo1.fsf@HIDDEN> <87ikev7pv5.fsf@>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Björn Bidar <bjorn.bidar@HIDDEN>
> Cc: shipmints@HIDDEN,  79859 <at> debbugs.gnu.org
> Date: Thu, 27 Nov 2025 12:05:02 +0200
> 
> Eli Zaretskii <eliz@HIDDEN> writes:
> 
> >> Cc: 79859 <at> debbugs.gnu.org
> >> Date: Wed, 26 Nov 2025 21:30:36 +0200
> >> From:  Björn Bidar via "Bug reports for GNU Emacs,
> >>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> >> 
> >> 
> >> I very much like the idea but I don't agree with the term. The term
> >> indicates that it has relation to docks, at least not directly.
> >> 
> >> It's just a newer feature in regular taskbars. KDE for example similarly
> >> to Unity calls it (Smart)Launcher.
> >> 
> >> The only platform calls it Launcher is macOS I think.
> >> 
> >> Another thing is: should these features be activated by one mode or
> >> by one for each feature? I.e. similar as there's a mode for menubar and
> >> toolbar.
> >
> > I would be okay with using "taskbar", but isn't that Windows-specific
> > terminology?  I do see "dock" used on the Internet where the relevant
> > D-Bus based features are described.  Can you point me to some pages
> > which describe this as "taskbar" on GNU/Linux systems?
> 
> KDE uses the term taskbar or panel for the thing the widget/plasmoid is
> on:
> https://docs.kde.org/stable5/en/plasma-desktop/plasma-desktop/panel.html#panel-taskbar
> 
> The manual is for Plasma5 (the last manual published) but the
> terminology is still current.
> 
> GNOME doesn't use a taskbar anymore.
> In XFCE it's called Tasklist or Window Buttons:
> https://docs.xfce.org/xfce/xfce4-panel/tasklist
> 
> This Wikipedia article on the term explains it/summarizes:
> https://en.wikipedia.org/wiki/Taskbar
> Tldr: the term is widely used outside of Windows, they established
> it but has been adapted.

Thanks.  If this terminology is used widely enough, I think taskbar is
indeed the best name to use.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Michael Albinus <michael.albinus@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 27 Nov 2025 17:49:01 +0000
Resent-Message-ID: <handler.79859.B79859.17642656869912 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17642656869912
          (code B ref 79859); Thu, 27 Nov 2025 17:49:01 +0000
Received: (at 79859) by debbugs.gnu.org; 27 Nov 2025 17:48:06 +0000
Received: from localhost ([127.0.0.1]:37467 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vOg69-0002Zl-VF
	for submit <at> debbugs.gnu.org; Thu, 27 Nov 2025 12:48:06 -0500
Received: from mout.gmx.net ([212.227.15.15]:38375)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>)
 id 1vOg66-0002Ye-WC
 for 79859 <at> debbugs.gnu.org; Thu, 27 Nov 2025 12:48:04 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1764265675; x=1764870475; i=michael.albinus@HIDDEN;
 bh=GxKR3HZB+bvqr+wbxUajP20BYmm0X+wF8d7C9e6/9TU=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:cc:
 content-transfer-encoding:content-type:date:from:message-id:
 mime-version:reply-to:subject:to;
 b=d4cfN+isnf+s2/ujzCXolCtBpRlCAJAwK8gv6ssAoTIuEKwpVGjiURHQbyY222Co
 gKzeMQqFrcLCkFBxr1EKar70JnMxMp9+eWod63PLr717s6vY2oGifgLQOa2U/HO+D
 bcGyWwltKK3v1UknpAOMjU9dhmkimO4XnArbgFdbej8ypl6eMNANx7Ba1yvDz4lO2
 JB/j/TBgc6NrIutA/lGOU7TsU77kc5momGXMpRW8Eb27+PLhKo8mXcBY9Ro0Z2/2x
 Z+2njBDFCVGb+z649YA9pBI9TcSb4WK1A+2y3e8aaoGi1cLQOxLCY45x5q+tn/As1
 BkDf9j1Eg2hw/jsdhw==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.37.61]) by mail.gmx.net (mrgmx005
 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mj8mV-1w3WhC20RR-00h07j; Thu, 27
 Nov 2025 18:47:55 +0100
From: Michael Albinus <michael.albinus@HIDDEN>
In-Reply-To: <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
Date: Thu, 27 Nov 2025 18:47:54 +0100
Message-ID: <87pl932wqd.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Provags-ID: V03:K1:cAwCiHjMVVhY+INYQARdJZ+J3t0h0StRw72dwXptX2ue/QbETNr
 /tQq6vDI0ZC7kR2PbXX18CBPjtMDOT7kqFD8bt9uYjrc+hr2csy2OmQC6WI9PL49RGfEvUT
 pnOGeANY2ypDa/w5ReHXMwV9bMCTeqMCSoOchzL+9bKT9S29x3ZL2MJZDIlZxUXfDlticau
 5Ij/uNWjvNG+03gk2JRqg==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:aIbESOhaeeY=;WZB511xC57HDUNrwmYN1+i20v2I
 2LJ1oiPQ0aC77e2vW/YNIVGPmf8ylPlkMDe7iiDaocxFDlwF4CDrfFen1oc61jkwuZKGlEiuk
 5SUxqMDn2NCD/EITiTbrBlVnooluxHVTuBovLFg02qRIrdSwwMK3zNGKiIZcCdn4xsqUWu163
 DP/PaBS1e+QCkrVLr1ukod2HOrdisSy4ekZceBWcPp8+p0Iwly86w2S+TdeuCTdoMT2QC0z95
 wF5uyk/60i0HdC5EkF3muLWsOvVxcREDakMAFsOe3v2TOizuYWuXRtwYguMYJEjVAxm0XVzZP
 ArLAzAUJbuAY09g1W14HI/IWhT9BN0uvniMmW0bY/CM8xtEXcDuPVdSyqEdr/6dwNcZJziBld
 iAa3hxQRka16QYDnkLdn1ROEjaIasmmyPbSELh1XPIubnMq6NMGwZ6I7j4mU21OS6TaYQhsFn
 GglkOGUJ+9vEuRXwi4Ul6v7kIU1QSpfZy/coezvXcMcmFi9HOSIWyA4e1uBuf9acXN7kbE5dg
 rFNfW7Zzgck1D/djQ6mFrtB/X41tc4qYJ9+SyNAghiRz9LliTLSu/sMFR9+nbw8+UCn4Pm8f5
 Yp4/pazNX4xHV8BpkZ4WSZneP61YFWW5Pvkwyil5Yim8WB1viErJ3LNPeZetwMwxxfkhk38vs
 8unhLxzXrlN7xhkNVUl7v0r5BpMpaB7+DW63z9mJWBOCsuGE8a4926fUypxa+xcHnW4wqI6v6
 ewfPeKLQYLZAgn8qfr5+YbrUFmZFvG73MnwDqSlq5oxL2JlvC1nuV6kvP5LxxCPc/17B0cFx2
 bLSlMLD6JxueDO1J3GF9GaMVMIpf2k4H9cto84SiPS8jRispUPPgfPfY0oh6a7XHzTj8xnJ+T
 Pv+fv/2+AC1zfKyWBWWrifvYmJczGe81cApvqH+FEE3MmlJ70QNM6H9w47qI19l5CpshRmzbe
 Qy6SyWQEmrT1j9D2rLAfiLBMcGs6VikU3lq37A/arGJpqiqBpXQIP1/3WAC/qZqfVwOhiMuDv
 86gMLTQ6xhsmmo1pCYR/gkWXOxEtLXsX8PEDOLW6CdEEWoI7jYkhfldoc5pa+TsRp9xfpRgef
 0B5WUdgKKN4Sp/aziE8sBSKI3IISc7LxyQJdHhWMOpW0rMb67nd06dmMGQKfrdkHuyvzCAzbA
 /zU5TrxYQDWCPejSDnTiXwiyhpfgJwi6AHWcqKZg5brPilPNFQG3MegA8P23QlijrmZzWJ795
 g/qSkjW7+AEJcX0YmKUoM417oX4Ttf/xjn4WHSashl48yRjdzuKVenHygDH0IX1g/a/eqNF26
 A4ZUEiAtsWt1nTKyGhZVqKcF6p0VLsDG55+w34A5ZEEDzD9X8NxJg1yM2yzbHVFT1Fy2MrXIr
 Q8eTleNVvJJgI6qRLnQjuOWMuJa7zdjeGYWbg2vUTtc7UDYTH9ceqCVWzsbg+QUVrYRLivwVq
 KLhuyJdPpFuyinRLI7jXusiNqY6WRCggaQbqkWiHnuqhZXrvAl/5NaPaV3qScH6sBOTeJkAVF
 6z3jpIgeSZo8XXR20yj3zzCeC5TrnYa1bap1t0aSSOKZ14VUzfS3ott7KBubzpphuLdIIt1o9
 Y9r4HXRDvihaMbHgeD7NFs+Fg9XZMqYZ7GWMlnUVho12KYk8vpZgqy/O/G9E5an0xERYrqGKT
 vSEgfNSefjPqrOKKyz3KqgCjkNllxxvxqyx2zjFMT1zXkEPVB9Tbrq+NtcGMv7YC62AHfwHNf
 /J/acYXLtwybQpBl9z1/7jT/Q4HWJyQREcOku414jnthgYuZ0x3jaX/Yf6lW3/zJNa8mfusis
 upxxVWsy67XRngJKi/nlroIjLNKIgOel7RoeY1rWj1xf63S8jxQS3XwghthstLMqzMwY9KjHC
 JkUww1bTTErTEKFeUaDaY/SIyxFIyOVriYAvvoFwspPIbS5NKxc5WHJ3DpvrcwhR4PvfmHz3D
 JT8osGMCYvu+zuMgsZIFiOWhOqBU7VDWknuJwdcCleulia1TKM9Q9roU297ckh6wr6ENNW9aD
 /TtTVxbdWeYwyBtlO3jzHlW0qap50l/a51Lt5aGmz0intFfEUELSbU6JUC/nDvizNSD6CISFo
 jn2fMMcqGsMBFUKg5gj2S+zxuap/7cItv55Y/+16rQHXeuhvlT9PZ96hoCvMireHp07iChol4
 19b+FohpgK/pUHCmvmzlMNVzyTqGeYTv6bC0NW+m+reGwlB7G0XlZ7aFFoJ89xLgyO76dIhiU
 8y9HC+vXwIwfmWxWH/3caIytvk9xCd30Vsa0vA8zWdEsSp9s6queziY/CGtlEss1XprBNnN4B
 IJayMGsw82Amq47koTqxkxKeR5csBPbbQTpboFtzbnypNwy6bJqIqqiFyBEQSTuYjde0+COpB
 lcnExQbnQEnHWaJ7hijeaWMP6vd8BGf/DyT61oir6bBtnPBuO2BYwhlwvZWBmhYaNYspOuz2C
 z2vLexURpGhj0RW4V4QeN+otINJYyFuNJvTQKjmQ1GzZZbs8b0qjVHfuA1geJBbzWXD98JFfr
 gthZgEAXJVk3RQXFAFMA/u+53V9k8Rlax3QcSrnElLnrxVdCBdNmJxr0C+SQRCeM3d6SRMUW2
 nAlTYb0EWCK059hf1+yGuWevHXwZHlVru7wDpwEvzewireVB6ohxcL32zTOcgRGeXpPnd8x8z
 vOqP2QLkDtuVh/kBbThqxbWOr1+Txhz29osEhAbiR2rLRbAbHTqbTLcjHoz+O9drMFkEQAIkd
 G0UbLh/7oH3XcEKgaCPuG60G0goejMFoxexQ8bOUVdGif8bRdqjrmBbEv+59CjuePR/hXfSOD
 yBSCf2wtezxhCJmK0nlQDA6dkwUq8cbWj9N0otypmfZhz+9pSYYMNl6kb57lnTWUycAtC0Bus
 XDnCxADrRWuPpHQ3IFNOWsPAPCsMB/qYJa2Syx2AkGCdg4snEa5U2+t6kT1ziUn/YeARqyLYs
 Y78NerUv1J8vI5OmzSq1ndR3PDCfaA0ozh+4iUz+vp3GNRmXK7FJD1+5ML7xgnclzIw4aZWY6
 07Q57qrF80ic53I6rL8tQQG7jXqq2/4YOL5KV+geQdHTM0Ed8sD+ZP75OZJyh1pC1JakLakAm
 PK3CjnVA0kIsbzzsGbAj+0LCLvDO/elDUSXqz4+NNvDBt52ppW2i4BoxG7ElygKc3c30BmklY
 fdHX3E2+liQVHyyBbVksI+Dq/I36C3Os/VcUnOnpdmCpUQBLABGa/ZfTKfCdt0+3t/Z51BTSJ
 71ei7I9pIMDQFf0T7J4AQ0gyEHUqE0RaQuYQEFEB6Y+mRHdmApNnsHC8bKqFgcTQijKsydJPe
 o8gtcnJQGx54vijp865RIX79pm3EJPB9TtHyUflKrfUFlXpSJqOpsI4gmaDNZPmwZHnAT58Z8
 zsjdIt+TM3GcQym7oBKLEpjPJbb40o2YC0BzT+nOsEfMUOiIaB31X70XxRiu2sP1v005L3wmU
 0P0dg0qBa/SKoBIUXWE9SVKurGxq8Bx4uxtNxfo+8WDqlpPLI8o0Y4V4Vzppg6Ff4ldlRMT12
 smIRrch9X8K0lGblY/+6bPnw5Ovb0pq+IfRl2Xqh7XL+7iafLAtmxUdO5Zh5UmRxrvmVjwdI0
 nc2WOcKnRsrUYDAmrQnPz+uvdYn7xAB7Pp+XCRNaFdRVfAZ66oXurFvzIRN8dNP5H3YbWkOK7
 ssHrliq2uX/fxv1W93+CzdBkoiL2YS9oHfnkg6yFIgnBA9csU5MZH1axjYdRPCaLik48pP7xR
 6dgeoNxQDDCnXnpAdt+tpiXNosOPChANyy+6WHRljUFGy9anpM+sMNDqqruQ57Q1OteEJBzRD
 GxsS+LXFR+2LIjro4x2XGv9/ZvLTl6W4fFB+chEQlTJtR3I+yRxov9Ad5fJcSuLCAJTtEQ7+Q
 fs8/1ifR5U2gU9v1Gwc8wl1PE+Q1tPRDuNpn8HS415/VTHMhgm4lcW8zWb2RM5cFB6mL6J2ID
 3P3mYzGEI16+YIY4KoJHyBARKxR7PZLuWYem3T2P5oYMY0Mp7oNMUS6tYPmY/aRU4PhUsn13w
 vztF6F8faN37n1J+VmJb4NXcJFsKyiccis0bEtYN8OD09IJfvFQkjIVgIKPUGdMaUanMkqx0K
 KbA7BDW8N/wfFuxJ7YUCxTYrTQmsGe2vnwfoTDJO869bFSyRqyx0jo+if+Nq14r0FSec1zZzn
 iF/WuGYxfi9QcdLC4jrdccZiV3O1UI+INKkN27rqYH7lTKFWKR6tJVcAPtzQSLIrpgnVEpNAa
 kFWDWbzVwvjYdGzN3nB6dSpom+m2fyRd9ykmxomGuXrZrbieJ9mQyAuAVsm9DwOwvi9xOMxWy
 n571JHNvJsHKmOQ416zz4taLEb0Ao7S3F51dOATzh4f2S+wSiSZUCfeWYUTwAsV7kEc/Cb2+h
 XNocsZ0y7FMwUm+9w5ImtqlJqXQMfsCzYoJXYr/9keMlGjSTiy4TZ3O1H73HjqCTmaZIHSY6Q
 ZPC2ScbFNVoOjB4B+sUP9AeFleMH2Jv5HX1mXgD5Sl7I440r1gyTml8a4hQsuS3amymyXcBA8
 OdgnMlYn8I+0paIO3wqsbtOnqCAejywUSCdh9W4mhzuhU+/H66HTpZNH/7yYqk8ho44Cuuvxs
 aYMN0Bze1ICpnxU4/uGIPuvrPuTmnRWE2Zi72P6jKUFgts5bVNYrpPdoJ2n2C0Kp9b12q9u9j
 ASJ1c6mlS4K8hls+AoSdY9Mym5DPM8nlfysHqUwq5oY97sewzoS52YOfY6Ks26nibIY1gPB0H
 HDGxgNfRqXI8BfxNDb7QGFMGNKwlPFdcNGtQUzE0iSjW8R9+Bs3ggQw4O6mM+8wLNB8ctmGzP
 t3iImgEgKIyTYmsqU02hyV9iiO3b1OxnTtfdvLjtsHF5ITY6TBQSOMK2+d4g48YrrMn5kj4vf
 onbddBNPQeHn1M8Bnp5eL/iVDUO1V65oCwnn0uBOGuyoqLAqRVEQY/VmirmNkRCJTDnh6wWj6
 AzPrc+mQr6uTiq0skq4qhnckJ4aWClODBrk5YGUPbWHpgnw9COpKFrzW9iiDQX41Xushmc32X
 Edz6+2qg6y/KzjC7cZcdcQxfaZA8IqBxcuHhMTHabr+d9y2VcGyB5vgm+Pcym0wdcQAMMbYZ0
 dzc8CYwKIWDcgU4+y4qXiCe6HRSF2S1GDHVuvAPkRIciZdoLxk/8Ho4wL6c+U7oRN3h7hBt2B
 SjN+9Ggw8V4KoIu+/ZgpvGyN8fMiNKPeYHSkt0FOeQPq1KG1pipnk6POd8ECI8R2veAkb+tQ=
X-Spam-Score: -0.7 (/)
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: -1.7 (-)

St=C3=A9phane Marks <shipmints@HIDDEN> writes:

Hi St=C3=A9phane,

> Thank you for reviewing the patch and your thoughtful feedback.  I'll
> incorporate more feedback after you get it compiled and you give it a
> try, and perhaps other people, too.  My Windows 11 virtual machine is
> less than a real-world Windows set up, though sufficient for
> developing this feature.
>
> I've attached a patch rebased on master
> 2cc6c812788281c05ca9687afd7bedf597b1e942 which also incorporates your
> feedback.

I gave it a try on my laptop (Fedora 43 + gnome-shell-extension-dash-to-doc=
k).
First impressions:

- After calling 'M-x dock-mode', I get an error

--8<---------------cut here---------------start------------->8---
dock--set-back-end: Symbol=E2=80=99s function definition is void: dbus-list=
-activatable-names
--8<---------------cut here---------------end--------------->8---

  I guess a require is missing.

- The examples in the "(dock-mode) Dock Usage Examples" node are working
  except (dock-badge "Test"). I guess it is a restriction for the D-Bus
  backend. It would be great if the documentation says which
  functionality is implemented by which backend. Maybe I missed this?

Comments, mainly from Eli are already give. Since I agree with them, I
will comment on the code only if there are further remarks by me.

> From 86a1577ff8290291020b10294f65352773b69db3 Mon Sep 17 00:00:00 2001
> From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> Date: Thu, 20 Nov 2025 12:54:40 -0500
> Subject: [PATCH] Add system GUI dock integration.

> --- a/doc/misc/Makefile.in
> +++ b/doc/misc/Makefile.in
> @@ -68,6 +68,7 @@ DOCMISC_W32 =3D
>=20=20
>  ## Info files to build and install on all platforms.
>  INFO_COMMON =3D auth autotype bovine calc ccmode cl dbus dired-x		\
> +	dock-mode							\
>  	ebrowse ede ediff edt efaq eglot eieio emacs-gnutls		\
>  	emacs-mime epa erc ert eshell eudc eww flymake forms gnus	\
>  	htmlfontify idlwave ido info.info mairix-el message mh-e	\

It shouldn't be a line of its own.

> --- /dev/null
> +++ b/doc/misc/dock-mode.texi

As Eli said, it shouldn't be a manual under doc/misc. Everything what's
said about calling 'dock-mode' and its user options fits into the
Emacs manual.

The more technical details, function interfaces, belong to the Elisp
manual. We have there a node "(elisp) Desktop Notifications". dock-mode
is a comparable feature, I would call it "Taskbar Notifications". So the
information shall  go there, directly after desktop notificatios.

> +Your GNU/Linux Emacs instance should be launched via an appropriate
> +shell "desktop" file such as those distributed with Emacs; e.g.,
> +"etc/emacsclient.desktop".

"etc/emacsclient.desktop" is internal to Emacsd; it isn't taken into
account by the GUI dock. So we shall speak about it more general.

> +@node User Options
> +@chapter User Options
> +
> +@defvar dock-clear-attention-on-frame-focus

Use @defopt.

> +The variable @code{dock-clear-attention-on-frame-focus} can be

The user option ...

> +@defvar dock-dbus-desktop-file-name
> +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux

Dito.

> +@defvar dock-dbus-timeout-ms
> +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus

Dito.

I wouldn't use a trailing '-ms'. This is a technical detail, which isn't
used anywhere else in the D-Bus object names.

> +systems, and can be customized to specify the number of milliseconds
> +Emacs will wait for D-Bus responses before timing out and considering
> +messages undeliverable.  It defaults to 25000 milliseconds, which is the
> +recommended default by the D-Bus package, which see, @pxref{Top,,, dbus,
> +D-Bus integration in Emacs}.

I wouldn't set the default to 25000, but to nil. This means "use the
D-Bus default", which is 25000 indeed. But we don't need to mirror it.

> +@node Function Reference
> +@chapter Function Reference
> +
> +@findex dock-mode
> +@defun dock-mode

As said by Eli, don't use @findex. And use "@deffn Command" in order to
show, that it is a command.

> diff --git a/etc/NEWS b/etc/NEWS
> index fdb1ee02819..f5252cc5bf9 100644
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -2772,6 +2772,16 @@ determined by the new user option 'pulse-face-dura=
tion'.
>=20=20
>  ** Miscellaneous
>=20=20
> ++++
> +*** New feature 'dock-mode'.

This belongs to "* New Modes and Packages in Emacs 31.1". It should be
headed by "** Dock mode".

> +This package integrates Emacs with system GUI "docks" to display a dock
> +icon badge, progress indicator, and attention alerts.  Implementations
> +are available for D-Bus platforms (e.g., KDE and GNOME), macOS/GNUstep,
> +and MS-Windows.  On GNU/Linux systems, shell extensions such as
> +"dash-to-dock" may be required.  See
> +<https://extensions.gnome.org/extension/307/dash-to-dock/> and
> +<https://wiki.ubuntu.com/Unity/LauncherAPI>.

There shall be two subheadings. This one, and another one introducing
'dock-mode' and the user options (for the users). And perhaps a third
one, speaking about the other functions.

> --- /dev/null
> +++ b/lisp/dock-mode.el
> @@ -0,0 +1,455 @@
 +
> +;;; Commentary:

I'm missing the description of 'dock-mode' for enabling/disabling of the
feature.

> +(defcustom dock-dbus-timeout-ms 25000
> +  "Number of milliseconds to wait for D-Bus responses.
> +The default value mirrors the `dbus` default."
> +  :type 'natnum
> +  :version "31.1")

As said, I would call it dock-dbus-timeout. And give it

--8<---------------cut here---------------start------------->8---
:type '(choice (constant :tag "Default" nil) natnum)
--8<---------------cut here---------------end--------------->8---

> -St=C3=A9phane

Best regards, Michael.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Tue, 09 Dec 2025 16:12:02 +0000
Resent-Message-ID: <handler.79859.B79859.176529669815392 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176529669815392
          (code B ref 79859); Tue, 09 Dec 2025 16:12:02 +0000
Received: (at 79859) by debbugs.gnu.org; 9 Dec 2025 16:11:38 +0000
Received: from localhost ([127.0.0.1]:55031 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vT0JO-00040C-Ni
	for submit <at> debbugs.gnu.org; Tue, 09 Dec 2025 11:11:38 -0500
Received: from mail-vs1-xe31.google.com ([2607:f8b0:4864:20::e31]:57455)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vT0JL-0003zv-Ue
 for 79859 <at> debbugs.gnu.org; Tue, 09 Dec 2025 11:11:36 -0500
Received: by mail-vs1-xe31.google.com with SMTP id
 ada2fe7eead31-5dbdb139b5bso4988087137.2
 for <79859 <at> debbugs.gnu.org>; Tue, 09 Dec 2025 08:11:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765296690; x=1765901490; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=r9SjHILi7UiX+vyS163Im0AR1/Dxd2mBqMHU64zrtM8=;
 b=aJlFDdyA7K9YopLFmLV+xDk5Sap4hZ0xYbg4fgvHU1H/Cz+oZv3i8tfmbzoBJ1/rre
 ptxBaoUDTCtx6/TgVC3/lQmf3W+YaWpdwa1Cbxm0PVVO8MiMo3yoRxhZm3lGo5M5SfrI
 Mc3pEphEdZWA5vHOIPjRjwdTzdH9dXQYb4I+wR5HNOGCDWPmyUVZ+Ag2TLLSYDcG+ikI
 36oov2sSTmiAd2LUl41UYL8VSJO4nlLi8LhtGfATCtzF0VUxTAusCGqeX7+QwioMwZSv
 XscSUi7DrQmqfGWI+kjxvGYthDGQK1yLY2T4c7ZFAsyJ0UFCrhEjph+KBZb1JKdFbcIf
 hStg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765296690; x=1765901490;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=r9SjHILi7UiX+vyS163Im0AR1/Dxd2mBqMHU64zrtM8=;
 b=hhUTQ6ov61cTe4ejaGJ2BUBhuBiGwrb2bGgkSmRUEJN9yMR/7rY6GhahuThYa9jaNx
 3Ewk+crVAsOeFzL7DNv3/Ru4BLP2NhwSHxg+OWr260jZXngDeVVXZA/HqNlsYykPyDRP
 uwni5xmu8YAvsJtu/TVR4Yn6fQl+0ILMkp9yaj/SrdiXFFNVlmK8rqRF7954U5VGW4MJ
 myFynklsrTSQaDm72JUXCFIZO9TsxhyyboJhXqMYfIw6UCyTqICMXHAVSwVRiFFrycq9
 kBRx+3y9eI+HarvLxO8mSrp6yBDThQ3B5V3sGEZ4QK49YNdartGvT5znhNl51qNYnGCE
 QuLg==
X-Forwarded-Encrypted: i=1;
 AJvYcCWJCZmUOiOCWzsTaG0yz/87SICmBViB9m67oO02vmLv+mU5XTO5UrprB5chd7JD691fGdRKbw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yy+jx+NfFnDI1zHPTUphjRsbxloG1zxXNwuJJJ4Z6K4MiIDrSF9
 ciwIEg0DwxJpqc1l2FxcwnDdmVDgiSV5N4doIxrv6nyo+3ttfB//OukUVqCnJMao/QVIU+FWGwx
 g63wm+CALpoxc3iL54w0vvyXw5suZgfm3ToH5
X-Gm-Gg: ASbGncunMmubpu6SqcAXANeH6wgXmdfjA8l/roubW+SONT1HAyEYE2wk3XIZ9PnnavV
 nePxMaLLuJgkD3Df2OfJz4gZ5YCvDcwsTaUfbVD0k1YRRF4Ot+xheyfY7owe4XrV7bB1MGUephM
 jxARwFBnXBlSJLvobJcbVWBj6dRuDocuTWnwp6FfKHuJJKiR4DAN+0ZvZKliWCStwHY4JapJwNh
 YJ72dj+6M3wyh+FBnCvz60waWdi+VzbwmF6h/2zIatdgRqKoUjnoRMkRR1JYimHgXw4ZyY=
X-Google-Smtp-Source: AGHT+IHHBmCemzkenD4hdVuQ7drJGFofQ7mSyz0cRuLwmlUcskaSFuWl9hLZktMhXZR5GnrYZuVqTNaAPvKcF3IUtpU=
X-Received: by 2002:a05:6102:1613:b0:5db:f15a:5394 with SMTP id
 ada2fe7eead31-5e52c99b8f3mr4180512137.2.1765296686726; Tue, 09 Dec 2025
 08:11:26 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
In-Reply-To: <87pl932wqd.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Tue, 9 Dec 2025 11:11:14 -0500
X-Gm-Features: AQt7F2pSrzhI5Qv3nmjsDjL4oYT_Ml3NJK7nX8wFKzILdAHdhnvbWUQ-DQtGVuw
Message-ID: <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000ef978c0645872975"
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>

--000000000000ef978c0645872975
Content-Type: multipart/alternative; boundary="000000000000ef978b0645872973"

--000000000000ef978b0645872973
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Nov 27, 2025 at 12:47=E2=80=AFPM Michael Albinus <michael.albinus@g=
mx.de>
wrote:

> St=C3=A9phane Marks <shipmints@HIDDEN> writes:
>
> Hi St=C3=A9phane,
>
> > Thank you for reviewing the patch and your thoughtful feedback.  I'll
> > incorporate more feedback after you get it compiled and you give it a
> > try, and perhaps other people, too.  My Windows 11 virtual machine is
> > less than a real-world Windows set up, though sufficient for
> > developing this feature.
> >
> > I've attached a patch rebased on master
> > 2cc6c812788281c05ca9687afd7bedf597b1e942 which also incorporates your
> > feedback.
>
> I gave it a try on my laptop (Fedora 43 +
> gnome-shell-extension-dash-to-dock).
> First impressions:
>
> - After calling 'M-x dock-mode', I get an error
>
> --8<---------------cut here---------------start------------->8---
> dock--set-back-end: Symbol=E2=80=99s function definition is void:
> dbus-list-activatable-names
> --8<---------------cut here---------------end--------------->8---
>
>   I guess a require is missing.
>
> - The examples in the "(dock-mode) Dock Usage Examples" node are working
>   except (dock-badge "Test"). I guess it is a restriction for the D-Bus
>   backend. It would be great if the documentation says which
>   functionality is implemented by which backend. Maybe I missed this?
>
> Comments, mainly from Eli are already give. Since I agree with them, I
> will comment on the code only if there are further remarks by me.
>
> > From 86a1577ff8290291020b10294f65352773b69db3 Mon Sep 17 00:00:00 2001
> > From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN>
> > Date: Thu, 20 Nov 2025 12:54:40 -0500
> > Subject: [PATCH] Add system GUI dock integration.
>
> > --- a/doc/misc/Makefile.in
> > +++ b/doc/misc/Makefile.in
> > @@ -68,6 +68,7 @@ DOCMISC_W32 =3D
> >
> >  ## Info files to build and install on all platforms.
> >  INFO_COMMON =3D auth autotype bovine calc ccmode cl dbus dired-x
>      \
> > +     dock-mode                                                       \
> >       ebrowse ede ediff edt efaq eglot eieio emacs-gnutls             \
> >       emacs-mime epa erc ert eshell eudc eww flymake forms gnus       \
> >       htmlfontify idlwave ido info.info mairix-el message mh-e        \
>
> It shouldn't be a line of its own.
>
> > --- /dev/null
> > +++ b/doc/misc/dock-mode.texi
>
> As Eli said, it shouldn't be a manual under doc/misc. Everything what's
> said about calling 'dock-mode' and its user options fits into the
> Emacs manual.
>
> The more technical details, function interfaces, belong to the Elisp
> manual. We have there a node "(elisp) Desktop Notifications". dock-mode
> is a comparable feature, I would call it "Taskbar Notifications". So the
> information shall  go there, directly after desktop notificatios.
>
> > +Your GNU/Linux Emacs instance should be launched via an appropriate
> > +shell "desktop" file such as those distributed with Emacs; e.g.,
> > +"etc/emacsclient.desktop".
>
> "etc/emacsclient.desktop" is internal to Emacsd; it isn't taken into
> account by the GUI dock. So we shall speak about it more general.
>
> > +@node User Options
> > +@chapter User Options
> > +
> > +@defvar dock-clear-attention-on-frame-focus
>
> Use @defopt.
>
> > +The variable @code{dock-clear-attention-on-frame-focus} can be
>
> The user option ...
>
> > +@defvar dock-dbus-desktop-file-name
> > +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux
>
> Dito.
>
> > +@defvar dock-dbus-timeout-ms
> > +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus
>
> Dito.
>
> I wouldn't use a trailing '-ms'. This is a technical detail, which isn't
> used anywhere else in the D-Bus object names.
>
> > +systems, and can be customized to specify the number of milliseconds
> > +Emacs will wait for D-Bus responses before timing out and considering
> > +messages undeliverable.  It defaults to 25000 milliseconds, which is t=
he
> > +recommended default by the D-Bus package, which see, @pxref{Top,,, dbu=
s,
> > +D-Bus integration in Emacs}.
>
> I wouldn't set the default to 25000, but to nil. This means "use the
> D-Bus default", which is 25000 indeed. But we don't need to mirror it.
>
> > +@node Function Reference
> > +@chapter Function Reference
> > +
> > +@findex dock-mode
> > +@defun dock-mode
>
> As said by Eli, don't use @findex. And use "@deffn Command" in order to
> show, that it is a command.
>
> > diff --git a/etc/NEWS b/etc/NEWS
> > index fdb1ee02819..f5252cc5bf9 100644
> > --- a/etc/NEWS
> > +++ b/etc/NEWS
> > @@ -2772,6 +2772,16 @@ determined by the new user option
> 'pulse-face-duration'.
> >
> >  ** Miscellaneous
> >
> > ++++
> > +*** New feature 'dock-mode'.
>
> This belongs to "* New Modes and Packages in Emacs 31.1". It should be
> headed by "** Dock mode".
>
> > +This package integrates Emacs with system GUI "docks" to display a doc=
k
> > +icon badge, progress indicator, and attention alerts.  Implementations
> > +are available for D-Bus platforms (e.g., KDE and GNOME), macOS/GNUstep=
,
> > +and MS-Windows.  On GNU/Linux systems, shell extensions such as
> > +"dash-to-dock" may be required.  See
> > +<https://extensions.gnome.org/extension/307/dash-to-dock/> and
> > +<https://wiki.ubuntu.com/Unity/LauncherAPI>.
>
> There shall be two subheadings. This one, and another one introducing
> 'dock-mode' and the user options (for the users). And perhaps a third
> one, speaking about the other functions.
>
> > --- /dev/null
> > +++ b/lisp/dock-mode.el
> > @@ -0,0 +1,455 @@
>  +
> > +;;; Commentary:
>
> I'm missing the description of 'dock-mode' for enabling/disabling of the
> feature.
>
> > +(defcustom dock-dbus-timeout-ms 25000
> > +  "Number of milliseconds to wait for D-Bus responses.
> > +The default value mirrors the `dbus` default."
> > +  :type 'natnum
> > +  :version "31.1")
>
> As said, I would call it dock-dbus-timeout. And give it
>
> --8<---------------cut here---------------start------------->8---
> :type '(choice (constant :tag "Default" nil) natnum)
> --8<---------------cut here---------------end--------------->8---
>

Here's a fresh patch (still based on the master as of
2cc6c812788281c05ca9687afd7bedf597b1e942).  I've aimed to accommodate
everyone's feedback.  I've retested on mac, Windows, Debian.

The package is now called system-taskbar.  I've updated the NEWS and
documentation to make it clear that taskbar might be called other things
and taskbar is an inclusive name.

Rather than add hooks to progress reporter, which would be of global scope,
I added optional update and done callbacks to make-progress-reporter and
that works swimmingly well.  NEWS and documentation have been updated for
that feature in addition to system-taskbar.

I changed the w32 implementation for the taskbar features to be enabled
relative to the current frame at the time rather than have singletons so
I've removed the static variables.  In the lisp w32 implementation, I added
a hook to delete-frame-functions that disables taskbar effects for a frame
when it is killed.  Eli, I don't know if this addresses your issue where
you saw lingering artifacts when a frame or session is killed (I honestly
don't know how Windows could allow the effects to linger when a process is
dead).  I've tested on Windows 11, the only thing I have available and
perhaps your Windows version behaves differently.

A few things remain that I'm aware of, outside of additional feedback.

1. Where precisely to put the user and lisp documentation.  My inclination
is that the lisp docs should join doc/lispref/display.texi or os.texi as
Michael suggests. But I don't know where to put the user docs.  Perhaps
emacs.texi can have a new section called System Integration or something
like that and we can refer to this new feature and also perhaps the
existing notifications.el package to unify that and provide a place for
future user-visible system-level features.

I've refined the system-taskbar.texi as a standalone file in the root
directory for the time being and for review.  I will update the xrefs when
I know where the documentation is going to live.

2. The stanza regarding INITGUID in w32fns.c remains something that I don't
know how to answer having blindly copied that stanza from w32dwrite.c.  I
assume it is needed for some reason.  See
commit b54fa15ffbb959e97ea0b77bfeb9ae412a63b4e8 for its proximate origin.

-St=C3=A9phane

--000000000000ef978b0645872973
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Nov 27, 2025 at 12:47=E2=80=AFPM Michael Albinus &lt;<a href=3D"mai=
lto:michael.albinus@HIDDEN">michael.albinus@HIDDEN</a>&gt; wrote:</span></d=
iv></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">St=C3=A9phane Marks &lt;<a href=3D"mailto:=
shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt; writes:<=
br>
<br>
Hi St=C3=A9phane,<br>
<br>
&gt; Thank you for reviewing the patch and your thoughtful feedback.=C2=A0 =
I&#39;ll<br>
&gt; incorporate more feedback after you get it compiled and you give it a<=
br>
&gt; try, and perhaps other people, too.=C2=A0 My Windows 11 virtual machin=
e is<br>
&gt; less than a real-world Windows set up, though sufficient for<br>
&gt; developing this feature.<br>
&gt;<br>
&gt; I&#39;ve attached a patch rebased on master<br>
&gt; 2cc6c812788281c05ca9687afd7bedf597b1e942 which also incorporates your<=
br>
&gt; feedback.<br>
<br>
I gave it a try on my laptop (Fedora 43 + gnome-shell-extension-dash-to-doc=
k).<br>
First impressions:<br>
<br>
- After calling &#39;M-x dock-mode&#39;, I get an error<br>
<br>
--8&lt;---------------cut here---------------start-------------&gt;8---<br>
dock--set-back-end: Symbol=E2=80=99s function definition is void: dbus-list=
-activatable-names<br>
--8&lt;---------------cut here---------------end---------------&gt;8---<br>
<br>
=C2=A0 I guess a require is missing.<br>
<br>
- The examples in the &quot;(dock-mode) Dock Usage Examples&quot; node are =
working<br>
=C2=A0 except (dock-badge &quot;Test&quot;). I guess it is a restriction fo=
r the D-Bus<br>
=C2=A0 backend. It would be great if the documentation says which<br>
=C2=A0 functionality is implemented by which backend. Maybe I missed this?<=
br>
<br>
Comments, mainly from Eli are already give. Since I agree with them, I<br>
will comment on the code only if there are further remarks by me.<br>
<br>
&gt; From 86a1577ff8290291020b10294f65352773b69db3 Mon Sep 17 00:00:00 2001=
<br>
&gt; From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D &lt;<a href=3D"mailt=
o:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Thu, 20 Nov 2025 12:54:40 -0500<br>
&gt; Subject: [PATCH] Add system GUI dock integration.<br>
<br>
&gt; --- a/doc/misc/Makefile.in<br>
&gt; +++ b/doc/misc/Makefile.in<br>
&gt; @@ -68,6 +68,7 @@ DOCMISC_W32 =3D<br>
&gt;=C2=A0 <br>
&gt;=C2=A0 ## Info files to build and install on all platforms.<br>
&gt;=C2=A0 INFO_COMMON =3D auth autotype bovine calc ccmode cl dbus dired-x=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt; +=C2=A0 =C2=A0 =C2=A0dock-mode=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0ebrowse ede ediff edt efaq eglot eieio emacs=
-gnutls=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0emacs-mime epa erc ert eshell eudc eww flyma=
ke forms gnus=C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0htmlfontify idlwave ido <a href=3D"http://in=
fo.info" rel=3D"noreferrer" target=3D"_blank">info.info</a> mairix-el messa=
ge mh-e=C2=A0 =C2=A0 =C2=A0 =C2=A0 \<br>
<br>
It shouldn&#39;t be a line of its own.<br>
<br>
&gt; --- /dev/null<br>
&gt; +++ b/doc/misc/dock-mode.texi<br>
<br>
As Eli said, it shouldn&#39;t be a manual under doc/misc. Everything what&#=
39;s<br>
said about calling &#39;dock-mode&#39; and its user options fits into the<b=
r>
Emacs manual.<br>
<br>
The more technical details, function interfaces, belong to the Elisp<br>
manual. We have there a node &quot;(elisp) Desktop Notifications&quot;. doc=
k-mode<br>
is a comparable feature, I would call it &quot;Taskbar Notifications&quot;.=
 So the<br>
information shall=C2=A0 go there, directly after desktop notificatios.<br>
<br>
&gt; +Your GNU/Linux Emacs instance should be launched via an appropriate<b=
r>
&gt; +shell &quot;desktop&quot; file such as those distributed with Emacs; =
e.g.,<br>
&gt; +&quot;etc/emacsclient.desktop&quot;.<br>
<br>
&quot;etc/emacsclient.desktop&quot; is internal to Emacsd; it isn&#39;t tak=
en into<br>
account by the GUI dock. So we shall speak about it more general.<br>
<br>
&gt; +@node User Options<br>
&gt; +@chapter User Options<br>
&gt; +<br>
&gt; +@defvar dock-clear-attention-on-frame-focus<br>
<br>
Use @defopt.<br>
<br>
&gt; +The variable @code{dock-clear-attention-on-frame-focus} can be<br>
<br>
The user option ...<br>
<br>
&gt; +@defvar dock-dbus-desktop-file-name<br>
&gt; +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux<=
br>
<br>
Dito.<br>
<br>
&gt; +@defvar dock-dbus-timeout-ms<br>
&gt; +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus<b=
r>
<br>
Dito.<br>
<br>
I wouldn&#39;t use a trailing &#39;-ms&#39;. This is a technical detail, wh=
ich isn&#39;t<br>
used anywhere else in the D-Bus object names.<br>
<br>
&gt; +systems, and can be customized to specify the number of milliseconds<=
br>
&gt; +Emacs will wait for D-Bus responses before timing out and considering=
<br>
&gt; +messages undeliverable.=C2=A0 It defaults to 25000 milliseconds, whic=
h is the<br>
&gt; +recommended default by the D-Bus package, which see, @pxref{Top,,, db=
us,<br>
&gt; +D-Bus integration in Emacs}.<br>
<br>
I wouldn&#39;t set the default to 25000, but to nil. This means &quot;use t=
he<br>
D-Bus default&quot;, which is 25000 indeed. But we don&#39;t need to mirror=
 it.<br>
<br>
&gt; +@node Function Reference<br>
&gt; +@chapter Function Reference<br>
&gt; +<br>
&gt; +@findex dock-mode<br>
&gt; +@defun dock-mode<br>
<br>
As said by Eli, don&#39;t use @findex. And use &quot;@deffn Command&quot; i=
n order to<br>
show, that it is a command.<br>
<br>
&gt; diff --git a/etc/NEWS b/etc/NEWS<br>
&gt; index fdb1ee02819..f5252cc5bf9 100644<br>
&gt; --- a/etc/NEWS<br>
&gt; +++ b/etc/NEWS<br>
&gt; @@ -2772,6 +2772,16 @@ determined by the new user option &#39;pulse-fa=
ce-duration&#39;.<br>
&gt;=C2=A0 <br>
&gt;=C2=A0 ** Miscellaneous<br>
&gt;=C2=A0 <br>
&gt; ++++<br>
&gt; +*** New feature &#39;dock-mode&#39;.<br>
<br>
This belongs to &quot;* New Modes and Packages in Emacs 31.1&quot;. It shou=
ld be<br>
headed by &quot;** Dock mode&quot;.<br>
<br>
&gt; +This package integrates Emacs with system GUI &quot;docks&quot; to di=
splay a dock<br>
&gt; +icon badge, progress indicator, and attention alerts.=C2=A0 Implement=
ations<br>
&gt; +are available for D-Bus platforms (e.g., KDE and GNOME), macOS/GNUste=
p,<br>
&gt; +and MS-Windows.=C2=A0 On GNU/Linux systems, shell extensions such as<=
br>
&gt; +&quot;dash-to-dock&quot; may be required.=C2=A0 See<br>
&gt; +&lt;<a href=3D"https://extensions.gnome.org/extension/307/dash-to-doc=
k/" rel=3D"noreferrer" target=3D"_blank">https://extensions.gnome.org/exten=
sion/307/dash-to-dock/</a>&gt; and<br>
&gt; +&lt;<a href=3D"https://wiki.ubuntu.com/Unity/LauncherAPI" rel=3D"nore=
ferrer" target=3D"_blank">https://wiki.ubuntu.com/Unity/LauncherAPI</a>&gt;=
.<br>
<br>
There shall be two subheadings. This one, and another one introducing<br>
&#39;dock-mode&#39; and the user options (for the users). And perhaps a thi=
rd<br>
one, speaking about the other functions.<br>
<br>
&gt; --- /dev/null<br>
&gt; +++ b/lisp/dock-mode.el<br>
&gt; @@ -0,0 +1,455 @@<br>
=C2=A0+<br>
&gt; +;;; Commentary:<br>
<br>
I&#39;m missing the description of &#39;dock-mode&#39; for enabling/disabli=
ng of the<br>
feature.<br>
<br>
&gt; +(defcustom dock-dbus-timeout-ms 25000<br>
&gt; +=C2=A0 &quot;Number of milliseconds to wait for D-Bus responses.<br>
&gt; +The default value mirrors the `dbus` default.&quot;<br>
&gt; +=C2=A0 :type &#39;natnum<br>
&gt; +=C2=A0 :version &quot;31.1&quot;)<br>
<br>
As said, I would call it dock-dbus-timeout. And give it<br>
<br>
--8&lt;---------------cut here---------------start-------------&gt;8---<br>
:type &#39;(choice (constant :tag &quot;Default&quot; nil) natnum)<br>
--8&lt;---------------cut here---------------end---------------&gt;8---<br>=
</blockquote><div><br></div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace">Here&#39;s a fresh patch (still based on the master as of 2cc=
6c812788281c05ca9687afd7bedf597b1e942).=C2=A0 I&#39;ve aimed to accommodate=
 everyone&#39;s feedback.=C2=A0 I&#39;ve retested on mac, Windows, Debian.<=
/div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div=
><div class=3D"gmail_default" style=3D"font-family:monospace">The package i=
s now called system-taskbar.=C2=A0 I&#39;ve updated the NEWS and documentat=
ion to make it clear that taskbar might be called other things and taskbar =
is an inclusive name.</div><div class=3D"gmail_default" style=3D"font-famil=
y:monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mo=
nospace">Rather than add hooks to progress reporter, which would be of glob=
al scope, I added optional update and done callbacks to make-progress-repor=
ter and that works swimmingly well.=C2=A0 NEWS and documentation have been =
updated for that feature in addition to system-taskbar.</div><div class=3D"=
gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"gmai=
l_default" style=3D"font-family:monospace">I changed the w32 implementation=
 for the taskbar features to be enabled relative to the current frame at th=
e time rather than have singletons so I&#39;ve removed the static variables=
.=C2=A0 In the lisp w32 implementation, I added a hook to=C2=A0delete-frame=
-functions that disables taskbar effects for a frame when it is killed.=C2=
=A0 Eli, I don&#39;t know if this addresses your issue where you saw linger=
ing artifacts when a frame or session is killed (I honestly don&#39;t know =
how Windows could allow the effects to linger when a process is dead).=C2=
=A0 I&#39;ve tested on Windows 11, the only thing I have available and perh=
aps your Windows version behaves differently.</div><div class=3D"gmail_defa=
ult" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default"=
 style=3D"font-family:monospace">A few things remain that I&#39;m aware of,=
=C2=A0outside of additional feedback.</div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=
=3D"font-family:monospace">1. Where precisely to put the user and lisp docu=
mentation.=C2=A0 My inclination is that the lisp docs should join doc/lispr=
ef/display.texi=C2=A0or os.texi as Michael suggests. But I don&#39;t know w=
here to put the user docs.=C2=A0 Perhaps emacs.texi=C2=A0can have a new sec=
tion called System Integration or something like that and we can refer to t=
his new feature and also perhaps the existing notifications.el package to u=
nify that and provide a place for future user-visible system-level features=
.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></d=
iv><div class=3D"gmail_default" style=3D"font-family:monospace">I&#39;ve re=
fined the system-taskbar.texi as a standalone file in the root directory fo=
r the time being and for review.=C2=A0 I will update the xrefs when I know =
where the documentation is going to live.</div><div class=3D"gmail_default"=
 style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace">2. The stanza regarding INITGUID in w32fns.c r=
emains something that I don&#39;t know how to answer having blindly copied =
that stanza from w32dwrite.c.=C2=A0 I assume it is needed for some reason.=
=C2=A0 See commit=C2=A0b54fa15ffbb959e97ea0b77bfeb9ae412a63b4e8 for its pro=
ximate origin.</div><div class=3D"gmail_default" style=3D"font-family:monos=
pace"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace=
">-St=C3=A9phane=C2=A0</div></div></div>

--000000000000ef978b0645872973--

--000000000000ef978c0645872975
Content-Type: application/octet-stream; 
	name="0001-System-GUI-taskbar-and-progress-reporter-callbacks.patch"
Content-Disposition: attachment; 
	filename="0001-System-GUI-taskbar-and-progress-reporter-callbacks.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_miyrzho00>
X-Attachment-Id: f_miyrzho00

RnJvbSBlM2ZlNjVhMjg5NzQ1NzBhYmRlOTU3MDZhMTUyZTJlOWRlMGE0ZjJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjAgTm92IDIwMjUgMTI6NTQ6NDAgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBTeXN0ZW0gR1VJIHRhc2tiYXIgYW5kIHByb2dyZXNzIHJlcG9ydGVy
IGNhbGxiYWNrcy4KCkltcGxlbWVudCBzeXN0ZW0gR1VJIHRhc2tiYXIvZG9jay9sYXVuY2hlciBp
Y29uIGJhZGdlLCBpY29uCnByb2dyZXNzIGluZGljYXRvciwgaWNvbiBhdHRlbnRpb24gYWxlcnQg
ZmVhdHVyZXMgZm9yIEQtQnVzCnBsYXRmb3JtcyAodGVzdGVkIG9uIEtERSBhbmQgR05PTUUpLCBO
UyAobWFjT1MvR05Vc3RlcCksCk1TLVdpbmRvd3MuCgpBZGQgdXBkYXRlLWNhbGxiYWNrIGFuZCBk
b25lLWNhbGxiYWNrIHRvCidtYWtlLXByb2dyZXNzLXJlcG9ydGVyJyB0byBmYWNpbGl0YXRlIHRh
c2tiYXIgcHJvZ3Jlc3MgZGlzcGxheS4KCiogbGlzcC9zdWJyLmVsIChtYWtlLXByb2dyZXNzLXJl
cG9ydGVyKTogQWRkIG9wdGlvbmFsCnVwZGF0ZS1jYWxsYmFjayBhbmQgZG9uZS1jYWxsYmFjayBh
cmd1bWVudHMuCihwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGUpOiBDYWxsIHVwZGF0ZS1jYWxs
YmFjayBpZiBub24tbmlsCmZvciBib3RoIG51bWVyaWNhbCBhbmQgcHVsc2luZyByZXBvcnRlcnMu
Cihwcm9ncmVzcy1yZXBvcnRlci1kb25lKTogQ2FsbCBkb25lLWNhbGxiYWNrIGlmIG5vbi1uaWwu
CiogbGlzcC9zeXN0ZW0tdGFza2Jhci5lbDogTmV3IGZpbGUuCiogc3JjL25zZm5zLm0gKEZuc19i
YWRnZSwgRm5zX3Byb2dyZXNzX2luZGljYXRvcikKKEZuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9u
KTogTmV3IGZ1bmN0aW9uLgooc3ltc19vZl9uc2Zucyk6IEFkZCBkZWZzdWJyIFNuc19iYWRnZSwK
U25zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIFNuc19wcm9ncmVzc19pbmRpY2F0b3IuIEFkZCBE
RUZTWU0KUWluZm9ybWF0aW9uYWwsIFFjcml0aWNhbC4KKiBzcmMvdzMyZm5zLmMgKHJnYl9saXN0
X3RvX2NvbG9ycmVmLCBGdzMyX2JhZGdlKQooRnczMl9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLCBG
dzMyX3Byb2dyZXNzX2luZGljYXRvcik6IE5ldwpmdW5jdGlvbi4KKHN5bXNfb2ZfdzMyZm5zKTog
QWRkIGRlZnN1YnIgU3czMl9iYWRnZSwKU3czMl9wcm9ncmVzc19pbmRpY2F0b3IsIFN3MzJfcmVx
dWVzdF91c2VyX2F0dGVudGlvbi4gQWRkIERFRlNZTQpRaW5mb3JtYXRpb25hbCwgUWNyaXRpY2Fs
LgoqIGRvYy9saXNwcmVmL2Rpc3BsYXkudGV4aTogRG9jdW1lbnQgcHJvZ3Jlc3MtcmVwb3J0ZXIg
Y2FsbGJhY2tzLgoqIHN5c3RlbS10YXNiYXIudGV4aTogTmV3IGZpbGUgKFdJTEwgQkUgTUVSR0VE
IElOVE8gRU1BQ1MKQU5EIEVMSVNQIE1BTlVBTCkuCiogZXRjL05FV1M6IEFubm91bmNlIHN5c3Rl
bS10YXNrYmFyLW1vZGUuICBBbm5vdW5jZQpwcm9ncmVzcyByZXBvcnRlciBjYWxsYmFjayBlbmhh
bmNlbWVudHMuCi0tLQogZG9jL2xpc3ByZWYvZGlzcGxheS50ZXhpIHwgIDI4ICstCiBldGMvTkVX
UyAgICAgICAgICAgICAgICAgfCAgMjIgKysKIGxpc3Avc3Vici5lbCAgICAgICAgICAgICB8ICA0
NiArKystCiBsaXNwL3N5c3RlbS10YXNrYmFyLmVsICAgfCA1NDUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBzcmMvbnNmbnMubSAgICAgICAgICAgICAgfCAxMjggKysr
KysrKysrCiBzcmMvdzMyZm5zLmMgICAgICAgICAgICAgfCAzMjcgKysrKysrKysrKysrKysrKysr
KysrKysKIHN5c3RlbS10YXNrYmFyLnRleGkgICAgICB8IDI2MCArKysrKysrKysrKysrKysrKysr
CiA3IGZpbGVzIGNoYW5nZWQsIDEzMzYgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgbGlzcC9zeXN0ZW0tdGFza2Jhci5lbAogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN5c3RlbS10YXNrYmFyLnRleGkKCmRpZmYgLS1naXQgYS9kb2MvbGlzcHJlZi9kaXNwbGF5
LnRleGkgYi9kb2MvbGlzcHJlZi9kaXNwbGF5LnRleGkKaW5kZXggZWIzZjdmZDVmZWIuLjk2YTg4
YzEwODI2IDEwMDY0NAotLS0gYS9kb2MvbGlzcHJlZi9kaXNwbGF5LnRleGkKKysrIGIvZG9jL2xp
c3ByZWYvZGlzcGxheS50ZXhpCkBAIC00ODYsNyArNDg2LDcgQEAgUHJvZ3Jlc3MKICAgKHByb2dy
ZXNzLXJlcG9ydGVyLWRvbmUgcHJvZ3Jlc3MtcmVwb3J0ZXIpKQogQGVuZCBzbWFsbGV4YW1wbGUK
IAotQGRlZnVuIG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIgbWVzc2FnZSAmb3B0aW9uYWwgbWluLXZh
bHVlIG1heC12YWx1ZSBjdXJyZW50LXZhbHVlIG1pbi1jaGFuZ2UgbWluLXRpbWUKK0BkZWZ1biBt
YWtlLXByb2dyZXNzLXJlcG9ydGVyIG1lc3NhZ2UgJm9wdGlvbmFsIG1pbi12YWx1ZSBtYXgtdmFs
dWUgY3VycmVudC12YWx1ZSBtaW4tY2hhbmdlIG1pbi10aW1lIHVwZGF0ZS1jYWxsYmFjayBkb25l
LWNhbGxiYWNrCiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBwcm9ncmVzcyBy
ZXBvcnRlciBvYmplY3QsIHdoaWNoCiB5b3Ugd2lsbCB1c2UgYXMgYW4gYXJndW1lbnQgZm9yIHRo
ZSBvdGhlciBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LiAgVGhlCiBpZGVhIGlzIHRvIHByZWNvbXB1
dGUgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlIHRvIG1ha2UgcHJvZ3Jlc3MKQEAgLTUxMywxMyAr
NTEzLDI1IEBAIFByb2dyZXNzCiBhcmd1bWVudCBAdmFye2N1cnJlbnQtdmFsdWV9IGEgbnVtZXJp
Y2FsIHZhbHVlIHNwZWNpZnlpbmcgdGhlIGluaXRpYWwKIHByb2dyZXNzOyBpZiBvbWl0dGVkLCB0
aGlzIGRlZmF1bHRzIHRvIEB2YXJ7bWluLXZhbHVlfS4KIAotVGhlIHJlbWFpbmluZyBhcmd1bWVu
dHMgY29udHJvbCB0aGUgcmF0ZSBvZiBlY2hvIGFyZWEgdXBkYXRlcy4gIFRoZQotcHJvZ3Jlc3Mg
cmVwb3J0ZXIgd2lsbCB3YWl0IGZvciBhdCBsZWFzdCBAdmFye21pbi1jaGFuZ2V9IG1vcmUKLXBl
cmNlbnRzIG9mIHRoZSBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkIGJlZm9yZSBwcmludGluZyBu
ZXh0Ci1tZXNzYWdlOyB0aGUgZGVmYXVsdCBpcyBvbmUgcGVyY2VudC4gIEB2YXJ7bWluLXRpbWV9
IHNwZWNpZmllcyB0aGUKLW1pbmltdW0gdGltZSBpbiBzZWNvbmRzIHRvIHBhc3MgYmV0d2VlbiBz
dWNjZXNzaXZlIHByaW50czsgdGhlIGRlZmF1bHQKLWlzIDAuMiBzZWNvbmRzLiAgKE9uIHNvbWUg
b3BlcmF0aW5nIHN5c3RlbXMsIHRoZSBwcm9ncmVzcyByZXBvcnRlciBtYXkKLWhhbmRsZSBmcmFj
dGlvbnMgb2Ygc2Vjb25kcyB3aXRoIHZhcnlpbmcgcHJlY2lzaW9uKS4KK1RoZSBhcmd1bWVudHMg
QHZhcnttaW4tY2hhbmdlfSBhbmQgQHZhcnttaW4tdGltZX0gY29udHJvbCB0aGUgcmF0ZSBvZgor
ZWNobyBhcmVhIHVwZGF0ZXMuICBUaGUgcHJvZ3Jlc3MgcmVwb3J0ZXIgd2lsbCB3YWl0IGZvciBh
dCBsZWFzdAorQHZhcnttaW4tY2hhbmdlfSBtb3JlIHBlcmNlbnRzIG9mIHRoZSBvcGVyYXRpb24g
dG8gYmUgY29tcGxldGVkIGJlZm9yZQorcHJpbnRpbmcgbmV4dCBtZXNzYWdlOyB0aGUgZGVmYXVs
dCBpcyBvbmUgcGVyY2VudC4gIEB2YXJ7bWluLXRpbWV9CitzcGVjaWZpZXMgdGhlIG1pbmltdW0g
dGltZSBpbiBzZWNvbmRzIHRvIHBhc3MgYmV0d2VlbiBzdWNjZXNzaXZlIHByaW50czsKK3RoZSBk
ZWZhdWx0IGlzIDAuMiBzZWNvbmRzLiAgKE9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMsIHRoZSBw
cm9ncmVzcworcmVwb3J0ZXIgbWF5IGhhbmRsZSBmcmFjdGlvbnMgb2Ygc2Vjb25kcyB3aXRoIHZh
cnlpbmcgcHJlY2lzaW9uKS4KKworSWYgQHZhcnt1cGRhdGUtY2FsbGJhY2t9IGlzIGEgZnVuY3Rp
b24sIGl0IHdpbGwgYmUgY2FsbGVkIGF0IGVhY2ggdXBkYXRlCitzdGVwIHdpdGggdGhyZWUgYXJn
dW1lbnRzLCB0aGUgcmVwb3J0ZXIsIHRoZSBwZXJjZW50YWdlIGRvbmUgaW4gdGhlCityYW5nZSAw
LTEwMCBmb3IgYSBwZXJjZW50YWdlIHJlcG9ydGVyIGFuZCB3aGljaCBpcyBuaWwgZm9yIGEgc3Bp
bm5pbmcKK3JlcG9ydGVyLCB0aGUgaW5kZXggdGhhdCBjeWNsZXMgdGhyb3VnaCB0aGUgcmFuZ2Ug
MC0zIGZvciBhIHNwaW5uaW5nCityZXBvcnRlciBhbmQgd2hpY2ggaXMgbmlsIGZvciBhIHBlcmNl
bnRhZ2UgcmVwb3J0ZXIuCisKK0lmIEB2YXJ7ZG9uZS1jYWxsYmFja30gaXMgYSBmdW5jdGlvbiwg
aXQgd2lsbCBiZSBjYWxsZWQgYnkgd2hlbiB0aGUKK3Byb2dyZXNzIHJlcG9ydGVyIGlzIGNvbnNp
ZGVyZWQgZG9uZSB3aXRoIG9uZSBhcmd1bWVudCwgdGhlIHJlcG9ydGVyLgorCitUaGVzZSBjYWxs
YmFja3MgY2FuIGJlIHVzZWQgdG8gc3VwcGxlbWVudCB1c2VyIGZlZWRiYWNrIGluIGFkZGl0aW9u
IHRvCitlY2hvIGFyZWEgdXBkYXRlcy4KIAogVGhpcyBmdW5jdGlvbiBjYWxscyBAY29kZXtwcm9n
cmVzcy1yZXBvcnRlci11cGRhdGV9LCBzbyB0aGUgZmlyc3QKIG1lc3NhZ2UgaXMgcHJpbnRlZCBp
bW1lZGlhdGVseS4KZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggZmRiMWVl
MDI4MTkuLjY3NjE0NGRmZjEyIDEwMDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpA
QCAtMzE1MSw2ICszMTUxLDIxIEBAIFRoaXMgbGlicmFyeSBwcm92aWRlcyBmdW5jdGlvbnMgdG8g
dGhyb3R0bGUgb3IgZGVib3VuY2UgRW1hY3MgTGlzcAogZnVuY3Rpb25zLiAgVGhpcyBpcyB1c2Vm
dWwgZm9yIGNvcnJhbGxpbmcgb3ZlcmVhZ2VyIGNvZGUgdGhhdCBpcyBzbG93CiBhbmQgYmxvY2tz
IEVtYWNzLCBvciBkb2VzIG5vdCBwcm92aWRlIHdheXMgdG8gbGltaXQgaG93IG9mdGVuIGl0IHJ1
bnMuCiAKKysrKworKioqIE5ldyBtb2RlICdzeXN0ZW0tdGFza2Jhci1tb2RlJy4KK1RoaXMgaXMg
YSBnbG9iYWwgbWlub3IgbW9kZSBhbmQgY29tcGFuaW9uIGZ1bmN0aW9ucyB0aGF0IGludGVncmF0
ZSBFbWFjcword2l0aCBzeXN0ZW0gR1VJIHRhc2tiYXJzIChhbHNvIGNhbGxlZCBkb2NrcyBvciBs
YXVuY2hlcnMgb3Igc29tZXRoaW5nCitzaW1pbGFyKSB0byBkaXNwbGF5IGEgdGFza2JhciBpY29u
ICJiYWRnZSIgb3ZlcmxheSwgYSBwcm9ncmVzcyBiYXIKK3JlcG9ydCBvdmVybGF5LCBhbGVydCB0
aGUgdXNlciB0aGF0IGFuIEVtYWNzIHNlc3Npb24gbmVlZHMgYXR0ZW50aW9uLAorb2Z0ZW4gYnkg
Zmxhc2hpbmcgb3IgYm91bmNpbmcgdGhlIEVtYWNzIGFwcGxpY2F0aW9uIGljb24uICBTdXBwb3J0
ZWQKK2NhcGFibGUgc3lzdGVtcyBhcmUgR05VL0xpbnV4IHZpYSBELUJ1cywgbWFjT1MvR05Vc3Rl
cCAxMC41KywgTVMtV2luZG93cworNysuCisKK09uIEdOVS9MaW51eCBzeXN0ZW1zLCBzaGVsbCBl
eHRlbnNpb25zIG9yIHNpbWlsYXIgaGVscGVycyBzdWNoIGFzCisiZGFzaC10by1kb2NrIiBtYXkg
YmUgcmVxdWlyZWQuICBTZWUKKzxodHRwczovL2V4dGVuc2lvbnMuZ25vbWUub3JnL2V4dGVuc2lv
bi8zMDcvZGFzaC10by1kb2NrLz4gYW5kCis8aHR0cHM6Ly93aWtpLnVidW50dS5jb20vVW5pdHkv
TGF1bmNoZXJBUEk+LgorCiAMCiAqIEluY29tcGF0aWJsZSBMaXNwIENoYW5nZXMgaW4gRW1hY3Mg
MzEuMQogCkBAIC0zNTc5LDYgKzM1OTQsMTMgQEAgRW1hY3Mgd2hlbiBidWlsdCB3aXRoIHRoZSBw
dXJlIEdUSyB0b29sa2l0IG5vdyByZXNwZWN0cyBkZXNrdG9wCiBkYXJrIGFuZCBsaWdodCBtb2Rl
cyBmb3IgZHJhd2luZyBhIEdUSyB0b29sYmFyIGFuZCB3aWRnZXRzLAogYXV0b21hdGljYWxseSB0
b2dnbGluZyBiZXR3ZWVuIHRoZW0uCiAKKysrKworKiogUHJvZ3Jlc3MgcmVwb3J0ZXIgY2FsbGJh
Y2tzLgorJ21ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInIG5vdyBhY2NlcHRzIG9wdGlvbmFsIGFyZ3Vt
ZW50cyBVUERBVEUtQ0FMTEJBQ0ssCitjYWxsZWQgb24gcHJvZ3Jlc3Mgc3RlcHMsIGFuZCBET05F
LUNBTExCQUNLLCBjYWxsZWQgd2hlbiB0aGUgcHJvZ3Jlc3MKK3JlcG9ydGVyIGlzIGRvbmUuICBT
ZWUgdGhlICdtYWtlLXByb2dyZXNzLXJlcG9ydGVyJyBkb2NzdHJpbmcgZm9yIGEgZnVsbAorc3Bl
Y2lmaWNhdGlvbiBvZiB0aGVzZSBuZXcgb3B0aW9uYWwgYXJndW1lbnRzLgorCiAMCiAqIENoYW5n
ZXMgaW4gRW1hY3MgMzEuMSBvbiBOb24tRnJlZSBPcGVyYXRpbmcgU3lzdGVtcwogCmRpZmYgLS1n
aXQgYS9saXNwL3N1YnIuZWwgYi9saXNwL3N1YnIuZWwKaW5kZXggZmNmOTMxYjY0ZTkuLmM1M2Nh
MDExYWFiIDEwMDY0NAotLS0gYS9saXNwL3N1YnIuZWwKKysrIGIvbGlzcC9zdWJyLmVsCkBAIC02
OTk2LDcgKzY5OTYsOCBAQCBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUKICAgICAocHJvZ3Jlc3Mt
cmVwb3J0ZXItZG8tdXBkYXRlIHJlcG9ydGVyIHZhbHVlIHN1ZmZpeCkpKQogCiAoZGVmdW4gbWFr
ZS1wcm9ncmVzcy1yZXBvcnRlciAobWVzc2FnZSAmb3B0aW9uYWwgbWluLXZhbHVlIG1heC12YWx1
ZQotCQkJCSAgICAgICBjdXJyZW50LXZhbHVlIG1pbi1jaGFuZ2UgbWluLXRpbWUpCisJCQkJICAg
ICAgIGN1cnJlbnQtdmFsdWUgbWluLWNoYW5nZSBtaW4tdGltZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLWNhbGxiYWNrIGRvbmUtY2FsbGJhY2spCiAgICJS
ZXR1cm4gcHJvZ3Jlc3MgcmVwb3J0ZXIgb2JqZWN0IGZvciB1c2Ugd2l0aCBgcHJvZ3Jlc3MtcmVw
b3J0ZXItdXBkYXRlJy4KIAogTUVTU0FHRSBpcyBzaG93biBpbiB0aGUgZWNobyBhcmVhLCB3aXRo
IGEgc3RhdHVzIGluZGljYXRvcgpAQCAtNzAyMyw3ICs3MDI0LDE2IEBAIG1ha2UtcHJvZ3Jlc3Mt
cmVwb3J0ZXIKIE9wdGlvbmFsIE1JTi1USU1FIHNwZWNpZmllcyB0aGUgbWluaW11bSBpbnRlcnZh
bCB0aW1lIGJldHdlZW4KIGVjaG8gYXJlYSB1cGRhdGVzIChkZWZhdWx0IGlzIDAuMiBzZWNvbmRz
LikgIElmIHRoZSBPUyBpcyBub3QKIGNhcGFibGUgb2YgbWVhc3VyaW5nIGZyYWN0aW9ucyBvZiBz
ZWNvbmRzLCB0aGlzIHBhcmFtZXRlciBpcwotZWZmZWN0aXZlbHkgcm91bmRlZCB1cC4iCitlZmZl
Y3RpdmVseSByb3VuZGVkIHVwLgorCitPcHRpb25hbCBVUERBVEUtQ0FMTEJBQ0sgaXMgYSBmdW5j
dGlvbiBjYWxsZWQgYnkKK2Bwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGVgIHdpdGggdGhyZWUg
YXJndW1lbnRzLCB0aGUgcmVwb3J0ZXIsIHRoZQorcGVyY2VudGFnZSBkb25lIGluIHRoZSByYW5n
ZSAwLTEwMCBmb3IgYSBudW1lcmljIHJlcG9ydGVyIGFuZCB3aGljaCBpcworbmlsIGZvciBhIHB1
bHNpbmcgcmVwb3J0ZXIsIHRoZSBpbmRleCB0aGF0IGN5Y2xlcyB0aHJvdWdoIHRoZSByYW5nZSAw
LTMKK2ZvciBhIHB1bHNpbmcgcmVwb3J0ZXIgYW5kIHdoaWNoIGlzIG5pbCBmb3IgYSBudW1lcmlj
IHJlcG9ydGVyLgorCitPcHRpb25hbCBET05FLUNBTExCQUNLIGlzIGEgZnVuY3Rpb24gY2FsbGVk
IGJ5IGBwcm9ncmVzcy1yZXBvcnRlci1kb25lYAord2l0aCBvbmUgYXJndW1lbnQsIHRoZSByZXBv
cnRlci4iCiAgICh3aGVuIChzdHJpbmctbWF0Y2ggIltbOmFsbnVtOl1dXFwnIiBtZXNzYWdlKQog
ICAgIChzZXRxIG1lc3NhZ2UgKGNvbmNhdCBtZXNzYWdlICIuLi4iKSkpCiAgICh1bmxlc3MgbWlu
LXRpbWUKQEAgLTcwMzgsNyArNzA0OCw5IEBAIG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXIKIAkJICAg
ICAgIChpZiBtaW4tY2hhbmdlIChtYXggKG1pbiBtaW4tY2hhbmdlIDUwKSAxKSAxKQogICAgICAg
ICAgICAgICAgICAgICAgICBtaW4tdGltZQogICAgICAgICAgICAgICAgICAgICAgICA7OyBTVUZG
SVgKLSAgICAgICAgICAgICAgICAgICAgICAgbmlsKSkpKQorICAgICAgICAgICAgICAgICAgICAg
ICBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLWNhbGxiYWNrCisgICAgICAgICAg
ICAgICAgICAgICAgIGRvbmUtY2FsbGJhY2spKSkpCiAgICAgOzsgRm9yY2UgYSBjYWxsIHRvIGBt
ZXNzYWdlJyBub3cuCiAgICAgKHByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSByZXBvcnRlciAob3Ig
Y3VycmVudC12YWx1ZSBtaW4tdmFsdWUpKQogICAgIHJlcG9ydGVyKSkKQEAgLTcwNjEsMTEgKzcw
NzMsMTIgQEAgcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1bHNlLWNoYXJhY3RlcnMKICAgIkNoYXJhY3Rl
cnMgdG8gdXNlIGZvciBwdWxzaW5nIHByb2dyZXNzIHJlcG9ydGVycy4iKQogCiAoZGVmdW4gcHJv
Z3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlIChyZXBvcnRlciB2YWx1ZSAmb3B0aW9uYWwgc3VmZml4
KQotICAobGV0KiAoKHBhcmFtZXRlcnMgICAoY2RyIHJlcG9ydGVyKSkKLQkgKHVwZGF0ZS10aW1l
ICAoYXJlZiBwYXJhbWV0ZXJzIDApKQotCSAobWluLXZhbHVlICAgIChhcmVmIHBhcmFtZXRlcnMg
MSkpCi0JIChtYXgtdmFsdWUgICAgKGFyZWYgcGFyYW1ldGVycyAyKSkKLQkgKHRleHQgICAgICAg
ICAoYXJlZiBwYXJhbWV0ZXJzIDMpKQorICAobGV0KiAoKHBhcmFtZXRlcnMgICAgICAoY2RyIHJl
cG9ydGVyKSkKKwkgKHVwZGF0ZS10aW1lICAgICAoYXJlZiBwYXJhbWV0ZXJzIDApKQorCSAobWlu
LXZhbHVlICAgICAgIChhcmVmIHBhcmFtZXRlcnMgMSkpCisJIChtYXgtdmFsdWUgICAgICAgKGFy
ZWYgcGFyYW1ldGVycyAyKSkKKwkgKHRleHQgICAgICAgICAgICAoYXJlZiBwYXJhbWV0ZXJzIDMp
KQorCSAodXBkYXRlLWNhbGxiYWNrIChhcmVmIHBhcmFtZXRlcnMgNykpCiAJIChlbm91Z2gtdGlt
ZS1wYXNzZWQKIAkgIDs7IFNlZSBpZiBlbm91Z2ggdGltZSBoYXMgcGFzc2VkIHNpbmNlIHRoZSBs
YXN0IHVwZGF0ZS4KIAkgIChvciAobm90IHVwZGF0ZS10aW1lKQpAQCAtNzEwMCw3ICs3MTEzLDkg
QEAgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlCiAgICAgICAgICAgICAgICAgIChzZXRxIHN1
ZmZpeCAob3IgKGFyZWYgcGFyYW1ldGVycyA2KSAiIikpKQogICAgICAgICAgICAgICAgKGlmIChw
bHVzcCBwZXJjZW50YWdlKQogICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICIlcyVkJSUgJXMi
IHRleHQgcGVyY2VudGFnZSBzdWZmaXgpCi0gICAgICAgICAgICAgICAgIChtZXNzYWdlICIlcyAl
cyIgdGV4dCBzdWZmaXgpKSkpKQorICAgICAgICAgICAgICAgICAobWVzc2FnZSAiJXMgJXMiIHRl
eHQgc3VmZml4KSkKKyAgICAgICAgICAgICAgICh3aGVuIChmdW5jdGlvbnAgdXBkYXRlLWNhbGxi
YWNrKQorICAgICAgICAgICAgICAgICAoZnVuY2FsbCB1cGRhdGUtY2FsbGJhY2sgcmVwb3J0ZXIg
cGVyY2VudGFnZSBuaWwpKSkpKQogCSAgOzsgUHVsc2luZyBpbmRpY2F0b3IKIAkgIChlbm91Z2gt
dGltZS1wYXNzZWQKICAgICAgICAgICAgKHdoZW4gKGFuZCB2YWx1ZSAobm90IHN1ZmZpeCkpCkBA
IC03MTEzLDExICs3MTI4LDE4IEBAIHByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZQogICAgICAg
ICAgICAgICAgICAgKHB1bHNlLWNoYXIgKGFyZWYgcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1bHNlLWNo
YXJhY3RlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KSkpCiAJ
ICAgICAoc2V0Y2FyIHJlcG9ydGVyIGluZGV4KQotICAgICAgICAgICAgIChtZXNzYWdlICIlcyAl
cyAlcyIgdGV4dCBwdWxzZS1jaGFyIHN1ZmZpeCkpKSkpKQorICAgICAgICAgICAgIChtZXNzYWdl
ICIlcyAlcyAlcyIgdGV4dCBwdWxzZS1jaGFyIHN1ZmZpeCkKKyAgICAgICAgICAgICAod2hlbiAo
ZnVuY3Rpb25wIHVwZGF0ZS1jYWxsYmFjaykKKyAgICAgICAgICAgICAgIChmdW5jYWxsIHVwZGF0
ZS1jYWxsYmFjayByZXBvcnRlciBuaWwgaW5kZXgpKSkpKSkpCiAKIChkZWZ1biBwcm9ncmVzcy1y
ZXBvcnRlci1kb25lIChyZXBvcnRlcikKLSAgIlByaW50IHJlcG9ydGVyJ3MgbWVzc2FnZSBmb2xs
b3dlZCBieSB3b3JkIFwiZG9uZVwiIGluIGVjaG8gYXJlYS4iCi0gIChtZXNzYWdlICIlc2RvbmUi
IChhcmVmIChjZHIgcmVwb3J0ZXIpIDMpKSkKKyAgIlByaW50IHJlcG9ydGVyJ3MgbWVzc2FnZSBm
b2xsb3dlZCBieSB3b3JkIFwiZG9uZVwiIGluIGVjaG8gYXJlYS4KK0NhbGwgdGhlIHJlcG9ydGVy
J3MgZG9uZS1jYWxsYmFjayBpZiBhIGZ1bmN0aW9uLiIKKyAgKG1lc3NhZ2UgIiVzZG9uZSIgKGFy
ZWYgKGNkciByZXBvcnRlcikgMykpCisgIChhbmQtbGV0KiAoKHBhcmFtZXRlcnMgKGNkciByZXBv
cnRlcikpCisgICAgICAgICAgICAgKGRvbmUtY2FsbGJhY2sgKGFyZWYgcGFyYW1ldGVycyA4KSkK
KyAgICAgICAgICAgICAoZnVuY3Rpb25wIGRvbmUtY2FsbGJhY2spKQorICAgIChmdW5jYWxsIGRv
bmUtY2FsbGJhY2sgcmVwb3J0ZXIpKSkKIAogKGRlZm1hY3JvIGRvdGltZXMtd2l0aC1wcm9ncmVz
cy1yZXBvcnRlciAoc3BlYyByZXBvcnRlci1vci1tZXNzYWdlICZyZXN0IGJvZHkpCiAgICJMb29w
IGEgY2VydGFpbiBudW1iZXIgb2YgdGltZXMgYW5kIHJlcG9ydCBwcm9ncmVzcyBpbiB0aGUgZWNo
byBhcmVhLgpkaWZmIC0tZ2l0IGEvbGlzcC9zeXN0ZW0tdGFza2Jhci5lbCBiL2xpc3Avc3lzdGVt
LXRhc2tiYXIuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE4ZTU3
Y2QwMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlzcC9zeXN0ZW0tdGFza2Jhci5lbApAQCAtMCww
ICsxLDU0NSBAQAorOzs7IHN5c3RlbS10YXNrYmFyLmVsIC0tLSBTeXN0ZW0gR1VJIHRhc2tiYXIv
ZG9jay9sYXVuY2hlciBzdGF0dXMgZGlzcGxheSAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0IC0qLQor
Cis7OyBDb3B5cmlnaHQgKEMpIDIwMjUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK
Kzs7IEF1dGhvcjogU3RlcGhhbmUgTWFya3MKKzs7IE1haW50YWluZXI6IGVtYWNzLWRldmVsQGdu
dS5vcmcKKzs7IEtleXdvcmRzOiBjb252ZW5pZW5jZQorOzsgUGFja2FnZS1SZXF1aXJlczogKChl
bWFjcyAiMzEuMSIpKQorCis7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7
IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5Cis7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKzs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Cis7OyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBVc2UgdGhpcyBwYWNrYWdl
IHRvIGRpc3BsYXkgYSB0YXNrYmFyIGljb24gImJhZGdlIiBvdmVybGF5LCBhCis7OyBwcm9ncmVz
cyBiYXIgcmVwb3J0IG92ZXJsYXksIG9yIGFsZXJ0IHRoZSB1c2VyIHRoYXQgYW4gRW1hY3Mgc2Vz
c2lvbgorOzsgbmVlZHMgYXR0ZW50aW9uLCBvZnRlbiBieSBmbGFzaGluZyBvciBib3VuY2luZyB0
aGUgRW1hY3MgYXBwbGljYXRpb24KKzs7IGljb24uCis7OworOzsgTm90ZTogVGhlIHRlcm0gdGFz
a2JhciBpcyBpbmNsdXNpdmUgb2YgZG9jayBvciBsYXVuY2hlciBvciBzb21lIG90aGVyCis7OyB0
ZXJtaW5vbG9neSBhcyBtYXkgYmUgdXNlZCBmb3IgeW91ciBzeXN0ZW0uCis7OworOzsgT24gR05V
L0xpbnV4LCB0aGUgdmlzaWJsZSBlZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlv
bnMKKzs7IGRldGVybWluZWQgYnkgeW91ciBzaGVsbCBleHRlbnNpb24sIG1vc3Qgb2Z0ZW4gdGhl
IGFwcGxpY2F0aW9uCis7OyBsYXVuY2hlciBvciBkb2NrIHBhbmVsLCBvciB0aGUgdG9wIHBhbmVs
LiAgRWZmZWN0cyBhcmUgZ2xvYmFsIGZvciBhbgorOzsgRW1hY3MgaW5zdGFuY2UuCis7OworOzsg
T24gbWFjT1MvR05Vc3RlcCwgdGhlIGVmZmVjdHMgd2lsbCBhcHBlYXIgb24gdGhlIERvY2sgYW5k
IGluIHRoZSBBcHAKKzs7IFN3aXRjaGVyLiAgRWZmZWN0cyBhcmUgZ2xvYmFsIGZvciBhbiBFbWFj
cyBpbnN0YW5jZS4KKzs7Cis7OyBPbiBNUy1XaW5kb3dzLCB0aGUgZWZmZWN0cyBhcHBlYXIgb24g
dGhlIHRhc2tiYXIuICBFZmZlY3RzIGFyZQorOzsgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSBm
cm9tIHdoaWNoIHRoZXkgYXJlIGluaXRpYXRlZC4KKworOzs7IFVzYWdlOgorCis7OyBUaGUgZ2xv
YmFsIG1pbm9yIG1vZGUgYHN5c3RlbS10YXNrYmFyLW1vZGUnIGluaXRpYWxpemVzIHRoZSBHVUkK
Kzs7IHBsYXRmb3JtIGJhY2stZW5kIGFuZCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIHVzaW5nIHRo
ZSBmdW5jdGlvbnMKKzs7IGJlbG93LgorOzsKKzs7IGBzeXN0ZW0tdGFza2Jhci1iYWRnZScgb3Zl
cmxheXMgYSBjb3VudCwgd2hpY2ggaXMgYW4gaW50ZWdlciwgb24gdGhlCis7OyBFbWFjcyB0YXNr
YmFyIGljb24uICBZb3UgY2FuIHVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgdG8gaW5kaWNhdGUgdGhl
Cis7OyBudW1iZXIgb2YgdW5yZWFkIGVtYWlsIG1lc3NhZ2VzLiAgT24gR05VL0xpbnV4LCB0aGUg
Y291bnQgbXVzdCBiZSBhbgorOzsgaW50ZWdlciBvciBuaWwuICBPbiBtYWNPUy9HTlVzdGVwLCB0
aGUgY291bnQgbWF5IGJlIGFuIGludGVnZXIgb3IgYQorOzsgc3RyaW5nLCB3aGljaCB0aGUgb3Bl
cmF0aW5nIHN5c3RlbSB3aWxsIGFiYnJldmlhdGUgaWYgdG9vIGxvbmcuICBPbgorOzsgTVMtV2lu
ZG93cywgdGhlIHRhc2tiYXIgYmFkZ2Ugd2lsbCBiZSBhYmJyZXZpYXRlZCB0byB0aHJlZQorOzsg
Y2hhcmFjdGVyczsgaWYgdGhlIGNvdW50IGlzIGFuIGludGVnZXIgb3V0c2lkZSB0aGUgcmFuZ2Ug
LTk5IHRvIDk5LAorOzsgaXQgaXMgc2hvd24gYXMgIi05OSIgb3IgIjk5KyIsIGlmIGNvdW50IGlz
IGEgc3RyaW5nIGxvbmdlciB0aGFuIDMKKzs7IGNoYXJhY3RlcnMgaXQgaXMgdHJ1bmNhdGVkLgor
OzsKKzs7IGBzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24nIGZsYXNoZXMgb3IgYm91bmNlcyB0aGUg
RW1hY3MgdGFza2JhciBpY29uCis7OyB0byBpbmRpY2F0ZSB0aGF0IHlvdXIgRW1hY3Mgc2Vzc2lv
biB3YW50cyBhdHRlbnRpb24uICBJdHMgYmVoYXZpb3JzCis7OyBhcmUgYmFjay1lbmQgc3BlY2lm
aWMuCis7OworOzsgYHN5c3RlbS10YXNrYmFyLXByb2dyZXNzJyBvdmVybGF5cyBhIGdyYXBoaWNh
bCBwcm9ncmVzcyBiYXIgb24gdGhlCis7OyBFbWFjcyB0YXNrYmFyIGljb24gdG8gaWxsdXN0cmF0
ZSBwcm9ncmVzcyBvZiBhIHBvdGVudGlhbGx5Cis7OyBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLgor
OzsKKzs7IFRoZSBjb252ZW5pZW5jZSBtYWNyb3MgYGRvdGltZXMtd2l0aC1zeXN0ZW0tdGFza2Jh
ci1wcm9ncmVzcy1yZXBvcnRlcicKKzs7IGFuZCBgZG9saXN0LXdpdGgtc3lzdGVtLXRhc2tiYXIt
cHJvZ3Jlc3MtcmVwb3J0ZXInIGRpc3BsYXkgcHJvZ3Jlc3MgaW4KKzs7IHRoZSBlY2hvLWFyZWEg
YW5kIG9uIHRoZSB0YXNrYmFyIGljb24uICBUaGV5IGFyZSBhbmFsb2dvdXMgdG8gdGhlaXIKKzs7
IGVjaG8tYXJlYSBvbmx5IGNvdW50ZXJwYXJ0cyBgZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9y
dGVyJyBhbmQKKzs7IGBkb2xpc3Qtd2l0aC1wcm9ncmVzcy1yZXBvcnRlcicsIHJlc3BlY3RpdmVs
eS4KKzs7Cis7OyBPbiBHTlUvTGludXggc3lzdGVtcywgdGhlIGltcGxlbWVudGF0aW9uIGlzIHZp
YSBELUJ1cyB0byBjb250cm9sIEdVSQorOzsgc2hlbGxzIGFuZC9vciBzaGVsbCBleHRlbnNpb25z
IHN1Y2ggYXMKKzs7IGh0dHBzOi8vZXh0ZW5zaW9ucy5nbm9tZS5vcmcvZXh0ZW5zaW9uLzMwNy9k
YXNoLXRvLWRvY2svIHRoYXQKKzs7IGltcGxlbWVudCBVYnVudHUncyBVbml0eSBsYXVuY2hlciBz
cGVjCis7OyBodHRwczovL3dpa2kudWJ1bnR1LmNvbS9Vbml0eS9MYXVuY2hlckFQSS4KKzs7Cis7
OyBZb3VyIExpbnV4IEVtYWNzIGluc3RhbmNlIHNob3VsZCBiZSBsYXVuY2hlZCB2aWEgYW4gYXBw
cm9wcmlhdGUgc2hlbGwKKzs7ICJkZXNrdG9wIiBmaWxlIHN1Y2ggYXMgdGhvc2UgZGlzdHJpYnV0
ZWQgd2l0aCBFbWFjczsgZS5nLiwKKzs7ICJldGMvZW1hY3NjbGllbnQuZGVza3RvcCIgYXMgZG9j
dW1lbnRlZCBoZXJlCis7OyBodHRwczovL3NwZWNpZmljYXRpb25zLmZyZWVkZXNrdG9wLm9yZy9k
ZXNrdG9wLWVudHJ5L2xhdGVzdC8gYW5kCis7OyB3aGljaCB5b3VyIEdVSSBzeXN0ZW0gc2hvdWxk
IGltcGxlbWVudC4KKzs7Cis7OyBPbiBtYWNPUy9HTlVzdGVwIHN5c3RlbXMgKGFrYSBOUykgYW5k
IE1TLVdpbmRvd3MsIG5hdGl2ZSBBUElzIGFyZQorOzsgdXNlZCBhbmQgRC1CdXMgaXMgbm90LCBl
dmVuIGlmIEQtQnVzIGlzIGNvbmZpZ3VyZWQgaW4geW91ciBidWlsZC4KKzs7Cis7OyBUbyBhZGQg
c3VwcG9ydCBmb3IgYWRkaXRpb25hbCBzeXN0ZW1zLCBwcm92aWRlIGEgYmFjayBlbmQgdGhhdCBp
bXBsZW1lbnRzCis7OyB0aGUgY2wtZ2VuZXJpYyBmdW5jdGlvbnMgYmVsb3cuCisKKzs7OyBDb2Rl
OgorCisocmVxdWlyZSAnZGJ1cykKKworKGRlZmdyb3VwIHN5c3RlbS10YXNrYmFyIG5pbAorICAi
U3lzdGVtIEdVSSB0YXNrYmFyIGljb24gYmFkZ2UsIHByb2dyZXNzIHJlcG9ydCwgYWxlcnRpbmcu
IgorICA6Z3JvdXAgJ2NvbnZlbmllbmNlCisgIDp2ZXJzaW9uICIzMS4xIikKKworKGRlZmN1c3Rv
bSBzeXN0ZW0tdGFza2Jhci1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXMgdAorICAiQ2xl
YXIgdGhlIGljb24gYXR0ZW50aW9uIGluZGljYXRvciB3aGVuIGFueSBHVUkgZnJhbWUgaXMgZm9j
dXNlZC4KK0JhY2sgZW5kcyB0aGF0IGF1dG9tYXRpY2FsbHkgY2xlYXIgdGhlIGF0dGVudGlvbiBp
bmRpY2F0b3IsIHN1Y2ggYXMKK21hY09TL0dOVXN0ZXAgYW5kIE1TLVdpbmRvd3MsIGlnbm9yZSB0
aGlzIG9wdGlvbi4iCisgIDp0eXBlICdib29sZWFuCisgIDp2ZXJzaW9uICIzMS4xIikKKworKGRl
ZmN1c3RvbSBzeXN0ZW0tdGFza2Jhci1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lICJlbWFjc2NsaWVu
dCIKKyAgIkQtQnVzIGRlc2t0b3AgZmlsZSBiYXNlIG5hbWUgZm9yIHRoZSBzeXN0ZW0gdGFza2Jh
ciBkZXN0aW5hdGlvbi4KK1RoaXMgc2hvdWxkIGJlIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRlc2t0
b3AgZmlsZSB1c2VkIHRvIGxhdW5jaCBhbiBFbWFjcworaW5zdGFuY2UuICBGb3IgZXhhbXBsZSwg
aWYgeW91ciBsYXVuY2hlciBkZXNrdG9wIGZpbGUgaXMgY2FsbGVkCitcImVtYWNzLmRlc2t0b3Bc
IiwgdGhpcyBvcHRpb24gc2hvdWxkIGJlIFwiZW1hY3NcIi4iCisgIDp0eXBlICdzdHJpbmcKKyAg
OnZlcnNpb24gIjMxLjEiKQorCisoZGVmY3VzdG9tIHN5c3RlbS10YXNrYmFyLWRidXMtdGltZW91
dCBuaWwKKyAgIk51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgRC1CdXMgcmVzcG9u
c2VzLgorSWYgbmlsLCB1c2UgdGhlIGBkYnVzYCBkZWZhdWx0IHRpbWVvdXQgaW4gYGRidXMtY2Fs
bC1tZXRob2RgIHdoaWNoIGlzCisyNTAwMCAoaS5lLiwgMjVtcykuCisKK0lmIHlvdXIgRC1CdXMg
ZGVza3RvcCBleHRlbnNpb24gbmVlZHMgZXh0cmEgdGltZSB0byByZXNwb25kLCBpbiB3aGljaAor
Y2FzZSBgc3lzdGVtLXRhc2tiYXItbW9kZWAgbWlnaHQgbm90IGluaXRpYWxpemUgb3IgcmVsYXRl
ZCBmdW5jdGlvbnMKK21pZ2h0IG5vdCB0YWtlIHZpc2libGUgZWZmZWN0LCBiaW5kIHRoaXMgdG8g
YSB2YWx1ZSBoaWdoZXIgdGhhbiAyNTAwMCB0bworZmluZCB3aGF0IHdvcmtzIGZvciB5b3VyIHN5
c3RlbS4iCisgIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJEZWZhdWx0IiBuaWwpIG5hdG51
bSkKKyAgOnZlcnNpb24gIjMxLjEiKQorCisoZGVmdmFyIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVu
ZCBuaWwKKyAgIkdlbmVyaWMgdGFza2JhciBtZXRob2Qgc3lzdGVtIGRpc3BhdGNoZXIuIikKKwor
KGRlZnVuIHN5c3RlbS10YXNrYmFyLS1zZXQtYmFjay1lbmQgKCkKKyAgIkRldGVybWluZSB0YXNr
YmFyIGhvc3Qgc3lzdGVtIHR5cGUuIgorICA7OyBPcmRlciBtYXR0ZXJzIHRvIGFjY29tbW9kYXRl
IHRoZSBjYXNlcyB3aGVyZSBhbiBOUyBvciBNUy1XaW5kb3dzCisgIDs7IGJ1aWxkIGhhdmUgdGhl
IGRidXMgZmVhdHVyZS4KKyAgKGNvbmQgKChib3VuZHAgJ25zLXZlcnNpb24tc3RyaW5nKQorICAg
ICAgICAgKHNldHEgc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kICducykpCisgICAgICAgICgoYm91
bmQtYW5kLXRydWUtcCB3MzItaW5pdGlhbGl6ZWQpCisgICAgICAgICAoc2V0cSBzeXN0ZW0tdGFz
a2Jhci0tYmFjay1lbmQgJ3czMikpCisgICAgICAgICgoYW5kIChmZWF0dXJlcCAnZGJ1c2JpbmQp
CisgICAgICAgICAgICAgIChtZW1iZXIgIm9yZy5mcmVlZGVza3RvcC5sb2dpbjEiCisgICAgICAg
ICAgICAgICAgICAgICAgKGRidXMtbGlzdC1hY3RpdmF0YWJsZS1uYW1lcyA6c3lzdGVtKSkpCisg
ICAgICAgICAoc2V0cSBzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgJ2RidXMpKQorICAgICAgICAo
dAorICAgICAgICAgKHNldHEgc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIG5pbCkpKSkKKworOzs7
IyMjYXV0b2xvYWQKKyhkZWZpbmUtbWlub3ItbW9kZSBzeXN0ZW0tdGFza2Jhci1tb2RlCisgICJT
eXN0ZW0gR1VJIHRhc2tiYXIgaWNvbiBiYWRnZSwgcHJvZ3Jlc3MgcmVwb3J0LCBhbGVydGluZy4i
CisgIDpnbG9iYWwgdAorICAod2hlbiBub25pbnRlcmFjdGl2ZQorICAgICh3YXJuICJCYXRjaCBt
b2RlIGRvZXMgbm90IHN1cHBvcnQgYHN5c3RlbS10YXNrYmFyJyIpKQorICAoY29uZCAoc3lzdGVt
LXRhc2tiYXItbW9kZQorICAgICAgICAgKGlmIChzeXN0ZW0tdGFza2Jhci0tc2V0LWJhY2stZW5k
KQorICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tZW5hYmxlKQorICAgICAgICAgICAod2Fy
biAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgYHN5c3RlbS10YXNrYmFyJyIpKSkKKyAgICAgICAg
KHQKKyAgICAgICAgICh3aGVuIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZAorICAgICAgICAgICAo
c3lzdGVtLXRhc2tiYXItLWRpc2FibGUpCisgICAgICAgICAgIChzZXRxIHN5c3RlbS10YXNrYmFy
LS1iYWNrLWVuZCBuaWwpKSkpKQorCisoY2wtZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci0tZW5h
YmxlICgpCisgICJFbmFibGUgdGhlIHN5c3RlbS10YXNrYmFyIGJhY2sgZW5kLiIpCisKKyhjbC1k
ZWZnZW5lcmljIHN5c3RlbS10YXNrYmFyLS1kaXNhYmxlICgpCisgICJEaXNhYmxlIHRoZSBzeXN0
ZW0tdGFza2JhciBiYWNrIGVuZC4iKQorCisoY2wtZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci1i
YWRnZSAoJm9wdGlvbmFsIGNvdW50KQorICAiRGlzcGxheSBhIENPVU5UIG92ZXJsYXkgb24gdGhl
IHN5c3RlbSB0YXNrYmFyIEVtYWNzIGljb24uCitJZiBDT1VOVCBpcyBhbiBpbnRlZ2VyLCBkaXNw
bGF5IHRoYXQgYXMgdGhlIGljb24gYmFkZ2UuCitJZiBDT1VOVCBpcyBhIHN0cmluZyBvbiBiYWNr
IGVuZHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgc3RyaW5ncywgY29udmVydAorQ09VTlQgdG8gYW4g
aW50ZWdlciwgb3IgbmlsIGlmIHRoYXQgZmFpbHMuCitJZiBDT1VOVCBpcyBuaWwgb3IgYW4gZW1w
dHkgc3RyaW5nLCByZW1vdmUgdGhlIGNvdW50ZXIuIikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVt
LXRhc2tiYXItYXR0ZW50aW9uICgmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiRmxhc2gg
dGhlIHN5c3RlbSB0YXNrYmFyIGljb24gYW5kL29yIGZyYW1lIHRvIGFsZXJ0IHRoZSB1c2VyLgor
SWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBpbmZvcm1hdGlvbmFsJywgcmVxdWVzdCBub3JtYWwg
YXR0ZW50aW9uLgorSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBjcml0aWNhbCcsIHJlcXVlc3Qg
dXJnZW50IGF0dGVudGlvbi4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9u
IGluZGljYXRvci4KKworSWYgVElNRU9VVCBpcyBub24tbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9u
IGluZGljYXRvciBhZnRlciBUSU1FT1VUCitzZWNvbmRzLCBvdGhlcndpc2UgdGhlIGF0dGVudGlv
biBpbmRpY2F0b3Igd2lsbCBiZSBjbGVhcmVkIGVpdGhlciBpZiB0aGUKK2ZyYW1lIGlzIGZvY3Vz
ZWQgYnkgdGhlIHVzZXIgb3IgaWYgYHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbicgaXMgY2FsbGVk
Cit3aXRoIG5pbCBVUkdFTkNZLgorCitPbiBzb21lIGJhY2sgZW5kcywgYW4gYGluZm9ybWF0aW9u
YWwnIGF0dGVudGlvbiByZXF1ZXN0IHdpbGwgdGltZSBvdXQKK2F1dG9tYXRpY2FsbHkuICBJbiBj
b250cmFzdCwgYSBgY3JpdGljYWxgIHJlcXVlc3QgcmVxdWlyZXMgdGhhdCB0aGUgdXNlcgorYnJp
bmcgRW1hY3MgaW50byBmb2N1cyBhbmQgd2lsbCBub3QgdGltZSBvdXQuICBPbiBzb21lIGJhY2sg
ZW5kcywKK2Bjcml0aWNhbCcgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBgaW5mb3JtYXRpb25hbCcu
IikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKCZvcHRpb25hbCBw
cm9ncmVzcykKKyAgIkRpc3BsYXkgYSBwcm9ncmVzcyBpbmRpY2F0b3Igb3ZlcmxheSBvbiB0aGUg
c3lzdGVtIHRhc2tiYXIgaWNvbi4KK1BST0dSRVNTIGlzIGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAu
MCB0byAxLjAuCitJZiBQUk9HUkVTUyBpcyBuaWwsIHJlbW92ZSB0aGUgcHJvZ3Jlc3MgaW5kaWNh
dG9yLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tdmFsaWRhdGUtcHJvZ3Jlc3MgKHByb2dy
ZXNzKQorICAiUmV0dXJuIFBST0dSRVNTIGFzIGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAx
LjAsIG9yIG5pbC4iCisgICh3aGVuIChuYXRudW1wIHByb2dyZXNzKQorICAgIChzZXRxIHByb2dy
ZXNzIChmbG9hdCBwcm9ncmVzcykpKQorICAod2hlbiAoYW5kIHByb2dyZXNzICg+PSBwcm9ncmVz
cyAwLjApICg8PSBwcm9ncmVzcyAxLjApKQorICAgIHByb2dyZXNzKSkKKworDAorOzsgYHByb2dy
ZXNzLXJlcG9ydGVyJyBzdXBwb3J0LgorCisoZGVmdW4gc3lzdGVtLXRhc2tiYXItLXByb2dyZXNz
LXJlcG9ydGVyLXVwZGF0ZSAoX3JlcG9ydGVyIHBlcmNlbnRhZ2UgaW5kZXgpCisgICJgcHJvZ3Jl
c3MtcmVwb3J0ZXItZG8tdXBkYXRlYCBjYWxsYmFjay4KK1JFUE9SVEVSIHNob3VsZCBiZSB0aGUg
cmVzdWx0IG9mIGEgY2FsbCB0byBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcicuCitQRVJDRU5UQUdF
IGlzIGluIHRoZSByYW5nZSAwLTEwMCwgb3IgbmlsIGZvciBhIHB1bHNpbmcgcmVwb3J0ZXIuCitJ
TkRFWCBpcyBpbiB0aGUgcmFuZ2UgMC0zLCBvciBuaWwgZm9yIGEgbnVtZXJpYyByZXBvcnRlci4i
CisgIChjb25kIChwZXJjZW50YWdlCisgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3Mg
KC8gcGVyY2VudGFnZSAxMDAuMCkpKQorICAgICAgICAoaW5kZXgKKyAgICAgICAgIChzeXN0ZW0t
dGFza2Jhci1wcm9ncmVzcyAoLyAoMSsgaW5kZXgpIDQuMCkpKSkpCisKKyhkZWZ1biBzeXN0ZW0t
dGFza2Jhci0tcHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZSAoX3JlcG9ydGVyKQorICAiYHByb2dyZXNz
LXJlcG9ydGVyLWRvbmVgIGNhbGxiYWNrLgorUkVQT1JURVIgc2hvdWxkIGJlIHRoZSByZXN1bHQg
b2YgYSBjYWxsIHRvIGBtYWtlLXByb2dyZXNzLXJlcG9ydGVyJy4iCisgIChzeXN0ZW0tdGFza2Jh
ci1wcm9ncmVzcyBuaWwpKQorCisoZGVmdW4gc3lzdGVtLXRhc2tiYXItbWFrZS1wcm9ncmVzcy1y
ZXBvcnRlciAocmVwb3J0ZXItb3ItbWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBtaW4tdmFsdWUgbWF4LXZhbHVlCisJCQkJICAg
ICAgICAgICAgICBjdXJyZW50LXZhbHVlIG1pbi1jaGFuZ2UgbWluLXRpbWUpCisgICJwcm9ncmVz
cy1yZXBvcnRlciBoZWxwZXIuCitSRVBPUlRFUi1PUi1NRVNTQUdFLCBNSU4tVkFMVUUsIE1BWC1W
QUxVRSwgQ1VSUkVOVC1WQUxVRSwgTUlOLUNIQU5HRSwKK01JTi1USU1FIGhhdmUgdGhlIHNhbWUg
bWVhbmluZyBhcyBpbiBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcicuIgorICAoaWYgKHN0cmluZ3Ag
cmVwb3J0ZXItb3ItbWVzc2FnZSkKKyAgICAgIChtYWtlLXByb2dyZXNzLXJlcG9ydGVyIHJlcG9y
dGVyLW9yLW1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi12YWx1ZSBt
YXgtdmFsdWUKKwkJCSAgICAgIGN1cnJlbnQtdmFsdWUgbWluLWNoYW5nZSBtaW4tdGltZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIydzeXN0ZW0tdGFza2Jhci0tcHJvZ3Jlc3MtcmVw
b3J0ZXItdXBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ3N5c3RlbS10YXNr
YmFyLS1wcm9ncmVzcy1yZXBvcnRlci1kb25lKQorICAgIChsZXQqICgocGFyYW1ldGVycyAoY2Ry
IHJlcG9ydGVyLW9yLW1lc3NhZ2UpKQorICAgICAgICAgICAodXBkYXRlLWNhbGxiYWNrIChhcmVm
IHBhcmFtZXRlcnMgNykpCisgICAgICAgICAgIChkb25lLWNhbGxiYWNrIChhcmVmIHBhcmFtZXRl
cnMgOCkpKQorICAgICAgKHVubGVzcyB1cGRhdGUtY2FsbGJhY2sKKyAgICAgICAgKGFzZXQgcGFy
YW1ldGVycyA3CisgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLXByb2dyZXNzLXJlcG9y
dGVyLXVwZGF0ZSkpCisgICAgICAodW5sZXNzIGRvbmUtY2FsbGJhY2sKKyAgICAgICAgKGFzZXQg
cGFyYW1ldGVycyA4CisgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLXByb2dyZXNzLXJl
cG9ydGVyLWRvbmUpKQorICAgICAgcmVwb3J0ZXItb3ItbWVzc2FnZSkpKQorCisoZGVmbWFjcm8g
ZG90aW1lcy13aXRoLXN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyIChzcGVjCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBv
cnRlci1vci1tZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcmVzdCBib2R5KQorICAiTG9vcCBhIG51bWJlciBvZiB0aW1lcyBh
bmQgcmVwb3J0IHByb2dyZXNzLgorUmVwb3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEgYW5k
IHN5c3RlbSB0YXNrYmFyLgorRXZhbHVhdGUgQk9EWSB3aXRoIFZBUiBib3VuZCB0byBzdWNjZXNz
aXZlIGludGVnZXJzIHJ1bm5pbmcgZnJvbQorMCwgaW5jbHVzaXZlLCB0byBDT1VOVCwgZXhjbHVz
aXZlLiAgVGhlbiBldmFsdWF0ZSBSRVNVTFQgdG8gZ2V0Cit0aGUgcmV0dXJuIHZhbHVlIChuaWwg
aWYgUkVTVUxUIGlzIG9taXR0ZWQpLgorCitTUEVDIGFuZCBSRVBPUlRFUi1PUi1NRVNTQUdFIGhh
dmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbgorYGRvdGltZXMtd2l0aC1wcm9ncmVzcy1yZXBvcnRl
cmAuIgorICAoZGVjbGFyZSAoaW5kZW50IDIpIChkZWJ1ZyAoKHN5bWJvbHAgZm9ybSAmb3B0aW9u
YWwgZm9ybSkgZm9ybSBib2R5KSkpCisgIChsZXQgKChlbmQgKG1ha2Utc3ltYm9sICItLWRvdGlt
ZXMtZW5kLS0iKSkKKyAgICAgICAgKHJlcG9ydGVyIChtYWtlLXN5bWJvbCAicmVwb3J0ZXIiKSkp
CisgICAgYCh1bndpbmQtcHJvdGVjdAorICAgICAgICAgKGxldCogKCgsZW5kICwoY2FkciBzcGVj
KSkKKyAgICAgICAgICAgICAgICAoLHJlcG9ydGVyCisgICAgICAgICAgICAgICAgIChzeXN0ZW0t
dGFza2Jhci1tYWtlLXByb2dyZXNzLXJlcG9ydGVyCisgICAgICAgICAgICAgICAgICAscmVwb3J0
ZXItb3ItbWVzc2FnZQorICAgICAgICAgICAgICAgICAgMCAsZW5kKSkpCisgICAgICAgICAgIChk
b3RpbWVzLXdpdGgtcHJvZ3Jlc3MtcmVwb3J0ZXIKKyAgICAgICAgICAgICAgICxzcGVjCisgICAg
ICAgICAgICAgICAscmVwb3J0ZXIKKyAgICAgICAgICAgICAsQGJvZHkpKQorICAgICAgIChzeXN0
ZW0tdGFza2Jhci1wcm9ncmVzcyBuaWwpKSkpCisKKyhkZWZtYWNybyBkb2xpc3Qtd2l0aC1zeXN0
ZW0tdGFza2Jhci1wcm9ncmVzcy1yZXBvcnRlciAoc3BlYworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci1vci1tZXNzYWdlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZy
ZXN0IGJvZHkpCisgICJMb29wIG92ZXIgYSBsaXN0IGFuZCByZXBvcnQgcHJvZ3Jlc3MuCitSZXBv
cnQgcHJvZ3Jlc3MgaW4gdGhlIGVjaG8gYXJlYSBhbmQgc3lzdGVtIHRhc2tiYXIuCitFdmFsdWF0
ZSBCT0RZIHdpdGggVkFSIGJvdW5kIHRvIGVhY2ggY2FyIGZyb20gTElTVCwgaW4gdHVybi4KK1Ro
ZW4gZXZhbHVhdGUgUkVTVUxUIHRvIGdldCByZXR1cm4gdmFsdWUsIGRlZmF1bHQgbmlsLgorCitT
UEVDIGFuZCBSRVBPUlRFUi1PUi1NRVNTQUdFIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbgor
YGRvbGlzdC13aXRoLXByb2dyZXNzLXJlcG9ydGVyYC4iCisgIChkZWNsYXJlIChpbmRlbnQgMikg
KGRlYnVnICgoc3ltYm9scCBmb3JtICZvcHRpb25hbCBmb3JtKSBmb3JtIGJvZHkpKSkKKyAgKGxl
dCAoKGxpc3QgKG1ha2Utc3ltYm9sICItLWRvbGlzdC1saXN0LS0iKSkKKyAgICAgICAgKHJlcG9y
dGVyIChtYWtlLXN5bWJvbCAicmVwb3J0ZXIiKSkpCisgICAgYCh1bndpbmQtcHJvdGVjdAorICAg
ICAgICAgKGxldCogKCgsbGlzdCAsKGNhZHIgc3BlYykpCisgICAgICAgICAgICAgICAgKCxyZXBv
cnRlcgorICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItbWFrZS1wcm9ncmVzcy1yZXBv
cnRlcgorICAgICAgICAgICAgICAgICAgLHJlcG9ydGVyLW9yLW1lc3NhZ2UKKyAgICAgICAgICAg
ICAgICAgIDAgKGxlbmd0aCAsbGlzdCkpKSkKKyAgICAgICAgICAgKGRvbGlzdC13aXRoLXByb2dy
ZXNzLXJlcG9ydGVyCisgICAgICAgICAgICAgICAsc3BlYworICAgICAgICAgICAgICAgLHJlcG9y
dGVyCisgICAgICAgICAgICAgLEBib2R5KSkKKyAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jl
c3MgbmlsKSkpKQorCisMCis7OyBELUJ1cyBzdXBwb3J0LgorCisoZGVmY29uc3Qgc3lzdGVtLXRh
c2tiYXItLWRidXMtc2VydmljZSAiY29tLmNhbm9uaWNhbC5Vbml0eSIpCisoZGVmY29uc3Qgc3lz
dGVtLXRhc2tiYXItLWRidXMtaW50ZXJmYWNlICJjb20uY2Fub25pY2FsLlVuaXR5LkxhdW5jaGVy
RW50cnkiKQorCisoZGVmdmFyIHN5c3RlbS10YXNrYmFyLS1kYnVzLWF0dGVudGlvbiBuaWwKKyAg
Ik5vbi1uaWwgd2hlbiBhdHRlbnRpb24gaXMgcmVxdWVzdGVkLiIpCisKKyhkZWZ1biBzeXN0ZW0t
dGFza2Jhci0tZGJ1cy1zZW5kLXNpZ25hbCAobWVzc2FnZSkKKyAgIlNlbmQgTUVTU0FHRSB0byB0
aGUgRC1CdXMgc3lzdGVtIHRhc2tiYXIgc2VydmljZS4iCisgIChsZXQgKChhcHAtdXJpCisgICAg
ICAgICAoZm9ybWF0ICJhcHBsaWNhdGlvbjovLyVzLmRlc2t0b3AiCisgICAgICAgICAgICAgICAg
IHN5c3RlbS10YXNrYmFyLWRidXMtZGVza3RvcC1maWxlLW5hbWUpKSkKKyAgICAoZGJ1cy1zZW5k
LXNpZ25hbAorICAgICA6c2Vzc2lvbgorICAgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNl
CisgICAgICIvIgorICAgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1pbnRlcmZhY2UKKyAgICAgIlVw
ZGF0ZSIKKyAgICAgYXBwLXVyaQorICAgICBtZXNzYWdlKSkpCisKKyhkZWZ1biBzeXN0ZW0tdGFz
a2Jhci0tZGJ1cy1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXMgKCkKKyAgIkNsZWFyIGFu
IGFjdGl2ZSBELUJ1cyBhdHRlbnRpb24gcmVxdWVzdCBpZiBhbnkgZnJhbWUgaXMgZm9jdXNlZC4i
CisgICh3aGVuIChhbmQgc3lzdGVtLXRhc2tiYXItLWRidXMtYXR0ZW50aW9uCisgICAgICAgICAg
ICAgKGNhdGNoIDpjbGVhcgorICAgICAgICAgICAgICAgKGRvbGlzdCAoZnJhbWUgKGZyYW1lLWxp
c3QpKQorICAgICAgICAgICAgICAgICAod2hlbiAoZXEgKGZyYW1lLWZvY3VzLXN0YXRlIGZyYW1l
KSB0KQorICAgICAgICAgICAgICAgICAgICh0aHJvdyA6Y2xlYXIgdCkpKSkpCisgICAgKHN5c3Rl
bS10YXNrYmFyLWF0dGVudGlvbiBuaWwpKSkKKworKGRlZnVuIHN5c3RlbS10YXNrYmFyLWRidXMt
cGluZy1zZXJ2aWNlICgpCisgICJSZXR1cm4gbm9uLW5pbCBpZiBgc3lzdGVtLXRhc2tiYXItLWRi
dXMtc2VydmljZScgcmVzcG9uZHMuCitSZXR1cm4gbmlsIGlmIG5vIHJlc3BvbnNlIHdpdGhpbiBg
c3lzdGVtLXRhc2tiYXItZGJ1cy10aW1lb3V0Jy4iCisgIChkYnVzLXBpbmcKKyAgIDpzZXNzaW9u
CisgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNlCisgICBzeXN0ZW0tdGFza2Jhci1kYnVz
LXRpbWVvdXQpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLS1lbmFibGUgKCZjb250
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jh
ci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpKQorICAodW5sZXNzIChzeXN0ZW0tdGFza2Jhci1kYnVz
LXBpbmctc2VydmljZSkKKyAgICAoZXJyb3IgIkQtQnVzIHNlcnZpY2UgYCVzJyB1bmF2YWlsYWJs
ZSIgc3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZSkpCisgICh3aGVuIHN5c3RlbS10YXNrYmFy
LWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1cworICAgIChhZGQtZnVuY3Rpb24gOmFmdGVy
IGFmdGVyLWZvY3VzLWNoYW5nZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgIydzeXN0ZW0t
dGFza2Jhci0tZGJ1cy1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXMpKSkKKworKGNsLWRl
Zm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAn
ZGJ1cykpKQorICAocmVtb3ZlLWZ1bmN0aW9uIGFmdGVyLWZvY3VzLWNoYW5nZS1mdW5jdGlvbgor
ICAgICAgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLWRidXMtY2xlYXItYXR0ZW50aW9u
LW9uLWZyYW1lLWZvY3VzKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRnZSAo
JmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFz
a2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmb3B0aW9uYWwgY291bnQpCisgICJEaXNwbGF5IENPVU5UIGFzIGFuIG92ZXJsYXkg
b24gdGhlIHN5c3RlbSB0YXNrYmFyIEVtYWNzIGljb24uCitJZiBDT1VOVCBpcyBhbiBpbnRlZ2Vy
LCBkaXNwbGF5IHRoYXQuICBJZiBDT1VOVCBpcyBhIHN0cmluZywgY29udmVydCBpdAordG8gYW4g
aW50ZWdlciwgb3IgbmlsIGlmIHRoYXQgZmFpbHMuICBJZiBDT1VOVCBpcyBhbnkgb3RoZXIgdHlw
ZSwgdXNlCituaWwuICBJZiBDT1VOVCBpcyBuaWwgb3IgYW4gZW1wdHkgc3RyaW5nLCByZW1vdmUg
dGhlIGJhZGdlLgorTm90ZTogVGhlIFVuaXR5IEQtQnVzIHByb3RvY29sIHN1cHBvcnRzIG9ubHkg
aW50ZWdlciBiYWRnZXMuIgorICAoY29uZCAoKHN0cmluZ3AgY291bnQpCisgICAgICAgICAoaWYg
KHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAgIChzZXRxIGNvdW50IG5pbCkKKyAg
ICAgICAgICAgKGxldCAoKGNvdW50LTEgKHN0cmluZy10by1udW1iZXIgY291bnQpKSkKKyAgICAg
ICAgICAgICAoc2V0cSBjb3VudCAoaWYgKGludGVnZXJwIGNvdW50LTEpIGNvdW50LTEgbmlsKSkp
KSkKKyAgICAgICAgKChub3QgKGludGVnZXJwIGNvdW50KSkKKyAgICAgICAgIChzZXRxIGNvdW50
IG5pbCkpKQorICAoc3lzdGVtLXRhc2tiYXItLWRidXMtc2VuZC1zaWduYWwKKyAgIGAoKDpkaWN0
LWVudHJ5ICJjb3VudC12aXNpYmxlIgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDpib29s
ZWFuICwobm90IChudWxsIGNvdW50KSkpKQorICAgICAoOmRpY3QtZW50cnkgImNvdW50IgorICAg
ICAgICAgICAgICAgICAgKDp2YXJpYW50IDp1aW50MzIgLChpZiAobnVsbCBjb3VudCkgMAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKSkpKSkKKworKGNsLWRl
Zm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gKCZjb250ZXh0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFs
ICdkYnVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9u
YWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9u
IHRoZSBzeXN0ZW0gdGFza2JhciBFbWFjcyBpY29uLgorVGhlIHJlcXVlc3Qgd2lsbCB0aW1lIG91
dCB3aXRoaW4gdGhlIFRJTUVPVVQgc2Vjb25kcyBpbnRlcnZhbC4KK1RoZSBVbml0eSBELUJ1cyBw
cm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IGRpZmZlcmVudGlhdGVkIHVyZ2VuY2llcy4iCisgIChz
ZXRxIHN5c3RlbS10YXNrYmFyLS1kYnVzLWF0dGVudGlvbiB1cmdlbmN5KQorICAoc3lzdGVtLXRh
c2tiYXItLWRidXMtc2VuZC1zaWduYWwKKyAgIGAoKDpkaWN0LWVudHJ5ICJ1cmdlbnQiCisgICAg
ICAgICAgICAgICAgICAoOnZhcmlhbnQgOmJvb2xlYW4gLChub3QgKG51bGwgdXJnZW5jeSkpKSkp
KQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkKKyAgICAocnVuLXdpdGgtdGltZXIKKyAg
ICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gbmls
KSkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKCZjb250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJh
Y2stZW5kIChlcWwgJ2RidXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm9wdGlvbmFsIHByb2dyZXNzKQorICAiRGlzcGxheSBhIHByb2dyZXNzIGJhciBvdmVybGF5
IG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUg
cmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVz
cyBiYXIuIgorICAoc2V0cSBwcm9ncmVzcyAoc3lzdGVtLXRhc2tiYXItLXZhbGlkYXRlLXByb2dy
ZXNzIHByb2dyZXNzKSkKKyAgKHN5c3RlbS10YXNrYmFyLS1kYnVzLXNlbmQtc2lnbmFsCisgICBg
KCg6ZGljdC1lbnRyeSAicHJvZ3Jlc3MtdmlzaWJsZSIKKyAgICAgICAgICAgICAgICAgICg6dmFy
aWFudCA6Ym9vbGVhbiAsKG5vdCAobnVsbCBwcm9ncmVzcykpKSkKKyAgICAgKDpkaWN0LWVudHJ5
ICJwcm9ncmVzcyIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFudCA6ZG91YmxlICwoaWYgKG51
bGwgcHJvZ3Jlc3MpIDAgcHJvZ3Jlc3MpKSkpKSkKKworDAorOzsgbWFjT1MvR05Vc3RlcCBOUyBz
dXBwb3J0LgorCisoZGVjbGFyZS1mdW5jdGlvbiBucy1iYWRnZSAibnNmbnMubSIpCisoZGVjbGFy
ZS1mdW5jdGlvbiBucy1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uICJuc2Zucy5tIikKKyhkZWNsYXJl
LWZ1bmN0aW9uIG5zLXByb2dyZXNzLWluZGljYXRvciAibnNmbnMubSIpCisKKyhjbC1kZWZtZXRo
b2Qgc3lzdGVtLXRhc2tiYXItLWVuYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICducykpKQor
ICAoaWdub3JlKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoJmNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFz
a2Jhci0tYmFjay1lbmQgKGVxbCAnbnMpKSkKKyAgKGlnbm9yZSkpCisKKyhjbC1kZWZtZXRob2Qg
c3lzdGVtLXRhc2tiYXItYmFkZ2UgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ25zKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudCkKKyAgIkRpc3BsYXkg
Q09VTlQgYXMgYW4gb3ZlcmxheSBvbiB0aGUgRG9jayBiYWRnZS4KK0lmIENPVU5UIGlzIGFuIGlu
dGVnZXIgb3IgYSBub24tZW1wdHkgc3RyaW5nLCBkaXNwbGF5IHRoYXQuICBJZiBDT1VOVCBpcwor
bmlsIG9yIGFuIGVtcHR5IHN0cmluZywgY2xlYXIgdGhlIGJhZGdlIG92ZXJsYXkuCitOb3RlOiBO
UyB3aWxsIGFiYnJldmlhdGUgbG9uZyBzdHJpbmdzIHRvIGZpdCB0aGUgYmFkZ2UncyBhbGxvY2F0
ZWQKK3NwYWNlLiIKKyAgKGNvbmQgKChzdHJpbmdwIGNvdW50KQorICAgICAgICAgKHdoZW4gKHN0
cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAoc2V0cSBjb3VudCBuaWwpKSkKKyAgICAg
ICAgKChpbnRlZ2VycCBjb3VudCkKKyAgICAgICAgIChzZXRxIGNvdW50IChudW1iZXItdG8tc3Ry
aW5nIGNvdW50KSkpCisgICAgICAgICh0IChzZXRxIGNvdW50IG5pbCkpKQorICAobnMtYmFkZ2Ug
Y291bnQpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiAoJmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2ti
YXItLWJhY2stZW5kIChlcWwgJ25zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZIHVz
ZXIgYXR0ZW50aW9uIG9uIHRoZSBEb2NrLgorVGhlIGF0dGVudGlvbiBpbmRpY2F0b3Igd2lsbCBi
ZSBjbGVhcmVkIGFmdGVyIFRJTUVPVVQgc2Vjb25kcy4iCisgIChucy1yZXF1ZXN0LXVzZXItYXR0
ZW50aW9uIHVyZ2VuY3kpCisgICh3aGVuIChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAgIChydW4t
d2l0aC10aW1lcgorICAgICB0aW1lb3V0CisgICAgIG5pbAorICAgICAjJ3N5c3RlbS10YXNrYmFy
LWF0dGVudGlvbiBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1wcm9ncmVz
cyAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0
ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByb2dyZXNzKQorICAiRGlzcGxheSBhIHByb2dyZXNz
IGJhciBvdmVybGF5IG9uIHRoZSBEb2NrIGFuZCBBcHAgU3dpdGNoZXIuCitQUk9HUkVTUyBpcyBh
IGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLgorSWYgUFJPR1JFU1MgaXMgbmlsLCByZW1v
dmUgdGhlIHByb2dyZXNzIGJhci4iCisgIChucy1wcm9ncmVzcy1pbmRpY2F0b3IgKHN5c3RlbS10
YXNrYmFyLS12YWxpZGF0ZS1wcm9ncmVzcyBwcm9ncmVzcykpKQorCisMCis7OyBNUy1XaW5kb3dz
IHN1cHBvcnQuCisKKyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1iYWRnZSAidzMyZm5zLmMiKQorKGRl
Y2xhcmUtZnVuY3Rpb24gdzMyLXJlcXVlc3QtdXNlci1hdHRlbnRpb24gInczMmZucy5jIikKKyhk
ZWNsYXJlLWZ1bmN0aW9uIHczMi1wcm9ncmVzcy1pbmRpY2F0b3IgInczMmZucy5jIikKKworKGRl
ZnZhciBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtYmFja2dyb3VuZCAiI2U3NTg1NyIgOyByZWRp
c2gKKyAgInczMiBiYWRnZSBiYWNrZ3JvdW5kIFJHQiB0cmlwbGUgc3RyaW5nLiIpCisKKyhkZWZ2
YXIgc3lzdGVtLXRhc2tiYXItdzMyLWJhZGdlLWZvcmVncm91bmQgIiNmZmZmZmYiIDsgd2hpdGUK
KyAgInczMiBiYWRnZSBmb3JlZ3JvdW5kIFJHQiB0cmlwbGUgc3RyaW5nLiIpCisKKyhkZWZ1biBz
eXN0ZW0tdGFza2Jhci0tdzMyLWNsZWFyLWZyYW1lLWluZGljYXRvcnMgKGZyYW1lKQorICA7OyBO
T1RFOiBVcGRhdGUgdGhlIGJlbG93IGlmIGFkZGluZyBuZXcgdzMyIHN5c3RlbS10YXNrYmFyIGZ1
bmN0aW9ucy4KKyAgKHdpdGgtc2VsZWN0ZWQtZnJhbWUgZnJhbWUKKyAgICAoc3lzdGVtLXRhc2ti
YXItYmFkZ2UgbmlsKQorICAgIChzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gbmlsKQorICAgIChz
eXN0ZW0tdGFza2Jhci1wcm9ncmVzcyBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFz
a2Jhci0tZW5hYmxlICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ3czMikpKQorICA7OyBDbGVhciBz
eXN0ZW0tdGFza2JhciBpbmRpY2F0b3JzIGZvciBhIGZyYW1lIHdoZW4gaXQgaXMgZGVsZXRlZC4K
KyAgKGFkZC1ob29rICdkZWxldGUtZnJhbWUtZnVuY3Rpb25zCisgICAgICAgICAgICAjJ3N5c3Rl
bS10YXNrYmFyLS13MzItY2xlYXItZnJhbWUtaW5kaWNhdG9ycykpCisKKyhjbC1kZWZtZXRob2Qg
c3lzdGVtLXRhc2tiYXItLWRpc2FibGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ3czMikpKQor
ICAocmVtb3ZlLWhvb2sgJ2RlbGV0ZS1mcmFtZS1mdW5jdGlvbnMKKyAgICAgICAgICAgICAgICMn
c3lzdGVtLXRhc2tiYXItLXczMi1jbGVhci1mcmFtZS1pbmRpY2F0b3JzKSkKKworKGNsLWRlZm1l
dGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRnZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAndzMyKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudCkKKyAgIkRp
c3BsYXkgYSBDT1VOVCBvdmVybGF5IG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorVGhlIHRh
c2tiYXIgaWNvbiB0YXJnZXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBmcmFtZS4K
KworSWYgQ09VTlQgaXMgYW4gaW50ZWdlciBvciBhIG5vbi1lbXB0eSBzdHJpbmcsIGRpc3BsYXkg
dGhhdC4gIElmIENPVU5UIGlzCituaWwgb3IgYW4gZW1wdHkgc3RyaW5nLCBjbGVhciB0aGUgYmFk
Z2UuCisKK0R1ZSB0byBNUy1XaW5kb3dzIGljb24gb3ZlcmxheSBzaXplIGxpbWl0YXRpb25zLCBp
ZiBDT1VOVCBpcyBhbiBpbnRlZ2VyCithbmQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgLTk5IHRvIDk5
LCBkaXNwbGF5IFwiLTk5XCIgYW5kIFwiOTkrXCIsCityZXNwZWN0aXZlbHksIGlmIENPVU5UIGlz
IGEgc3RyaW5nIGxvbmdlciB0aGFuIDIgY2hhcmFjdGVycyB0cnVuY2F0ZSBpdAordXNpbmcgYHRy
dW5jYXRlLXN0cmluZy10by13aWR0aGAuCisKK0NvbnN1bHQgYHN5c3RlbS10YXNrYmFyLXczMi1i
YWRnZS1iYWNrZ3JvdW5kYCBhbmQKK2BzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtZm9yZWdyb3Vu
ZGAgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kCitjb2xvcnMgZm9yIHRoZSBwYWlu
dGVkIG92ZXJsYXkuIgorICAoY29uZCAoKHN0cmluZ3AgY291bnQpCisgICAgICAgICAoaWYgKHN0
cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAgIChzZXRxIGNvdW50IG5pbCkKKyAgICAg
ICAgICAgKHdoZW4gKGxlbmd0aD4gY291bnQgMikKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAo
dHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRoIGNvdW50IDMgMCBuaWwgdCkpKSkpCisgICAgICAgICgo
aW50ZWdlcnAgY291bnQpCisgICAgICAgICAoaWYgKGFuZCAoPiBjb3VudCAtMTAwKQorICAgICAg
ICAgICAgICAgICAgKDwgY291bnQgMTAwKSkKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAobnVt
YmVyLXRvLXN0cmluZyBjb3VudCkpCisgICAgICAgICAgIChpZiAoPCBjb3VudCAwKQorICAgICAg
ICAgICAgICAgKHNldHEgY291bnQgIi05OSIpCisgICAgICAgICAgICAgKHNldHEgY291bnQgIjk5
KyIpKSkpCisgICAgICAgICh0IChzZXRxIGNvdW50IG5pbCkpKQorICAodzMyLWJhZGdlIGNvdW50
CisgICAgICAgICAgICAgc3lzdGVtLXRhc2tiYXItdzMyLWJhZGdlLWJhY2tncm91bmQKKyAgICAg
ICAgICAgICBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtZm9yZWdyb3VuZCkpCisKKyhjbC1kZWZt
ZXRob2Qgc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uICgmY29udGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAn
dzMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwg
dXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9uIHRo
ZSBzeXN0ZW0gdGFza2JhciBpY29uLgorSW5kaWNhdGUgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRo
IHRoZSBzZWxlY3RlZCBmcmFtZS4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5mb3JtYXRp
b25hbCcsIGZsYXNoIHRoZSB0YXNrYmFyIGljb24uCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wg
YGNyaXRpY2FsJywgZmxhc2ggdGhlIHRhc2tiYXIgaWNvbiBhbmQgdGhlCitNUy1XaW5kb3dzIHdp
bmRvdyBmcmFtZS4KK0NsZWFyIGF0dGVudGlvbiBpbmRpY2F0b3IgYWZ0ZXIgVElNRU9VVCBzZWNv
bmRzLiAgSWYgVElNRU9VVCBpcyBuaWwsCitkZWZhdWx0IHRvIE1TLVdpbmRvd3MgZGVmYXVsdCBi
ZWhhdmlvci4iCisgICh3MzItcmVxdWVzdC11c2VyLWF0dGVudGlvbiB1cmdlbmN5KQorICAod2hl
biAoYW5kIHVyZ2VuY3kgdGltZW91dCkKKyAgICAocnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91
dAorICAgICBuaWwKKyAgICAgIydzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gbmlsKSkpCisKKyhj
bC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKCZjb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChl
cWwgJ3czMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9u
YWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGEgcHJvZ3Jlc3MgYmFyIG9uIHRoZSBzeXN0ZW0gdGFz
a2JhciBpY29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4K
K0lmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBiYXIuIgorICAodzMyLXBy
b2dyZXNzLWluZGljYXRvciAoc3lzdGVtLXRhc2tiYXItLXZhbGlkYXRlLXByb2dyZXNzIHByb2dy
ZXNzKSkpCisKKwwKKworKHByb3ZpZGUgJ3N5c3RlbS10YXNrYmFyKQorCis7Ozsgc3lzdGVtLXRh
c2tiYXIuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9zcmMvbnNmbnMubSBiL3NyYy9uc2Zucy5t
CmluZGV4IDM1MjhjNGFjZDUwLi4xYThmOTVjMTRlZiAxMDA2NDQKLS0tIGEvc3JjL25zZm5zLm0K
KysrIGIvc3JjL25zZm5zLm0KQEAgLTM2NzQsNiArMzY3NCwxMjkgQEAgVGhlIHBvc2l0aW9uIGlz
IHJldHVybmVkIGFzIGEgY29ucyBjZWxsIChYIC4gWSkgb2YgdGhlCiAgIHJldHVybiBRbmlsOwog
fQogCitERUZVTiAoIm5zLWJhZGdlIiwgRm5zX2JhZGdlLCBTbnNfYmFkZ2UsIDEsIDEsIDAsCisg
ICAgICAgZG9jOiAvKiBTZXQgdGhlIGFwcCBpY29uIGJhZGdlIHRvIEJBREdFLgorQkFER0Ugc2hv
dWxkIGJlIGEgc3RyaW5nIHNob3J0IGVub3VnaCB0byBkaXNwbGF5IG5pY2VseSBpbiB0aGUgc2hv
cnQKK3NwYWNlIGludGVuZGVkIGZvciBiYWRnZXMuCitJZiBCQURHRSBpcyBuaWwsIGNsZWFyIHRo
ZSBhcHAgYmFkZ2UuICAqLykKKyAgKExpc3BfT2JqZWN0IGJhZGdlKQoreworICBibG9ja19pbnB1
dCAoKTsKKyAgaWYgKE5JTFAgKGJhZGdlKSkKKyAgICBbW05TQXBwIGRvY2tUaWxlXSBzZXRCYWRn
ZUxhYmVsOiBuaWxdOworICBlbHNlCisgICAgeworICAgICAgQ0hFQ0tfU1RSSU5HIChiYWRnZSk7
CisgICAgICBbW05TQXBwIGRvY2tUaWxlXSBzZXRCYWRnZUxhYmVsOgorCQkJICBbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6IFNTREFUQSAoYmFkZ2UpXV07CisgICAgfQorICB1bmJsb2Nr
X2lucHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKworLyogVXNlIC0xIHRvIGluZGljYXRlIG5v
IGFjdGl2ZSByZXF1ZXN0LiAgKi8KK3N0YXRpYyBOU0ludGVnZXIgbnNfcmVxdWVzdF91c2VyX2F0
dGVudGlvbl9pZCA9IC0xOworCitERUZVTiAoIm5zLXJlcXVlc3QtdXNlci1hdHRlbnRpb24iLAor
ICAgICAgIEZuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAgICAgIFNuc19yZXF1ZXN0X3Vz
ZXJfYXR0ZW50aW9uLAorICAgICAgIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBCb3VuY2UgdGhl
IGFwcCBkb2NrIGljb24gdG8gcmVxdWVzdCB1c2VyIGF0dGVudGlvbi4KK0lmIFVSR0VOQ1kgbmls
LCBjYW5jZWwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3QsIGlmIGFueS4KK0lmIFVSR0VOQ1kgaXMg
dGhlIHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGJvdW5jaW5nIGxhc3RzIGEgZmV3IHNlY29uZHMu
CitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2FsJywgYm91bmNpbmcgbGFzdHMgdW50
aWwgRW1hY3MgaXMKK2ZvY3VzZWQuICAqLykKKyAgKExpc3BfT2JqZWN0IHVyZ2VuY3kpCit7Cisg
IGJsb2NrX2lucHV0ICgpOworICBpZiAobnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCAhPSAt
MSkKKyAgICB7CisgICAgICBbTlNBcHAgY2FuY2VsVXNlckF0dGVudGlvblJlcXVlc3Q6IG5zX3Jl
cXVlc3RfdXNlcl9hdHRlbnRpb25faWRdOworICAgICAgbnNfcmVxdWVzdF91c2VyX2F0dGVudGlv
bl9pZCA9IC0xOworICAgIH0KKyAgaWYgKCFOSUxQICh1cmdlbmN5KSAmJiBTWU1CT0xQICh1cmdl
bmN5KSkKKyAgICB7CisgICAgICBpZiAoRVEgKHVyZ2VuY3ksIFFpbmZvcm1hdGlvbmFsKSkKKwlu
c19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gW05TQXBwIHJlcXVlc3RVc2VyQXR0ZW50aW9u
OgorCQkJCQkJTlNJbmZvcm1hdGlvbmFsUmVxdWVzdF07CisgICAgICBlbHNlIGlmIChFUSAodXJn
ZW5jeSwgUWNyaXRpY2FsKSkKKwluc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gW05TQXBw
IHJlcXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNDcml0aWNhbFJlcXVlc3RdOworICAgIH0K
KyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIFFuaWw7Cit9CisKK0RFRlVOICgibnMtcHJv
Z3Jlc3MtaW5kaWNhdG9yIiwKKyAgICAgICBGbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAg
IFNuc19wcm9ncmVzc19pbmRpY2F0b3IsCisgICAgICAgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8q
IEJvdW5jZSB0aGUgYXBwIGRvY2sgaWNvbiB0byByZXF1ZXN0IHVzZXIgYXR0ZW50aW9uLgorCSAg
ICAgICBQUk9HUkVTUyBpcyBhIGZsb2F0IGJldHdlZW4gMC4wIGFuZCAxLjAuCisJICAgICAgIElm
IFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuICAqLykKKyAg
KExpc3BfT2JqZWN0IHByb2dyZXNzKQoreworICBibG9ja19pbnB1dCAoKTsKKyAgTlNEb2NrVGls
ZSAqZG9ja190aWxlID0gW05TQXBwIGRvY2tUaWxlXTsKKyAgLyogVXNlIE5TTGV2ZWxJbmRpY2F0
b3Igd2l0aCByZWxpYWJsZSByZWRyYXdzLCBub3QgTlNQcm9ncmVzc0luZGljYXRvci4gICovCisg
IE5TTGV2ZWxJbmRpY2F0b3IgKmxldmVsX2luZGljYXRvcjsKKyAgLyogUmV1c2UgdGhlIGluZGlj
YXRvciBzdWJ2aWV3IG9yIGNyZWF0ZSBvbmUuICovCisgIGlmIChkb2NrX3RpbGUuY29udGVudFZp
ZXcKKyAgICAgICYmIFtbZG9ja190aWxlLmNvbnRlbnRWaWV3IHN1YnZpZXdzXSBjb3VudF0gPiAw
CisgICAgICAmJiBbW1tkb2NrX3RpbGUuY29udGVudFZpZXcgc3Vidmlld3NdIGxhc3RPYmplY3Rd
CisgICAgICAgICAgICAgICAgICAgICAgICBpc0tpbmRPZkNsYXNzOltOU0xldmVsSW5kaWNhdG9y
IGNsYXNzXV0pCisgICAgbGV2ZWxfaW5kaWNhdG9yID0KKyAgICAgIChOU0xldmVsSW5kaWNhdG9y
ICopW1tbZG9ja190aWxlIGNvbnRlbnRWaWV3XSBzdWJ2aWV3c10gbGFzdE9iamVjdF07CisgICAg
ZWxzZQorICAgICAgeworCWlmICghZG9ja190aWxlLmNvbnRlbnRWaWV3KQorCSAgeworCSAgICBO
U0ltYWdlVmlldyogaW1hZ2VfdmlldyA9IFtbTlNJbWFnZVZpZXcgYWxsb2NdIGluaXRdOworCSAg
ICBbaW1hZ2VfdmlldyBzZXRJbWFnZTogW05TQXBwIGFwcGxpY2F0aW9uSWNvbkltYWdlXV07CisJ
ICAgIFtkb2NrX3RpbGUgc2V0Q29udGVudFZpZXc6IGltYWdlX3ZpZXddOworCSAgfQorCS8qIFNl
dCB3aWR0aCB0byB0aGUgd2lkdGggb2YgdGhlIGFwcGxpY2F0aW9uIGljb24sIGFuZCBoZWlnaHQg
dG8KKwkgICAlIG9mIHRoZSBpY29uIGhlaWdodCB0byByZXNwZWN0IHNjYWxlZCBpY29ucy4gICov
CisJZmxvYXQgd2lkdGggPSBbW05TQXBwIGFwcGxpY2F0aW9uSWNvbkltYWdlXSBzaXplXS53aWR0
aDsKKwlmbG9hdCBoZWlnaHQgPSAwLjEwICogW1tOU0FwcCBhcHBsaWNhdGlvbkljb25JbWFnZV0g
c2l6ZV0uaGVpZ2h0OworCWxldmVsX2luZGljYXRvciA9CisJICBbW05TTGV2ZWxJbmRpY2F0b3Ig
YWxsb2NdIGluaXRXaXRoRnJhbWU6CisJCQkJICAgICAgTlNNYWtlUmVjdCAoMC4wLCAwLjAsCisJ
CQkJCQkgIHdpZHRoLCBoZWlnaHQpXTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNldFdhbnRzTGF5ZXI6
IFlFU107IC8qIFBlcmZvcm1hbmNlLiAgKi8KKwlbbGV2ZWxfaW5kaWNhdG9yIHNldEVuYWJsZWQ6
IE5PXTsgLyogSWdub3JlIG1vdXNlIGlucHV0LiAgKi8KKwlbbGV2ZWxfaW5kaWNhdG9yIHNldExl
dmVsSW5kaWNhdG9yU3R5bGU6CisJCQkgICBOU0xldmVsSW5kaWNhdG9yU3R5bGVDb250aW51b3Vz
Q2FwYWNpdHldOworCS8qIE1hdGNoIE5TUHJvZ3Jlc3NJbmRpY2F0b3IgY29sb3IuICAqLworCVts
ZXZlbF9pbmRpY2F0b3Igc2V0RmlsbENvbG9yOiBbTlNDb2xvciBjb250cm9sQWNjZW50Q29sb3Jd
XTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNldE1pblZhbHVlOiAwLjBdOworCVtsZXZlbF9pbmRpY2F0
b3Igc2V0TWF4VmFsdWU6IDEuMF07CisJLyogVGhlIGNvbnRlbnRWaWV3IHRha2VzIG93bmVyc2hp
cC4gICovCisJW2RvY2tfdGlsZS5jb250ZW50VmlldyBhZGRTdWJ2aWV3OiBsZXZlbF9pbmRpY2F0
b3JdOworICAgICAgfQorICBkb3VibGUgcHJvZ3Jlc3NfdmFsdWU7CisgIEJPT0wgaGlkZSA9IChO
SUxQIChwcm9ncmVzcykKKwkgICAgICAgfHwgKCFOSUxQIChwcm9ncmVzcykgJiYgIShGTE9BVFAg
KHByb2dyZXNzKSkpKTsKKyAgaWYgKCFoaWRlKQorICAgIHsKKyAgICAgIHByb2dyZXNzX3ZhbHVl
ID0gWEZMT0FUX0RBVEEgKHByb2dyZXNzKTsKKyAgICAgIGhpZGUgPSAocHJvZ3Jlc3NfdmFsdWUg
PCAwLjAgfHwgcHJvZ3Jlc3NfdmFsdWUgPiAxLjApOworICAgIH0KKyAgaWYgKGhpZGUpCisgICAg
eworICAgICAgW2xldmVsX2luZGljYXRvciBzZXREb3VibGVWYWx1ZTogMC4wXTsKKyAgICAgIFts
ZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBZRVNdOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg
ICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0RG91YmxlVmFsdWU6IHByb2dyZXNzX3ZhbHVlXTsKKyAg
ICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBOT107CisgICAgfQorICBbZG9ja190aWxl
IGRpc3BsYXldOworICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKwogI2lm
ZGVmIE5TX0lNUExfQ09DT0EKIAogREVGVU4gKCJucy1zZW5kLWl0ZW1zIiwKQEAgLTM5NTcsNiAr
NDA4MCw5IEBAIC0gKExpc3BfT2JqZWN0KWxpc3BTdHJpbmcKICAgZGVmc3ViciAoJlNuc19zZXRf
bW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9zaXRpb24pOwogICBkZWZzdWJyICgmU25zX21vdXNlX2Fi
c29sdXRlX3BpeGVsX3Bvc2l0aW9uKTsKICAgZGVmc3ViciAoJlNuc19zaG93X2NoYXJhY3Rlcl9w
YWxldHRlKTsKKyAgZGVmc3ViciAoJlNuc19iYWRnZSk7CisgIGRlZnN1YnIgKCZTbnNfcmVxdWVz
dF91c2VyX2F0dGVudGlvbik7CisgIGRlZnN1YnIgKCZTbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yKTsK
ICNpZmRlZiBOU19JTVBMX0NPQ09BCiAgIGRlZnN1YnIgKCZTbnNfc2VuZF9pdGVtcyk7CiAjZW5k
aWYKQEAgLTQwMjMsNCArNDE0OSw2IEBAIC0gKExpc3BfT2JqZWN0KWxpc3BTdHJpbmcKICAgREVG
U1lNIChRYXNzcV9kZWxldGVfYWxsLCAiYXNzcS1kZWxldGUtYWxsIik7CiAgIERFRlNZTSAoUXJ1
bl9hdF90aW1lLCAicnVuLWF0LXRpbWUiKTsKICAgREVGU1lNIChReF9oaWRlX3RpcCwgIngtaGlk
ZS10aXAiKTsKKyAgREVGU1lNIChRaW5mb3JtYXRpb25hbCwgImluZm9ybWF0aW9uYWwiKTsKKyAg
REVGU1lNIChRY3JpdGljYWwsICJjcml0aWNhbCIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3czMmZu
cy5jIGIvc3JjL3czMmZucy5jCmluZGV4IDY3OWU4MTk3ZmQ4Li4xYTJmYzllODg0MiAxMDA2NDQK
LS0tIGEvc3JjL3czMmZucy5jCisrKyBiL3NyYy93MzJmbnMuYwpAQCAtMzUsNyArMzUsMTIgQEAg
I2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwCiAjaW5jbHVkZSA8Yy1jdHlwZS5oPgogCiAjZGVm
aW5lIENPQkpNQUNST1MgLyogQXNrIGZvciBDIGRlZmluaXRpb25zIGZvciBDT00uICAqLworI2lm
ICFkZWZpbmVkIE1JTkdXX1c2NCAmJiAhZGVmaW5lZCBDWUdXSU4KKyMgZGVmaW5lIElOSVRHVUlE
CisjZW5kaWYKKyNpbmNsdWRlIDxpbml0Z3VpZC5oPgogI2luY2x1ZGUgPHNobG9iai5oPgorI2lu
Y2x1ZGUgPHNob2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlaWRsLmg+CiAjaW5jbHVkZSA8b2JqaWRs
Lmg+CiAjaW5jbHVkZSA8b2xlMi5oPgpAQCAtMjM3LDYgKzI0Miw4IEBAIERFQ0xBUkVfSEFORExF
KEhNT05JVE9SKTsKIHR5cGVkZWYgQk9PTCAoV0lOQVBJICogU2V0R2VzdHVyZUNvbmZpZ19wcm9j
KSAoSFdORCwgRFdPUkQsIFVJTlQsCiAJCQkJCSAgICAgICBFbWFjc19QR0VTVFVSRUNPTkZJRywg
VUlOVCk7CiAKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICogRmxhc2hXaW5kb3dFeF9Qcm9jKSAoUEZM
QVNIV0lORk8gcGZ3aSk7CisKIHN0YXRpYyBUcmFja01vdXNlRXZlbnRfUHJvYyB0cmFja19tb3Vz
ZV9ldmVudF9mbiA9IE5VTEw7CiBzdGF0aWMgSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdfUHJvYyBn
ZXRfY29tcG9zaXRpb25fc3RyaW5nX2ZuID0gTlVMTDsKIHN0YXRpYyBJbW1HZXRDb250ZXh0X1By
b2MgZ2V0X2ltZV9jb250ZXh0X2ZuID0gTlVMTDsKQEAgLTI1OSw2ICsyNjYsNyBAQCBERUNMQVJF
X0hBTkRMRShITU9OSVRPUik7CiBzdGF0aWMgV1RTUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9u
X1Byb2MgV1RTUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9uX2ZuID0gTlVMTDsKIHN0YXRpYyBS
ZWdpc3RlclRvdWNoV2luZG93X3Byb2MgUmVnaXN0ZXJUb3VjaFdpbmRvd19mbiA9IE5VTEw7CiBz
dGF0aWMgU2V0R2VzdHVyZUNvbmZpZ19wcm9jIFNldEdlc3R1cmVDb25maWdfZm4gPSBOVUxMOwor
c3RhdGljIEZsYXNoV2luZG93RXhfUHJvYyBmbGFzaF93aW5kb3dfZXhfZm4gPSBOVUxMOwogCiBl
eHRlcm4gQXBwZW5kTWVudVdfUHJvYyB1bmljb2RlX2FwcGVuZF9tZW51OwogCkBAIC0xMTAxMCw2
ICsxMTAxOCwzMTMgQEAgREVGVU4gKCJ3MzItc3lzdGVtLWlkbGUtdGltZSIsIEZ3MzJfc3lzdGVt
X2lkbGVfdGltZSwgU3czMl9zeXN0ZW1faWRsZV90aW1lLAogCiAjZW5kaWYKIAorDAorI2lmZGVm
IFdJTkRPV1NOVAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJICAgICBUYXNrYmFyIEluZGljYXRvcnMK
KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNSU5HV19XNjQKKyAgLyogbWluZ3cub3JnJ3Mg
TWluR1cgZG9lc24ndCBoYXZlIHRoaXMgc3R1ZmYuICAqLworICBERUZJTkVfR1VJRChDTFNJRF9U
YXNrYmFyTGlzdCwgMHg1NmZkZjM0NCwgMHhmZDZkLCAweDExZDAsIDB4OTUsMHg4YSwgMHgwMCww
eDYwLDB4OTcsMHhjOSwweGEwLDB4OTApOworICBERUZJTkVfR1VJRChJSURfSVRhc2tiYXJMaXN0
MywgMHhlYTFhZmI5MSwgMHg5ZTI4LCAweDRiODYsIDB4OTAsMHhlOSwgMHg5ZSwweDlmLDB4OGEs
MHg1ZSwweGVmLDB4YWYpOworI2VuZGlmCisKK0RFRlVOICgidzMyLWJhZGdlIiwKKyAgICAgICBG
dzMyX2JhZGdlLAorICAgICAgIFN3MzJfYmFkZ2UsCisgICAgICAgMywgMywgMCwKKyAgICAgICBk
b2M6IC8qIERpc3BsYXkgYSB0YXNrYmFyIGljb24gb3ZlcmxheSBpbWFnZSBvbiB0aGUgc2VsZWN0
ZWQgZnJhbWUuCitCQURHRSBpcyBhIHN0cmluZy4gIElmIEJBREdFIGlzIG5pbCwgcmVtb3ZlIHRo
ZSBvdmVybGF5LiAgRG8gbm90aGluZyBpZgorV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJ
VGFza2Jhckxpc3QzIGludGVyZmFjZSBhbmQgcmV0dXJuIG5pbCwKK290aGVyd2lzZSByZXR1cm4g
dC4gIERvIG5vdGhpbmcgaWYgdGhlIHNlbGVjdGVkIGZyYW1lIGlzIG5vdCAoeWV0KQorYXNzb2Np
YXRlZCB3aXRoIGEgd2luZG93IGhhbmRsZS4gIEJBQ0tHUk9VTkQgYW5kIEZPUkVHUk9VTkQgYXJl
IFJHQgordHJpcGxldCBzdHJpbmdzIG9mIHRoZSBmb3JtIFwiI1JSR0dCQlwiLiAgKi8pCisgIChM
aXNwX09iamVjdCBiYWRnZSwgTGlzcF9PYmplY3QgYmFja2dyb3VuZCwgTGlzcF9PYmplY3QgZm9y
ZWdyb3VuZCkKK3sKKyAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBI
V05EIGh3bmQgPSBOVUxMOworCisgIGlmIChGUkFNRV9XMzJfUCAoc2YpICYmIEZSQU1FX0xJVkVf
UCAoc2YpKQorICAgIGh3bmQgPSBGUkFNRV9XMzJfV0lORE9XIChzZik7CisKKyAgaWYgKGh3bmQg
PT0gTlVMTCkKKyAgICByZXR1cm4gUW5pbDsKKworICBDb0luaXRpYWxpemUgKE5VTEwpOworICBJ
VGFza2Jhckxpc3QzICp0YXNrX2Jhcl9saXN0ID0gTlVMTDsKKyAgSFJFU1VMVCByID0gQ29DcmVh
dGVJbnN0YW5jZSgmQ0xTSURfVGFza2Jhckxpc3QsCisJCQkgICAgICAgTlVMTCwKKwkJCSAgICAg
ICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwKKwkJCSAgICAgICAmSUlEX0lUYXNrYmFyTGlzdDMsCisJ
CQkgICAgICAgKHZvaWQgKiopJnRhc2tfYmFyX2xpc3QpOworICBpZiAociAhPSBTX09LKQorICAg
IHJldHVybiBRbmlsOworCisgIGlmICghTklMUCAoYmFkZ2UpICYmIFNUUklOR1AgKGJhZGdlKQor
ICAgICAgJiYgU1RSSU5HUCAoYmFja2dyb3VuZCkgJiYgU1RSSU5HUCAoZm9yZWdyb3VuZCkpCisg
ICAgeworICAgICAgQ09MT1JSRUYgYmdfcmdiOworICAgICAgQ09MT1JSRUYgZmdfcmdiOworICAg
ICAgdW5zaWduZWQgc2hvcnQgciwgZywgYjsKKyAgICAgIGlmIChwYXJzZV9jb2xvcl9zcGVjIChT
U0RBVEEgKGJhY2tncm91bmQpLCAmciwgJmcsICZiKSkKKwliZ19yZ2IgPSBSR0IgKHIsIGIsIGIp
OworICAgICAgZWxzZQorCXJldHVybiBRbmlsOworICAgICAgaWYgKHBhcnNlX2NvbG9yX3NwZWMg
KFNTREFUQSAoZm9yZWdyb3VuZCksICZyLCAmZywgJmIpKQorCWZnX3JnYiA9IFJHQiAociwgYiwg
Yik7CisgICAgICBlbHNlCisJcmV0dXJuIFFuaWw7CisKKyAgICAgIC8qIFByZXBhcmUgYSBzdHJp
bmcgZm9yIGRyYXdpbmcgYW5kIGFzIGFsdC10ZXh0LiAgKi8KKyAgICAgIExpc3BfT2JqZWN0IGJh
ZGdlX3V0ZjggPSBFTkNPREVfVVRGXzggKGJhZGdlKTsKKyAgICAgIGludCB3aWRlX2xlbiA9IHBN
dWx0aUJ5dGVUb1dpZGVDaGFyIChDUF9VVEY4LCAwLAorCQkJCQkgICBTU0RBVEEgKGJhZGdlX3V0
ZjgpLAorCQkJCQkgICAtMSwgTlVMTCwgMCk7CisgICAgICB3Y2hhcl90ICpiYWRnZV93ID0gYWxs
b2NhICgod2lkZV9sZW4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgcE11bHRpQnl0
ZVRvV2lkZUNoYXIgKENQX1VURjgsIDAsIFNTREFUQSAoYmFkZ2VfdXRmOCksIC0xLAorCQkJICAg
IChMUFdTVFIpIGJhZGdlX3csCisJCQkgICAgd2lkZV9sZW4pOworCisgICAgICAvKiBVc2UgdGhl
IHNtYWxsIGljb24gc2l6ZSBXaW5kb3dzIHN1Z2dlc3RzIHRvIG5vdCBoYXJkIGNvZGUgMTZ4MTYu
ICAqLworICAgICAgaW50IGljb25fd2lkdGggPSBHZXRTeXN0ZW1NZXRyaWNzIChTTV9DWFNNSUNP
Tik7CisgICAgICBpbnQgaWNvbl9oZWlnaHQgPSBHZXRTeXN0ZW1NZXRyaWNzIChTTV9DWFNNSUNP
Tik7CisKKyAgICAgIEhEQyBod25kX2RjID0gR2V0REMgKGh3bmQpOworICAgICAgSERDIGRjID0g
Q3JlYXRlQ29tcGF0aWJsZURDIChod25kX2RjKTsKKworICAgICAgQklUTUFQVjVIRUFERVIgYmk7
CisgICAgICBtZW1zZXQgKCZiaSwgMCwgc2l6ZW9mIChiaSkpOworICAgICAgYmkuYlY1U2l6ZSA9
IHNpemVvZiAoYmkpOworICAgICAgYmkuYlY1V2lkdGggPSBpY29uX3dpZHRoOworICAgICAgYmku
YlY1SGVpZ2h0ID0gLWljb25faGVpZ2h0OyAvKiBOZWdhdGl2ZSBmb3IgYSB0b3AtZG93biBESUIu
ICAqLworICAgICAgYmkuYlY1UGxhbmVzID0gMTsKKyAgICAgIGJpLmJWNUJpdENvdW50ID0gMzI7
CisgICAgICBiaS5iVjVDb21wcmVzc2lvbiA9IEJJX0JJVEZJRUxEUzsgIC8qIEVuYWJsZSB0aGUg
bWFza3MgYmVsb3cuICAqLworICAgICAgYmkuYlY1UmVkTWFzayAgID0gIDB4MDBGRjAwMDA7Cisg
ICAgICBiaS5iVjVHcmVlbk1hc2sgPSAgMHgwMDAwRkYwMDsKKyAgICAgIGJpLmJWNUJsdWVNYXNr
ICA9ICAweDAwMDAwMEZGOworICAgICAgYmkuYlY1QWxwaGFNYXNrID0gIDB4RkYwMDAwMDA7CisK
KyAgICAgIERXT1JEICpiaXRtYXBfcGl4ZWxzOworICAgICAgSEJJVE1BUCBiaXRtYXAgPSBDcmVh
dGVESUJTZWN0aW9uIChkYywgKEJJVE1BUElORk8gKikgJmJpLAorCQkJCQkgRElCX1JHQl9DT0xP
UlMsCisJCQkJCSAodm9pZCAqKikgJmJpdG1hcF9waXhlbHMsCisJCQkJCSBOVUxMLCAwKTsKKyAg
ICAgIEhHRElPQkogb2xkX2JpdG1hcCA9IFNlbGVjdE9iamVjdChkYywgYml0bWFwKTsKKworICAg
ICAgLyogRHJhdyBhIGNpcmNsZSBmaWxsZWQgd2l0aCBiZy4gICovCisgICAgICBIQlJVU0ggYmdf
YnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoIChiZ19yZ2IpOworICAgICAgSEdESU9CSiBvbGRfYnJ1
c2ggPSBTZWxlY3RPYmplY3QgKGRjLCBiZ19icnVzaCk7CisgICAgICBFbGxpcHNlIChkYywgMCwg
MCwgaWNvbl93aWR0aCwgaWNvbl9oZWlnaHQpOworICAgICAgU2VsZWN0T2JqZWN0IChkYywgb2xk
X2JydXNoKTsKKyAgICAgIERlbGV0ZU9iamVjdCAoYmdfYnJ1c2gpOworCisgICAgICAvKiBEZXJp
dmUgYSBmb250IHNjYWxlZCB0byBmaXQgdGhlIGljb24uICBGaXJzdCBmaW5kIHRoZSBzeXN0ZW0n
cworCSBiYXNlIGZvbnQuICBUaGVuIHNjYWxlIGl0IHRvIGZpdCBpY29uX2hlaWdodC4gICovCisg
ICAgICBIRk9OVCBiYXNlX2ZvbnQ7CisgICAgICBCT09MIGNsZWFuX3VwX2Jhc2VfZm9udCA9IEZB
TFNFOworICAgICAgaWYgKHN5c3RlbV9wYXJhbWV0ZXJzX2luZm9fd19mbikKKwl7CisJICBOT05D
TElFTlRNRVRSSUNTIG5jbTsKKwkgIG1lbXNldCAoJm5jbSwgMCwgc2l6ZW9mIChuY20pKTsKKwkg
IG5jbS5jYlNpemUgPSBzaXplb2YgKG5jbSk7CisJICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyAoU1BJ
X0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZiAobmNtKSwgJm5jbSwgMCk7CisJICBiYXNlX2Zv
bnQgPSBDcmVhdGVGb250SW5kaXJlY3QgKCZuY20ubGZTbUNhcHRpb25Gb250KTsKKwkgIGNsZWFu
X3VwX2Jhc2VfZm9udCA9IFRSVUU7CisJfQorICAgICAgZWxzZQorCWJhc2VfZm9udCA9IChIRk9O
VCkgR2V0U3RvY2tPYmplY3QgKERFRkFVTFRfR1VJX0ZPTlQpOworICAgICAgaWYgKGNsZWFuX3Vw
X2Jhc2VfZm9udCkKKwlEZWxldGVPYmplY3QgKGJhc2VfZm9udCk7CisKKyAgICAgIExPR0ZPTlQg
bGY7CisgICAgICBHZXRPYmplY3QgKGJhc2VfZm9udCwgc2l6ZW9mIChsZiksICZsZik7CisgICAg
ICBsZi5sZldlaWdodCA9IEZXX0JPTEQ7CisgICAgICBsZi5sZk91dFByZWNpc2lvbiA9IE9VVF9P
VVRMSU5FX1BSRUNJUzsKKyAgICAgIC8qIENsZWFyVHlwZSBxdWFsaXR5IG5lZWRzIG9wcWF1ZSwg
YnV0IHdlIGRyYXcgdHJhbnNwYXJlbnQuICAqLworICAgICAgbGYubGZRdWFsaXR5ID0gQU5USUFM
SUFTRURfUVVBTElUWTsKKyAgICAgIC8qIE5lZ2F0aXZlIGxmSGVpZ2h0IGluZGljYXRlcyBwaXhl
bCB1bml0cyB2cy4gcG9zaXRpdmUgaW4gcG9pbnRzLgorCSBVc2UgdGhlIExPR1BJWEVMU1kgcHgv
aW4gb2YgdGhlIHByaW1hcnkgbW9uaXRvci4gICovCisgICAgICBsZi5sZkhlaWdodCA9IC1NdWxE
aXYoaWNvbl9oZWlnaHQgLyAyLCAvKiBGaXQgfjMgY2hhcnMuICAqLworCQkJICAgIDcyLAorCQkJ
ICAgIEdldERldmljZUNhcHMgKEdldERDIChOVUxMKSwgTE9HUElYRUxTWSkpOworICAgICAgLyog
RW5zdXJlIGxmSGVpZ2h0IHBpeGVsIGludGVycHJldGF0aW9uLiAgKi8KKyAgICAgIGludCBvbGRf
bWFwX21vZGUgPSBTZXRNYXBNb2RlIChkYywgTU1fVEVYVCk7CisgICAgICBIRk9OVCBzY2FsZWRf
Zm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCAoJmxmKTsKKyAgICAgIEhHRElPQkogb2xkX2ZvbnQg
PSBTZWxlY3RPYmplY3QgKGRjLCBzY2FsZWRfZm9udCk7CisgICAgICBTZXRNYXBNb2RlIChkYywg
b2xkX21hcF9tb2RlKTsKKworICAgICAgLyogRHJhdyBiYWRnZSB0ZXh0LiAgKi8KKyAgICAgIFNl
dEJrTW9kZSAoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICAgIFNldFRleHRDb2xvciAoZGMsIGZnX3Jn
Yik7CisgICAgICBSRUNUIHJlY3Q7CisgICAgICByZWN0LmxlZnQgPSByZWN0LnRvcCA9IDA7Cisg
ICAgICByZWN0LnJpZ2h0ID0gaWNvbl93aWR0aDsKKyAgICAgIHJlY3QuYm90dG9tID0gaWNvbl9o
ZWlnaHQ7CisgICAgICBEcmF3VGV4dCAoZGMsIFNTREFUQSAoYmFkZ2VfdXRmOCksCisJCS0xLCAv
KiBJbmRpY2F0ZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLiAgKi8KKwkJJnJlY3QsCisJCURUX0NF
TlRFUiB8IERUX1ZDRU5URVIgfCBEVF9TSU5HTEVMSU5FIHwgRFRfTk9DTElQKTsKKyAgICAgIFNl
bGVjdE9iamVjdCAoZGMsIG9sZF9mb250KTsKKyAgICAgIERlbGV0ZU9iamVjdCAoc2NhbGVkX2Zv
bnQpOworCisgICAgICAvKiBNYWtlIHRoZSBjaXJjbGUgYW5kIGl0cyB0ZXh0IG9wYXF1ZSBieSBz
ZXR0aW5nIHRoZSBhbHBoYQorCSBjaGFubmVsIG9uIGVhY2ggcGl4ZWwgZmFsbGluZyB3aXRoaW4g
dGhlIGNpcmNsZS4gICovCisgICAgICBpbnQgY2lyY2xlX2NlbnRlcl94ID0gaWNvbl93aWR0aCAv
IDI7CisgICAgICBpbnQgY2lyY2xlX2NlbnRlcl95ID0gaWNvbl9oZWlnaHQgLyAyOworICAgICAg
aW50IGNpcmNsZV9yYWRpdXMgPSAoaWNvbl93aWR0aCA8IGljb25faGVpZ2h0CisJCQkgICA/IGlj
b25fd2lkdGgKKwkJCSAgIDogaWNvbl9oZWlnaHQpIC8gMiAtIDI7CisgICAgICBpbnQgY2lyY2xl
X3JhZGl1c19zcSA9IGNpcmNsZV9yYWRpdXMgKiBjaXJjbGVfcmFkaXVzOworICAgICAgRFdPUkQg
KnBpeGVsOworICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpY29uX2hlaWdodDsgKyt5KQorICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGljb25fd2lkdGg7ICsreCkKKwkgIHsKKyAgICAgICAg
ICAgIGludCBkeCA9IHggLSBjaXJjbGVfY2VudGVyX3g7CisgICAgICAgICAgICBpbnQgZHkgPSB5
IC0gY2lyY2xlX2NlbnRlcl95OworICAgICAgICAgICAgaWYgKGR4ICogZHggKyBkeSAqIGR5IDw9
IGNpcmNsZV9yYWRpdXNfc3EpCisJICAgICAgeworCQkgIHBpeGVsID0gYml0bWFwX3BpeGVscyAr
ICh5ICogaWNvbl93aWR0aCArIHgpOworCQkgICpwaXhlbCB8PSAweGZmMDAwMDAwOyAvKiBGbGlw
IHRoZSAweEFBUlJHR0JCIGFscGhhIGNoYW5uZWwuICAqLworCSAgICAgIH0KKwkgIH0KKworICAg
ICAgLyogRHVtbXkgbW9ub2Nocm9tZSBiaXRtYXAgbWFzaywgaWdub3JlZCB3aGVuIHRoZSBjb2xv
ciBiaXRtYXAgaGFzCisJIGFuIGFscGhhIGNoYW5uZWwsIGJ1dCBuZWVkZWQgdG8gc2F0aXNmeSBD
cmVhdGVJY29uSW5kaXJlY3QuICAqLworICAgICAgSEJJVE1BUCBtYXNrX2JpdG1hcCA9IENyZWF0
ZUJpdG1hcCAoaWNvbl93aWR0aCwgaWNvbl9oZWlnaHQsIDEsIDEsIE5VTEwpOworCisgICAgICAv
KiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvd2lu
dXNlci9uZi13aW51c2VyLWNyZWF0ZWljb25pbmRpcmVjdAorCSBoYm1NYXNrIGFuZCBoYm1Db2xv
ciBtZW1iZXJzIG9mIHRoZSBJQ09OSU5GTyBzdHJ1Y3R1cmUgc2hvdWxkCisJIG5vdCBhbHJlYWR5
IGJlIHNlbGVjdGVkIGludG8gYSBkZXZpY2UgY29udGV4dC4gICovCisgICAgICBTZWxlY3RPYmpl
Y3QgKGRjLCBvbGRfYml0bWFwKTsKKworICAgICAgSUNPTklORk8gaWNvbl9pbmZvOworICAgICAg
bWVtc2V0ICgmaWNvbl9pbmZvLCAwLCBzaXplb2YgKGljb25faW5mbykpOworICAgICAgaWNvbl9p
bmZvLmZJY29uID0gVFJVRTsKKyAgICAgIGljb25faW5mby5oYm1NYXNrID0gbWFza19iaXRtYXA7
CisgICAgICBpY29uX2luZm8uaGJtQ29sb3IgPSBiaXRtYXA7CisKKyAgICAgIEhJQ09OIGljb24g
PSBDcmVhdGVJY29uSW5kaXJlY3QgKCZpY29uX2luZm8pOworICAgICAgdGFza19iYXJfbGlzdC0+
bHBWdGJsLT5TZXRPdmVybGF5SWNvbiAodGFza19iYXJfbGlzdCwgaHduZCwgaWNvbiwgYmFkZ2Vf
dyk7CisKKyAgICAgIERlc3Ryb3lJY29uIChpY29uKTsKKyAgICAgIERlbGV0ZU9iamVjdCAobWFz
a19iaXRtYXApOworICAgICAgRGVsZXRlT2JqZWN0IChiaXRtYXApOworICAgICAgRGVsZXRlREMg
KGRjKTsKKyAgICAgIFJlbGVhc2VEQyAoaHduZCwgaHduZF9kYyk7CisgICAgfQorICBlbHNlCisg
ICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRPdmVybGF5SWNvbiAodGFza19iYXJfbGlzdCwg
aHduZCwgTlVMTCwgTlVMTCk7CisKKyAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5SZWxlYXNlKHRh
c2tfYmFyX2xpc3QpOworICByZXR1cm4gUXQ7Cit9CisKK0RFRlVOICgidzMyLXJlcXVlc3QtdXNl
ci1hdHRlbnRpb24iLAorICAgICAgIEZ3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAgICAg
ICBTdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sCisgICAgICAgMSwgMSwgMCwKKyAgICAgICBk
b2M6IC8qIEZsYXNoIHRoZSBzZWxlY3RlZCBmcmFtZSdzIHRhc2tiYXIgaWNvbiBhbmQvb3IgaXRz
IHdpbmRvdy4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjYW5jZWwgdGhlIHJlcXVlc3QsIGlmIGFueS4g
IElmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbAorYGluZm9ybWF0aW9uYWwnLCBmbGFzaCB0aGUgdGFz
a2JhciBpY29uLiAgSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sCitgY3JpdGljYWwnLCBmbGFzaCB0
aGUgdGFza2JhciBpY29uIGFuZCB0aGUgZnJhbWUuICBXaW5kb3dzIHN0b3BzCitmbGFzaGluZyBp
ZiB0aGUgdXNlciBmb2N1c2VzIHRoZSBmcmFtZS4gIERvIG5vdGhpbmcgaWYgV2luZG93cyBkb2Vz
IG5vdAorc3VwcG9ydCBGbGFzaFdpbmRvd0V4IGFuZCByZXR1cm4gbmlsLCBvdGhlcndpc2UgcmV0
dXJuIHQuICBEbyBub3RoaW5nIGlmCit0aGUgZnJhbWUgaXMgbm90ICh5ZXQpIGFzc29jaWF0ZWQg
d2l0aCBhIHdpbmRvdyBoYW5kbGUuICAqLykKKyAgKExpc3BfT2JqZWN0IHVyZ2VuY3kpCit7Cisg
IGlmIChmbGFzaF93aW5kb3dfZXhfZm4gPT0gTlVMTCkKKyAgICByZXR1cm4gUW5pbDsKKworICBz
dHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7CisgIEhXTkQgaHduZCA9IE5VTEw7
CisKKyAgaWYgKEZSQU1FX1czMl9QIChzZikgJiYgRlJBTUVfTElWRV9QIChzZikpCisgICAgaHdu
ZCA9IEZSQU1FX1czMl9XSU5ET1cgKHNmKTsKKworICBpZiAoaHduZCA9PSBOVUxMKQorICAgIHJl
dHVybiBRbmlsOworCisgIEZMQVNIV0lORk8gZmxhc2hfaW5mbzsKKyAgZmxhc2hfaW5mby5jYlNp
emUgPSBzaXplb2YoZmxhc2hfaW5mbyk7CisgIGZsYXNoX2luZm8udUNvdW50ID0gMDsKKyAgZmxh
c2hfaW5mby5kd1RpbWVvdXQgPSAwOworICBmbGFzaF9pbmZvLmh3bmQgPSBod25kOworICBpZiAo
IU5JTFAgKHVyZ2VuY3kpICYmIFNZTUJPTFAgKHVyZ2VuY3kpKQorICAgIHsKKyAgICAgIC8qIFRo
ZSBpbnRlbmRlZCBjYWxsZXIsICdzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24nLCBoYXMgYW4KKwkg
b3B0aW9uYWwgdGltZXIgdG8gY2xlYXIgdGhlIGF0dGVudGlvbiBpbmRpY2F0b3Igc28gdGhpcyB3
aWxsCisJIGZsYXNoIHVudGlsIGNsZWFyZWQgdmlhIHRoZSB0aW1lciwgb3IgdGhlIHdpbmRvdyBj
b21lcyB0byB0aGUKKwkgZm9yZWdyb3VuZC4gIEZvciBpbmZvcm1hdGlvbmFsIGF0dGVudGlvbiwg
Zmxhc2ggdGhlIHRyYXkgaWNvbi4KKwkgRm9yIGNyaXRpY2FsIGF0dGVudGlvbiwgZmxhc2ggdGhl
IHRyYXkgaWNvbiBhbmQgdGhlIHdpbmRvdy4gICovCisgICAgICBpZiAoRVEgKHVyZ2VuY3ksIFFp
bmZvcm1hdGlvbmFsKSkKKwlmbGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFTSFdfVFJBWSB8IEZMQVNI
V19USU1FUk5PRkc7CisgICAgICBlbHNlIGlmIChFUSAodXJnZW5jeSwgUWNyaXRpY2FsKSkKKwlm
bGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFTSFdfQUxMIHwgRkxBU0hXX1RJTUVSTk9GRzsKKyAgICB9
CisgIGVsc2UKKyAgICBmbGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFTSFdfU1RPUDsKKworICBmbGFz
aF93aW5kb3dfZXhfZm4gKCZmbGFzaF9pbmZvKTsKKyAgcmV0dXJuIFF0OworfQorCitERUZVTiAo
InczMi1wcm9ncmVzcy1pbmRpY2F0b3IiLAorICAgICAgIEZ3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9y
LAorICAgICAgIFN3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIDEsIDEsIDAsCisgICAg
ICAgZG9jOiAvKiBTaG93IGEgcHJvZ3Jlc3MgYmFyIG9uIHRoZSBzZWxlY3RlZCBmcmFtZSdzIHRh
c2tiYXIgaWNvbi4KK1BST0dSRVNTIGlzIGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAu
ICBJZiBQUk9HUkVTUyBpcyBuaWwsIHJlbW92ZQordGhlIHByb2dyZXNzIGluZGljYXRvci4gIERv
IG5vdGhpbmcgaWYgV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHRoZQorSVRhc2tiYXJMaXN0MyBp
bnRlcmZhY2UgYW5kIHJldHVybiBuaWwsIG90aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcK
K2lmIHRoZSBzZWxlY3RlZCBmcmFtZSBpcyBub3QgKHlldCkgYXNzb2NpYXRlZCB3aXRoIGEgd2lu
ZG93IGhhbmRsZSAgKi8pCisgIChMaXNwX09iamVjdCBwcm9ncmVzcykKK3sKKyAgc3RydWN0IGZy
YW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBIV05EIGh3bmQgPSBOVUxMOworCisgIGlm
IChGUkFNRV9XMzJfUCAoc2YpICYmIEZSQU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFN
RV9XMzJfV0lORE9XIChzZik7CisKKyAgaWYgKGh3bmQgPT0gTlVMTCkKKyAgICByZXR1cm4gUW5p
bDsKKworICBDb0luaXRpYWxpemUgKE5VTEwpOworICBJVGFza2Jhckxpc3QzICp0YXNrX2Jhcl9s
aXN0ID0gTlVMTDsKKyAgSFJFU1VMVCByID0gQ29DcmVhdGVJbnN0YW5jZSgmQ0xTSURfVGFza2Jh
ckxpc3QsCisJCQkgICAgICAgTlVMTCwKKwkJCSAgICAgICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwK
KwkJCSAgICAgICAmSUlEX0lUYXNrYmFyTGlzdDMsCisJCQkgICAgICAgKHZvaWQgKiopJnRhc2tf
YmFyX2xpc3QpOworICBpZiAociAhPSBTX09LKQorICAgIHJldHVybiBRbmlsOworCisgIC8qIFNj
YWxlIHRhc2sgYmFyIHByb2dyZXNzIGZyb20gMC4wLTEuMCB0byAwLTEwMC4gICovCisgIFVMT05H
TE9ORyBhZGpfcHJvZ3Jlc3MgPSAwOworICBpZiAoIU5JTFAgKHByb2dyZXNzKSAmJiBGTE9BVFAg
KHByb2dyZXNzKSkKKyAgICAgIGFkal9wcm9ncmVzcyA9IChVTE9OR0xPTkcpICgxMDAuMCAqCisJ
CQkJICBYRkxPQVRfREFUQSAocHJvZ3Jlc3MpKTsKKyAgaWYgKGFkal9wcm9ncmVzcyA+IDApCisg
ICAgeworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1N0YXRlICh0YXNr
X2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgVEJQRl9OT1JNQUwpOworICAgICAgdGFza19i
YXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1ZhbHVlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkg
ICAgICAgaHduZCwgYWRqX3Byb2dyZXNzLCAxMDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAg
ICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+U2V0UHJvZ3Jlc3NTdGF0ZSAodGFza19iYXJfbGlz
dCwKKwkJCQkJICAgICAgIGh3bmQsIFRCUEZfTk9QUk9HUkVTUyk7CisgICAgfQorCisgIHRhc2tf
YmFyX2xpc3QtPmxwVnRibC0+UmVsZWFzZSh0YXNrX2Jhcl9saXN0KTsKKyAgcmV0dXJuIFF0Owor
fQorCisjZW5kaWYgLyogV0lORE9XU05UICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkJICAgIElu
aXRpYWxpemF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTUxMSw2ICsxMTgyNiwxNSBAQCBz
eW1zX29mX3czMmZucyAodm9pZCkKICAgREVGU1lNIChRY2Fwc2xvY2ssICJjYXBzbG9jayIpOwog
ICBERUZTWU0gKFFrcF9udW1sb2NrLCAia3AtbnVtbG9jayIpOwogICBERUZTWU0gKFFzY3JvbGws
ICJzY3JvbGwiKTsKKworICAjaWZkZWYgV0lORE9XU05UCisgIC8qIFRhc2tiYXIgaW5kaWNhdG9y
cyBzdXBwb3J0LiAgKi8KKyAgZGVmc3ViciAoJlN3MzJfYmFkZ2UpOworICBkZWZzdWJyICgmU3cz
Ml9wcm9ncmVzc19pbmRpY2F0b3IpOworICBkZWZzdWJyICgmU3czMl9yZXF1ZXN0X3VzZXJfYXR0
ZW50aW9uKTsKKyAgREVGU1lNIChRaW5mb3JtYXRpb25hbCwgImluZm9ybWF0aW9uYWwiKTsKKyAg
REVGU1lNIChRY3JpdGljYWwsICJjcml0aWNhbCIpOworICAjZW5kaWYKIH0KIAogDApAQCAtMTE3
OTksNiArMTIxMjMsOSBAQCBnbG9iYWxzX29mX3czMmZucyAodm9pZCkKICAgU2V0R2VzdHVyZUNv
bmZpZ19mbgogICAgID0gKFNldEdlc3R1cmVDb25maWdfcHJvYykgZ2V0X3Byb2NfYWRkciAodXNl
cjMyX2xpYiwKIAkJCQkJICAgICAiU2V0R2VzdHVyZUNvbmZpZyIpOworICBmbGFzaF93aW5kb3df
ZXhfZm4KKyAgICA9IChGbGFzaFdpbmRvd0V4X1Byb2MpIGdldF9wcm9jX2FkZHIgKHVzZXIzMl9s
aWIsCisJCQkJCSAgIkZsYXNoV2luZG93RXgiKTsKIAogICB7CiAgICAgSE1PRFVMRSBpbW0zMl9s
aWIgPSBHZXRNb2R1bGVIYW5kbGUgKCJpbW0zMi5kbGwiKTsKZGlmZiAtLWdpdCBhL3N5c3RlbS10
YXNrYmFyLnRleGkgYi9zeXN0ZW0tdGFza2Jhci50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4wMTgzZDUwZjU4MgotLS0gL2Rldi9udWxsCisrKyBiL3N5c3RlbS10
YXNrYmFyLnRleGkKQEAgLTAsMCArMSwyNjAgQEAKK1xpbnB1dCB0ZXhpbmZvICAgIEBjIC0qLXRl
eGluZm8tKi0KKworQHNldGZpbGVuYW1lIC4uLy4uL2luZm8vZG9jay1tb2RlLmluZm8KK0BzZXR0
aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIgRmVhdHVyZXMKK0BpbmNsdWRlIGRvY3N0eWxlLnRleGkK
KworQGNvcHlpbmcKK1RoaXMgZmlsZSBkZXNjcmliZXMgRW1hY3Mgc3lzdGVtIEdVSSB0YXNrYmFy
IGludGVncmF0aW9uLgorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMjUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuCisKK0BxdW90YXRpb24KK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0
byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4z
IG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgd2l0aCBubworSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIHRoZSBGcm9udC1Db3Zl
ciBUZXh0cyBiZWluZyBgYEEgR05VIE1hbnVhbCwnJworYW5kIHdpdGggdGhlIEJhY2stQ292ZXIg
VGV4dHMgYXMgaW4gKGEpIGJlbG93LiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzCitpbmNsdWRl
ZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5z
ZScnLgorCisoYSkgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczogYGBZb3UgaGF2ZSB0aGUg
ZnJlZWRvbSB0byBjb3B5IGFuZAorbW9kaWZ5IHRoaXMgR05VIG1hbnVhbC4nJworQGVuZCBxdW90
YXRpb24KK0BlbmQgY29weWluZworCitAZGlyY2F0ZWdvcnkgRW1hY3MgbWlzYyBmZWF0dXJlcwor
QGRpcmVudHJ5CisqIFN5c3RlbSBHVUkgVGFza2JhcjogKHRhc2tiYXIpLiAgICAgICBTeXN0ZW0g
R1VJIHRhc2tiYXIgaW50ZWdyYXRpb24uCitAZW5kIGRpcmVudHJ5CisKK0B0aXRsZXBhZ2UKK0B0
aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIgSW50ZWdyYXRpb24KK0BwYWdlCitAdnNraXAgMHB0IHBs
dXMgMWZpbGxsCitAaW5zZXJ0Y29weWluZworQGVuZCB0aXRsZXBhZ2UKKworQGNvbnRlbnRzCisK
K0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIEVtYWNzIFN5c3RlbSBHVUkgVGFza2JhciBJbnRl
Z3JhdGlvbgorVGhpcyBtYW51YWwgZGVzY3JpYmVzIEVtYWNzIHN5c3RlbSBHVUkgdGFza2JhciBp
bnRlZ3JhdGlvbi4KKworVGhlIEBkZm57c3lzdGVtLXRhc2tiYXJ9IHBhY2thZ2UgYWRkcyBFbWFj
cyBpbnRlZ3JhdGlvbiB3aXRoIHN5c3RlbSBHVUkKK3Rhc2tiYXIgKGFsc28gY2FsbGVkIGRvY2tz
IG9yIGxhdW5jaGVycyBvciBzb21ldGhpbmcgc2ltaWxhcikgdG8gZGlzcGxheQorYSB0YXNrYmFy
IGljb24gImJhZGdlIiBvdmVybGF5LCBhIHByb2dyZXNzIGJhciByZXBvcnQgb3ZlcmxheSwgYWxl
cnQgdGhlCit1c2VyIHRoYXQgYW4gRW1hY3Mgc2Vzc2lvbiBuZWVkcyBhdHRlbnRpb24sIG9mdGVu
IGJ5IGZsYXNoaW5nIG9yCitib3VuY2luZyB0aGUgRW1hY3MgYXBwbGljYXRpb24gaWNvbi4gIFRh
c2tiYXIgY2FwYWJsZSBzeXN0ZW1zIGFyZQorR05VL0xpbnV4IHZpYSBELUJ1cywgbWFjT1MvR05V
c3RlcCAxMC41KywgTVMtV2luZG93cyA3Ky4KKworT24gR05VL0xpbnV4LCB0aGUgdmlzaWJsZSBl
ZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlvbnMKK2RldGVybWluZWQgYnkgeW91
ciBzaGVsbCBleHRlbnNpb24sIG1vc3Qgb2Z0ZW4gdGhlIGFwcGxpY2F0aW9uIGxhdW5jaGVyCitv
ciBkb2NrIHBhbmVsLCBvciB0aGUgdG9wIHBhbmVsLiAgRWZmZWN0cyBhcmUgZ2xvYmFsIGZvciBh
biBFbWFjcworaW5zdGFuY2UuCisKK09uIG1hY09TL0dOVXN0ZXAsIHRoZSBlZmZlY3RzIHdpbGwg
YXBwZWFyIG9uIHRoZSBEb2NrIGFuZCBpbiB0aGUgQXBwCitTd2l0Y2hlci4gIEVmZmVjdHMgYXJl
IGdsb2JhbCBmb3IgYW4gRW1hY3MgaW5zdGFuY2UuCisKK09uIE1TLVdpbmRvd3MsIHRoZSBlZmZl
Y3RzIGFwcGVhciBvbiB0aGUgdGFza2Jhci4gIEVmZmVjdHMgYXJlCithc3NvY2lhdGVkIHdpdGgg
dGhlIGZyYW1lIGZyb20gd2hpY2ggdGhleSBhcmUgaW5pdGlhdGVkLgorCitAaW5zZXJ0Y29weWlu
ZworCitAbWVudQorKiBPdmVydmlldzo6ICAgICAgICAgICAgICAgICAgICBPdmVydmlldyBvZiBz
eXN0ZW0gR1VJIHRhc2tiYXIgaW50ZWdyYXRpb24KKyogUHJlcmVxdWlzaXRlczo6CisqIFVzZXIg
T3B0aW9uczo6CisqIEZ1bmN0aW9uIFJlZmVyZW5jZTo6CisqIFN5c3RlbSBUYXNrYmFyIFVzYWdl
IEV4YW1wbGVzOjoKKyogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogIFRoZSBsaWNl
bnNlIGZvciB0aGlzIGRvY3VtZW50YXRpb24uCisqIEZ1bmN0aW9uIEluZGV4OjoKKyogVmFyaWFi
bGUgSW5kZXg6OgorQGVuZCBtZW51CitAZW5kIGlmbm90dGV4CisKK0Bub2RlIE92ZXJ2aWV3CitA
Y2hhcHRlciBPdmVydmlldworCitUaGUgU3lzdGVtIFRhc2tiYXIgcGFja2FnZSBwcm92aWRlcyB0
aGVzZSBzeXN0ZW0gR1VJIHRhc2tiYXIgZmVhdHVyZXM6CisKK0BpdGVtaXplIEBidWxsZXQKK0Bp
dGVtIEljb24gYmFkZ2UKK0BpdGVtIEljb24gcHJvZ3Jlc3MgaW5kaWNhdG9yCitAaXRlbSBJY29u
IGF0dGVudGlvbiBhbGVydAorQGVuZCBpdGVtaXplCisKK0Bub2RlIFByZXJlcXVpc2l0ZXMKK0Bj
aGFwdGVyIFByZXJlcXVpc2l0ZXMKKworbWFjT1MvR05Vc3RlcCwgYW5kIE1TLVdpbmRvd3MgdXNl
cnMgbmVlZCBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24uCisKK09uIEdOVS9MaW51eCBzeXN0ZW1z
LCB0aGUgaW1wbGVtZW50YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCitzaGVsbHMg
YW5kL29yIHNoZWxsIGV4dGVuc2lvbnMgc3VjaCBhcworQGZpbGV7aHR0cHM6Ly9leHRlbnNpb25z
Lmdub21lLm9yZy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9jay99IHRoYXQKK2ltcGxlbWVudCBV
YnVudHUncyBVbml0eSBsYXVuY2hlciBzcGVjIHdoaWNoIHlvdSBjYW4gcmVhZCBtb3JlIGFib3V0
CitoZXJlIEBmaWxle2h0dHBzOi8vd2lraS51YnVudHUuY29tL1VuaXR5L0xhdW5jaGVyQVBJfS4K
KworQG5vZGUgVXNlciBPcHRpb25zCitAY2hhcHRlciBVc2VyIE9wdGlvbnMKKworQGRlZm9wdCBz
eXN0ZW0tdGFza2Jhci1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXMKK1RoZSB2YXJpYWJs
ZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXN9IGNh
biBiZQorY3VzdG9taXplZCB0byBjbGVhciB0aGUgdGFza2JhciBpY29uIGF0dGVudGlvbiBpbmRp
Y2F0b3Igd2hlbiBhbnkgRW1hY3MKK0dVSSBmcmFtZSBpcyBmb2N1c2VkLiAgVGhpcyBpcyB1c2Vm
dWwgb24gR05VL0xpbnV4IGFuZCBpZ25vcmVkIG9uIGJhY2sKK2VuZHMgdGhhdCBhdXRvbWF0aWNh
bGx5IGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yIChNUy1XaW5kb3dzIGFuZAorbWFjT1Mv
R05Vc3RlcCkuICBJdCBkZWZhdWx0cyB0byBAY29kZXt0fS4gIEN1c3RvbWl6ZSB0aGlzIGJlZm9y
ZQorZW5hYmxpbmcgQGNvZGV7c3lzdGVtLXRhc2tiYXItbW9kZX0uCitAZW5kIGRlZm9wdAorCitA
ZGVmb3B0IHN5c3RlbS10YXNrYmFyLWRidXMtZGVza3RvcC1maWxlLW5hbWUKK1RoZSB2YXJpYWJs
ZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1kYnVzLWRlc2t0b3AtZmlsZS1uYW1lfSBpcyBjb25zdWx0
ZWQKK29uIEdOVS9MaW51eCBELUJ1cyBzeXN0ZW1zLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8g
aW5kaWNhdGUgd2hpY2gKK2Rlc2t0b3AgZmlsZSBuYW1lIGlkZW50aWZpZXMgeW91ciBFbWFjcyBp
bnN0YW5jZS4gIEl0IGRlZmF1bHRzIHRvIHRoZQorZGVza3RvcCBmaWxlIGJhc2UgbmFtZSBAY29k
ZXsiZW1hY3NjbGllbnQifSBhbmQgbWlnaHQgbmVlZCB0byBiZSBzZXQgdG8KK0Bjb2RleyJlbWFj
cyJ9IG9uIHlvdXIgc3lzdGVtLiAgRW1hY3MgaW5zdGFsbGVkIGJ5IExpbnV4IGRpc3RyaWJ1dGlv
bnMKK2NhbiB2YXJ5IG9uIHRoZWlyIG5hbWluZyBzY2hlbWUgYW5kIG9mdGVuIGluY2x1ZGUgZGVz
a3RvcCBmaWxlcyBmb3IKK2JvdGguCitAZW5kIGRlZm9wdAorCitAZGVmb3B0IHN5c3RlbS10YXNr
YmFyLWRidXMtdGltZW91dAorVGhlIHZhcmlhYmxlIEBjb2Rle3N5c3RlbS10YXNrYmFyLWRidXMt
dGltZW91dH0gaXMgY29uc3VsdGVkIG9uCitHTlUvTGludXggRC1CdXMgc3lzdGVtcywgYW5kIGNh
biBiZSBjdXN0b21pemVkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZgorbWlsbGlzZWNvbmRzIEVt
YWNzIHdpbGwgd2FpdCBmb3IgRC1CdXMgcmVzcG9uc2VzIGJlZm9yZSB0aW1pbmcgb3V0IGFuZAor
Y29uc2lkZXJpbmcgbWVzc2FnZXMgdW5kZWxpdmVyYWJsZS4gIEl0IGRlZmF1bHRzIHRvIG5pbCB3
aGljaCB3aWxsIHVzZQordGhlIEQtQnVzIHBhY2thZ2UgZGVmYXVsdCBvZiAyNTAwMCBtaWxsaXNl
Y29uZHMsIHdoaWNoIHNlZSwKK0BweHJlZntUb3AsLCwgZGJ1cywgRC1CdXMgaW50ZWdyYXRpb24g
aW4gRW1hY3N9LgorQGVuZCBkZWZvcHQKKworQG5vZGUgRnVuY3Rpb24gUmVmZXJlbmNlCitAY2hh
cHRlciBGdW5jdGlvbiBSZWZlcmVuY2UKKworQGRlZmZuIHN5c3RlbS10YXNrYmFyLW1vZGUKK0Bj
b2Rle3N5c3RlbS10YXNrYmFyLW1vZGV9IG11c3QgYmUgZW5hYmxlZCB0byBpbml0aWFsaXplIHRo
ZSBzeXN0ZW0gYmFjaworZW5kIGJlZm9yZSBjYWxsaW5nIGFueSBvZiB0aGlzIHBhY2thZ2UncyBm
dW5jdGlvbnMuICBPbiBhIEdOVS9MaW51eAorRC1CdXMgc3lzdGVtLCB0aGUgcmVxdWlyZWQgRC1C
dXMgcHJvdG9jb2wgaXMgcHJvYmVkIGFuZCBpZiBub3QKK2F2YWlsYWJsZSwgYW4gZXJyb3IgaXMg
c2lnbmFsZWQuCitAZW5kIGRlZmZuCisKK0BkZWZ1biBzeXN0ZW0tdGFza2Jhci1iYWRnZSAmb3B0
aW9uYWwgY291bnQKK0Rpc3BsYXkgdGhlIHRhc2tiYXIgaWNvbiBiYWRnZSBzZXQgdG8gQHZhcntj
b3VudH0uICBJZiBAdmFye2NvdW50fSBpcworQGNvZGV7bmlsfSwgY2xlYXIgdGhlIGJhZGdlLiAg
QHZhcntjb3VudH0gaXMgdHlwaWNhbGx5IGFuIGludGVnZXIuCisKK0lmIEB2YXJ7Y291bnR9IGlz
IGEgc3RyaW5nLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvbiBzeXN0ZW1zCit0aGF0
IGRvIG5vdCBzdXBwb3J0IHN0cmluZyBiYWRnZXMsIHN1Y2ggYXMgR05VL0xpbnV4IEQtQnVzLCBh
bmQgdGhlCitiYWRnZSB3aWxsIGJlIGNsZWFyZWQgaWYgdGhlIHN0cmluZyBpcyBhbiBpbnZhbGlk
IGludGVnZXIKK3JlcHJlc2VudGF0aW9uLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3RyaW5n
cywgc3VjaCBhcyBtYWNPUy9HTlVzdGVwCithbmQgTVMtV2luZG93cywgdGhlIGJhZGdlIGlzIHNl
dCB0byB0aGUgc3RyaW5nIGFuZCBkaXNwbGF5ZWQsIGFuZCBtYXkgYmUKK3RydW5jYXRlZCB0byBm
aXQgdGhlIHZpc3VhbCBzcGFjZSBhbGxvY2F0ZWQgYnkgdGhlIHN5c3RlbS4gIEluIGFueSBjYXNl
LAoraWYgdGhlIHN0cmluZyBpcyBlbXB0eSwgY2xlYXIgdGhlIGJhZGdlLgorQGVuZCBkZWZ1bgor
CitAZGVmdW4gc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uICZvcHRpb25hbCB1cmdlbmN5IHRpbWVv
dXQKK0Rpc3BsYXkgYSB0YXNrYmFyIGljb24gYWxlcnQuICBUaGlzIHdpbGwgcmVzdWx0IGluIGEg
Ym91bmNpbmcgb3IKK2ZsYXNoaW5nIHRhc2tiYXIgaWNvbi4gIE9uIHNvbWUgYmFjayBlbmRzLCBh
dHRlbnRpb24gd2lsbCBiZSBkaXNwbGF5ZWQKK29ubHkgaWYgRW1hY3MgaXMgbm90IHRoZSBjdXJy
ZW50bHkgZm9jdXNlZCBhcHBsaWNhdGlvbi4KKworSWYgQHZhcnt1cmdlbmN5fSBpcyB0aGUgc3lt
Ym9sIEBjb2Rle2luZm9ybWF0aW9uYWx9LCBub3JtYWwgYXR0ZW50aW9uIGlzCityZXF1ZXN0ZWQu
ICBJZiBAdmFye3VyZ2VuY3l9IGlzIHRoZSBzeW1ib2wgQGNvZGV7Y3JpdGljYWx9LCB1cmdlbnQK
K2F0dGVudGlvbiBpcyByZXF1ZXN0ZWQuICBJZiBAdmFye3VyZ2VudH0gaXMgQGNvZGV7bmlsfSwg
Y2xlYXIgdGhlCithdHRlbnRpb24gaW5kaWNhdG9yLgorCitFbWFjcyB3YWl0cyBAdmFye3RpbWVv
dXR9IHNlY29uZHMgYmVmb3JlIGF1dG9tYXRpY2FsbHkgcmVtb3ZpbmcgdGhlCitpbmRpY2F0b3Iu
ICBJZiBAdmFye3RpbWVvdXR9IGlzIEBjb2Rle25pbH0sIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9y
IHdpbGwKK2JlIGNsZWFyZWQgYnkgdGhlIHN5c3RlbSBvciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rp
b24gYWdhaW4gcGFzc2luZyBhCitAY29kZXtuaWx9IHVyZ2VuY3kuCisKK09uIHNvbWUgYmFjayBl
bmRzLCBhbiBAY29kZXtpbmZvcm1hdGlvbmFsfSBhdHRlbnRpb24gcmVxdWVzdCB3aWxsIHRpbWUK
K291dCBhdXRvbWF0aWNhbGx5LiAgSW4gY29udHJhc3QsIGEgQGNvZGV7Y3JpdGljYWx9IHJlcXVl
c3QgcmVxdWlyZXMgdGhhdAordGhlIHVzZXIgYnJpbmcgRW1hY3MgaW50byBmb2N1cyBhbmQgd2ls
bCBub3QgdGltZSBvdXQuICBPbiBzb21lIGJhY2sKK2VuZHMsIEBjb2Rle2NyaXRpY2FsfSBoYXMg
dGhlIHNhbWUgZWZmZWN0IGFzIEBjb2Rle2luZm9ybWF0aW9uYWx9LgorQGVuZCBkZWZ1bgorCitA
ZGVmdW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgJm9wdGlvbmFsIHByb2dyZXNzCitTZXQgdGhl
IHRhc2tiYXIgaWNvbiB0byBpbmRpY2F0ZSBwcm9ncmVzcyBvZiBhIGxvbmctcnVubmluZyBvcGVy
YXRpb24uCitUYXNrYmFyIHByb2dyZXNzIGlzIHR5cGljYWxseSByZXByZXNlbnRlZCBhcyBhIGdy
YXBoaWNhbCBiYXIgdGhhdAorZnJhY3Rpb25hbGx5IHNwYW5zIHRoZSB0YXNrYmFyIGljb24uICBA
dmFye3Byb2dyZXNzfSBpcyBhIGZsb2F0IGluIHRoZQorcmFuZ2UgMC4wIHRvIDEuMC4gIElmIEB2
YXJ7cHJvZ3Jlc3N9IGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcworaW5kaWNhdG9yLgorCitA
QEAgVGhlIHR3byBtYWNyb3MgYmVsb3cgY2FuIGJlIHVzZWQgdG8gc3VwcGxlbWVudCBjb252ZW50
aW9uYWwgRW1hY3MKK3Byb2dyZXNzIHJlcG9ydGluZyBpbiB0aGUgZWNobyBhcmVhLiAgQHhyZWZ7
UHJvZ3Jlc3MsLCBEaXNwbGF5LCBlbGlzcCwgVGhlIEVtYWNzIExpc3AKK1JlZmVyZW5jZSBNYW51
YWx9LgorCitAZW5kIGRlZnVuCisKK0BkZWZtYWMgZG90aW1lcy13aXRoLXN5c3RlbS10YXNrYmFy
LXByb2dyZXNzLXJlcG9ydGVyICh2YXIgY291bnQgW3Jlc3VsdF0pIHJlcG9ydGVyLW9yLW1lc3Nh
Z2UgYm9keUBkb3Rze30KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBtYWNybyBhbmFsb2dvdXMgdG8K
K0Bjb2Rle2RvdGltZXMtd2l0aC1wcm9ncmVzcy1yZXBvcnRlcn0gYW5kIHdvcmtzIHRoZSBzYW1l
IHdheSBhcworQGNvZGV7ZG90aW1lc30gZG9lcywgYnV0IGFsc28gcmVwb3J0cyBsb29wIHByb2dy
ZXNzIG9uIHRoZSBFbWFjcyB0YXNrYmFyCitpY29uLiBAQEAgQHhyZWZ7UHJvZ3Jlc3MsLCBEaXNw
bGF5LCBlbGlzcCwgVGhlIEVtYWNzIExpc3AgUmVmZXJlbmNlCitNYW51YWx9LgorQGVuZCBkZWZt
YWMKKworQGRlZm1hYyBkb2xpc3Qtd2l0aC1zeXN0ZW0tdGFza2Jhci1wcm9ncmVzcy1yZXBvcnRl
ciAodmFyIGxpc3QgW3Jlc3VsdF0pIHJlcG9ydGVyLW9yLW1lc3NhZ2UgYm9keUBkb3Rze30KK1Ro
aXMgaXMgYSBjb252ZW5pZW5jZSBtYWNybyBhbmFsb2dvdXMgdG8KK0Bjb2Rle2RvbGlzdC13aXRo
LXByb2dyZXNzLXJlcG9ydGVyfSBhbmQgd29ya3MgdGhlIHNhbWUgd2F5IGFzCitAY29kZXtkb2xp
c3R9IGRvZXMsIGJ1dCBhbHNvIHJlcG9ydHMgbG9vcCBwcm9ncmVzcyBvbiB0aGUgRW1hY3MgdGFz
a2JhcgoraWNvbi4gIEBAQCBAeHJlZntQcm9ncmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUgRW1h
Y3MgTGlzcCBSZWZlcmVuY2UKK01hbnVhbH0uCitAZW5kIGRlZm1hYworCitAbm9kZSBTeXN0ZW0g
VGFza2JhciBVc2FnZSBFeGFtcGxlcworQGNoYXB0ZXIgU3lzdGVtIFRhc2tiYXIgVXNhZ2UgRXhh
bXBsZXMKKworQGxpc3AKK0Bncm91cAorOzsgRW5hYmxlIGFuZCBpbml0aWFsaXplIHN5c3RlbS10
YXNrYmFyLW1vZGUgYmVmb3JlIGNhbGxpbmcgaXRzCis7OyBjb21wYW5pb24gZnVuY3Rpb25zLgor
KHN5c3RlbS10YXNrYmFyLW1vZGUpCisKKzs7IERpc3BsYXkgYSBiYWRnZSBvbiB0aGUgdGFza2Jh
ciBpY29uLgorKHN5c3RlbS10YXNrYmFyLWJhZGdlIGVtYWNzLW1ham9yLXZlcnNpb24pCisoc3lz
dGVtLXRhc2tiYXItYmFkZ2UgIjMxIikgOyBjb252ZXJ0ZWQgdG8gaW50ZWdlciBvbiBHTlUvTGlu
dXgKKyhzeXN0ZW0tdGFza2Jhci1iYWRnZSAiVGVzdCIpIDsgd29ya3Mgb24gbWFjT1MvR05Vc3Rl
cCBhbmQgTVMtV2luZG93cworCis7OyBDbGVhciB0aGUgYmFkZ2UuCisoc3lzdGVtLXRhc2tiYXIt
YmFkZ2UgbmlsKQorOzsgT3IganVzdAorKHN5c3RlbS10YXNrYmFyLWJhZGdlKQorQGVuZCBncm91
cAorCitAZ3JvdXAKKzs7IEdldCB0aGUgdXNlcidzIGF0dGVudGlvbi4KKyhzeXN0ZW0tdGFza2Jh
ci1hdHRlbnRpb24gJ2luZm9ybWF0aW9uYWwgMykgOyBjbGVhciB0aGUgcmVxdWVzdCBhZnRlciAz
IHNlY29uZHMKKyhzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gJ2NyaXRpY2FsKSA7IGNsZWFyIHdo
ZW4gdGhlIEVtYWNzIGFwcGxpY2F0aW9uIGlzIGZvY3VzZWQKKworOzsgQ2xlYXIgdGhlIGF0dGVu
dGlvbiByZXF1ZXN0LgorKHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBuaWwpCis7OyBPciBqdXN0
Cisoc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uKQorQGVuZCBncm91cAorCitAZ3JvdXAKKzs7IFJl
cG9ydCBgZG90aW1lc2AgcHJvZ3Jlc3Mgb24gdGhlIHRhc2tiYXIgaWNvbi4KKyhkb3RpbWVzLXdp
dGgtc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXIKKyAoaSAxMCkgIkNvdW50aW5nIGZy
b20gMSB0byAxMC4uLiIKKyAoc2xlZXAtZm9yIDEpKQorCis7OyBSZXBvcnQgYGRvbGlzdGAgcHJv
Z3Jlc3Mgb24gdGhlIHRhc2tiYXIgaWNvbi4KKyhkb2xpc3Qtd2l0aC1zeXN0ZW0tdGFza2Jhci1w
cm9ncmVzcy1yZXBvcnRlcgorIChpIChtYWtlLWxpc3QgMTAgdCkpICJQcm9ncmVzcyBmcm9tIDEg
dG8gMTAgZWxlbWVudHMuLi4iCisgKHNsZWVwLWZvciAxKSkKK0BlbmQgZ3JvdXAKK0BlbmQgbGlz
cAorCitAbm9kZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKK0BhcHBlbmRpeCBHTlUg
RnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKK0BpbmNsdWRlIGRvY2xpY2Vuc2UudGV4aQorCitA
bm9kZSBGdW5jdGlvbiBJbmRleAorQHVubnVtYmVyZWQgRnVuY3Rpb24gSW5kZXgKK0BwcmludGlu
ZGV4IGZuCisKK0Bub2RlIFZhcmlhYmxlIEluZGV4CitAdW5udW1iZXJlZCBWYXJpYWJsZSBJbmRl
eAorQHByaW50aW5kZXggdnIKKworQGJ5ZQorCitAYyBFbmQ6Ci0tIAoyLjQ3LjEKCg==
--000000000000ef978c0645872975--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 10 Dec 2025 04:01:02 +0000
Resent-Message-ID: <handler.79859.B79859.176533922310179 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176533922310179
          (code B ref 79859); Wed, 10 Dec 2025 04:01:02 +0000
Received: (at 79859) by debbugs.gnu.org; 10 Dec 2025 04:00:23 +0000
Received: from localhost ([127.0.0.1]:57345 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTBNF-0002e2-Tg
	for submit <at> debbugs.gnu.org; Tue, 09 Dec 2025 23:00:23 -0500
Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:60633)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTBND-0002Zo-2d
 for 79859 <at> debbugs.gnu.org; Tue, 09 Dec 2025 23:00:20 -0500
Received: by mail-vs1-xe2b.google.com with SMTP id
 ada2fe7eead31-5dfa9e34adbso4896145137.0
 for <79859 <at> debbugs.gnu.org>; Tue, 09 Dec 2025 20:00:19 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765339213; x=1765944013; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=/G8DvR+cyjT7/2oY3rY5epKJyZSZh0uBzN92ujG0x5Q=;
 b=EjUKyeE8jszzZvZdrDbD9Q+F6ivAb1BkH8BYcJDKdOfSDEOmkV63GoU9cgu+vGrIq2
 2lkfS95EfyPqSN2XEE3Fqex6sb4xv2yJ+26R1sp53vJzu00Kk8ro8/fZVdu/HosBzViq
 hA6O0szX55MBCDcRd6sCwpJ6XrpPwaytTe0iCOZN1vyEpuHrjiTe1U9w2VVUFv2hc/1l
 Zvk1Q02nAG4lQEMAh/Wrn1mxHp9gSE+WC2Y/u+zPCiXoHRT6iPKagFB+IoKP4PljTmC4
 NN9+5i0bphg4JitnzEtueAW8WzmTL4J5POMMbAq6+cbfjaJlBt8WT6mutUw8lkV3gAoF
 2hOQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765339213; x=1765944013;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=/G8DvR+cyjT7/2oY3rY5epKJyZSZh0uBzN92ujG0x5Q=;
 b=YyESnCTwgiObroJTzIc1DcbLRzFGV97okrF65rhBbIiYrLXvcvAwBuSxp0i+YIoWSN
 /hG0TQFvMMH4yVLpci5c5bWOt1hMjCVhKOLFq2YhNTnmZQHyiPVXhmnT2W5f5187iXZW
 rXhtoFdEpggpwulEeKiglTektkTe6YIxB90DDFJsdv6HKzUUbH9lQUSgV4xWI/mDlipV
 baKevLH5jGSPlIFCGLCiZBUzqK8RfjXlK0KXzAAs/S+jtFLKL8czeqawkgxQFASYJWPD
 iTFAPzQwpUyrfjEhdz4VzlLSa723lAxAQ5bOTZcNz2fGV1OYnouc/umcuPnu+OTvxvoa
 qanw==
X-Forwarded-Encrypted: i=1;
 AJvYcCVp+aqxsU1UUsWFD6J3Xyd7MkBB5JzRV+bDTPV7QA5GFId1Vsl82/24YrBy9mr01GBVIxswKA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzQjl3ds9mZ1hTYPBCn3sysm/WKU0fBtdFbdQ5McMpl4gkzwICC
 z7gJuf+nihjIGKOXy65Hu5T/61AjK3RSv+RFQrqXzneD7IaaxIVRn1WAEbj04nJ7Ye5Ny5ovoih
 eeCjZVYjNVDQRm2/8SPthH67pPsnrmwM=
X-Gm-Gg: AY/fxX4NFQNT4s40DYRyMtv0awV1BEIuy/tgZjaBKl+xHHugc0nJGcLUUKNkOZPeDsP
 OIdlMr+451A3whXbmA9X5k07bhbEo29ItlZEKmGPfmW31K/Dy6D1gKK3FoAkWDUzacFf2TmqxbE
 VXX+yAxIsY1B3LpmQHEtuaPTNATTMztLeMlWxlNrek5XsG0QoCsXPbTNLXk2crbFSH4An5G7HN6
 6eiLDrFKoGH2jD55jTvY+5WSCftFmODY7GXSd+0X9m3FhjS+Ko2yLKO9H1ipMRcB7OIdhs=
X-Google-Smtp-Source: AGHT+IFiBoXjL9NrKkUTkbKGeZLbDONPr+UnJzj4WuQdupw2rLFZw6tpDuJHtk7GdZl0aw5eLCUNXqnO6MEOP41qc+4=
X-Received: by 2002:a05:6102:cd4:b0:5db:32dc:f05b with SMTP id
 ada2fe7eead31-5e571eedfb1mr349836137.42.1765339213274; Tue, 09 Dec 2025
 20:00:13 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
In-Reply-To: <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Tue, 9 Dec 2025 23:00:01 -0500
X-Gm-Features: AQt7F2oN7Ux2Ur-nl7HyFROmu9AioVza_ntn_sRaak-zTzE6cHlUVXC2bkxjupc
Message-ID: <CAN+1Hbp5jWDcVyQccbJbWDR8G1jpmbHY1UcY0jqLWJT4wpWv_Q@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000b727f8064591103c"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000b727f8064591103c
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Tue, Dec 9, 2025 at 11:11=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai=
l.com> wrote:

> On Thu, Nov 27, 2025 at 12:47=E2=80=AFPM Michael Albinus <michael.albinus=
@gmx.de>
> wrote:
>
>> St=C3=A9phane Marks <shipmints@HIDDEN> writes:
>>
>> Hi St=C3=A9phane,
>>
>> > Thank you for reviewing the patch and your thoughtful feedback.  I'll
>> > incorporate more feedback after you get it compiled and you give it a
>> > try, and perhaps other people, too.  My Windows 11 virtual machine is
>> > less than a real-world Windows set up, though sufficient for
>> > developing this feature.
>> >
>> > I've attached a patch rebased on master
>> > 2cc6c812788281c05ca9687afd7bedf597b1e942 which also incorporates your
>> > feedback.
>>
>> I gave it a try on my laptop (Fedora 43 +
>> gnome-shell-extension-dash-to-dock).
>> First impressions:
>>
>> - After calling 'M-x dock-mode', I get an error
>>
>> --8<---------------cut here---------------start------------->8---
>> dock--set-back-end: Symbol=E2=80=99s function definition is void:
>> dbus-list-activatable-names
>> --8<---------------cut here---------------end--------------->8---
>>
>>   I guess a require is missing.
>>
>> - The examples in the "(dock-mode) Dock Usage Examples" node are working
>>   except (dock-badge "Test"). I guess it is a restriction for the D-Bus
>>   backend. It would be great if the documentation says which
>>   functionality is implemented by which backend. Maybe I missed this?
>>
>> Comments, mainly from Eli are already give. Since I agree with them, I
>> will comment on the code only if there are further remarks by me.
>>
>> > From 86a1577ff8290291020b10294f65352773b69db3 Mon Sep 17 00:00:00 2001
>> > From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D <shipmints@HIDDEN=
>
>> > Date: Thu, 20 Nov 2025 12:54:40 -0500
>> > Subject: [PATCH] Add system GUI dock integration.
>>
>> > --- a/doc/misc/Makefile.in
>> > +++ b/doc/misc/Makefile.in
>> > @@ -68,6 +68,7 @@ DOCMISC_W32 =3D
>> >
>> >  ## Info files to build and install on all platforms.
>> >  INFO_COMMON =3D auth autotype bovine calc ccmode cl dbus dired-x
>>        \
>> > +     dock-mode                                                       =
\
>> >       ebrowse ede ediff edt efaq eglot eieio emacs-gnutls             =
\
>> >       emacs-mime epa erc ert eshell eudc eww flymake forms gnus       =
\
>> >       htmlfontify idlwave ido info.info mairix-el message mh-e        =
\
>>
>> It shouldn't be a line of its own.
>>
>> > --- /dev/null
>> > +++ b/doc/misc/dock-mode.texi
>>
>> As Eli said, it shouldn't be a manual under doc/misc. Everything what's
>> said about calling 'dock-mode' and its user options fits into the
>> Emacs manual.
>>
>> The more technical details, function interfaces, belong to the Elisp
>> manual. We have there a node "(elisp) Desktop Notifications". dock-mode
>> is a comparable feature, I would call it "Taskbar Notifications". So the
>> information shall  go there, directly after desktop notificatios.
>>
>> > +Your GNU/Linux Emacs instance should be launched via an appropriate
>> > +shell "desktop" file such as those distributed with Emacs; e.g.,
>> > +"etc/emacsclient.desktop".
>>
>> "etc/emacsclient.desktop" is internal to Emacsd; it isn't taken into
>> account by the GUI dock. So we shall speak about it more general.
>>
>> > +@node User Options
>> > +@chapter User Options
>> > +
>> > +@defvar dock-clear-attention-on-frame-focus
>>
>> Use @defopt.
>>
>> > +The variable @code{dock-clear-attention-on-frame-focus} can be
>>
>> The user option ...
>>
>> > +@defvar dock-dbus-desktop-file-name
>> > +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux
>>
>> Dito.
>>
>> > +@defvar dock-dbus-timeout-ms
>> > +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus
>>
>> Dito.
>>
>> I wouldn't use a trailing '-ms'. This is a technical detail, which isn't
>> used anywhere else in the D-Bus object names.
>>
>> > +systems, and can be customized to specify the number of milliseconds
>> > +Emacs will wait for D-Bus responses before timing out and considering
>> > +messages undeliverable.  It defaults to 25000 milliseconds, which is
>> the
>> > +recommended default by the D-Bus package, which see, @pxref{Top,,,
>> dbus,
>> > +D-Bus integration in Emacs}.
>>
>> I wouldn't set the default to 25000, but to nil. This means "use the
>> D-Bus default", which is 25000 indeed. But we don't need to mirror it.
>>
>> > +@node Function Reference
>> > +@chapter Function Reference
>> > +
>> > +@findex dock-mode
>> > +@defun dock-mode
>>
>> As said by Eli, don't use @findex. And use "@deffn Command" in order to
>> show, that it is a command.
>>
>> > diff --git a/etc/NEWS b/etc/NEWS
>> > index fdb1ee02819..f5252cc5bf9 100644
>> > --- a/etc/NEWS
>> > +++ b/etc/NEWS
>> > @@ -2772,6 +2772,16 @@ determined by the new user option
>> 'pulse-face-duration'.
>> >
>> >  ** Miscellaneous
>> >
>> > ++++
>> > +*** New feature 'dock-mode'.
>>
>> This belongs to "* New Modes and Packages in Emacs 31.1". It should be
>> headed by "** Dock mode".
>>
>> > +This package integrates Emacs with system GUI "docks" to display a do=
ck
>> > +icon badge, progress indicator, and attention alerts.  Implementation=
s
>> > +are available for D-Bus platforms (e.g., KDE and GNOME), macOS/GNUste=
p,
>> > +and MS-Windows.  On GNU/Linux systems, shell extensions such as
>> > +"dash-to-dock" may be required.  See
>> > +<https://extensions.gnome.org/extension/307/dash-to-dock/> and
>> > +<https://wiki.ubuntu.com/Unity/LauncherAPI>.
>>
>> There shall be two subheadings. This one, and another one introducing
>> 'dock-mode' and the user options (for the users). And perhaps a third
>> one, speaking about the other functions.
>>
>> > --- /dev/null
>> > +++ b/lisp/dock-mode.el
>> > @@ -0,0 +1,455 @@
>>  +
>> > +;;; Commentary:
>>
>> I'm missing the description of 'dock-mode' for enabling/disabling of the
>> feature.
>>
>> > +(defcustom dock-dbus-timeout-ms 25000
>> > +  "Number of milliseconds to wait for D-Bus responses.
>> > +The default value mirrors the `dbus` default."
>> > +  :type 'natnum
>> > +  :version "31.1")
>>
>> As said, I would call it dock-dbus-timeout. And give it
>>
>> --8<---------------cut here---------------start------------->8---
>> :type '(choice (constant :tag "Default" nil) natnum)
>> --8<---------------cut here---------------end--------------->8---
>>
>
> Here's a fresh patch (still based on the master as of
> 2cc6c812788281c05ca9687afd7bedf597b1e942).  I've aimed to accommodate
> everyone's feedback.  I've retested on mac, Windows, Debian.
>
> The package is now called system-taskbar.  I've updated the NEWS and
> documentation to make it clear that taskbar might be called other things
> and taskbar is an inclusive name.
>
> Rather than add hooks to progress reporter, which would be of global
> scope, I added optional update and done callbacks to make-progress-report=
er
> and that works swimmingly well.  NEWS and documentation have been updated
> for that feature in addition to system-taskbar.
>
> I changed the w32 implementation for the taskbar features to be enabled
> relative to the current frame at the time rather than have singletons so
> I've removed the static variables.  In the lisp w32 implementation, I add=
ed
> a hook to delete-frame-functions that disables taskbar effects for a fram=
e
> when it is killed.  Eli, I don't know if this addresses your issue where
> you saw lingering artifacts when a frame or session is killed (I honestly
> don't know how Windows could allow the effects to linger when a process i=
s
> dead).  I've tested on Windows 11, the only thing I have available and
> perhaps your Windows version behaves differently.
>

Eli, one other thing on w32.  I did not check if the selected frame is a
minibuffer-only frame or a child frame. Let me know if you think those
tests or some other are necessary.

--000000000000b727f8064591103c
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Tue, Dec 9, 2025 at 11:11=E2=80=AFAM St=C3=A9phane Marks &lt;<a href=3D"=
mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div>=
</div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=
=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-=
serif">On Thu, Nov 27, 2025 at 12:47=E2=80=AFPM Michael Albinus &lt;<a href=
=3D"mailto:michael.albinus@HIDDEN" target=3D"_blank">michael.albinus@HIDDEN=
</a>&gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex">St=C3=A9phane Marks &lt;<a href=3D"mail=
to:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt; write=
s:<br>
<br>
Hi St=C3=A9phane,<br>
<br>
&gt; Thank you for reviewing the patch and your thoughtful feedback.=C2=A0 =
I&#39;ll<br>
&gt; incorporate more feedback after you get it compiled and you give it a<=
br>
&gt; try, and perhaps other people, too.=C2=A0 My Windows 11 virtual machin=
e is<br>
&gt; less than a real-world Windows set up, though sufficient for<br>
&gt; developing this feature.<br>
&gt;<br>
&gt; I&#39;ve attached a patch rebased on master<br>
&gt; 2cc6c812788281c05ca9687afd7bedf597b1e942 which also incorporates your<=
br>
&gt; feedback.<br>
<br>
I gave it a try on my laptop (Fedora 43 + gnome-shell-extension-dash-to-doc=
k).<br>
First impressions:<br>
<br>
- After calling &#39;M-x dock-mode&#39;, I get an error<br>
<br>
--8&lt;---------------cut here---------------start-------------&gt;8---<br>
dock--set-back-end: Symbol=E2=80=99s function definition is void: dbus-list=
-activatable-names<br>
--8&lt;---------------cut here---------------end---------------&gt;8---<br>
<br>
=C2=A0 I guess a require is missing.<br>
<br>
- The examples in the &quot;(dock-mode) Dock Usage Examples&quot; node are =
working<br>
=C2=A0 except (dock-badge &quot;Test&quot;). I guess it is a restriction fo=
r the D-Bus<br>
=C2=A0 backend. It would be great if the documentation says which<br>
=C2=A0 functionality is implemented by which backend. Maybe I missed this?<=
br>
<br>
Comments, mainly from Eli are already give. Since I agree with them, I<br>
will comment on the code only if there are further remarks by me.<br>
<br>
&gt; From 86a1577ff8290291020b10294f65352773b69db3 Mon Sep 17 00:00:00 2001=
<br>
&gt; From: =3D?UTF-8?q?St=3DC3=3DA9phane=3D20Marks?=3D &lt;<a href=3D"mailt=
o:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Thu, 20 Nov 2025 12:54:40 -0500<br>
&gt; Subject: [PATCH] Add system GUI dock integration.<br>
<br>
&gt; --- a/doc/misc/Makefile.in<br>
&gt; +++ b/doc/misc/Makefile.in<br>
&gt; @@ -68,6 +68,7 @@ DOCMISC_W32 =3D<br>
&gt;=C2=A0 <br>
&gt;=C2=A0 ## Info files to build and install on all platforms.<br>
&gt;=C2=A0 INFO_COMMON =3D auth autotype bovine calc ccmode cl dbus dired-x=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt; +=C2=A0 =C2=A0 =C2=A0dock-mode=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0ebrowse ede ediff edt efaq eglot eieio emacs=
-gnutls=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0emacs-mime epa erc ert eshell eudc eww flyma=
ke forms gnus=C2=A0 =C2=A0 =C2=A0 =C2=A0\<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0htmlfontify idlwave ido <a href=3D"http://in=
fo.info" rel=3D"noreferrer" target=3D"_blank">info.info</a> mairix-el messa=
ge mh-e=C2=A0 =C2=A0 =C2=A0 =C2=A0 \<br>
<br>
It shouldn&#39;t be a line of its own.<br>
<br>
&gt; --- /dev/null<br>
&gt; +++ b/doc/misc/dock-mode.texi<br>
<br>
As Eli said, it shouldn&#39;t be a manual under doc/misc. Everything what&#=
39;s<br>
said about calling &#39;dock-mode&#39; and its user options fits into the<b=
r>
Emacs manual.<br>
<br>
The more technical details, function interfaces, belong to the Elisp<br>
manual. We have there a node &quot;(elisp) Desktop Notifications&quot;. doc=
k-mode<br>
is a comparable feature, I would call it &quot;Taskbar Notifications&quot;.=
 So the<br>
information shall=C2=A0 go there, directly after desktop notificatios.<br>
<br>
&gt; +Your GNU/Linux Emacs instance should be launched via an appropriate<b=
r>
&gt; +shell &quot;desktop&quot; file such as those distributed with Emacs; =
e.g.,<br>
&gt; +&quot;etc/emacsclient.desktop&quot;.<br>
<br>
&quot;etc/emacsclient.desktop&quot; is internal to Emacsd; it isn&#39;t tak=
en into<br>
account by the GUI dock. So we shall speak about it more general.<br>
<br>
&gt; +@node User Options<br>
&gt; +@chapter User Options<br>
&gt; +<br>
&gt; +@defvar dock-clear-attention-on-frame-focus<br>
<br>
Use @defopt.<br>
<br>
&gt; +The variable @code{dock-clear-attention-on-frame-focus} can be<br>
<br>
The user option ...<br>
<br>
&gt; +@defvar dock-dbus-desktop-file-name<br>
&gt; +The variable @code{dock-dbus-desktop-file-name} applies on GNU/Linux<=
br>
<br>
Dito.<br>
<br>
&gt; +@defvar dock-dbus-timeout-ms<br>
&gt; +The variable @code{dock-dbus-timeout-ms} applies on GNU/Linux D-Bus<b=
r>
<br>
Dito.<br>
<br>
I wouldn&#39;t use a trailing &#39;-ms&#39;. This is a technical detail, wh=
ich isn&#39;t<br>
used anywhere else in the D-Bus object names.<br>
<br>
&gt; +systems, and can be customized to specify the number of milliseconds<=
br>
&gt; +Emacs will wait for D-Bus responses before timing out and considering=
<br>
&gt; +messages undeliverable.=C2=A0 It defaults to 25000 milliseconds, whic=
h is the<br>
&gt; +recommended default by the D-Bus package, which see, @pxref{Top,,, db=
us,<br>
&gt; +D-Bus integration in Emacs}.<br>
<br>
I wouldn&#39;t set the default to 25000, but to nil. This means &quot;use t=
he<br>
D-Bus default&quot;, which is 25000 indeed. But we don&#39;t need to mirror=
 it.<br>
<br>
&gt; +@node Function Reference<br>
&gt; +@chapter Function Reference<br>
&gt; +<br>
&gt; +@findex dock-mode<br>
&gt; +@defun dock-mode<br>
<br>
As said by Eli, don&#39;t use @findex. And use &quot;@deffn Command&quot; i=
n order to<br>
show, that it is a command.<br>
<br>
&gt; diff --git a/etc/NEWS b/etc/NEWS<br>
&gt; index fdb1ee02819..f5252cc5bf9 100644<br>
&gt; --- a/etc/NEWS<br>
&gt; +++ b/etc/NEWS<br>
&gt; @@ -2772,6 +2772,16 @@ determined by the new user option &#39;pulse-fa=
ce-duration&#39;.<br>
&gt;=C2=A0 <br>
&gt;=C2=A0 ** Miscellaneous<br>
&gt;=C2=A0 <br>
&gt; ++++<br>
&gt; +*** New feature &#39;dock-mode&#39;.<br>
<br>
This belongs to &quot;* New Modes and Packages in Emacs 31.1&quot;. It shou=
ld be<br>
headed by &quot;** Dock mode&quot;.<br>
<br>
&gt; +This package integrates Emacs with system GUI &quot;docks&quot; to di=
splay a dock<br>
&gt; +icon badge, progress indicator, and attention alerts.=C2=A0 Implement=
ations<br>
&gt; +are available for D-Bus platforms (e.g., KDE and GNOME), macOS/GNUste=
p,<br>
&gt; +and MS-Windows.=C2=A0 On GNU/Linux systems, shell extensions such as<=
br>
&gt; +&quot;dash-to-dock&quot; may be required.=C2=A0 See<br>
&gt; +&lt;<a href=3D"https://extensions.gnome.org/extension/307/dash-to-doc=
k/" rel=3D"noreferrer" target=3D"_blank">https://extensions.gnome.org/exten=
sion/307/dash-to-dock/</a>&gt; and<br>
&gt; +&lt;<a href=3D"https://wiki.ubuntu.com/Unity/LauncherAPI" rel=3D"nore=
ferrer" target=3D"_blank">https://wiki.ubuntu.com/Unity/LauncherAPI</a>&gt;=
.<br>
<br>
There shall be two subheadings. This one, and another one introducing<br>
&#39;dock-mode&#39; and the user options (for the users). And perhaps a thi=
rd<br>
one, speaking about the other functions.<br>
<br>
&gt; --- /dev/null<br>
&gt; +++ b/lisp/dock-mode.el<br>
&gt; @@ -0,0 +1,455 @@<br>
=C2=A0+<br>
&gt; +;;; Commentary:<br>
<br>
I&#39;m missing the description of &#39;dock-mode&#39; for enabling/disabli=
ng of the<br>
feature.<br>
<br>
&gt; +(defcustom dock-dbus-timeout-ms 25000<br>
&gt; +=C2=A0 &quot;Number of milliseconds to wait for D-Bus responses.<br>
&gt; +The default value mirrors the `dbus` default.&quot;<br>
&gt; +=C2=A0 :type &#39;natnum<br>
&gt; +=C2=A0 :version &quot;31.1&quot;)<br>
<br>
As said, I would call it dock-dbus-timeout. And give it<br>
<br>
--8&lt;---------------cut here---------------start-------------&gt;8---<br>
:type &#39;(choice (constant :tag &quot;Default&quot; nil) natnum)<br>
--8&lt;---------------cut here---------------end---------------&gt;8---<br>=
</blockquote><div><br></div><div style=3D"font-family:monospace">Here&#39;s=
 a fresh patch (still based on the master as of 2cc6c812788281c05ca9687afd7=
bedf597b1e942).=C2=A0 I&#39;ve aimed to accommodate everyone&#39;s feedback=
.=C2=A0 I&#39;ve retested on mac, Windows, Debian.</div><div style=3D"font-=
family:monospace"><br></div><div style=3D"font-family:monospace">The packag=
e is now called system-taskbar.=C2=A0 I&#39;ve updated the NEWS and documen=
tation to make it clear that taskbar might be called other things and taskb=
ar is an inclusive name.</div><div style=3D"font-family:monospace"><br></di=
v><div style=3D"font-family:monospace">Rather than add hooks to progress re=
porter, which would be of global scope, I added optional update and done ca=
llbacks to make-progress-reporter and that works swimmingly well.=C2=A0 NEW=
S and documentation have been updated for that feature in addition to syste=
m-taskbar.</div><div style=3D"font-family:monospace"><br></div><div style=
=3D"font-family:monospace">I changed the w32 implementation for the taskbar=
 features to be enabled relative to the current frame at the time rather th=
an have singletons so I&#39;ve removed the static variables.=C2=A0 In the l=
isp w32 implementation, I added a hook to=C2=A0delete-frame-functions that =
disables taskbar effects for a frame when it is killed.=C2=A0 Eli, I don&#3=
9;t know if this addresses your issue where you saw lingering artifacts whe=
n a frame or session is killed (I honestly don&#39;t know how Windows could=
 allow the effects to linger when a process is dead).=C2=A0 I&#39;ve tested=
 on Windows 11, the only thing I have available and perhaps your Windows ve=
rsion behaves differently.</div></div></div></blockquote><div><br></div><di=
v class=3D"gmail_default" style=3D"font-family:monospace">Eli, one other th=
ing on w32.=C2=A0 I did not check if the selected frame is a minibuffer-onl=
y frame or a child frame. Let me know if you think those tests or some othe=
r are necessary.</div></div></div>

--000000000000b727f8064591103c--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 10 Dec 2025 12:42:02 +0000
Resent-Message-ID: <handler.79859.B79859.176537051418269 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176537051418269
          (code B ref 79859); Wed, 10 Dec 2025 12:42:02 +0000
Received: (at 79859) by debbugs.gnu.org; 10 Dec 2025 12:41:54 +0000
Received: from localhost ([127.0.0.1]:33058 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTJVy-0004ka-0C
	for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 07:41:54 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:50326)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vTJVs-0004kA-Ja
 for 79859 <at> debbugs.gnu.org; Wed, 10 Dec 2025 07:41:52 -0500
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 1vTJVm-0002Vb-R4; Wed, 10 Dec 2025 07:41:42 -0500
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=zny5sKzqc2AVNbAhqazfb8f12Bjxf6kNCHtfjLwga0M=; b=JWxmdKxsrR+zN8CeQ6Qy
 09n+iE9ulHYjgHaUs2F6JfqWGsMGOXHJDJZsyuxiweEG3ZNMat8/HUH+YJE1VFRroUnofniLhx5AH
 0Z5cP22QKBWkVFhtWs1mi2iPXj4Vg+Cg5Et4JMMzm6FpWkPcOgyUBQ1ogTxswm+uGhT+X0UKttzW4
 QaR4sTMS6zJ+/jD01K2i/vzO7LxvMzpqr+C1xQV1PeADBuHyKhPr7aEiAZkFhvGF8Q+uP4SJmDQ8A
 KuqYnKW7UGN+paCK5C6q7SFjxpqySM0BuLpdkJTn1P4fl2HbXTPrBKv++/SL3MLZ6BzecmgDIABfH
 JhOwSyOoWGSlMw==;
Date: Wed, 10 Dec 2025 14:41:41 +0200
Message-Id: <86cy4mcxve.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Tue, 9 Dec 2025 11:11:14
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stéphane Marks <shipmints@HIDDEN>
> Date: Tue, 9 Dec 2025 11:11:14 -0500
> Cc: Eli Zaretskii <eliz@HIDDEN>, bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
> 
> Here's a fresh patch (still based on the master as of 2cc6c812788281c05ca9687afd7bedf597b1e942).  I've
> aimed to accommodate everyone's feedback.  I've retested on mac, Windows, Debian.

Thanks, will review soon.

> A few things remain that I'm aware of, outside of additional feedback.
> 
> 1. Where precisely to put the user and lisp documentation.  My inclination is that the lisp docs should join
> doc/lispref/display.texi or os.texi as Michael suggests. But I don't know where to put the user docs.  Perhaps
> emacs.texi can have a new section called System Integration or something like that and we can refer to this
> new feature and also perhaps the existing notifications.el package to unify that and provide a place for
> future user-visible system-level features.

The lispref part should be in os.texi, a new section after "Desktop
Notifications".

The user-level documentation could be a new section in frames.texi.

> 2. The stanza regarding INITGUID in w32fns.c remains something that I don't know how to answer having
> blindly copied that stanza from w32dwrite.c.  I assume it is needed for some reason.  See commit
> b54fa15ffbb959e97ea0b77bfeb9ae412a63b4e8 for its proximate origin.

AFAIU, it is needed to have mingw.org's headers to define DEFINE_GUID
macro.  So we need to keep it.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 10 Dec 2025 12:52:02 +0000
Resent-Message-ID: <handler.79859.B79859.176537109921709 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176537109921709
          (code B ref 79859); Wed, 10 Dec 2025 12:52:02 +0000
Received: (at 79859) by debbugs.gnu.org; 10 Dec 2025 12:51:39 +0000
Received: from localhost ([127.0.0.1]:33210 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTJfP-0005e4-4M
	for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 07:51:39 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:56098)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vTJfN-0005dk-Jg
 for 79859 <at> debbugs.gnu.org; Wed, 10 Dec 2025 07:51:38 -0500
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 1vTJfH-0004Yt-Vo; Wed, 10 Dec 2025 07:51:31 -0500
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=YEXONGAw/vJ3Z655a3lX4JqiffitfCx/YP49XvaxKoU=; b=XHLGxZ3ShvK0E/loQ6Hx
 bQ0ic1u7gTYJC4LUHpwaefSX09HHblwoIrpfK6kTMLTK4Fh2KWkHHc/r64bTO/oLLu//iv70XQOtE
 ETUjOWIg0HTxSwbTkdEWuRSp2Z66OSrpBO6UftpFIJ6AnppK+LO1D2++Su2Vryri8eu/S73vOnibp
 lTrcP/ala/KvR5BlkXy/zKtjkm+dMMrLr8WREc1VJjdV3p1vLbielZzcQwNpb7FDDK0xEfWiEXVYa
 dWr81IonDlwkj4mKnx4IoQMuR8YiIN8kL+5n7tl9an7WzkL7mqsDULNH/P5VfWAGmMNo/al+3hvOl
 I02WcJAKHLozWw==;
Date: Wed, 10 Dec 2025 14:51:30 +0200
Message-Id: <86bjk6cxf1.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1Hbp5jWDcVyQccbJbWDR8G1jpmbHY1UcY0jqLWJT4wpWv_Q@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Tue, 9 Dec 2025 23:00:01
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <CAN+1Hbp5jWDcVyQccbJbWDR8G1jpmbHY1UcY0jqLWJT4wpWv_Q@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stéphane Marks <shipmints@HIDDEN>
> Date: Tue, 9 Dec 2025 23:00:01 -0500
> Cc: Eli Zaretskii <eliz@HIDDEN>, bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
> 
> Eli, one other thing on w32.  I did not check if the selected frame is a minibuffer-only frame or a child frame.
> Let me know if you think those tests or some other are necessary.

Why would they be necessary?  I don't think Windows cares what kind of
frame it is given, for Windows they are all alike: windows.  Or am I
missing something?




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 10 Dec 2025 13:05:02 +0000
Resent-Message-ID: <handler.79859.B79859.176537186524582 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Eli Zaretskii <eliz@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176537186524582
          (code B ref 79859); Wed, 10 Dec 2025 13:05:02 +0000
Received: (at 79859) by debbugs.gnu.org; 10 Dec 2025 13:04:25 +0000
Received: from localhost ([127.0.0.1]:33330 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTJrk-0006OQ-Mi
	for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 08:04:25 -0500
Received: from mail-ua1-x934.google.com ([2607:f8b0:4864:20::934]:48234)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTJri-0006Ny-3M
 for 79859 <at> debbugs.gnu.org; Wed, 10 Dec 2025 08:04:23 -0500
Received: by mail-ua1-x934.google.com with SMTP id
 a1e0cc1a2514c-93a9f6efebbso1508909241.0
 for <79859 <at> debbugs.gnu.org>; Wed, 10 Dec 2025 05:04:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765371856; x=1765976656; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=xUJrSsEU+vhfxEZzi8ddVM6EW/pTx76Xndslzl80stA=;
 b=ekXfxOIhM1UgyvjPfqR+uXiiWrzqcLTV8obpREZPnnNEVdVuJEPnj1sUDQaxnU6txR
 wKYnKjWl+lBgbF7GhPS2EWYAgf9mLuTbPbl0RYndT//7g80Qu9e/sfQ7RfeVcDdSVPBJ
 JLxL1Z448rtVGdsxZlQbb96HLtD2soqferzMwIzPdI40BBvC4a10j2y1oQCudLeIUR2R
 F7fgezgLzb56Byz1S9CtKwv7u6QWj+2L7YTS8rTmR1OaRvP2plTU9k/37H/a7i5Ffq+4
 KctBb0qq71OL0Hpn67rw4vTIcbFgKsV1M3+F091Nr2YRkme+4APoHf/bnyAOxr6ffK33
 P22A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765371856; x=1765976656;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=xUJrSsEU+vhfxEZzi8ddVM6EW/pTx76Xndslzl80stA=;
 b=G/6Ojsvi38OrpqxYZ6hM7q/UAaCzUD6jxA92T6zHF/5Q8D+cx47+qIY7uz1GFZq1FL
 m/TkoQrGW2QqI2e11nFzm5mooIrodL/fGrLKS0Kb5XeOHkTc5nKtJNzAL5ybOrLPzxk/
 09yi2atRH+nPrb5saiPo1237D0BJesw2gnet7bIFWDqJ6ZehPmn72f8tWNZVmwKEUhFq
 Lbp2jPowDFPai7xpsLJYRcSBhp+mES7CO0rFfdTw33acKKipwUUyH0Y15yqBZIIyNoQM
 ls8biTepGAiyrstF4pOLM+pGFiRVc0hUlfuGZKrbYYrk+k5KwBZ2OISvh23q1jhjbH1J
 OGDg==
X-Forwarded-Encrypted: i=1;
 AJvYcCX8xRV1AYo6AfhXV5Agke6iKg8e5MfWq0D5qP5RpabLWp0wTTI17J2+mX37IrbdZq8sMBrCEw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yy0z6+v8DcItgmepbcfmZZlAySfv6IrIGGZVqNuYJ/YQc0g3ejW
 tDgAfrsxizL8GguiCUfYuBLvkSqJ2MvxBcTWuAtXM3TJGTOsu/BdLi7iGpJJZhPdc93PO4EpeWz
 2bZ2L8BWPMC+h1hHPcYMBq6WkVommTAY=
X-Gm-Gg: AY/fxX4kNpI1Y0aaY6Jbx4zRFFXthB8nb0PlWp3/PK2aBrGHrsLS2Hb8cWdeCrdGKEE
 MJkU7wQjBpfa3RTBodE7kjIsWcxBVBOMmSFvrcP+T5wOo050bJwkX37nQUyOuiYEbgWADNqJHGd
 fGV+TLOPfFFspnVN77oHH+LaWjOEsFPbtMEXZsICwP8objQIIyv4tEbiuqpS7+YCUt0sH3i7Une
 xWvlwoQilAr3KCdPQm1UkWq7YMQJlfwctcE0vKJZAryoPB9MqJZR3s3XUT5y3Ky15bkpOM=
X-Google-Smtp-Source: AGHT+IGChiApjcJ7eCSoQz2ELt/ddecLXCtCnTwW+8l1o/Ut5g6fy2l5Qa5Tb1yHIfJe18Iq+bapwas2MMcF4IUYjuk=
X-Received: by 2002:a05:6102:292b:b0:5df:c1b5:82e0 with SMTP id
 ada2fe7eead31-5e571eed8b9mr601682137.32.1765371856275; Wed, 10 Dec 2025
 05:04:16 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <CAN+1Hbp5jWDcVyQccbJbWDR8G1jpmbHY1UcY0jqLWJT4wpWv_Q@HIDDEN>
 <86bjk6cxf1.fsf@HIDDEN>
In-Reply-To: <86bjk6cxf1.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Wed, 10 Dec 2025 08:04:04 -0500
X-Gm-Features: AQt7F2rub2YH6JwMMtTnOHMwufr6RonPCNSiW-2NXQ-T70TvN6Reh9JcL4CC9cA
Message-ID: <CAN+1HbqeTCpfbm=rervuFTk5RnLUpadi19BPDnt0GJCLagUcww@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000063ca48064598aa97"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--00000000000063ca48064598aa97
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Dec 10, 2025 at 7:51=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
> > Date: Tue, 9 Dec 2025 23:00:01 -0500
> > Cc: Eli Zaretskii <eliz@HIDDEN>, bjorn.bidar@HIDDEN,
> 79859 <at> debbugs.gnu.org
> >
> > Eli, one other thing on w32.  I did not check if the selected frame is =
a
> minibuffer-only frame or a child frame.
> > Let me know if you think those tests or some other are necessary.
>
> Why would they be necessary?  I don't think Windows cares what kind of
> frame it is given, for Windows they are all alike: windows.  Or am I
> missing something?
>

Not a Windows expert here.  I wasn't sure if it was naive to assume that
the w32 window handle for any arbitrary frame is the one for the ultimate
parent frame that Windows knows as the main frame window for which we
assume the taskbar effects apply?

--00000000000063ca48064598aa97
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, Dec 10, 2025 at 7:51=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; From: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@g=
mail.com" target=3D"_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Tue, 9 Dec 2025 23:00:01 -0500<br>
&gt; Cc: Eli Zaretskii &lt;<a href=3D"mailto:eliz@HIDDEN" target=3D"_blank=
">eliz@HIDDEN</a>&gt;, <a href=3D"mailto:bjorn.bidar@HIDDEN" target=3D=
"_blank">bjorn.bidar@HIDDEN</a>, <a href=3D"mailto:79859@HIDDEN=
g" target=3D"_blank">79859 <at> debbugs.gnu.org</a><br>
&gt; <br>
&gt; Eli, one other thing on w32.=C2=A0 I did not check if the selected fra=
me is a minibuffer-only frame or a child frame.<br>
&gt; Let me know if you think those tests or some other are necessary.<br>
<br>
Why would they be necessary?=C2=A0 I don&#39;t think Windows cares what kin=
d of<br>
frame it is given, for Windows they are all alike: windows.=C2=A0 Or am I<b=
r>
missing something?<br></blockquote><div><br></div><div class=3D"gmail_defau=
lt" style=3D"font-family:monospace">Not a Windows expert here.=C2=A0 I wasn=
&#39;t sure if it was naive to assume that the w32 window handle for any ar=
bitrary frame is the one for the ultimate parent frame that Windows knows a=
s the main frame window for which we assume the taskbar effects apply?</div=
></div></div>

--00000000000063ca48064598aa97--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 10 Dec 2025 13:21:04 +0000
Resent-Message-ID: <handler.79859.B79859.176537285529242 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176537285529242
          (code B ref 79859); Wed, 10 Dec 2025 13:21:04 +0000
Received: (at 79859) by debbugs.gnu.org; 10 Dec 2025 13:20:55 +0000
Received: from localhost ([127.0.0.1]:33455 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTK7h-0007bP-M7
	for submit <at> debbugs.gnu.org; Wed, 10 Dec 2025 08:20:54 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:54226)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vTK7d-0007aA-Dc
 for 79859 <at> debbugs.gnu.org; Wed, 10 Dec 2025 08:20:52 -0500
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 1vTK7X-0004UT-9c; Wed, 10 Dec 2025 08:20:43 -0500
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=kDygYPQy2v8JFOz3VHW6lCRJC4ZgYyo4xJNhwsyB9AI=; b=fZFnEKLZxSTB4VuF/kNf
 NBuoeUThsljlLQiR4uMJJfhf7iG87Wm0CsmgxljmyHUO6JEi3bkLMVDdVwfYWQJFHp+qvkBcBBwbC
 fsB56HmSHGgfP0nhhVKTpzx73QFBjSwBqzv5VBLVWYSSGLoTyP8PbclV5xwx3unKkOHgXcc2dPDnW
 eeAMguTHVlKlYBxswG/mUHQ1B6U5Av4wvGP/dz05ZEGtYJ/6n1blLd9mLo2BAxJQX7URBis1GNC8I
 zaqUS+dsD117ggEeM4HkQ51k0Hzjy+n+2dp4MDxhP67W5YW70JwikWVZOscKx1BIfz8fu/b5M+zyc
 OjwPoVyOM4NC3Q==;
Date: Wed, 10 Dec 2025 15:20:41 +0200
Message-Id: <868qfacw2e.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1HbqeTCpfbm=rervuFTk5RnLUpadi19BPDnt0GJCLagUcww@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Wed, 10 Dec 2025 08:04:04
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <CAN+1Hbp5jWDcVyQccbJbWDR8G1jpmbHY1UcY0jqLWJT4wpWv_Q@HIDDEN>
 <86bjk6cxf1.fsf@HIDDEN>
 <CAN+1HbqeTCpfbm=rervuFTk5RnLUpadi19BPDnt0GJCLagUcww@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stéphane Marks <shipmints@HIDDEN>
> Date: Wed, 10 Dec 2025 08:04:04 -0500
> Cc: michael.albinus@HIDDEN, bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
> 
> On Wed, Dec 10, 2025 at 7:51 AM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
>  > From: Stéphane Marks <shipmints@HIDDEN>
>  > Date: Tue, 9 Dec 2025 23:00:01 -0500
>  > Cc: Eli Zaretskii <eliz@HIDDEN>, bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
>  > 
>  > Eli, one other thing on w32.  I did not check if the selected frame is a minibuffer-only frame or a child
>  frame.
>  > Let me know if you think those tests or some other are necessary.
> 
>  Why would they be necessary?  I don't think Windows cares what kind of
>  frame it is given, for Windows they are all alike: windows.  Or am I
>  missing something?
> 
> Not a Windows expert here.  I wasn't sure if it was naive to assume that the w32 window handle for any
> arbitrary frame is the one for the ultimate parent frame that Windows knows as the main frame window for
> which we assume the taskbar effects apply?

Each Emacs frame on MS-Windows is a separate window, from the Windows
POV.  AFAIU from the MS documentation, the taskbar effects don't care
whoch window's handle you pass to the APIs, at least under the default
behavior of grouping the taskbar icons of all the Emacs frames
together.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 10:13:02 +0000
Resent-Message-ID: <handler.79859.B79859.176544796328913 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>, Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176544796328913
          (code B ref 79859); Thu, 11 Dec 2025 10:13:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 10:12:43 +0000
Received: from localhost ([127.0.0.1]:42223 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTdf8-0007WF-Mx
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 05:12:43 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:52120)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vTdf5-0007W0-Qg
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 05:12:40 -0500
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 1vTdez-0003Qu-WE; Thu, 11 Dec 2025 05:12:34 -0500
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=KY2ErJxEk6U0ayDHVRYjSaxMkGtat20SJJTIbz4oBSE=; b=Tw5X0pyounbGoLBzcjC3
 k8LHy6kMdRbx0nJq/GHAODEIERhBNPIGEOh3Xt9niy0u/fqQAnsgSjxYY+9AGRuJysDFncQjg8wgo
 XX8dQvqMPGr6vyFWCpvB6HdBPMNoc+2bKxw503zCtKGO2EqCDRFJIKK4Q1eht9QvLP5nfFER8gMMD
 Gg9Q4ER10+7cG08M4vv9A+bHM/bCJBZTizeFBme5Z0f8q47h4JBxfWaKHNtAXSdYhORdCfOQ30rfU
 Y3RpjNcOm6w/iw3BZTbB1u/VnPfeOOTbffkSqeaWnSpmLrsjIanzEHPCxSPyUrgeVw2VGE8z3kaE+
 JixZtXxOxPJq1g==;
Date: Thu, 11 Dec 2025 12:12:30 +0200
Message-Id: <86o6o5ba41.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 (message from =?UTF-8?Q?St=C3=A9phane?= Marks on Tue, 9 Dec 2025 11:11:14
 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stéphane Marks <shipmints@HIDDEN>
> Date: Tue, 9 Dec 2025 11:11:14 -0500
> Cc: Eli Zaretskii <eliz@HIDDEN>, bjorn.bidar@HIDDEN, 79859 <at> debbugs.gnu.org
> 
> Rather than add hooks to progress reporter, which would be of global scope, I added optional update and
> done callbacks to make-progress-reporter and that works swimmingly well.  NEWS and documentation have
> been updated for that feature in addition to system-taskbar.

Sounds reasonable.  Stefan, any comments, or better ideas for
integrating this into our progress reporter?

> I changed the w32 implementation for the taskbar features to be enabled relative to the current frame at the
> time rather than have singletons so I've removed the static variables.  In the lisp w32 implementation, I added
> a hook to delete-frame-functions that disables taskbar effects for a frame when it is killed.  Eli, I don't know if
> this addresses your issue where you saw lingering artifacts when a frame or session is killed (I honestly
> don't know how Windows could allow the effects to linger when a process is dead).  I've tested on Windows
> 11, the only thing I have available and perhaps your Windows version behaves differently.

Thanks.  Let's leave this for a few days to give others chance to
comment, and consider installing this then.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 13:06:02 +0000
Resent-Message-ID: <handler.79859.B79859.176545834423684 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?Bj=C3=B6rn?= Bidar <bjorn.bidar@HIDDEN>
Cc: Eli Zaretskii <eliz@HIDDEN>, shipmints@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176545834423684
          (code B ref 79859); Thu, 11 Dec 2025 13:06:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 13:05:44 +0000
Received: from localhost ([127.0.0.1]:43744 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTgMZ-00069w-OF
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:05:44 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:62202)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vTgMX-00069d-SS
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:05:42 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 5A89610013E;
 Thu, 11 Dec 2025 08:05:36 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765458335;
 bh=t8Th3eenYzsZ7PwsPbp8rxXd3BymDbTTgfh645TNbQU=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=Twnl9+CJ3IbXUpeJFLjFbI5EB0LmXN0LetDMUqq+1AlC/RgfXgGvNG5UKSSFfA57o
 dyKL52287D4j6XQOdRNmKwL40gNRJTUkGmoGxPsp7SKDwxBDs+39UVheu4kV6ERtBX
 oqCdAwFFRg/i3j+XkdyrdYyF6KY1prc6Ugy+xaByBDAYAtUehLqNvACvS6W1D2Bn0A
 qJMU1gSqGwAZcpz63giKLQh8v80X/eHM9qISqKfoiCzOg5Kl4n6MSorSY3VrCIWWDj
 t63aFCk36yPEn3AJB0Zq2GIMej56CA2xerDVcFAe4QhgsKWWsglbFIKSX6lzEujEU1
 SslioCwKxjhLA==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 7EF4910002E;
 Thu, 11 Dec 2025 08:05:35 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 0CD351205D2;
 Thu, 11 Dec 2025 08:05:33 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <87ikev7pv5.fsf@>
Message-ID: <jwvldj9w50y.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <87a508h9r7.fsf@HIDDEN> <86pl94auo1.fsf@HIDDEN>
Date: Thu, 11 Dec 2025 08:05:30 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.206 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> We could also think about more general terms, like "gui-desktop" or
>> maybe "gui-screen", in which case we could later add more features
>> that pertain to various system features which affect how Emacs-related
>> windows and icons are shown on typical modern GUI terminals.
>
> All of these are tied to the launcher, gui screen or desktop doesn't
> make sense,  this would only increase ambiguity . I think I know
> what you mean with GUI terminals but where is this lingo used? I haven't
> seen the word used anywhere, searching for it results in graphical
> terminal emulators.

Side note: when choosing names for such features, it's useful to keep
in mind that we'll probably still be using those names in 2050, so it
might be worth considering whether the rest of the world will as well
and what happens if it doesn't.

[ FWIW, I don't use a taskbar/dock/younameit.  In my setup, which hasn't
  changed much in the last 30 years, the closest place where you could
  put that info would be in the frame-title (and choosing the appropriate
  frame might be non-trivial in some cases).  ]


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 13:28:05 +0000
Resent-Message-ID: <handler.79859.B79859.176545963230104 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Eli Zaretskii <eliz@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176545963230104
          (code B ref 79859); Thu, 11 Dec 2025 13:28:05 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 13:27:12 +0000
Received: from localhost ([127.0.0.1]:44021 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTghM-0007pS-0n
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:27:12 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:47854)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vTghK-0007of-76
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:27:10 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 1511144162A;
 Thu, 11 Dec 2025 08:27:04 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765459622;
 bh=QIlik0deeMjkPojQZw1bdepiSB8ZDKY+MDHAs/jSR6I=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=PsXzHxEUa10wEaJxK/ZsVlpTOudmJl+XOPEuZVysE7gfuMNvXxtoVqEOTpiDSvHKu
 qRNO7iqij62MuGw+Z/lN0WZnRNfltCPLKnETxdnEX8mXjHWet2RBUl5ARRElSKW+jS
 MZNluQZ94f7UYR0QzQi7QUbRwSjZdPLXmz5hX/3xOORW3z1vkBdWG9PwLpOr59+QBN
 I/iMpYzI1kD9v1SnI28ZHbRSIXCmQa92vWihBMLXRa+0cALCU/qCXURIuC6HR+DvS7
 4noGCGTD6iswXtodeghuL+80E4WH70pFc4jtigOGkA9ooc6I1GX/wTLm2bBnsFTxA7
 tA8YHI4zSehBg==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id AEFDF441506;
 Thu, 11 Dec 2025 08:27:02 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9BD031204BA;
 Thu, 11 Dec 2025 08:27:00 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <86o6o5ba41.fsf@HIDDEN>
Message-ID: <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN>
Date: Thu, 11 Dec 2025 08:26:56 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.113 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> Rather than add hooks to progress reporter, which would be of global
>> scope, I added optional update and done callbacks to
>> make-progress-reporter and that works swimmingly well.  NEWS and
>> documentation have been updated for that feature in addition to
>> system-taskbar.
>
> Sounds reasonable.  Stefan, any comments, or better ideas for
> integrating this into our progress reporter?

IIUC the question here is whether all progress-reporter output should be
reflected in the taskbar (using hooks) or only those of specific uses
of a progress reporter (using callback arguments).

I'd have assumed that exposing it for all uses would be the most natural
thing to do, but St=E9phane seems to think that exposing the progress info
in the taskbar should be done only for specific uses.  I guess the idea
is that it would be distracting to show all progress info in the taskbar?

As mentioned in my other message, I don't use such a taskbar, so I don't
have much experience with it nor have much of an intuition of
the tradeoffs.

From the code's perspective, I'm not thrilled with the large number of
optional/positional arguments to `make-progress-reporter`.
Keyword arguments would work much better at that point.

>> I changed the w32 implementation for the taskbar features to be
>> enabled relative to the current frame at the time rather than have
>> singletons so I've removed the static variables.

I wonder if this relates to my comment in my other message about the
fact that in my setup the closest place to put such info would be in the
frame titles (I don't have GUI elements associated with "all Emacs
frames" or "all the frames of an Emacs session": instead
each frame gets its own GUI element).

If my setup (which is highly non-standard and doesn't need to be taken
into account) is not the only one where such issues can come up, then
I think for the progress-reporter feature, it might make sense to
remember the selected-frame at the time of `make-progress-reporter`, but
indeed that leaves open the question of what to do when that frame isn't
live any more.  So using the frame that happens to be selected when we
do the update might be good enough (tho it depends how the GUI handles
it: would we risk leaving the out-of-date progress displayed on the
other frame)?


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 13:40:02 +0000
Resent-Message-ID: <handler.79859.B79859.17654603552206 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654603552206
          (code B ref 79859); Thu, 11 Dec 2025 13:40:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 13:39:15 +0000
Received: from localhost ([127.0.0.1]:44206 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTgsz-0000ZO-IK
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:39:15 -0500
Received: from mail-ua1-x936.google.com ([2607:f8b0:4864:20::936]:54668)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTgsw-0000Yz-Gt
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:39:11 -0500
Received: by mail-ua1-x936.google.com with SMTP id
 a1e0cc1a2514c-93f64ae67dbso28284241.1
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 05:39:10 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765460345; x=1766065145; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=vqUAOBI01uyVmZf+1ayHtmFZVREjNF5Q2ZQKHAqyaXg=;
 b=CV4tmZfMv/DzrYRA3PtavpuNpZiryo2WAI1Jx12QcoPMc0AmXDZhh9XkPh+7J04cXA
 teZVKafoB8i2aE/hyayJLzfubP76piDnTT87Or0+sJRvIptI9UC737VboJuslQMep1zI
 XERv8IHcdmhxc4kGIXhspBeUiQjGo9v9ahnhA8BFJCBp7zK1jqgtAo2uyuUupBSF8FiT
 7XzAMUYRLXDAOWwzsm30o9FCh8vozCXdkm5/E0UqXG63c4NPG7d5+bK8K82YIEuNuPB9
 kzMpxYON/OaYeJNBDlnwXp4OcALoBhBn/nycM9/8UGeI5IcK+jWZAxZIeALlzQZSxZW9
 UgcQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765460345; x=1766065145;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=vqUAOBI01uyVmZf+1ayHtmFZVREjNF5Q2ZQKHAqyaXg=;
 b=Adsg7u0jWJNIFhmplKn/IbOQeCToyk6v42avs7zkO1qfcEDBgI4M7jLrfHzBOoggL1
 rPaS3UK0OobLprqa5SavANgzTGVSurhlo8J5fDekYK2g8LX7rmyUoiA5ViWVfKF/mRdG
 lqwDdZFKLJ6a4j+xE40+ISjJfpvD+Qa0QoHNqq0Q13zP0qVpywfJUSpXJQSo3scr6jHc
 NewA6jkJ2ndqUlnSLv2f5SYwQQbVm7hSIhlleGohadaaqrMfg8aJDgEaubm49/UL5fLd
 VtyaSIDAmGH6ltxugXhZWSUGQ+ZkQGA9jH8VLfSD92U1+orfcV+/QVdwiPAS+Uxbp7TS
 f99Q==
X-Forwarded-Encrypted: i=1;
 AJvYcCVbB/yjwOYsegDPK/tv78wa+x6MlHNmDGv7FuWKM/HUiKa35874094Y8oWw6sskJq6TGOofdw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxVlN6iC2Bsq/IsKgTRQ+qWSFJUk1AfrhE9AQ2sfKMckOm+p2oe
 TpcQGTUqFXW3Rhk67Z7JHnge7rEYEcbxGe5hPpPKhTtIeVCHaQpSSGHV/niVUOIryHXDErfxYsG
 UFCQNn1SvkrnzS8T+wmVJhbB8n0HUMAc=
X-Gm-Gg: AY/fxX6fE9xmpe4OEH3q0BmDp+EzcVWSdquYm9JMPMLCU2uS97UjsKJ8LTbdgiTacZo
 kK4kEGV0E1gOmhqd/K0cSim00/EXfVXW4vmmgZg3/jsmjxiY0MDcSUyZuajt/gHlQT1BNRUj1DI
 jJ1m43iC+2cEkKG56qqHOZOfJ+RZNCicPljpRY1/1f264vJGImTcJyxfWpMokz2H6ch0CbiGJNN
 CO5clez0iDtbX+8UfX+akwNrfRFg/alUd/3iPBTAWvtKfzqwW45aFzh0hn1rCKLparbZuk=
X-Google-Smtp-Source: AGHT+IGmWpBtka79W7NBO2tNHBdV7s3ZQEAMbfBq/zLBHhh63tsVbpnK1ReOXpHltX2Y6THRTXg3I4q9+5eRwy4n180=
X-Received: by 2002:a05:6102:801d:b0:5df:c10a:6680 with SMTP id
 ada2fe7eead31-5e572062f0dmr2209252137.33.1765460344706; Thu, 11 Dec 2025
 05:39:04 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 08:38:52 -0500
X-Gm-Features: AQt7F2pM1dNf-6IMsSdAFtANo_98zH5IUgMQwkW1E9wX8nMhLfADA1qFHKH7buw
Message-ID: <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000b61cd50645ad441a"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000b61cd50645ad441a
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 8:27=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
al.ca>
wrote:

> >> Rather than add hooks to progress reporter, which would be of global
> >> scope, I added optional update and done callbacks to
> >> make-progress-reporter and that works swimmingly well.  NEWS and
> >> documentation have been updated for that feature in addition to
> >> system-taskbar.
> >
> > Sounds reasonable.  Stefan, any comments, or better ideas for
> > integrating this into our progress reporter?
>
> IIUC the question here is whether all progress-reporter output should be
> reflected in the taskbar (using hooks) or only those of specific uses
> of a progress reporter (using callback arguments).
>
> I'd have assumed that exposing it for all uses would be the most natural
> thing to do, but St=C3=A9phane seems to think that exposing the progress =
info
> in the taskbar should be done only for specific uses.  I guess the idea
> is that it would be distracting to show all progress info in the taskbar?
>

I left the basic progress-reporter functionality intact and it will always
output to the echo area.  The callbacks facilitate dual-mode progress
reporting so output goes both to the echo area and the taskbar graphical
representation.  It is up to the programmer to decide when/where to add
optional taskbar output rather than bake it in.  As the taskbar can host
only a single progress reporter, I doubt it makes sense to have that
functionality always available as competing live progress reporters will
bounce the taskbar representation all over the place.

As mentioned in my other message, I don't use such a taskbar, so I don't
> have much experience with it nor have much of an intuition of
> the tradeoffs.
>
> From the code's perspective, I'm not thrilled with the large number of
> optional/positional arguments to `make-progress-reporter`.
> Keyword arguments would work much better at that point.
>

An exercise for another day, I think.

>> I changed the w32 implementation for the taskbar features to be
> >> enabled relative to the current frame at the time rather than have
> >> singletons so I've removed the static variables.
>
> I wonder if this relates to my comment in my other message about the
> fact that in my setup the closest place to put such info would be in the
> frame titles (I don't have GUI elements associated with "all Emacs
> frames" or "all the frames of an Emacs session": instead
> each frame gets its own GUI element).
>

We could add a progress-reporter helper that targets frame titles if you
think that's broadly worthy.  But I think that would be separate from the
taskbar implementation and might argue for some deeper thinking about
multi-modal progress reporting (the callbacks enable dual-mode, but not
multi-mode).

If my setup (which is highly non-standard and doesn't need to be taken
> into account) is not the only one where such issues can come up, then
> I think for the progress-reporter feature, it might make sense to
> remember the selected-frame at the time of `make-progress-reporter`, but
> indeed that leaves open the question of what to do when that frame isn't
> live any more.  So using the frame that happens to be selected when we
> do the update might be good enough (tho it depends how the GUI handles
> it: would we risk leaving the out-of-date progress displayed on the
> other frame)?
>
>
>         Stefan
>
>

--000000000000b61cd50645ad441a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 8:27=E2=80=AFAM Stefan Monnier &lt;<a href=3D"mailt=
o:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span><=
/div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex">&gt;&gt; Rather than add hooks to progre=
ss reporter, which would be of global<br>
&gt;&gt; scope, I added optional update and done callbacks to<br>
&gt;&gt; make-progress-reporter and that works swimmingly well.=C2=A0 NEWS =
and<br>
&gt;&gt; documentation have been updated for that feature in addition to<br=
>
&gt;&gt; system-taskbar.<br>
&gt;<br>
&gt; Sounds reasonable.=C2=A0 Stefan, any comments, or better ideas for<br>
&gt; integrating this into our progress reporter?<br>
<br>
IIUC the question here is whether all progress-reporter output should be<br=
>
reflected in the taskbar (using hooks) or only those of specific uses<br>
of a progress reporter (using callback arguments).<br>
<br>
I&#39;d have assumed that exposing it for all uses would be the most natura=
l<br>
thing to do, but St=C3=A9phane seems to think that exposing the progress in=
fo<br>
in the taskbar should be done only for specific uses.=C2=A0 I guess the ide=
a<br>
is that it would be distracting to show all progress info in the taskbar?<b=
r></blockquote><div><br></div><div><div class=3D"gmail_default" style=3D"fo=
nt-family:monospace">I left the basic progress-reporter functionality intac=
t and it will always output to the echo area.=C2=A0 The callbacks facilitat=
e dual-mode progress reporting so output goes both to the echo area and the=
 taskbar graphical representation.=C2=A0 It is up to the programmer to deci=
de when/where to add optional taskbar output rather than bake it in.=C2=A0 =
As the taskbar can host only a single progress reporter, I doubt it makes s=
ense to have that functionality always available as competing live progress=
 reporters will bounce the taskbar representation all over the place.</div>=
</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></di=
v><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;borde=
r-left:1px solid rgb(204,204,204);padding-left:1ex">
As mentioned in my other message, I don&#39;t use such a taskbar, so I don&=
#39;t<br>
have much experience with it nor have much of an intuition of<br>
the tradeoffs.<br>
<br>
From the code&#39;s perspective, I&#39;m not thrilled with the large number=
 of<br>
optional/positional arguments to `make-progress-reporter`.<br>
Keyword arguments would work much better at that point.<br></blockquote><di=
v><br></div><div><div class=3D"gmail_default" style=3D"font-family:monospac=
e">An exercise for another day, I think.</div></div><div><br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex">
&gt;&gt; I changed the w32 implementation for the taskbar features to be<br=
>
&gt;&gt; enabled relative to the current frame at the time rather than have=
<br>
&gt;&gt; singletons so I&#39;ve removed the static variables.<br>
<br>
I wonder if this relates to my comment in my other message about the<br>
fact that in my setup the closest place to put such info would be in the<br=
>
frame titles (I don&#39;t have GUI elements associated with &quot;all Emacs=
<br>
frames&quot; or &quot;all the frames of an Emacs session&quot;: instead<br>
each frame gets its own GUI element).<br></blockquote><div><br></div><div><=
div class=3D"gmail_default" style=3D"font-family:monospace">We could add a =
progress-reporter helper that targets frame titles if you think that&#39;s =
broadly worthy.=C2=A0 But I think that would be separate from the taskbar i=
mplementation and might argue for some deeper thinking about multi-modal pr=
ogress reporting (the callbacks enable dual-mode, but not multi-mode).</div=
></div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
If my setup (which is highly non-standard and doesn&#39;t need to be taken<=
br>
into account) is not the only one where such issues can come up, then<br>
I think for the progress-reporter feature, it might make sense to<br>
remember the selected-frame at the time of `make-progress-reporter`, but<br=
>
indeed that leaves open the question of what to do when that frame isn&#39;=
t<br>
live any more.=C2=A0 So using the frame that happens to be selected when we=
<br>
do the update might be good enough (tho it depends how the GUI handles<br>
it: would we risk leaving the out-of-date progress displayed on the<br>
other frame)?<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan<br>
<br>
</blockquote></div></div>

--000000000000b61cd50645ad441a--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 13:58:02 +0000
Resent-Message-ID: <handler.79859.B79859.17654614676748 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654614676748
          (code B ref 79859); Thu, 11 Dec 2025 13:58:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 13:57:47 +0000
Received: from localhost ([127.0.0.1]:44361 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vThAu-0001ki-Kc
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:57:47 -0500
Received: from mail-ua1-x92d.google.com ([2607:f8b0:4864:20::92d]:53641)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vThAo-0001k1-MW
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 08:57:42 -0500
Received: by mail-ua1-x92d.google.com with SMTP id
 a1e0cc1a2514c-93f6bd3a8f4so40722241.3
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 05:57:38 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765461453; x=1766066253; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=xDyM2ctSJ9OTSPJjk+uirBRKunEnHHZMpIKRauKGmEY=;
 b=VemiX4QYhdr8EpWVVz4MqgQRR/pSao0b96W07qpnSsxEfTEyQFxnnKnOOlg2pIryUO
 gKhUN/+oFCpERyIThnXCpNhIpPh7vZ9gOEVRv6WsqZI6STYRcerK0wcgj6sHyji/zqpZ
 o73Bnr1Q/WiJDNASoDMyI3W1xuNO5pK+dqMkMjxiQfJTm+WbiE3WKVNlCNPJrCDsR8QG
 AiR1Cr17wW+8qQDR/d4a9TXj17cqbKbexd6moEtAuH+nOZhtcr6gZTp/a8X2Vq43NWfe
 S/Qi4NhQme/mErBxs22zDfEzXqE93xaAJwVpeiA6rB4ENiP7fdH38Ug5lk+QjZbG5LWn
 5x9Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765461453; x=1766066253;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=xDyM2ctSJ9OTSPJjk+uirBRKunEnHHZMpIKRauKGmEY=;
 b=GHRgpeH5m0KP3OdpHojhzHW1oBvHlT8j9Dtny9UkE6lDOzOEwSEcvhpmTmhotLB0n1
 fnx3s7Au6GZLKkwR+ibmtMGEifDgeoc/HTFIT7unNDGAnSChKplSRL/dOJQK7ttZk+EG
 B6b5cu9eYsRWVgiss3YvW45AfZe+Q3HgGtbYHiy04KQ2sd9lTqzd4zndcdavAhlRkJGN
 NTEkEAMOmUGaujCHQSEIv+3RzprjYQEA4RPYsRlMXPJ0guQMblL9+mMWfOgVg3iuRNDu
 ZigI9zz1XSYIAWLHsUEQYgu2Tv6U7JkmywZgFY+vT2L+nA2YDQUxHzLWheG7MHdjdkvh
 NMVg==
X-Forwarded-Encrypted: i=1;
 AJvYcCXJM1gBUGD12T82NET90EjgFqztbtLTkeVvWE30Ghf/a+Us6vnHzivBVUMQ0cJjaBPxeMaVlg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YyZrzLCyif0DnnquIeSMulzjv2J+1xD+db4oqG3ojAot7Y9YW1L
 Lyl7g3KzUc9PALE/Ps+0xYwm1CZqRJGPKAF4Pou9qdP2EPx3LftXo946Z4MVsWp23KZIPHV8hWH
 4Mvav68VCQkEH52Rm03UjDc8cHBAjobU=
X-Gm-Gg: AY/fxX6Uu9RGBNiPJ+/GmIGQD2L8prBrO24U42uXJ+qunDXO66l6FNgPb8zjxBb6A64
 H6jXmXvLBhJthD+bo4m50m4xYXXpUxQsjyKyYw7yKczdHY+sa3/7iD0vdvzCnuxTYh0PdnRMsZc
 1ngfzOB2IkSNi/jUOUN2qRZ6+XT8VglmrpEr7hjPgCiqEJw+Zrgze+UdhYe6kw2w5Sk12cuSBPi
 1+CqhcQSA3f8hwHbjLEP8kMXGlSge2p/28L4YNhW6n1h3PZtEwXQeaGEwm95fSv9XzQTxI=
X-Google-Smtp-Source: AGHT+IGLVJ8YccJgwswfrkSeByzg7lk2RCU6fdTtSdUbr4PFtJ6McYfTdF8sNb6mZ9MD5CNCA6pLtCjg22xjqGERR+w=
X-Received: by 2002:a05:6102:a4a:b0:5db:cec7:8101 with SMTP id
 ada2fe7eead31-5e571dd0c92mr1862568137.29.1765461452764; Thu, 11 Dec 2025
 05:57:32 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
In-Reply-To: <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 08:57:20 -0500
X-Gm-Features: AQt7F2pBCHeJYDHr22HyinYPMyXiD-3jhlf-AM67wZZi1nWc7hXWoQtgpOgZqE0
Message-ID: <CAN+1HbqVrSBfhuNy4zx_Uz44-RraT-Lczkvcm3=hW-bPqwQh8w@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000c1bc890645ad86f3"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000c1bc890645ad86f3
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 8:38=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai=
l.com> wrote:

> On Thu, Dec 11, 2025 at 8:27=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
real.ca>
> wrote:
>
>> >> Rather than add hooks to progress reporter, which would be of global
>> >> scope, I added optional update and done callbacks to
>> >> make-progress-reporter and that works swimmingly well.  NEWS and
>> >> documentation have been updated for that feature in addition to
>> >> system-taskbar.
>> >
>> > Sounds reasonable.  Stefan, any comments, or better ideas for
>> > integrating this into our progress reporter?
>>
>> IIUC the question here is whether all progress-reporter output should be
>> reflected in the taskbar (using hooks) or only those of specific uses
>> of a progress reporter (using callback arguments).
>>
>> I'd have assumed that exposing it for all uses would be the most natural
>> thing to do, but St=C3=A9phane seems to think that exposing the progress=
 info
>> in the taskbar should be done only for specific uses.  I guess the idea
>> is that it would be distracting to show all progress info in the taskbar=
?
>>
>
> I left the basic progress-reporter functionality intact and it will alway=
s
> output to the echo area.  The callbacks facilitate dual-mode progress
> reporting so output goes both to the echo area and the taskbar graphical
> representation.  It is up to the programmer to decide when/where to add
> optional taskbar output rather than bake it in.  As the taskbar can host
> only a single progress reporter, I doubt it makes sense to have that
> functionality always available as competing live progress reporters will
> bounce the taskbar representation all over the place.
>
> As mentioned in my other message, I don't use such a taskbar, so I don't
>> have much experience with it nor have much of an intuition of
>> the tradeoffs.
>>
>> From the code's perspective, I'm not thrilled with the large number of
>> optional/positional arguments to `make-progress-reporter`.
>> Keyword arguments would work much better at that point.
>>
>
> An exercise for another day, I think.
>
> >> I changed the w32 implementation for the taskbar features to be
>> >> enabled relative to the current frame at the time rather than have
>> >> singletons so I've removed the static variables.
>>
>> I wonder if this relates to my comment in my other message about the
>> fact that in my setup the closest place to put such info would be in the
>> frame titles (I don't have GUI elements associated with "all Emacs
>> frames" or "all the frames of an Emacs session": instead
>> each frame gets its own GUI element).
>>
>
> We could add a progress-reporter helper that targets frame titles if you
> think that's broadly worthy.  But I think that would be separate from the
> taskbar implementation and might argue for some deeper thinking about
> multi-modal progress reporting (the callbacks enable dual-mode, but not
> multi-mode).
>
> If my setup (which is highly non-standard and doesn't need to be taken
>> into account) is not the only one where such issues can come up, then
>> I think for the progress-reporter feature, it might make sense to
>> remember the selected-frame at the time of `make-progress-reporter`, but
>> indeed that leaves open the question of what to do when that frame isn't
>> live any more.  So using the frame that happens to be selected when we
>> do the update might be good enough (tho it depends how the GUI handles
>> it: would we risk leaving the out-of-date progress displayed on the
>> other frame)?
>>
>
If we want to alter progress-reporter infrastructure to use global hook
back ends, I could propose an implementation and perhaps abstract out the
"spinner" and echo area updates as standard back ends, and then one could
add a frame title updater (I suppose the easiest would be to update all
frame titles vs. just the originating frame?) and change the taskbar
progress reporting to be another back end to hook into?

--000000000000c1bc890645ad86f3
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 8:38=E2=80=AFAM St=C3=A9phane Marks &lt;<a href=3D"=
mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div>=
</div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=
=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-=
serif">On Thu, Dec 11, 2025 at 8:27=E2=80=AFAM Stefan Monnier &lt;<a href=
=3D"mailto:monnier@HIDDEN" target=3D"_blank">monnier@HIDDEN=
l.ca</a>&gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockquot=
e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s=
olid rgb(204,204,204);padding-left:1ex">&gt;&gt; Rather than add hooks to p=
rogress reporter, which would be of global<br>
&gt;&gt; scope, I added optional update and done callbacks to<br>
&gt;&gt; make-progress-reporter and that works swimmingly well.=C2=A0 NEWS =
and<br>
&gt;&gt; documentation have been updated for that feature in addition to<br=
>
&gt;&gt; system-taskbar.<br>
&gt;<br>
&gt; Sounds reasonable.=C2=A0 Stefan, any comments, or better ideas for<br>
&gt; integrating this into our progress reporter?<br>
<br>
IIUC the question here is whether all progress-reporter output should be<br=
>
reflected in the taskbar (using hooks) or only those of specific uses<br>
of a progress reporter (using callback arguments).<br>
<br>
I&#39;d have assumed that exposing it for all uses would be the most natura=
l<br>
thing to do, but St=C3=A9phane seems to think that exposing the progress in=
fo<br>
in the taskbar should be done only for specific uses.=C2=A0 I guess the ide=
a<br>
is that it would be distracting to show all progress info in the taskbar?<b=
r></blockquote><div><br></div><div><div style=3D"font-family:monospace">I l=
eft the basic progress-reporter functionality intact and it will always out=
put to the echo area.=C2=A0 The callbacks facilitate dual-mode progress rep=
orting so output goes both to the echo area and the taskbar graphical repre=
sentation.=C2=A0 It is up to the programmer to decide when/where to add opt=
ional taskbar output rather than bake it in.=C2=A0 As the taskbar can host =
only a single progress reporter, I doubt it makes sense to have that functi=
onality always available as competing live progress reporters will bounce t=
he taskbar representation all over the place.</div></div><div style=3D"font=
-family:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"mar=
gin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1=
ex">
As mentioned in my other message, I don&#39;t use such a taskbar, so I don&=
#39;t<br>
have much experience with it nor have much of an intuition of<br>
the tradeoffs.<br>
<br>
From the code&#39;s perspective, I&#39;m not thrilled with the large number=
 of<br>
optional/positional arguments to `make-progress-reporter`.<br>
Keyword arguments would work much better at that point.<br></blockquote><di=
v><br></div><div><div style=3D"font-family:monospace">An exercise for anoth=
er day, I think.</div></div><div><br></div><blockquote class=3D"gmail_quote=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex">
&gt;&gt; I changed the w32 implementation for the taskbar features to be<br=
>
&gt;&gt; enabled relative to the current frame at the time rather than have=
<br>
&gt;&gt; singletons so I&#39;ve removed the static variables.<br>
<br>
I wonder if this relates to my comment in my other message about the<br>
fact that in my setup the closest place to put such info would be in the<br=
>
frame titles (I don&#39;t have GUI elements associated with &quot;all Emacs=
<br>
frames&quot; or &quot;all the frames of an Emacs session&quot;: instead<br>
each frame gets its own GUI element).<br></blockquote><div><br></div><div><=
div style=3D"font-family:monospace">We could add a progress-reporter helper=
 that targets frame titles if you think that&#39;s broadly worthy.=C2=A0 Bu=
t I think that would be separate from the taskbar implementation and might =
argue for some deeper thinking about multi-modal progress reporting (the ca=
llbacks enable dual-mode, but not multi-mode).</div></div><div><br></div><b=
lockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-le=
ft:1px solid rgb(204,204,204);padding-left:1ex">
If my setup (which is highly non-standard and doesn&#39;t need to be taken<=
br>
into account) is not the only one where such issues can come up, then<br>
I think for the progress-reporter feature, it might make sense to<br>
remember the selected-frame at the time of `make-progress-reporter`, but<br=
>
indeed that leaves open the question of what to do when that frame isn&#39;=
t<br>
live any more.=C2=A0 So using the frame that happens to be selected when we=
<br>
do the update might be good enough (tho it depends how the GUI handles<br>
it: would we risk leaving the out-of-date progress displayed on the<br>
other frame)?<br></blockquote></div></div></blockquote><div><br></div><div =
class=3D"gmail_default" style=3D"font-family:monospace">If we want to alter=
 progress-reporter infrastructure to use global hook back ends, I could pro=
pose an implementation and perhaps abstract out the &quot;spinner&quot; and=
 echo area updates as standard back ends, and then one could add a frame ti=
tle updater (I suppose the easiest would be to update all frame titles vs. =
just the originating frame?) and change the taskbar progress reporting to b=
e another back end to hook into?</div></div></div>

--000000000000c1bc890645ad86f3--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 14:06:02 +0000
Resent-Message-ID: <handler.79859.B79859.17654619418739 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654619418739
          (code B ref 79859); Thu, 11 Dec 2025 14:06:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 14:05:41 +0000
Received: from localhost ([127.0.0.1]:44434 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vThIa-0002Gt-IX
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:05:41 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:50151)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vThIY-0002GU-3v
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:05:38 -0500
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 63B3910013E;
 Thu, 11 Dec 2025 09:05:32 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765461931;
 bh=1q1/xgpcdlw2c7e35cZy3YjHUL52aqoQxgqDmwM9EiA=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=aRFGf3LKzcGVMEug1t6dyhqcqRkPROn2USgY8SGFj3ci2z6pL/5z8D97KP6ttGt/k
 /3ltVF7x6pOLhgWRLpKy6MImBvW8UgJ6XNai/+e6r7RHAC52NmuYEFZkDJYmPwk4uS
 1Q7o+9ia1GURTZEQfmH5RoqAXHKRw69Iv6/GSe/F/qn/vrZcS3s+FuLfeD7T7P4K9u
 NFvhlIpEbP3fFcpbiZQ7vJXuneKPRzbZFXzDWhkzl9Uw4FFseIIN3KIhT4MHPzcySb
 hYsLL3/A+oXH9KZ1pu660k4LfNqXR7lmui3B2+EshSmyp64e6EjVOmoZP2++iFOvjG
 Ze5cwoQwunU4Q==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 8CD4010002E;
 Thu, 11 Dec 2025 09:05:31 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 609B81203CD;
 Thu, 11 Dec 2025 09:05:29 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
Message-ID: <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
Date: Thu, 11 Dec 2025 09:05:25 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.205 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

> As the taskbar can host only a single progress reporter, I doubt it
> makes sense to have that functionality always available as competing
> live progress reporters will bounce the taskbar representation all
> over the place.

Doesn't that same problem affect equally the usual reports in the
echo area?  Or is the difference that the taskbar thingy is shared among
several Emacs instances?

>>> I changed the w32 implementation for the taskbar features to be
>>> enabled relative to the current frame at the time rather than have
>>> singletons so I've removed the static variables.
>> I wonder if this relates to my comment in my other message about the
>> fact that in my setup the closest place to put such info would be in the
>> frame titles (I don't have GUI elements associated with "all Emacs
>> frames" or "all the frames of an Emacs session": instead
>> each frame gets its own GUI element).
>
> We could add a progress-reporter helper that targets frame titles if you
> think that's broadly worthy.

I don't.  I just noticed that were talking about the need for the w32
code to decide on a frame to use and was wondering if that was because
the w32 GUI also sometimes displays that info in a "per frame" way.


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 14:15:02 +0000
Resent-Message-ID: <handler.79859.B79859.176546250111396 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546250111396
          (code B ref 79859); Thu, 11 Dec 2025 14:15:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 14:15:01 +0000
Received: from localhost ([127.0.0.1]:44538 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vThRZ-0002xK-Cu
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:15:00 -0500
Received: from mail-vs1-xe30.google.com ([2607:f8b0:4864:20::e30]:45239)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vThRU-0002vN-FF
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:14:54 -0500
Received: by mail-vs1-xe30.google.com with SMTP id
 ada2fe7eead31-5dd6fbe50c0so47852137.2
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 06:14:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765462486; x=1766067286; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=KQTx8ZKkxuO187odfpuzjCbYvrXYAtibeIwxgzoA6Lc=;
 b=NiMWW2dUFB1kJxHEBn4BV2m30pfZ5y1WCwKAcXJ3IBUQcKKbO232epTSCt9SnEWRWq
 rv67qFyTBN0leXJeUSLhfYccMgwyvFamdN/pHPk1AFmKyY0WUImmqBQMMiUAieK07dy0
 /Oe1J1v2wG8xyoHH1E6bY+2Mg0ryVfhexnwxCGF4dmqPAx+d11cDspC1F40V5l3BFNjI
 WoDdOTiIPH9JV/xniVa65MqJpSHBfkDaM34Oj2RKzVpLQDKyfrW/dWRZa3qpntlUBWdP
 LqY17gLwasxV7xS6gapwoCFBNgx29ZD+EjDQ1YvAZHv6iX06fLUZpdAb5EtTG63NbBN6
 ullw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765462486; x=1766067286;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=KQTx8ZKkxuO187odfpuzjCbYvrXYAtibeIwxgzoA6Lc=;
 b=MHXd1prR2YzYwZxklbgKB+lj3u9wCtwmRt9RR+vJFm9tbI0eFUNG4sXhX33EU7/xPG
 Suy/9V+v1jG1THadVCbJyLwRVGlmyCz2ch7D1K51nJppavRv/KLwB+kNZixgaiq5+v5Y
 llOEjEy9UEuUhBMyBaMEnlATXlMiomQchDxNBmR7SGzEwvRXMMQ7J9R9bFUV5Gr0cp8r
 I4KC6FpV2t6FnHTyaa/L/6dMwsfynTDhwwqQdedMwO/d6/mybMB5jSSZkyes6irhFUcM
 eXZDRrSBX9abrDYfAQQxado5sacl0UD4m5kG3NGRPdjqToFMoN0bqi7+zSYlHsv/+WA1
 tTWQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCWaQsNUb2K8BnhpYo0n9k/a+wq6JJJmiOqMy7VHvuefioh/Igk0B27vRBLgnDWqcSrsmEss3A==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yz8YYbVwF1SP6XWCZjFR/ZIiFCyAg83Z7qW/S5rLGjklcg+ww/7
 AV9wKrNar1O8B8Uv6howt04VRH0Y8tv4tV6mqzLayoXyuZulDbNh1VAKIAwNtyAGlE9iQxs8SEa
 2jx5Pbl27qkn0kZgyBwLlZuEO6X4Ohmk=
X-Gm-Gg: AY/fxX4KkNyh+35UNP1OeCqEZjG5H445XEzP7/8PaWhM5gquzMc5f6ggB0Kq72KTIHT
 cJK5f+/76r3I4TdiTJy63fmnCSlubDtUFZx2eYfnW0BZtful0rtGMOTA2lCM4L1yMgXvVC3IcNp
 X5LqTybwQhvwusj0T5ed8KgjGEq+vwDo+/xf05aznMvXGrrKGAj+GgUaViSehx8OZG7+a+V3jgt
 d363reXzw+w9GcwpZkHrGNWMXfj+W3o0RipnUj9MjSwofa0bRlmQUrJ1cq4UOGlTSGs6ih+wlPL
 kGFn+A==
X-Google-Smtp-Source: AGHT+IH/KAQTNQBk3mZ+IhsKdzv1wCTDs/rYGl3pERSeiRAh/qTwtzZu0pKMOGhSX/R4eWd/8hAhNmInT05Cg9RXnO0=
X-Received: by 2002:a05:6102:50ac:b0:5db:a6c1:5b13 with SMTP id
 ada2fe7eead31-5e571dd7173mr2307271137.33.1765462486266; Thu, 11 Dec 2025
 06:14:46 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 09:14:33 -0500
X-Gm-Features: AQt7F2rMflthEN-6uprmCvhWouawZYhdxGIZwiboVhbBYcNDX4--zgtVfHKLShY
Message-ID: <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000005bb65b0645adc4c5"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--0000000000005bb65b0645adc4c5
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 9:05=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
al.ca>
wrote:

> > As the taskbar can host only a single progress reporter, I doubt it
> > makes sense to have that functionality always available as competing
> > live progress reporters will bounce the taskbar representation all
> > over the place.
>
> Doesn't that same problem affect equally the usual reports in the
> echo area?  Or is the difference that the taskbar thingy is shared among
> several Emacs instances?
>

It's generally process-wide not shared among processes.  In the w32 case,
it's process- and "window-" specific (window in the Windows sense).

>>> I changed the w32 implementation for the taskbar features to be
> >>> enabled relative to the current frame at the time rather than have
> >>> singletons so I've removed the static variables.
> >> I wonder if this relates to my comment in my other message about the
> >> fact that in my setup the closest place to put such info would be in t=
he
> >> frame titles (I don't have GUI elements associated with "all Emacs
> >> frames" or "all the frames of an Emacs session": instead
> >> each frame gets its own GUI element).
> >
> > We could add a progress-reporter helper that targets frame titles if yo=
u
> > think that's broadly worthy.
>
> I don't.  I just noticed that were talking about the need for the w32
> code to decide on a frame to use and was wondering if that was because
> the w32 GUI also sometimes displays that info in a "per frame" way.
>

w32 uses the frame as a conceit to get to the Windows window handle needed
for the API calls.

--0000000000005bb65b0645adc4c5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 9:05=E2=80=AFAM Stefan Monnier &lt;<a href=3D"mailt=
o:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span><=
/div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex">&gt; As the taskbar can host only a sing=
le progress reporter, I doubt it<br>
&gt; makes sense to have that functionality always available as competing<b=
r>
&gt; live progress reporters will bounce the taskbar representation all<br>
&gt; over the place.<br>
<br>
Doesn&#39;t that same problem affect equally the usual reports in the<br>
echo area?=C2=A0 Or is the difference that the taskbar thingy is shared amo=
ng<br>
several Emacs instances?<br></blockquote><div><br></div><div class=3D"gmail=
_default" style=3D"font-family:monospace">It&#39;s generally process-wide n=
ot shared among processes.=C2=A0 In the w32 case, it&#39;s process- and &qu=
ot;window-&quot; specific (window in the Windows sense).</div><div class=3D=
"gmail_default" style=3D"font-family:monospace"><br></div><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">
&gt;&gt;&gt; I changed the w32 implementation for the taskbar features to b=
e<br>
&gt;&gt;&gt; enabled relative to the current frame at the time rather than =
have<br>
&gt;&gt;&gt; singletons so I&#39;ve removed the static variables.<br>
&gt;&gt; I wonder if this relates to my comment in my other message about t=
he<br>
&gt;&gt; fact that in my setup the closest place to put such info would be =
in the<br>
&gt;&gt; frame titles (I don&#39;t have GUI elements associated with &quot;=
all Emacs<br>
&gt;&gt; frames&quot; or &quot;all the frames of an Emacs session&quot;: in=
stead<br>
&gt;&gt; each frame gets its own GUI element).<br>
&gt;<br>
&gt; We could add a progress-reporter helper that targets frame titles if y=
ou<br>
&gt; think that&#39;s broadly worthy.<br>
<br>
I don&#39;t.=C2=A0 I just noticed that were talking about the need for the =
w32<br>
code to decide on a frame to use and was wondering if that was because<br>
the w32 GUI also sometimes displays that info in a &quot;per frame&quot; wa=
y.<br></blockquote><div><br></div><div class=3D"gmail_default" style=3D"fon=
t-family:monospace">w32 uses the frame as a conceit to get to the Windows w=
indow handle needed for the API calls.</div></div></div>

--0000000000005bb65b0645adc4c5--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 14:36:02 +0000
Resent-Message-ID: <handler.79859.B79859.176546372921031 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546372921031
          (code B ref 79859); Thu, 11 Dec 2025 14:36:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 14:35:29 +0000
Received: from localhost ([127.0.0.1]:44901 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vThlR-0005T9-5Y
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:35:29 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:63935)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vThlO-0005Sn-UM
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:35:27 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 3C5A781C8D;
 Thu, 11 Dec 2025 09:35:21 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765463720;
 bh=eDiIxrfuQEaoqY/DFi6hP55/Wkx1sOjlpbymmVSUBFk=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=nldWYFM0HY5ajGT5ereL+OtaFB3G5SlAYXEH1yHYz4dteyS6xeB5MU4tKHlJwXeNN
 l1M22HhzM5Bufy8JIILxhEYooYj3cIZLkKV9fyBn0MmHQV++iGSa73qevLKiOCrU58
 rXnskzYfNNH2yvXsSKd4HkLGczt79BqKsAPCr2suV79/4ugH3iQrg00eZ5FpZQxIKu
 bHPSQiMBVBk/N0WzbVJ/RJ0w+QPl1FbPotabLATqAKsue6c1Go3FLPR/lbEjui+oEN
 G9F2wNjdHG0if2iC/DKsVASW6hEAE/Y6ItTi07ruT+xu1YW3BsM7uIj6K8kJ5yDHwh
 KHOXzLTnQI0xw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 6583C81C1B;
 Thu, 11 Dec 2025 09:35:20 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id B8F2D120234;
 Thu, 11 Dec 2025 09:35:18 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
Message-ID: <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
Date: Thu, 11 Dec 2025 09:35:15 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.213 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> > As the taskbar can host only a single progress reporter, I doubt it
>> > makes sense to have that functionality always available as competing
>> > live progress reporters will bounce the taskbar representation all
>> > over the place.
>> Doesn't that same problem affect equally the usual reports in the
>> echo area?  Or is the difference that the taskbar thingy is shared among
>> several Emacs instances?
> It's generally process-wide not shared among processes. 

IOw, it's the same as the echo area?  Then having two active progress
reporters at the same time seems no worse for the taskbar than for the
usual reporting.

> In the w32 case, it's process- and "window-" specific (window in the
> Windows sense).

You mean the two Emacs frames from the same process can display
different progress info the taskbar?

>> I don't.  I just noticed that were talking about the need for the w32
>> code to decide on a frame to use and was wondering if that was because
>> the w32 GUI also sometimes displays that info in a "per frame" way.
> w32 uses the frame as a concept to get to the Windows window handle needed
> for the API calls.

But what happens if a progress reporter updates the taskbar to 50% via
frame 1 and later updates it to 70% via frame 2?


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 14:38:02 +0000
Resent-Message-ID: <handler.79859.B79859.176546387021566 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546387021566
          (code B ref 79859); Thu, 11 Dec 2025 14:38:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 14:37:50 +0000
Received: from localhost ([127.0.0.1]:44953 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vThng-0005bl-T4
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:37:49 -0500
Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:45252)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vThnb-0005aB-0E
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:37:46 -0500
Received: by mail-ua1-x930.google.com with SMTP id
 a1e0cc1a2514c-93f63d46f34so54113241.2
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 06:37:42 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765463857; x=1766068657; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=tSuzIPX388QZFPdm5dr/wy850H4tD1dympd0KBdwh3A=;
 b=mY5/ps/TmEcoxaded74C23Hj9WyW/Bg3xb6mi1rf4x0UUPD8MJOOQxFXWtzVrpcr+q
 GU9c1qt9jT4aVVV4i69i8caTZ0wJrkYpB1xzNOs13j5BXQWYcC88cHAH4VmTEl0ZWJrD
 zkoOGRgSYarvNGN5Iqmvn1G5IBxBRpyrhqOvpv08oqZ2woF37QkaIjmlBZd/yD4QW4pu
 0DheD5iAy62t6vhJ9y2xw8LbnErcIgQ7xYxJrT4rq6hWL7tXqrASKqzXgEvv5WNu8R04
 6pF73Fd8W5Gkq1juew5ojCNEHmFGGWSgzpR2CLnStMInivSkODzkl0lkZa9KhodxoU85
 KjNQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765463857; x=1766068657;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=tSuzIPX388QZFPdm5dr/wy850H4tD1dympd0KBdwh3A=;
 b=NQYAwT2NJYva8clGAev5VwGNsl3EKtRFSH/dxIeCZYTYyw68LDpq7I9alHkMeXBwcD
 vmIVKqNNDF9nzp9STx+/sqIEwdKYTplpTUQ/IAw3IMNiEJhduP0xvZunVqawYF3Hz4y2
 SYO0revYgWXsPaMLNr4fcXz6IjAif5aWUEOJkUN3IyNwEkfFK2/o1B3S8ZGdai1L+cy5
 RrKbrzaanTQ3Jqwta3krTWogegdwx/1z1/wxmzCB6RaVKFlymzy84F8Mzb3nB5F0xfBg
 R+g/2pouoj1WdaXI5Q8egrLgGKhLSDHlRnpHD6nt9OMCVVwKQ90CM0EMjc+YSz9pKaOe
 EABw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWNJHmc16PAXVyouuufjlfUaOiA8xvTFbcqfioRyTYL37D9uFZoLrw+p1lSmBx7UQNVoC9FuA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yws8MYHOIyF0HAqEuWAVtxUe4oeMfX5tg6pyJzvx+ijQwn/r9to
 8vBxD6vlSSoOdah9hJp9ACH+p8raXmmk0QZTPcPeu4TKzLlHJz9AxKYgI/FXu2123RoC8KW1YE9
 9RZfaxpZ5EXzjueeMfGU6h1RjOiwNw5o=
X-Gm-Gg: AY/fxX7k4gXeVbjLvOfzzXcXuOuKHsrn9jT0jCzmOosdcjKKwpqwS2GpAEMBWj3J0zK
 cj2oApGE12sb+zO8UgymNKaftRenYYEX/phEDF3MdgYPjKWJMLLhkk+Dpnh2xd3f2XBSRtay38I
 n+UmlC3WMMuxYknP7PSgb9pQIoSHBEGLBHfK5c8maFWnQhzM2BTUOEtZIif4Wqc5ZhLibr5WRaD
 zGDO5YT2k0OYepN3G4Ld9foFM4kT7pYbezr4SJ7oge7BRc7IwKJnw9oOYl/fDkmaj9Nh+s=
X-Google-Smtp-Source: AGHT+IHMNcwcYAAKmqgMljUgvKoo0UK7X1xT1nwYAFNMfmqBNQBfP1apFTZrkGKnqW47x53rMqRzCvaXGbCGmB2PUNY=
X-Received: by 2002:a05:6102:f0b:b0:5db:fce3:af8b with SMTP id
 ada2fe7eead31-5e5718300a6mr2091458137.12.1765463857122; Thu, 11 Dec 2025
 06:37:37 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
 <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 09:37:25 -0500
X-Gm-Features: AQt7F2q4uzcgu-3NSqjjnB1pVQPYBhWi62P7qCFvhRHcXYOWZMVR2jYcZ7Y8m_k
Message-ID: <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000001152080645ae163b"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--0000000000001152080645ae163b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 9:35=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
al.ca>
wrote:

> >> > As the taskbar can host only a single progress reporter, I doubt it
> >> > makes sense to have that functionality always available as competing
> >> > live progress reporters will bounce the taskbar representation all
> >> > over the place.
> >> Doesn't that same problem affect equally the usual reports in the
> >> echo area?  Or is the difference that the taskbar thingy is shared amo=
ng
> >> several Emacs instances?
> > It's generally process-wide not shared among processes.
>
> IOw, it's the same as the echo area?  Then having two active progress
> reporters at the same time seems no worse for the taskbar than for the
> usual reporting.
>
> > In the w32 case, it's process- and "window-" specific (window in the
> > Windows sense).
>
> You mean the two Emacs frames from the same process can display
> different progress info the taskbar?
>

Windows shows each of its top-level windows as it's own entry on the
taskbar in a "group" so each w32 frame can have its own.  On macOS and
Linux/D-Bus, it's process-wide.

>> I don't.  I just noticed that were talking about the need for the w32
> >> code to decide on a frame to use and was wondering if that was because
> >> the w32 GUI also sometimes displays that info in a "per frame" way.
> > w32 uses the frame as a concept to get to the Windows window handle
> needed
> > for the API calls.
>
> But what happens if a progress reporter updates the taskbar to 50% via
> frame 1 and later updates it to 70% via frame 2?
>

Temporary confusion is all.  The loop controlling the progress-reported
ends, eventually, and back to normal.

--0000000000001152080645ae163b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 9:35=E2=80=AFAM Stefan Monnier &lt;<a href=3D"mailt=
o:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span><=
/div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex">&gt;&gt; &gt; As the taskbar can host on=
ly a single progress reporter, I doubt it<br>
&gt;&gt; &gt; makes sense to have that functionality always available as co=
mpeting<br>
&gt;&gt; &gt; live progress reporters will bounce the taskbar representatio=
n all<br>
&gt;&gt; &gt; over the place.<br>
&gt;&gt; Doesn&#39;t that same problem affect equally the usual reports in =
the<br>
&gt;&gt; echo area?=C2=A0 Or is the difference that the taskbar thingy is s=
hared among<br>
&gt;&gt; several Emacs instances?<br>
&gt; It&#39;s generally process-wide not shared among processes. <br>
<br>
IOw, it&#39;s the same as the echo area?=C2=A0 Then having two active progr=
ess<br>
reporters at the same time seems no worse for the taskbar than for the<br>
usual reporting.<br>
<br>
&gt; In the w32 case, it&#39;s process- and &quot;window-&quot; specific (w=
indow in the<br>
&gt; Windows sense).<br>
<br>
You mean the two Emacs frames from the same process can display<br>
different progress info the taskbar?<br></blockquote><div><br></div><div cl=
ass=3D"gmail_default" style=3D"font-family:monospace">Windows shows each of=
 its top-level windows as it&#39;s own entry on the taskbar in a &quot;grou=
p&quot; so each w32 frame can have its own.=C2=A0 On macOS and Linux/D-Bus,=
 it&#39;s process-wide.</div><div class=3D"gmail_default" style=3D"font-fam=
ily:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"margin:=
0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt;&gt; I don&#39;t.=C2=A0 I just noticed that were talking about the need=
 for the w32<br>
&gt;&gt; code to decide on a frame to use and was wondering if that was bec=
ause<br>
&gt;&gt; the w32 GUI also sometimes displays that info in a &quot;per frame=
&quot; way.<br>
&gt; w32 uses the frame as a concept to get to the Windows window handle ne=
eded<br>
&gt; for the API calls.<br>
<br>
But what happens if a progress reporter updates the taskbar to 50% via<br>
frame 1 and later updates it to 70% via frame 2?<br></blockquote><div><br><=
/div><div class=3D"gmail_default" style=3D"font-family:monospace">Temporary=
 confusion is all.=C2=A0 The loop controlling the progress-reported ends, e=
ventually, and back to normal.</div></div></div>

--0000000000001152080645ae163b--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 14:56:02 +0000
Resent-Message-ID: <handler.79859.B79859.17654649073535 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654649073535
          (code B ref 79859); Thu, 11 Dec 2025 14:56:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 14:55:07 +0000
Received: from localhost ([127.0.0.1]:45155 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTi4Q-0000ua-Fw
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:55:07 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:54705)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vTi4P-0000rs-3Q
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 09:55:05 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4FDD2817DA;
 Thu, 11 Dec 2025 09:54:59 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765464898;
 bh=JqdS6xK2x0w25dxCuT7W94Jpm+cu6K7ZQrGQHdj5Kx8=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=axjH7PEB/QQP/CxXD7KtLKQwStDAsh2yU1l3DBJuqSaVBGE+dFjrm5yVh+EW2zYn6
 FiNX5g9Lw5DUgTXsjEPi+/+Q+rufbFpcGqVc4DcEBw+vr3OBiYBqQIEmUAsod8XEqT
 KSY8Vi163Vj/JYjVKgzQKEkKDCECU0YY2IQRmuEQWZxWj2Pzi1Ur4PKU6e8H1kc5uu
 sxo4R95qFvHDeNVN94EXhNuaqnn1g/eCSqHijG/AkoHFaqruFzXJnFhr9T8wWAzgIC
 9u9opzrq4CRGasExPcu41OFyi7qIJLqVnvAX1PT8J2TS/T9Fv+4z/2hIjArffKBy9s
 Je1MeAl0+Ta5w==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 570C780400;
 Thu, 11 Dec 2025 09:54:58 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id A6F1C12033F;
 Thu, 11 Dec 2025 09:54:56 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
Message-ID: <jwvh5txuljp.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
 <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
Date: Thu, 11 Dec 2025 09:54:52 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.212 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> >> > As the taskbar can host only a single progress reporter, I doubt it
>> >> > makes sense to have that functionality always available as competing
>> >> > live progress reporters will bounce the taskbar representation all
>> >> > over the place.
>> >> Doesn't that same problem affect equally the usual reports in the
>> >> echo area?  Or is the difference that the taskbar thingy is shared among
>> >> several Emacs instances?
>> > It's generally process-wide not shared among processes.
>> IOW, it's the same as the echo area?  Then having two active progress
>> reporters at the same time seems no worse for the taskbar than for the
>> usual reporting.

Wondering what you think about the above.

IIUC avoiding confusion in the presence of multiple active progress
reporters is the main motivation behind changing the API so the callers
needs to choose whether they want the progress report only in the
echo-area or both in the echo-area and in the taskbar.

I don't have a clear opinion about it, but AFAICT the confusion is the
same for the taskbar as for the echo-area, so it seems like an
odd motivation.  Unless maybe the difference in the way the progress is
represented visually explains why you think one case of confusion is
more serious than the other?

As someone who'll only be faced with the programmer side of the
question, I must say I don't know how I could make such a choice.
What would be a typical case of a progress reporter that should better
not appear in the taskbar?

> Windows shows each of its top-level windows as it's own entry on the
> taskbar in a "group" so each w32 frame can have its own.  On macOS and
> Linux/D-Bus, it's process-wide.

IIUC macOS tries to make it difficult to have two instances of Emacs
running at the same time, and it's technically "per application" rather than
"per instance", except you generally can't see the difference anyway.

I'm not familiar enough with D-Bus to know if it's "per instance" or
"per application", but indeed it's not "per frame".

>>> I don't.  I just noticed that were talking about the need for the w32
>> >> code to decide on a frame to use and was wondering if that was because
>> >> the w32 GUI also sometimes displays that info in a "per frame" way.
>> > w32 uses the frame as a concept to get to the Windows window handle needed
>> > for the API calls.
>> But what happens if a progress reporter updates the taskbar to 50% via
>> frame 1 and later updates it to 70% via frame 2?
> Temporary confusion is all.  The loop controlling the progress-reported
> ends, eventually, and back to normal.

So, IIUC what will happen is that the 50% will linger on frame 1?
How does the "done" step know to clean up with frames' information?
Could that same info be used to avoid the "temporary confusion"?


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 15:02:01 +0000
Resent-Message-ID: <handler.79859.B79859.17654652705367 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654652705367
          (code B ref 79859); Thu, 11 Dec 2025 15:02:01 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 15:01:10 +0000
Received: from localhost ([127.0.0.1]:45661 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTiAH-0001OV-Ur
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:01:10 -0500
Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]:61501)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTiAE-0001No-Vy
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:01:08 -0500
Received: by mail-ua1-x92a.google.com with SMTP id
 a1e0cc1a2514c-93f1752ca82so106029241.2
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 07:01:06 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765465261; x=1766070061; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=HQEU+UN4vqHxUtbd4CK9H7Pim9V0UEW90uX1kWmUxYo=;
 b=UVfWaO1NgIqXgo4lkKgCnrAngOcf6Mc90AaJHu/8UrbmFqKd5RY4OOxLIU09kEj7wY
 M5ehbp8Gp8vPwb02lTnhWwrrc6vnJ1M85szCRAF3EMN9J6vzjHBabBsKOvmtuw13qVnT
 rIXnTRs7+NjEdIqPdKfKCbjGirni2riTBXuqjIAa+gGWAnWRYckbGtpEr8j6bSgUMMgB
 mTT1XRfObhgxWEW0DCB6WXdKgXWzQg9hFNjLgQNmGuXDZOjjGKgmWV9tQJIUg7Gz6s+q
 c6WQ9h+X3P3TsgTK0x/sBTvWYPhczksLH0+f1hBzL1P9FhmLpitZpgtI5+FxH6k7ToR9
 +rTA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765465261; x=1766070061;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=HQEU+UN4vqHxUtbd4CK9H7Pim9V0UEW90uX1kWmUxYo=;
 b=FLLEU80vbBEPyVEvnuV1nB7Gowxhmh8kLGff2U0JXNYHwTE5KFDkygBOHZHerEo+y+
 XBoN+WVuCKLKJ/pCitSdAid11zeBfMpG+uVDL4IRSBaUHATyFwUdCWmwRz5SERnXIcT3
 RV+ru6UHpfMX3mvXHZfjDTcHMCnIM1vrtCpemcPh3+xcdlc5KtgC9HulekRLBnzXiGEl
 nk2nKWuITd+6z0xkIMHvpvdkBPNlQm168NY3uh8iDu+6x7gym5HTxn/wVk8PeZfeaa1Y
 Oki/ABJCo9jkq3mOguRjjCycwuk6oXXfqDhMVimgpAi5HvP8khhVB2RFyDRRsDyEBDrT
 48QQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCWRgM/QH54KrsYy85OEBXIb2w6od3AAfw0WadHWL4UTP8DXwL61ih9FXO2j6vH29EpjRCMRMA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzTBjzlnO5OYZzGvMImrsnOo4XLHaPIe02h3rT8DBboEGXpYW1A
 sFRtpuwt4bISZuOVoDMuQ0d78A6fQ2kGe7k6Zb4vbecYAMA3ubyffypOfxzdBcOntA/oTM2ejqh
 kKnfBGNMGLHjQq3jAUFcGey9Xf6zY85A=
X-Gm-Gg: AY/fxX7/hOfxF/uZcmAFVR0GtajN4F0308gcZWBmCnWGP+wfENjkfdw7w/tx/xGqm4X
 ds4mCaooJ/XoxDLaXz679DcQn8Ic/yTLJqsw0DgkMn3rKdpQWp/LMmd6pcHWH1Cx5N0TlQQCtxu
 fWB5UejGRQ51X3fspcbrTrzfJljy6QGTxpIKzEc90N/VkHRrpIDzwgww+wMCJgINj7gGWRXNyYT
 fgYsr+tlxojx0KTONQYb1qPmpbmuum0qqy8Z7MBpyuU+pVjXLnYkKWvzYaiO9nZZmrK1bk=
X-Google-Smtp-Source: AGHT+IH3D41qxrPGQudnlX7coa2MSsCxbiGG0HabuFJFjB/aJe7L66G4gzLZdKCJXWUFpofprKj+19sGBio8epYRMZI=
X-Received: by 2002:a05:6102:dcb:b0:5df:aff3:c433 with SMTP id
 ada2fe7eead31-5e57182e820mr2346680137.16.1765465259470; Thu, 11 Dec 2025
 07:00:59 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
 <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
 <jwvh5txuljp.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvh5txuljp.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 10:00:46 -0500
X-Gm-Features: AQt7F2pIRfayHDK2Y5uWBxkfOWUY3pQ1T50L6jHI6LtTloHgZsEAZVc48PpOA1s
Message-ID: <CAN+1HbqMiqYT93xFQRAFTygWwP8nkDbqQFwQOR309b6+dVt=Pg@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000a7af120645ae6937"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000a7af120645ae6937
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 9:55=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
al.ca>
wrote:

> >> >> > As the taskbar can host only a single progress reporter, I doubt =
it
> >> >> > makes sense to have that functionality always available as
> competing
> >> >> > live progress reporters will bounce the taskbar representation al=
l
> >> >> > over the place.
> >> >> Doesn't that same problem affect equally the usual reports in the
> >> >> echo area?  Or is the difference that the taskbar thingy is shared
> among
> >> >> several Emacs instances?
> >> > It's generally process-wide not shared among processes.
> >> IOW, it's the same as the echo area?  Then having two active progress
> >> reporters at the same time seems no worse for the taskbar than for the
> >> usual reporting.
>
> Wondering what you think about the above.
>
> IIUC avoiding confusion in the presence of multiple active progress
> reporters is the main motivation behind changing the API so the callers
> needs to choose whether they want the progress report only in the
> echo-area or both in the echo-area and in the taskbar.
>
> I don't have a clear opinion about it, but AFAICT the confusion is the
> same for the taskbar as for the echo-area, so it seems like an
> odd motivation.  Unless maybe the difference in the way the progress is
> represented visually explains why you think one case of confusion is
> more serious than the other?
>
> As someone who'll only be faced with the programmer side of the
> question, I must say I don't know how I could make such a choice.
> What would be a typical case of a progress reporter that should better
> not appear in the taskbar?
>
> > Windows shows each of its top-level windows as it's own entry on the
> > taskbar in a "group" so each w32 frame can have its own.  On macOS and
> > Linux/D-Bus, it's process-wide.
>
> IIUC macOS tries to make it difficult to have two instances of Emacs
> running at the same time, and it's technically "per application" rather
> than
> "per instance", except you generally can't see the difference anyway.
>
> I'm not familiar enough with D-Bus to know if it's "per instance" or
> "per application", but indeed it's not "per frame".
>
> >>> I don't.  I just noticed that were talking about the need for the w32
> >> >> code to decide on a frame to use and was wondering if that was
> because
> >> >> the w32 GUI also sometimes displays that info in a "per frame" way.
> >> > w32 uses the frame as a concept to get to the Windows window handle
> needed
> >> > for the API calls.
> >> But what happens if a progress reporter updates the taskbar to 50% via
> >> frame 1 and later updates it to 70% via frame 2?
> > Temporary confusion is all.  The loop controlling the progress-reported
> > ends, eventually, and back to normal.
>
> So, IIUC what will happen is that the 50% will linger on frame 1?
> How does the "done" step know to clean up with frames' information?
> Could that same info be used to avoid the "temporary confusion"?
>

You mean in the w32 case? Windows shows multiple progress bars, one per
top-level window for the application process so the confusion is more
limited on Windows than the process-wide implementations on mac/dbus.

How about I reimplement this with global back ends instead that people can
enable in their own configurations?  If they choose to implement taskbar
visuals, they'll register that on the global hook, and same for optional
frame updater if you want to write that for your case.  I can abstract the
existing echo area progress reports as hooks also or we can just leave them
in place and call the hooks after the updates (that's how the current
callback implementation works--first the echo area, then callback).

--000000000000a7af120645ae6937
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 9:55=E2=80=AFAM Stefan Monnier &lt;<a href=3D"mailt=
o:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span><=
/div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex">&gt;&gt; &gt;&gt; &gt; As the taskbar ca=
n host only a single progress reporter, I doubt it<br>
&gt;&gt; &gt;&gt; &gt; makes sense to have that functionality always availa=
ble as competing<br>
&gt;&gt; &gt;&gt; &gt; live progress reporters will bounce the taskbar repr=
esentation all<br>
&gt;&gt; &gt;&gt; &gt; over the place.<br>
&gt;&gt; &gt;&gt; Doesn&#39;t that same problem affect equally the usual re=
ports in the<br>
&gt;&gt; &gt;&gt; echo area?=C2=A0 Or is the difference that the taskbar th=
ingy is shared among<br>
&gt;&gt; &gt;&gt; several Emacs instances?<br>
&gt;&gt; &gt; It&#39;s generally process-wide not shared among processes.<b=
r>
&gt;&gt; IOW, it&#39;s the same as the echo area?=C2=A0 Then having two act=
ive progress<br>
&gt;&gt; reporters at the same time seems no worse for the taskbar than for=
 the<br>
&gt;&gt; usual reporting.<br>
<br>
Wondering what you think about the above.<br>
<br>
IIUC avoiding confusion in the presence of multiple active progress<br>
reporters is the main motivation behind changing the API so the callers<br>
needs to choose whether they want the progress report only in the<br>
echo-area or both in the echo-area and in the taskbar.<br>
<br>
I don&#39;t have a clear opinion about it, but AFAICT the confusion is the<=
br>
same for the taskbar as for the echo-area, so it seems like an<br>
odd motivation.=C2=A0 Unless maybe the difference in the way the progress i=
s<br>
represented visually explains why you think one case of confusion is<br>
more serious than the other?<br>
<br>
As someone who&#39;ll only be faced with the programmer side of the<br>
question, I must say I don&#39;t know how I could make such a choice.<br>
What would be a typical case of a progress reporter that should better<br>
not appear in the taskbar?<br>
<br>
&gt; Windows shows each of its top-level windows as it&#39;s own entry on t=
he<br>
&gt; taskbar in a &quot;group&quot; so each w32 frame can have its own.=C2=
=A0 On macOS and<br>
&gt; Linux/D-Bus, it&#39;s process-wide.<br>
<br>
IIUC macOS tries to make it difficult to have two instances of Emacs<br>
running at the same time, and it&#39;s technically &quot;per application&qu=
ot; rather than<br>
&quot;per instance&quot;, except you generally can&#39;t see the difference=
 anyway.<br>
<br>
I&#39;m not familiar enough with D-Bus to know if it&#39;s &quot;per instan=
ce&quot; or<br>
&quot;per application&quot;, but indeed it&#39;s not &quot;per frame&quot;.=
<br>
<br>
&gt;&gt;&gt; I don&#39;t.=C2=A0 I just noticed that were talking about the =
need for the w32<br>
&gt;&gt; &gt;&gt; code to decide on a frame to use and was wondering if tha=
t was because<br>
&gt;&gt; &gt;&gt; the w32 GUI also sometimes displays that info in a &quot;=
per frame&quot; way.<br>
&gt;&gt; &gt; w32 uses the frame as a concept to get to the Windows window =
handle needed<br>
&gt;&gt; &gt; for the API calls.<br>
&gt;&gt; But what happens if a progress reporter updates the taskbar to 50%=
 via<br>
&gt;&gt; frame 1 and later updates it to 70% via frame 2?<br>
&gt; Temporary confusion is all.=C2=A0 The loop controlling the progress-re=
ported<br>
&gt; ends, eventually, and back to normal.<br>
<br>
So, IIUC what will happen is that the 50% will linger on frame 1?<br>
How does the &quot;done&quot; step know to clean up with frames&#39; inform=
ation?<br>
Could that same info be used to avoid the &quot;temporary confusion&quot;?<=
br></blockquote><div><br></div><div class=3D"gmail_default" style=3D"font-f=
amily:monospace">You mean in the w32 case? Windows shows multiple progress =
bars, one per top-level window for the application process so the confusion=
 is more limited on Windows than the process-wide implementations on mac/db=
us.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br><=
/div><div class=3D"gmail_default" style=3D"font-family:monospace">How about=
 I reimplement this with global back ends instead that people can enable in=
 their own configurations?=C2=A0 If they choose to implement taskbar visual=
s, they&#39;ll register that on the global hook, and same for optional fram=
e updater if you want to write that for your case.=C2=A0 I can abstract the=
 existing echo area progress reports as hooks also or we can just leave the=
m in place and call the hooks after the updates (that&#39;s how the current=
 callback implementation works--first the echo area, then callback).</div><=
/div></div>

--000000000000a7af120645ae6937--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 15:17:04 +0000
Resent-Message-ID: <handler.79859.B79859.176546617110866 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546617110866
          (code B ref 79859); Thu, 11 Dec 2025 15:17:04 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 15:16:11 +0000
Received: from localhost ([127.0.0.1]:45792 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTiOo-0002p2-Af
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:16:11 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:17571)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vTiOj-0002mh-4V
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:16:07 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id A433881EA8;
 Thu, 11 Dec 2025 10:15:59 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765466158;
 bh=vyltQWnyYPpL8q7cIFKv/XZxYVaKQ+XaX7ovCUJZPHM=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=BcZHzlGwlLFYJAOsP8KA3Jvo14t3QvJ7/2FkvqJJt5n6Iliu5aFEVqe16uOAs/zY4
 edoXEiE59SdrltgdcBOEZlNHIXMYpO8P3px17MlAcWs/YzXqFLzXA3w0/rwh5sdqSG
 khyTNciKRIbA1oe9zHTJDixAi+2UelhitiKT9ERBVQRqH6qUPOzzMd/5HFq6nbDXtg
 pSEt4xUtR7JzXvx/1pBdnQkJ9hML1AEYdVWleZ4wdOraiC4Qt7cBiyGjX/vcH+Ws0+
 qmSYG+TaLI5DeEb5uPg7UEwrhGwP4/rikIRic6sIk2ZybKlnRDDzR6OHrP+KIP3yR/
 kaSLNtAeurlYQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id AEDD480329;
 Thu, 11 Dec 2025 10:15:58 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 07E3A120074;
 Thu, 11 Dec 2025 10:15:56 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1HbqMiqYT93xFQRAFTygWwP8nkDbqQFwQOR309b6+dVt=Pg@HIDDEN>
Message-ID: <jwvbjk5ukhn.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
 <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
 <jwvh5txuljp.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqMiqYT93xFQRAFTygWwP8nkDbqQFwQOR309b6+dVt=Pg@HIDDEN>
Date: Thu, 11 Dec 2025 10:15:53 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.211 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>>>>>> I don't.  I just noticed that were talking about the need for the w32
>>>>>> code to decide on a frame to use and was wondering if that was because
>>>>>> the w32 GUI also sometimes displays that info in a "per frame" way.
>>>>> w32 uses the frame as a concept to get to the Windows window handle needed
>>>>> for the API calls.
>>>> But what happens if a progress reporter updates the taskbar to 50% via
>>>> frame 1 and later updates it to 70% via frame 2?
>>> Temporary confusion is all.  The loop controlling the progress-reported
>>> ends, eventually, and back to normal.
>> So, IIUC what will happen is that the 50% will linger on frame 1?
>> How does the "done" step know to clean up with frames' information?
>> Could that same info be used to avoid the "temporary confusion"?
> You mean in the w32 case?

Yes, the above quoted exchange is all about the case where the taskbar
displays progress "per frame" (as apparently it does under w32).

> Windows shows multiple progress bars, one per
> top-level window for the application process so the confusion is more
> limited on Windows than the process-wide implementations on mac/dbus.

My above questions are not related to the question of "confusion"
(i.e. whether all progress reporters should appear in the taskbar or
only some of them).  They're related to correctness, instead.

> How about I reimplement this with global back ends instead that people can
> enable in their own configurations?

While my line of questioning may suggest that this is what I want to
happen, I really have no such agenda, I'm just trying to understand
the tradeoffs.

It's clear that from the programmers' perspective it's easier if all
progress reporters show up in the taskbar (presumably via something like
hooks set globally) since it saves them from having to choose which kind
of progress reporter to use.

But the fact that you chose the callback-arg option instead suggests
that you think it'll end up in a better user experience.


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 15:21:02 +0000
Resent-Message-ID: <handler.79859.B79859.176546643513358 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546643513358
          (code B ref 79859); Thu, 11 Dec 2025 15:21:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 15:20:35 +0000
Received: from localhost ([127.0.0.1]:45884 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTiT4-0003TO-SQ
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:20:35 -0500
Received: from mail-ua1-x92a.google.com ([2607:f8b0:4864:20::92a]:58760)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTiT2-0003RW-9I
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:20:33 -0500
Received: by mail-ua1-x92a.google.com with SMTP id
 a1e0cc1a2514c-93f5774571eso83705241.1
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 07:20:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765466426; x=1766071226; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=B6rrwXCvgYBscLWCyBBUFTgom8tfGyvNPX3W92CEYHg=;
 b=Mc5XhIEnsypddjhSjRPUmhBVBGJwK2Sxu9hNhHWfKKbDtAFnvTMyJ4xS2wDeR4r8gp
 SGRNRjuK6ps8Azw1fgFjWLcTSauYkq4N1+4vfefljD5izxzOK2ChzgHYSYvVs/R6uRYD
 rUzjj6xd7SXAsWpBZM9GQUZwEu8Hdygn4AVF8yxLwH1zxnIUdvNkneO6TgFOMC4Myd7a
 LWZcQQwIk0pzugbHqD/8XGn4rhO+NtS/+wdWV09eeeTLQFUFmItVxbqia9tnyucQHMzU
 O6QuG04j7lGypH9GssGnIQEC88tC35bfySrVkcMdLXqRMDUQ9EPm11qFXWJSUd0crG85
 9BOw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765466426; x=1766071226;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=B6rrwXCvgYBscLWCyBBUFTgom8tfGyvNPX3W92CEYHg=;
 b=pocjB4It7ATxIKZDDnRkD1LN8Vj0A3vrRCQCsy5biEskWv0QowJnfhLo3D1nsovJ3d
 eTHgyWYeVgXA66l1J7cN4osLecJHFRoY6sEf4mhxVUX89W6POjGxnECwXNViUAvcfI38
 qmuFup1OAqGsH97zKb9q0YueKpOoMvf3Iiz0svsF4RSqg6yRu7axwlEvMNVpkGqGNCYO
 vAV6WxJgy301P4dGknwlKPeWi/+mncccHJcZ/l09oI2MsMzCQVgA0tfNOLEtTgeO1l5p
 K8J7y/kJl9Gya+aWBYxUuR25SuJ0sLaYX8oVZ5Fn8GpnY3nBvGd2OMeRdueldxgK7S6g
 5VjA==
X-Forwarded-Encrypted: i=1;
 AJvYcCUPj9NmDFkgcAvvybfatFC+kiqCPqskWaEMgmyWjq8sWuy7nLEc0fA9yCM7eymcpB5uSSHePg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Ywt2kgLNySUnjfG/K+OO5BuNNv9gdjUlqx1fseeFSCkZC3REeh9
 QuOHSJd/u27jzLt5qAbDOh6Lv2Qh4NBMvHpnxYRiCWhsPgReohOBZ2wVx2Ags8WHP6gltIBqzJ7
 FcyGDDQgKBo3VO+kEXpyIoYFUTg2uJCk=
X-Gm-Gg: AY/fxX4EWh/KjMBs20WK4xLZ7I58FUkMGybhXvOkZ/aDI31v2kmaWgSheRVXfx0TLyt
 MKVEkmk5wLa/8XJu/405mnLHt1k8SHR1P6WgPNHhF0f8DfbEMz1PbFC/HPwsaLHFcpNHM36/72f
 5d0Vi/qbVMKIkOgcyT70vDOG9vXJ+JizpNPWbzqRmGpmCdxA3Eb7Ae9sJFCqEOqjxUMqX4o5C/7
 ATwk5IyQXjCc8Om+6yNtuC+9pahRRGOAo6gWIHa3QCMPOUX8Ay/mQWPTdQkrYIGb7VBEmA=
X-Google-Smtp-Source: AGHT+IFD6TgH1gga4V4o1O6zvkSSESqjYsYICwU/JqCYVKFhc/DzfSGaxUiGyz/fSN0AoqxOEFlkaWN2aUfub2gjmZ8=
X-Received: by 2002:a05:6102:802a:b0:5de:694:15e0 with SMTP id
 ada2fe7eead31-5e571eee374mr2060071137.45.1765466426224; Thu, 11 Dec 2025
 07:20:26 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbp3QAxxgcsZ9V6F0xowizkjpjoWErmQV7k86FhnSKhThw@HIDDEN>
 <jwvy0n9unif.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqzztGCNeHwT7Jazq=LzYGxRFDBU+qcpG12PQRjWZB4kQ@HIDDEN>
 <jwvms3pum68.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqDyxevPn0HQ-ARTnsvgy3e56dP=3X2gYYzNMWOoCuQ+Q@HIDDEN>
 <jwvh5txuljp.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbqMiqYT93xFQRAFTygWwP8nkDbqQFwQOR309b6+dVt=Pg@HIDDEN>
 <jwvbjk5ukhn.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvbjk5ukhn.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 10:20:14 -0500
X-Gm-Features: AQt7F2pW9UR-DhN2FIzusxovm8RXwjC2ffX0dU7pZVpNMLWG42TYhLeSP8vlcVo
Message-ID: <CAN+1HbqgOBfjEks3zocYCXRYW3PeELTgFrPWyDCt6v_MMh=hVQ@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000032b48f0645aeafe1"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--00000000000032b48f0645aeafe1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 10:16=E2=80=AFAM Stefan Monnier <monnier@HIDDEN=
eal.ca>
wrote:

> >>>>>> I don't.  I just noticed that were talking about the need for the
> w32
> >>>>>> code to decide on a frame to use and was wondering if that was
> because
> >>>>>> the w32 GUI also sometimes displays that info in a "per frame" way=
.
> >>>>> w32 uses the frame as a concept to get to the Windows window handle
> needed
> >>>>> for the API calls.
> >>>> But what happens if a progress reporter updates the taskbar to 50% v=
ia
> >>>> frame 1 and later updates it to 70% via frame 2?
> >>> Temporary confusion is all.  The loop controlling the progress-report=
ed
> >>> ends, eventually, and back to normal.
> >> So, IIUC what will happen is that the 50% will linger on frame 1?
> >> How does the "done" step know to clean up with frames' information?
> >> Could that same info be used to avoid the "temporary confusion"?
> > You mean in the w32 case?
>
> Yes, the above quoted exchange is all about the case where the taskbar
> displays progress "per frame" (as apparently it does under w32).
>
> > Windows shows multiple progress bars, one per
> > top-level window for the application process so the confusion is more
> > limited on Windows than the process-wide implementations on mac/dbus.
>
> My above questions are not related to the question of "confusion"
> (i.e. whether all progress reporters should appear in the taskbar or
> only some of them).  They're related to correctness, instead.
>
> > How about I reimplement this with global back ends instead that people
> can
> > enable in their own configurations?
>
> While my line of questioning may suggest that this is what I want to
> happen, I really have no such agenda, I'm just trying to understand
> the tradeoffs.
>

Of course.

It's clear that from the programmers' perspective it's easier if all
> progress reporters show up in the taskbar (presumably via something like
> hooks set globally) since it saves them from having to choose which kind
> of progress reporter to use.
>
> But the fact that you chose the callback-arg option instead suggests
> that you think it'll end up in a better user experience.
>

I think "user" in this case being the end user and not an Elisp programmer
will have a better experience if the back ends are global hooks and if they
want taskbar progress reports, they configure that.  That was Eli's
original inclination, I think, and better than my proposal.  I'll work on
that.  I can imagine someone coming back and saying something like I prefer
taskbar updates showing only for a subset of progress reporters.  Not sure
how we'd handle that.

--00000000000032b48f0645aeafe1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 10:16=E2=80=AFAM Stefan Monnier &lt;<a href=3D"mail=
to:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span>=
</div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex">&gt;&gt;&gt;&gt;&gt;&gt; I don&#39;t.=
=C2=A0 I just noticed that were talking about the need for the w32<br>
&gt;&gt;&gt;&gt;&gt;&gt; code to decide on a frame to use and was wondering=
 if that was because<br>
&gt;&gt;&gt;&gt;&gt;&gt; the w32 GUI also sometimes displays that info in a=
 &quot;per frame&quot; way.<br>
&gt;&gt;&gt;&gt;&gt; w32 uses the frame as a concept to get to the Windows =
window handle needed<br>
&gt;&gt;&gt;&gt;&gt; for the API calls.<br>
&gt;&gt;&gt;&gt; But what happens if a progress reporter updates the taskba=
r to 50% via<br>
&gt;&gt;&gt;&gt; frame 1 and later updates it to 70% via frame 2?<br>
&gt;&gt;&gt; Temporary confusion is all.=C2=A0 The loop controlling the pro=
gress-reported<br>
&gt;&gt;&gt; ends, eventually, and back to normal.<br>
&gt;&gt; So, IIUC what will happen is that the 50% will linger on frame 1?<=
br>
&gt;&gt; How does the &quot;done&quot; step know to clean up with frames&#3=
9; information?<br>
&gt;&gt; Could that same info be used to avoid the &quot;temporary confusio=
n&quot;?<br>
&gt; You mean in the w32 case?<br>
<br>
Yes, the above quoted exchange is all about the case where the taskbar<br>
displays progress &quot;per frame&quot; (as apparently it does under w32).<=
br>
<br>
&gt; Windows shows multiple progress bars, one per<br>
&gt; top-level window for the application process so the confusion is more<=
br>
&gt; limited on Windows than the process-wide implementations on mac/dbus.<=
br>
<br>
My above questions are not related to the question of &quot;confusion&quot;=
<br>
(i.e. whether all progress reporters should appear in the taskbar or<br>
only some of them).=C2=A0 They&#39;re related to correctness, instead.<br>
<br>
&gt; How about I reimplement this with global back ends instead that people=
 can<br>
&gt; enable in their own configurations?<br>
<br>
While my line of questioning may suggest that this is what I want to<br>
happen, I really have no such agenda, I&#39;m just trying to understand<br>
the tradeoffs.<br></blockquote><div><br></div><div class=3D"gmail_default" =
style=3D"font-family:monospace">Of course.</div><div class=3D"gmail_default=
" style=3D"font-family:monospace"><br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)=
;padding-left:1ex">
It&#39;s clear that from the programmers&#39; perspective it&#39;s easier i=
f all<br>
progress reporters show up in the taskbar (presumably via something like<br=
>
hooks set globally) since it saves them from having to choose which kind<br=
>
of progress reporter to use.<br>
<br>
But the fact that you chose the callback-arg option instead suggests<br>
that you think it&#39;ll end up in a better user experience.<br></blockquot=
e><div><br></div><div class=3D"gmail_default" style=3D"font-family:monospac=
e">I think &quot;user&quot; in this case being the end user and not an Elis=
p programmer will have a better experience if the back ends are global hook=
s and if they want taskbar progress reports, they configure that.=C2=A0 Tha=
t was Eli&#39;s original inclination, I think, and better than my proposal.=
=C2=A0 I&#39;ll work on that.=C2=A0 I can imagine someone coming back and s=
aying something like I prefer taskbar updates showing only for a subset of =
progress reporters.=C2=A0 Not sure how we&#39;d handle that.</div></div></d=
iv>

--00000000000032b48f0645aeafe1--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Eli Zaretskii <eliz@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 15:27:02 +0000
Resent-Message-ID: <handler.79859.B79859.176546677414738 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, shipmints@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176546677414738
          (code B ref 79859); Thu, 11 Dec 2025 15:27:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 15:26:14 +0000
Received: from localhost ([127.0.0.1]:45945 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTiYY-0003pd-7J
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:26:14 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:58994)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vTiYV-0003pK-9D
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 10:26:12 -0500
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 1vTiYP-0005gQ-2e; Thu, 11 Dec 2025 10:26:05 -0500
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=4XEh/J0968F9XK3FG0M+bsJkhsveLbt65F2PcWEqSYQ=; b=HsT7929zQxfard1sL+j7
 VXrSaSrGWzDE2+bs00oFfsgGJfRnmLb7lmBhn6Fc1SjMesrVaqFnAJx47Y18m49NJlCvGtzRMvppt
 75TriSrbVrXAYRo3RoJgCf0pDLwMLymrrHomk7YPXgISsK6iuejUOkYtBoRF4XQvkdTEh99e7eiUc
 LDVKiHDfx3s3LG98GfrCQ854Dl2XyJMw2ZsvyGBmIbsAp6OwpgZftkY+6aUxFVTLJbSmrBd3Sl9Hp
 5wInD1No1/oDmEgXB0nXL4UKj8uvIdgUrL7sgZKL4Ed29le+cdWaYRM8If90QsYQ2Nwxb9uJ+0wBj
 3q2yXV292g/GTA==;
Date: Thu, 11 Dec 2025 17:26:02 +0200
Message-Id: <86ikedavlh.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
In-Reply-To: <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN> (message from Stefan
 Monnier on Thu, 11 Dec 2025 08:26:56 -0500)
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
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: Stefan Monnier <monnier@HIDDEN>
> Cc: Stéphane Marks <shipmints@HIDDEN>,
>   bjorn.bidar@HIDDEN,
>   michael.albinus@HIDDEN,  79859 <at> debbugs.gnu.org
> Date: Thu, 11 Dec 2025 08:26:56 -0500
> 
> >> Rather than add hooks to progress reporter, which would be of global
> >> scope, I added optional update and done callbacks to
> >> make-progress-reporter and that works swimmingly well.  NEWS and
> >> documentation have been updated for that feature in addition to
> >> system-taskbar.
> >
> > Sounds reasonable.  Stefan, any comments, or better ideas for
> > integrating this into our progress reporter?
> 
> IIUC the question here is whether all progress-reporter output should be
> reflected in the taskbar (using hooks) or only those of specific uses
> of a progress reporter (using callback arguments).

No, I think this should be an optional feature, and therefore having a
minor mode enable it is okay IMO.  What I was asking about was how to
allow the progress-reporter also reflect the progress on the task bar,
when this optional feature is turned on.  Is the callback way the best
way, or are there better ways?

> >> I changed the w32 implementation for the taskbar features to be
> >> enabled relative to the current frame at the time rather than have
> >> singletons so I've removed the static variables.
> 
> I wonder if this relates to my comment in my other message about the
> fact that in my setup the closest place to put such info would be in the
> frame titles (I don't have GUI elements associated with "all Emacs
> frames" or "all the frames of an Emacs session": instead
> each frame gets its own GUI element).
> 
> If my setup (which is highly non-standard and doesn't need to be taken
> into account) is not the only one where such issues can come up, then
> I think for the progress-reporter feature, it might make sense to
> remember the selected-frame at the time of `make-progress-reporter`, but
> indeed that leaves open the question of what to do when that frame isn't
> live any more.  So using the frame that happens to be selected when we
> do the update might be good enough (tho it depends how the GUI handles
> it: would we risk leaving the out-of-date progress displayed on the
> other frame)?

The Windows APIs for showing these indications need a handle to a
frame, so that's why this is being discussed.  In practice, IMO any
handle to any of the Emacs frames should do.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 18:42:02 +0000
Resent-Message-ID: <handler.79859.B79859.17654785005411 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Eli Zaretskii <eliz@HIDDEN>
Cc: bjorn.bidar@HIDDEN, michael.albinus@HIDDEN, Stefan Monnier <monnier@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17654785005411
          (code B ref 79859); Thu, 11 Dec 2025 18:42:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 18:41:40 +0000
Received: from localhost ([127.0.0.1]:47484 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTlbf-0001PD-8N
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 13:41:39 -0500
Received: from mail-vk1-xa35.google.com ([2607:f8b0:4864:20::a35]:59521)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTlbc-0001Oy-NY
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 13:41:37 -0500
Received: by mail-vk1-xa35.google.com with SMTP id
 71dfb90a1353d-559966a86caso158762e0c.2
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 10:41:36 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765478491; x=1766083291; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=IdKuFD0qllTAxzaDMiizzgZVlHlp4QyBQDMzmGJUO9E=;
 b=HwuPjSGWeYNo9I5q4qdx14uv3OzAmY/6bZvSUWvZp9djAIFdREKQrrL8zx24pllPew
 3ZbMSC2HqWplHUo/tnmt1suOCTraBEax54O1Vxb0cU7QCfbUcIDvRS9E2DCANjYktGQB
 JucBeSErX7mYBTTUTsEOGJsVP/KVqWeHl8TfrU1wPpf9WucPUrLCBYwZXPibhCMqDWHy
 MqjwdXk0fUGqeoDAQHVI9QBgmcV/wYQm6NG6mgvCOfIKJv99C6dLzrmXUEPiBT3QyQUr
 b5MIaliihOyUzJQBMwJlmecM6AFWhFZ7qLVZ0hsgjI/1ZY70I+5VVDWic2E47MYEaSbB
 6vlA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765478491; x=1766083291;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=IdKuFD0qllTAxzaDMiizzgZVlHlp4QyBQDMzmGJUO9E=;
 b=nO8+n13m+UVyACTObOkvhmqZhHax0v3snDr3PDALfZvKUA4y4xQS/2xWu8hL6/7Zcx
 TU2pndr3a3JIkyo0XZPM91e6vgKQSFZPgTYBnjNdlqeiuAzT3H/V47hFVYTsB4OU7A1u
 w/4b2OLvDB2aN2NvGTWPlJlHqeNn1FvWSW2V/xYwb36YK038Rh97CEEDx9NH9m87/lLm
 3Mv0T4XRbRyMzcNsmLQiIBYvXvUCaipp6tbkzsQK5sJ52OL6CN1eJLWj1ugt1xtCg7tQ
 Zy1DhlZlj02fPbAjNWyPy5nedcwAMXNAmX2ScmN6qMKSnyg2+yCfJ9IvhHQnYFjVvOGE
 DOMQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCVYwQs/ipTpt5n1uhRAV6aXp5IFo2fPgTOUz2COrShK3l72nzoI1mhAG3bKTSFM4qzDynZsvw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzVUPncbNsqql3VKCN9EGXk9wH4FNKmlgyiJD6SWscV/ZkgxeYb
 mISuVSlWfOAaRYW6zCoiE26LnfDfrCZMgplQyYwyc7WfdLk5tLZf0ljaTvdnsZ0XoiEqi+9optb
 ciYl5q7kI2brepuUjQhIFOm/4Z3FUZhw=
X-Gm-Gg: AY/fxX7KUhgpactpNUjgo2+Vex2l0nLZ4sBkVbMiTbJOXzH3ZL3pb6MM9f/ZWvODC9w
 HcHiVPm2hrHA0ZmvoWmkyEDkt541lM6VGjvh69AdqXaPgZx2FS73RBg3cUVSqME7MIio/xT1dxf
 GzKQ4SPZ3r480uGap6Xz/IflRnjKqfCO1Mb2+xa0t/QxVkThy/s35XhV7wqsEyysxWCXmEpwEQ6
 Vy1f1ebPftWzxo3RwhcCcJSgAf/2KJAUNaDQqnqhT/bZ0kLmcGbMZPnRIdTfsUo2oRxurg=
X-Google-Smtp-Source: AGHT+IEDwa/LP4j/1ObWzXaEOn8029HoUHtNjNMO1eQE4D0XTbbpMli2TgA2cfez9nxK0J/ASPFNRGwD8FshIr9Fk2I=
X-Received: by 2002:a05:6122:32c4:b0:54a:a048:45a4 with SMTP id
 71dfb90a1353d-55fcfc5104amr2380977e0c.16.1765478490919; Thu, 11 Dec 2025
 10:41:30 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
In-Reply-To: <86ikedavlh.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 13:41:19 -0500
X-Gm-Features: AQt7F2rNO1h9FLaawBYqyuCpH7X7BxL-LE9higT1NpTKRY90feuzUgTIsFwBMqs
Message-ID: <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
Content-Type: multipart/mixed; boundary="0000000000004f726a0645b17e19"
X-Spam-Score: 1.0 (+)
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: -1.0 (-)

--0000000000004f726a0645b17e19
Content-Type: multipart/alternative; boundary="0000000000004f72670645b17e17"

--0000000000004f72670645b17e17
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 10:26=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote=
:

> > From: Stefan Monnier <monnier@HIDDEN>
> > Cc: St=C3=A9phane Marks <shipmints@HIDDEN>,
> >   bjorn.bidar@HIDDEN,
> >   michael.albinus@HIDDEN,  79859 <at> debbugs.gnu.org
> > Date: Thu, 11 Dec 2025 08:26:56 -0500
> >
> > >> Rather than add hooks to progress reporter, which would be of global
> > >> scope, I added optional update and done callbacks to
> > >> make-progress-reporter and that works swimmingly well.  NEWS and
> > >> documentation have been updated for that feature in addition to
> > >> system-taskbar.
> > >
> > > Sounds reasonable.  Stefan, any comments, or better ideas for
> > > integrating this into our progress reporter?
> >
> > IIUC the question here is whether all progress-reporter output should b=
e
> > reflected in the taskbar (using hooks) or only those of specific uses
> > of a progress reporter (using callback arguments).
>
> No, I think this should be an optional feature, and therefore having a
> minor mode enable it is okay IMO.  What I was asking about was how to
> allow the progress-reporter also reflect the progress on the task bar,
> when this optional feature is turned on.  Is the callback way the best
> way, or are there better ways?
>
> > >> I changed the w32 implementation for the taskbar features to be
> > >> enabled relative to the current frame at the time rather than have
> > >> singletons so I've removed the static variables.
> >
> > I wonder if this relates to my comment in my other message about the
> > fact that in my setup the closest place to put such info would be in th=
e
> > frame titles (I don't have GUI elements associated with "all Emacs
> > frames" or "all the frames of an Emacs session": instead
> > each frame gets its own GUI element).
> >
> > If my setup (which is highly non-standard and doesn't need to be taken
> > into account) is not the only one where such issues can come up, then
> > I think for the progress-reporter feature, it might make sense to
> > remember the selected-frame at the time of `make-progress-reporter`, bu=
t
> > indeed that leaves open the question of what to do when that frame isn'=
t
> > live any more.  So using the frame that happens to be selected when we
> > do the update might be good enough (tho it depends how the GUI handles
> > it: would we risk leaving the out-of-date progress displayed on the
> > other frame)?
>
> The Windows APIs for showing these indications need a handle to a
> frame, so that's why this is being discussed.  In practice, IMO any
> handle to any of the Emacs frames should do.
>

Updated patch, attached.  This one does away with the callbacks and uses
global hooks instead and installs the GUI progress bars, by default, when
the mode is enabled, and also does away with the convenience macros which
are no longer needed.

-St=C3=A9phane

--0000000000004f72670645b17e17
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 10:26=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailt=
o:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D=
"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; From: Stefan Monnier &lt;<a href=3D"mailto:monnier@HIDDEN=
treal.ca" target=3D"_blank">monnier@HIDDEN</a>&gt;<br>
&gt; Cc: St=C3=A9phane Marks &lt;<a href=3D"mailto:shipmints@HIDDEN" tar=
get=3D"_blank">shipmints@HIDDEN</a>&gt;,<br>
&gt;=C2=A0 =C2=A0<a href=3D"mailto:bjorn.bidar@HIDDEN" target=3D"_blank=
">bjorn.bidar@HIDDEN</a>,<br>
&gt;=C2=A0 =C2=A0<a href=3D"mailto:michael.albinus@HIDDEN" target=3D"_blank=
">michael.albinus@HIDDEN</a>,=C2=A0 <a href=3D"mailto:79859 <at> debbugs.gnu.org=
" target=3D"_blank">79859 <at> debbugs.gnu.org</a><br>
&gt; Date: Thu, 11 Dec 2025 08:26:56 -0500<br>
&gt; <br>
&gt; &gt;&gt; Rather than add hooks to progress reporter, which would be of=
 global<br>
&gt; &gt;&gt; scope, I added optional update and done callbacks to<br>
&gt; &gt;&gt; make-progress-reporter and that works swimmingly well.=C2=A0 =
NEWS and<br>
&gt; &gt;&gt; documentation have been updated for that feature in addition =
to<br>
&gt; &gt;&gt; system-taskbar.<br>
&gt; &gt;<br>
&gt; &gt; Sounds reasonable.=C2=A0 Stefan, any comments, or better ideas fo=
r<br>
&gt; &gt; integrating this into our progress reporter?<br>
&gt; <br>
&gt; IIUC the question here is whether all progress-reporter output should =
be<br>
&gt; reflected in the taskbar (using hooks) or only those of specific uses<=
br>
&gt; of a progress reporter (using callback arguments).<br>
<br>
No, I think this should be an optional feature, and therefore having a<br>
minor mode enable it is okay IMO.=C2=A0 What I was asking about was how to<=
br>
allow the progress-reporter also reflect the progress on the task bar,<br>
when this optional feature is turned on.=C2=A0 Is the callback way the best=
<br>
way, or are there better ways?<br>
<br>
&gt; &gt;&gt; I changed the w32 implementation for the taskbar features to =
be<br>
&gt; &gt;&gt; enabled relative to the current frame at the time rather than=
 have<br>
&gt; &gt;&gt; singletons so I&#39;ve removed the static variables.<br>
&gt; <br>
&gt; I wonder if this relates to my comment in my other message about the<b=
r>
&gt; fact that in my setup the closest place to put such info would be in t=
he<br>
&gt; frame titles (I don&#39;t have GUI elements associated with &quot;all =
Emacs<br>
&gt; frames&quot; or &quot;all the frames of an Emacs session&quot;: instea=
d<br>
&gt; each frame gets its own GUI element).<br>
&gt; <br>
&gt; If my setup (which is highly non-standard and doesn&#39;t need to be t=
aken<br>
&gt; into account) is not the only one where such issues can come up, then<=
br>
&gt; I think for the progress-reporter feature, it might make sense to<br>
&gt; remember the selected-frame at the time of `make-progress-reporter`, b=
ut<br>
&gt; indeed that leaves open the question of what to do when that frame isn=
&#39;t<br>
&gt; live any more.=C2=A0 So using the frame that happens to be selected wh=
en we<br>
&gt; do the update might be good enough (tho it depends how the GUI handles=
<br>
&gt; it: would we risk leaving the out-of-date progress displayed on the<br=
>
&gt; other frame)?<br>
<br>
The Windows APIs for showing these indications need a handle to a<br>
frame, so that&#39;s why this is being discussed.=C2=A0 In practice, IMO an=
y<br>
handle to any of the Emacs frames should do.<br></blockquote><div><br></div=
><div class=3D"gmail_default" style=3D"font-family:monospace">Updated patch=
, attached.=C2=A0 This one does away with the callbacks and uses global hoo=
ks instead and installs the GUI progress bars, by default, when the mode is=
 enabled, and also does away with the convenience macros which are no longe=
r needed.</div><div class=3D"gmail_default" style=3D"font-family:monospace"=
><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">-St=
=C3=A9phane=C2=A0</div></div></div>

--0000000000004f72670645b17e17--

--0000000000004f726a0645b17e19
Content-Type: application/octet-stream; 
	name="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Disposition: attachment; 
	filename="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mj1saup10>
X-Attachment-Id: f_mj1saup10

RnJvbSBkYmU4ZmRlYTYyYWFjZTdmZTg5NWE4NmQ5ZjlhZDA0MDU2ZTMyYTRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjAgTm92IDIwMjUgMTI6NTQ6NDAgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBTeXN0ZW0gR1VJIHRhc2tiYXIgYW5kIHByb2dyZXNzIHJlcG9ydGVy
IGhvb2tzCgpJbXBsZW1lbnQgc3lzdGVtIEdVSSB0YXNrYmFyL2RvY2svbGF1bmNoZXIgaWNvbiBi
YWRnZSwgaWNvbgpwcm9ncmVzcyBpbmRpY2F0b3IsIGljb24gYXR0ZW50aW9uIGFsZXJ0IGZlYXR1
cmVzIGZvciBELUJ1cwpwbGF0Zm9ybXMgKHRlc3RlZCBvbiBLREUgYW5kIEdOT01FKSwgTlMgKG1h
Y09TL0dOVXN0ZXApLApNUy1XaW5kb3dzLgoKQWRkICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUt
ZnVuY3Rpb25zJwoncHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZS1mdW5jdGlvbnMnIGFibm9ybWFsIGhv
b2tzIHRvIGZhY2lsaXRhdGUKdGFza2JhciBwcm9ncmVzcyBkaXNwbGF5LCBhbmQgb3RoZXIgY3Vz
dG9tIHByb2dyZXNzIHJlcG9ydGVycy4KCiogbGlzcC9zdWJyLmVsIChwcm9ncmVzcy1yZXBvcnRl
ci11cGRhdGUtZnVuY3Rpb25zKQoocHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZS1mdW5jdGlvbnMpOiBO
ZXcgZGVmdmFyLgoocHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlKTogUnVuCnByb2dyZXNzLXJl
cG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMgZm9yIGJvdGggbnVtZXJpY2FsIGFuZApwdWxzaW5nIHJl
cG9ydGVycy4KKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUpOiBSdW4gcHJvZ3Jlc3MtcmVwb3J0ZXIt
ZG9uZS1mdW5jdGlvbnMuCiogbGlzcC9zeXN0ZW0tdGFza2Jhci5lbDogTmV3IGZpbGUuCiogc3Jj
L25zZm5zLm0gKEZuc19iYWRnZSwgRm5zX3Byb2dyZXNzX2luZGljYXRvcikKKEZuc19yZXF1ZXN0
X3VzZXJfYXR0ZW50aW9uKTogTmV3IGZ1bmN0aW9uLgooc3ltc19vZl9uc2Zucyk6IEFkZCBkZWZz
dWJyIFNuc19iYWRnZSwKU25zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIFNuc19wcm9ncmVzc19p
bmRpY2F0b3IuIEFkZCBERUZTWU0KUWluZm9ybWF0aW9uYWwsIFFjcml0aWNhbC4KKiBzcmMvdzMy
Zm5zLmMgKHJnYl9saXN0X3RvX2NvbG9ycmVmLCBGdzMyX2JhZGdlKQooRnczMl9yZXF1ZXN0X3Vz
ZXJfYXR0ZW50aW9uLCBGdzMyX3Byb2dyZXNzX2luZGljYXRvcik6IE5ldwpmdW5jdGlvbi4KKHN5
bXNfb2ZfdzMyZm5zKTogQWRkIGRlZnN1YnIgU3czMl9iYWRnZSwKU3czMl9wcm9ncmVzc19pbmRp
Y2F0b3IsIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbi4gQWRkIERFRlNZTQpRaW5mb3JtYXRp
b25hbCwgUWNyaXRpY2FsLgoqIHN5c3RlbS10YXNiYXIudGV4aTogTmV3IGZpbGUgKFdJTEwgQkUg
TUVSR0VEIElOVE8gRU1BQ1MgQU5ECkVMSVNQIE1BTlVBTCkuCiogZXRjL05FV1M6IEFubm91bmNl
IHN5c3RlbS10YXNrYmFyLW1vZGUuICBBbm5vdW5jZSBwcm9ncmVzcwpyZXBvcnRlciBjYWxsYmFj
ayBlbmhhbmNlbWVudHMuCi0tLQogZXRjL05FV1MgICAgICAgICAgICAgICB8ICAyMiArKwogbGlz
cC9zdWJyLmVsICAgICAgICAgICB8ICA0MyArKystCiBsaXNwL3N5c3RlbS10YXNrYmFyLmVsIHwg
NDkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvbnNmbnMu
bSAgICAgICAgICAgIHwgMTI4ICsrKysrKysrKysrCiBzcmMvdzMyZm5zLmMgICAgICAgICAgIHwg
MzI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3lzdGVtLXRhc2tiYXIudGV4aSAgICB8
IDI2MCArKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDEyNjAgaW5zZXJ0
aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlzcC9zeXN0ZW0t
dGFza2Jhci5lbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c3RlbS10YXNrYmFyLnRleGkKCmRpZmYg
LS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTCmluZGV4IGZkYjFlZTAyODE5Li42NzYxNDRkZmYx
MiAxMDA2NDQKLS0tIGEvZXRjL05FV1MKKysrIGIvZXRjL05FV1MKQEAgLTMxNTEsNiArMzE1MSwy
MSBAQCBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIHRocm90dGxlIG9yIGRlYm91
bmNlIEVtYWNzIExpc3AKIGZ1bmN0aW9ucy4gIFRoaXMgaXMgdXNlZnVsIGZvciBjb3JyYWxsaW5n
IG92ZXJlYWdlciBjb2RlIHRoYXQgaXMgc2xvdwogYW5kIGJsb2NrcyBFbWFjcywgb3IgZG9lcyBu
b3QgcHJvdmlkZSB3YXlzIHRvIGxpbWl0IGhvdyBvZnRlbiBpdCBydW5zLgogCisrKysKKyoqKiBO
ZXcgbW9kZSAnc3lzdGVtLXRhc2tiYXItbW9kZScuCitUaGlzIGlzIGEgZ2xvYmFsIG1pbm9yIG1v
ZGUgYW5kIGNvbXBhbmlvbiBmdW5jdGlvbnMgdGhhdCBpbnRlZ3JhdGUgRW1hY3MKK3dpdGggc3lz
dGVtIEdVSSB0YXNrYmFycyAoYWxzbyBjYWxsZWQgZG9ja3Mgb3IgbGF1bmNoZXJzIG9yIHNvbWV0
aGluZworc2ltaWxhcikgdG8gZGlzcGxheSBhIHRhc2tiYXIgaWNvbiAiYmFkZ2UiIG92ZXJsYXks
IGEgcHJvZ3Jlc3MgYmFyCityZXBvcnQgb3ZlcmxheSwgYWxlcnQgdGhlIHVzZXIgdGhhdCBhbiBF
bWFjcyBzZXNzaW9uIG5lZWRzIGF0dGVudGlvbiwKK29mdGVuIGJ5IGZsYXNoaW5nIG9yIGJvdW5j
aW5nIHRoZSBFbWFjcyBhcHBsaWNhdGlvbiBpY29uLiAgU3VwcG9ydGVkCitjYXBhYmxlIHN5c3Rl
bXMgYXJlIEdOVS9MaW51eCB2aWEgRC1CdXMsIG1hY09TL0dOVXN0ZXAgMTAuNSssIE1TLVdpbmRv
d3MKKzcrLgorCitPbiBHTlUvTGludXggc3lzdGVtcywgc2hlbGwgZXh0ZW5zaW9ucyBvciBzaW1p
bGFyIGhlbHBlcnMgc3VjaCBhcworImRhc2gtdG8tZG9jayIgbWF5IGJlIHJlcXVpcmVkLiAgU2Vl
Cis8aHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9j
ay8+IGFuZAorPGh0dHBzOi8vd2lraS51YnVudHUuY29tL1VuaXR5L0xhdW5jaGVyQVBJPi4KKwog
DAogKiBJbmNvbXBhdGlibGUgTGlzcCBDaGFuZ2VzIGluIEVtYWNzIDMxLjEKIApAQCAtMzU3OSw2
ICszNTk0LDEzIEBAIEVtYWNzIHdoZW4gYnVpbHQgd2l0aCB0aGUgcHVyZSBHVEsgdG9vbGtpdCBu
b3cgcmVzcGVjdHMgZGVza3RvcAogZGFyayBhbmQgbGlnaHQgbW9kZXMgZm9yIGRyYXdpbmcgYSBH
VEsgdG9vbGJhciBhbmQgd2lkZ2V0cywKIGF1dG9tYXRpY2FsbHkgdG9nZ2xpbmcgYmV0d2VlbiB0
aGVtLgogCisrKysKKyoqIFByb2dyZXNzIHJlcG9ydGVyIGNhbGxiYWNrcy4KKydtYWtlLXByb2dy
ZXNzLXJlcG9ydGVyJyBub3cgYWNjZXB0cyBvcHRpb25hbCBhcmd1bWVudHMgVVBEQVRFLUNBTExC
QUNLLAorY2FsbGVkIG9uIHByb2dyZXNzIHN0ZXBzLCBhbmQgRE9ORS1DQUxMQkFDSywgY2FsbGVk
IHdoZW4gdGhlIHByb2dyZXNzCityZXBvcnRlciBpcyBkb25lLiAgU2VlIHRoZSAnbWFrZS1wcm9n
cmVzcy1yZXBvcnRlcicgZG9jc3RyaW5nIGZvciBhIGZ1bGwKK3NwZWNpZmljYXRpb24gb2YgdGhl
c2UgbmV3IG9wdGlvbmFsIGFyZ3VtZW50cy4KKwogDAogKiBDaGFuZ2VzIGluIEVtYWNzIDMxLjEg
b24gTm9uLUZyZWUgT3BlcmF0aW5nIFN5c3RlbXMKIApkaWZmIC0tZ2l0IGEvbGlzcC9zdWJyLmVs
IGIvbGlzcC9zdWJyLmVsCmluZGV4IGZjZjkzMWI2NGU5Li5lZjY3ZTVjYzRkMCAxMDA2NDQKLS0t
IGEvbGlzcC9zdWJyLmVsCisrKyBiL2xpc3Avc3Vici5lbApAQCAtNjk3NCwxNCArNjk3NCwyNyBA
QCBzZXQtdHJhbnNpZW50LW1hcAogOzsgZGlnaXRzIG9mIHByZWNpc2lvbiwgaXQgZG9lc24ndCBy
ZWFsbHkgbWF0dGVyIGhlcmUuICBPbiB0aGUgb3RoZXIKIDs7IGhhbmQsIGl0IGdyZWF0bHkgc2lt
cGxpZmllcyB0aGUgY29kZS4KIAorKGRlZnZhciBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUtZnVu
Y3Rpb25zIG5pbAorICAiU3BlY2lhbCBob29rIHJ1biBvbiBwcm9ncmVzcy1yZXBvcnRlciB1cGRh
dGVzLgorVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgYHByb2dyZXNzLXJlcG9ydGVyLWRv
LXVwZGF0ZWAgd2l0aCB0aHJlZQorYXJndW1lbnRzLCB0aGUgcmVwb3J0ZXIsIHRoZSBwZXJjZW50
YWdlIGRvbmUgaW4gdGhlIHJhbmdlIDAtMTAwIGZvciBhCitudW1lcmljIHJlcG9ydGVyIGFuZCB3
aGljaCBpcyBuaWwgZm9yIGEgcHVsc2luZyByZXBvcnRlciwgdGhlIGluZGV4IHRoYXQKK2N5Y2xl
cyB0aHJvdWdoIHRoZSByYW5nZSAwLTMgZm9yIGEgcHVsc2luZyByZXBvcnRlciBhbmQgd2hpY2gg
aXMgbmlsIGZvcgorYSBudW1lcmljIHJlcG9ydGVyLiIpCisKKyhkZWZ2YXIgcHJvZ3Jlc3MtcmVw
b3J0ZXItZG9uZS1mdW5jdGlvbnMgbmlsCisgICJTcGVjaWFsIGhvb2sgcnVuIHdoZW4gYSBwcm9n
cmVzcy1yZXBvcnRlciBpcyBkb25lLgorVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgYHBy
b2dyZXNzLXJlcG9ydGVyLWRvbmVgIHdpdGggb25lCithcmd1bWVudCwgdGhlIHJlcG9ydGVyLiIp
CisKIChkZWZzdWJzdCBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUgKHJlcG9ydGVyICZvcHRpb25h
bCB2YWx1ZSBzdWZmaXgpCiAgICJSZXBvcnQgcHJvZ3Jlc3Mgb2YgYW4gb3BlcmF0aW9uIGluIHRo
ZSBlY2hvIGFyZWEuCiBSRVBPUlRFUiBzaG91bGQgYmUgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8g
YG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInLgogCiBJZiBSRVBPUlRFUiBpcyBhIG51bWVyaWNhbCBw
cm9ncmVzcyByZXBvcnRlci0tLWkuZS4gaWYgaXQgd2FzCi0gbWFkZSB1c2luZyBub24tbmlsIE1J
Ti1WQUxVRSBhbmQgTUFYLVZBTFVFIGFyZ3VtZW50cyB0bwotIGBtYWtlLXByb2dyZXNzLXJlcG9y
dGVyJy0tLXRoZW4gVkFMVUUgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4KLSBNSU4tVkFMVUUg
YW5kIE1BWC1WQUxVRS4KK21hZGUgdXNpbmcgbm9uLW5pbCBNSU4tVkFMVUUgYW5kIE1BWC1WQUxV
RSBhcmd1bWVudHMgdG8KK2BtYWtlLXByb2dyZXNzLXJlcG9ydGVyJy0tLXRoZW4gVkFMVUUgc2hv
dWxkIGJlIGEgbnVtYmVyIGJldHdlZW4KK01JTi1WQUxVRSBhbmQgTUFYLVZBTFVFLgogCiBPcHRp
b25hbCBhcmd1bWVudCBTVUZGSVggaXMgYSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIGFmdGVyCiBS
RVBPUlRFUidzIG1haW4gbWVzc2FnZSBhbmQgcHJvZ3Jlc3MgdGV4dC4gIElmIFJFUE9SVEVSIGlz
IGEKQEAgLTcwNjEsMTEgKzcwNzQsMTEgQEAgcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1bHNlLWNoYXJh
Y3RlcnMKICAgIkNoYXJhY3RlcnMgdG8gdXNlIGZvciBwdWxzaW5nIHByb2dyZXNzIHJlcG9ydGVy
cy4iKQogCiAoZGVmdW4gcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlIChyZXBvcnRlciB2YWx1
ZSAmb3B0aW9uYWwgc3VmZml4KQotICAobGV0KiAoKHBhcmFtZXRlcnMgICAoY2RyIHJlcG9ydGVy
KSkKLQkgKHVwZGF0ZS10aW1lICAoYXJlZiBwYXJhbWV0ZXJzIDApKQotCSAobWluLXZhbHVlICAg
IChhcmVmIHBhcmFtZXRlcnMgMSkpCi0JIChtYXgtdmFsdWUgICAgKGFyZWYgcGFyYW1ldGVycyAy
KSkKLQkgKHRleHQgICAgICAgICAoYXJlZiBwYXJhbWV0ZXJzIDMpKQorICAobGV0KiAoKHBhcmFt
ZXRlcnMgICAgICAoY2RyIHJlcG9ydGVyKSkKKwkgKHVwZGF0ZS10aW1lICAgICAoYXJlZiBwYXJh
bWV0ZXJzIDApKQorCSAobWluLXZhbHVlICAgICAgIChhcmVmIHBhcmFtZXRlcnMgMSkpCisJICht
YXgtdmFsdWUgICAgICAgKGFyZWYgcGFyYW1ldGVycyAyKSkKKwkgKHRleHQgICAgICAgICAgICAo
YXJlZiBwYXJhbWV0ZXJzIDMpKQogCSAoZW5vdWdoLXRpbWUtcGFzc2VkCiAJICA7OyBTZWUgaWYg
ZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuCiAJICAob3IgKG5v
dCB1cGRhdGUtdGltZSkKQEAgLTcxMDAsNyArNzExMyw5IEBAIHByb2dyZXNzLXJlcG9ydGVyLWRv
LXVwZGF0ZQogICAgICAgICAgICAgICAgICAoc2V0cSBzdWZmaXggKG9yIChhcmVmIHBhcmFtZXRl
cnMgNikgIiIpKSkKICAgICAgICAgICAgICAgIChpZiAocGx1c3AgcGVyY2VudGFnZSkKICAgICAg
ICAgICAgICAgICAgICAobWVzc2FnZSAiJXMlZCUlICVzIiB0ZXh0IHBlcmNlbnRhZ2Ugc3VmZml4
KQotICAgICAgICAgICAgICAgICAobWVzc2FnZSAiJXMgJXMiIHRleHQgc3VmZml4KSkpKSkKKyAg
ICAgICAgICAgICAgICAgKG1lc3NhZ2UgIiVzICVzIiB0ZXh0IHN1ZmZpeCkpCisgICAgICAgICAg
ICAgICAocnVuLWhvb2std2l0aC1hcmdzICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUtZnVuY3Rp
b25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyIHBlcmNlbnRh
Z2UgbmlsKSkpKQogCSAgOzsgUHVsc2luZyBpbmRpY2F0b3IKIAkgIChlbm91Z2gtdGltZS1wYXNz
ZWQKICAgICAgICAgICAgKHdoZW4gKGFuZCB2YWx1ZSAobm90IHN1ZmZpeCkpCkBAIC03MTEzLDEx
ICs3MTI4LDE1IEBAIHByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZQogICAgICAgICAgICAgICAg
ICAgKHB1bHNlLWNoYXIgKGFyZWYgcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1bHNlLWNoYXJhY3RlcnMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KSkpCiAJICAgICAoc2V0
Y2FyIHJlcG9ydGVyIGluZGV4KQotICAgICAgICAgICAgIChtZXNzYWdlICIlcyAlcyAlcyIgdGV4
dCBwdWxzZS1jaGFyIHN1ZmZpeCkpKSkpKQorICAgICAgICAgICAgIChtZXNzYWdlICIlcyAlcyAl
cyIgdGV4dCBwdWxzZS1jaGFyIHN1ZmZpeCkKKyAgICAgICAgICAgICAocnVuLWhvb2std2l0aC1h
cmdzICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUtZnVuY3Rpb25zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnRlciBuaWwgaW5kZXgpKSkpKSkKIAogKGRlZnVuIHByb2dy
ZXNzLXJlcG9ydGVyLWRvbmUgKHJlcG9ydGVyKQotICAiUHJpbnQgcmVwb3J0ZXIncyBtZXNzYWdl
IGZvbGxvd2VkIGJ5IHdvcmQgXCJkb25lXCIgaW4gZWNobyBhcmVhLiIKLSAgKG1lc3NhZ2UgIiVz
ZG9uZSIgKGFyZWYgKGNkciByZXBvcnRlcikgMykpKQorICAiUHJpbnQgcmVwb3J0ZXIncyBtZXNz
YWdlIGZvbGxvd2VkIGJ5IHdvcmQgXCJkb25lXCIgaW4gZWNobyBhcmVhLgorQ2FsbCB0aGUgZnVu
Y3Rpb25zIG9uIGBwcm9ncmVzcy1yZXBvcnRlci1kb25lLWZ1bmN0aW9uc2AuIgorICAobWVzc2Fn
ZSAiJXNkb25lIiAoYXJlZiAoY2RyIHJlcG9ydGVyKSAzKSkKKyAgKHJ1bi1ob29rLXdpdGgtYXJn
cyAncHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZS1mdW5jdGlvbnMgcmVwb3J0ZXIpKQogCiAoZGVmbWFj
cm8gZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyIChzcGVjIHJlcG9ydGVyLW9yLW1lc3Nh
Z2UgJnJlc3QgYm9keSkKICAgIkxvb3AgYSBjZXJ0YWluIG51bWJlciBvZiB0aW1lcyBhbmQgcmVw
b3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEuCmRpZmYgLS1naXQgYS9saXNwL3N5c3RlbS10
YXNrYmFyLmVsIGIvbGlzcC9zeXN0ZW0tdGFza2Jhci5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uODcyZTc3ZjY4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saXNwL3N5
c3RlbS10YXNrYmFyLmVsCkBAIC0wLDAgKzEsNDkyIEBACis7Ozsgc3lzdGVtLXRhc2tiYXIuZWwg
LS0tIFN5c3RlbSBHVUkgdGFza2Jhci9kb2NrL2xhdW5jaGVyIHN0YXR1cyBkaXNwbGF5IC0qLSBs
ZXhpY2FsLWJpbmRpbmc6IHQgLSotCisKKzs7IENvcHlyaWdodCAoQykgMjAyNSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgQXV0aG9yOiBTdGVwaGFuZSBNYXJrcworOzsgTWFp
bnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZworOzsgS2V5d29yZHM6IGNvbnZlbmllbmNlCis7
OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGVtYWNzICIzMS4xIikpCisKKzs7IFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl
LCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworOzsgR05VIEVt
YWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7
OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90
LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworOzs7IENvbW1lbnRhcnk6
CisKKzs7IFVzZSB0aGlzIHBhY2thZ2UgdG8gZGlzcGxheSBhIHRhc2tiYXIgaWNvbiAiYmFkZ2Ui
IG92ZXJsYXksIGEKKzs7IHByb2dyZXNzIGJhciByZXBvcnQgb3ZlcmxheSwgb3IgYWxlcnQgdGhl
IHVzZXIgdGhhdCBhbiBFbWFjcyBzZXNzaW9uCis7OyBuZWVkcyBhdHRlbnRpb24sIG9mdGVuIGJ5
IGZsYXNoaW5nIG9yIGJvdW5jaW5nIHRoZSBFbWFjcyBhcHBsaWNhdGlvbgorOzsgaWNvbi4KKzs7
Cis7OyBOb3RlOiBUaGUgdGVybSB0YXNrYmFyIGlzIGluY2x1c2l2ZSBvZiBkb2NrIG9yIGxhdW5j
aGVyIG9yIHNvbWUgb3RoZXIKKzs7IHRlcm1pbm9sb2d5IGFzIG1heSBiZSB1c2VkIGZvciB5b3Vy
IHN5c3RlbS4KKzs7Cis7OyBPbiBHTlUvTGludXgsIHRoZSB2aXNpYmxlIGVmZmVjdHMgd2lsbCBh
cHBlYXIgb24gdGhlIGRlc3RpbmF0aW9ucworOzsgZGV0ZXJtaW5lZCBieSB5b3VyIHNoZWxsIGV4
dGVuc2lvbiwgbW9zdCBvZnRlbiB0aGUgYXBwbGljYXRpb24KKzs7IGxhdW5jaGVyIG9yIGRvY2sg
cGFuZWwsIG9yIHRoZSB0b3AgcGFuZWwuICBFZmZlY3RzIGFyZSBnbG9iYWwgZm9yIGFuCis7OyBF
bWFjcyBpbnN0YW5jZS4KKzs7Cis7OyBPbiBtYWNPUy9HTlVzdGVwLCB0aGUgZWZmZWN0cyB3aWxs
IGFwcGVhciBvbiB0aGUgRG9jayBhbmQgaW4gdGhlIEFwcAorOzsgU3dpdGNoZXIuICBFZmZlY3Rz
IGFyZSBnbG9iYWwgZm9yIGFuIEVtYWNzIGluc3RhbmNlLgorOzsKKzs7IE9uIE1TLVdpbmRvd3Ms
IHRoZSBlZmZlY3RzIGFwcGVhciBvbiB0aGUgdGFza2Jhci4gIEVmZmVjdHMgYXJlCis7OyBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGZyYW1lIGZyb20gd2hpY2ggdGhleSBhcmUgaW5pdGlhdGVkLgorCis7
OzsgVXNhZ2U6CisKKzs7IFRoZSBnbG9iYWwgbWlub3IgbW9kZSBgc3lzdGVtLXRhc2tiYXItbW9k
ZScgaW5pdGlhbGl6ZXMgdGhlIEdVSQorOzsgcGxhdGZvcm0gYmFjay1lbmQgYW5kIG11c3QgYmUg
ZW5hYmxlZCBiZWZvcmUgdXNpbmcgdGhlIGZ1bmN0aW9ucworOzsgYmVsb3cuCis7OworOzsgYHN5
c3RlbS10YXNrYmFyLWJhZGdlJyBvdmVybGF5cyBhIGNvdW50LCB3aGljaCBpcyBhbiBpbnRlZ2Vy
LCBvbiB0aGUKKzs7IEVtYWNzIHRhc2tiYXIgaWNvbi4gIFlvdSBjYW4gdXNlIHRoaXMsIGZvciBl
eGFtcGxlLCB0byBpbmRpY2F0ZSB0aGUKKzs7IG51bWJlciBvZiB1bnJlYWQgZW1haWwgbWVzc2Fn
ZXMuICBPbiBHTlUvTGludXgsIHRoZSBjb3VudCBtdXN0IGJlIGFuCis7OyBpbnRlZ2VyIG9yIG5p
bC4gIE9uIG1hY09TL0dOVXN0ZXAsIHRoZSBjb3VudCBtYXkgYmUgYW4gaW50ZWdlciBvciBhCis7
OyBzdHJpbmcsIHdoaWNoIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgYWJicmV2aWF0ZSBpZiB0
b28gbG9uZy4gIE9uCis7OyBNUy1XaW5kb3dzLCB0aGUgdGFza2JhciBiYWRnZSB3aWxsIGJlIGFi
YnJldmlhdGVkIHRvIHRocmVlCis7OyBjaGFyYWN0ZXJzOyBpZiB0aGUgY291bnQgaXMgYW4gaW50
ZWdlciBvdXRzaWRlIHRoZSByYW5nZSAtOTkgdG8gOTksCis7OyBpdCBpcyBzaG93biBhcyAiLTk5
IiBvciAiOTkrIiwgaWYgY291bnQgaXMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4gMworOzsgY2hhcmFj
dGVycyBpdCBpcyB0cnVuY2F0ZWQuCis7OworOzsgYHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbicg
Zmxhc2hlcyBvciBib3VuY2VzIHRoZSBFbWFjcyB0YXNrYmFyIGljb24KKzs7IHRvIGluZGljYXRl
IHRoYXQgeW91ciBFbWFjcyBzZXNzaW9uIHdhbnRzIGF0dGVudGlvbi4gIEl0cyBiZWhhdmlvcnMK
Kzs7IGFyZSBiYWNrLWVuZCBzcGVjaWZpYy4KKzs7Cis7OyBgc3lzdGVtLXRhc2tiYXItcHJvZ3Jl
c3MnIG92ZXJsYXlzIGEgZ3JhcGhpY2FsIHByb2dyZXNzIGJhciBvbiB0aGUKKzs7IEVtYWNzIHRh
c2tiYXIgaWNvbiB0byBpbGx1c3RyYXRlIHByb2dyZXNzIG9mIGEgcG90ZW50aWFsbHkKKzs7IGxv
bmctcnVubmluZyBvcGVyYXRpb24uCis7OworOzsgV2hlbiBgc3lzdGVtLXRhc2tiYXItbW9kZWAg
aXMgZW5hYmxlZCwgRW1hY3MgcHJvZ3Jlc3MgcmVwb3J0ZXJzIHdpbGwKKzs7IGJlIGVuaGFuY2Vk
IHRvIGRpc3BsYXkgdGFza2JhciBHVUkgcHJvZ3Jlc3MgYmFycy4gIEN1c3RvbWl6ZQorOzsgYHN5
c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlcmAgaWYgeW91IHdhbnQgdG8gZGlzYWJs
ZSB0aGlzLgorOzsKKzs7IE9uIEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1wbGVtZW50YXRpb24g
aXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCis7OyBzaGVsbHMgYW5kL29yIHNoZWxsIGV4dGVu
c2lvbnMgc3VjaCBhcworOzsgaHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRlbnNpb24v
MzA3L2Rhc2gtdG8tZG9jay8gdGhhdAorOzsgaW1wbGVtZW50IFVidW50dSdzIFVuaXR5IGxhdW5j
aGVyIHNwZWMKKzs7IGh0dHBzOi8vd2lraS51YnVudHUuY29tL1VuaXR5L0xhdW5jaGVyQVBJLgor
OzsKKzs7IFlvdXIgTGludXggRW1hY3MgaW5zdGFuY2Ugc2hvdWxkIGJlIGxhdW5jaGVkIHZpYSBh
biBhcHByb3ByaWF0ZSBzaGVsbAorOzsgImRlc2t0b3AiIGZpbGUgc3VjaCBhcyB0aG9zZSBkaXN0
cmlidXRlZCB3aXRoIEVtYWNzOyBlLmcuLAorOzsgImV0Yy9lbWFjc2NsaWVudC5kZXNrdG9wIiBh
cyBkb2N1bWVudGVkIGhlcmUKKzs7IGh0dHBzOi8vc3BlY2lmaWNhdGlvbnMuZnJlZWRlc2t0b3Au
b3JnL2Rlc2t0b3AtZW50cnkvbGF0ZXN0LyBhbmQKKzs7IHdoaWNoIHlvdXIgR1VJIHN5c3RlbSBz
aG91bGQgaW1wbGVtZW50LgorOzsKKzs7IE9uIG1hY09TL0dOVXN0ZXAgc3lzdGVtcyAoYWthIE5T
KSBhbmQgTVMtV2luZG93cywgbmF0aXZlIEFQSXMgYXJlCis7OyB1c2VkIGFuZCBELUJ1cyBpcyBu
b3QsIGV2ZW4gaWYgRC1CdXMgaXMgY29uZmlndXJlZCBpbiB5b3VyIGJ1aWxkLgorOzsKKzs7IFRv
IGFkZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHN5c3RlbXMsIHByb3ZpZGUgYSBiYWNrIGVuZCB0
aGF0IGltcGxlbWVudHMKKzs7IHRoZSBjbC1nZW5lcmljIGZ1bmN0aW9ucyBiZWxvdy4KKworOzs7
IENvZGU6CisKKyhyZXF1aXJlICdkYnVzKQorCisoZGVmZ3JvdXAgc3lzdGVtLXRhc2tiYXIgbmls
CisgICJTeXN0ZW0gR1VJIHRhc2tiYXIgaWNvbiBiYWRnZSwgcHJvZ3Jlc3MgcmVwb3J0LCBhbGVy
dGluZy4iCisgIDpncm91cCAnY29udmVuaWVuY2UKKyAgOnZlcnNpb24gIjMxLjEiKQorCisoZGVm
dW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXItaW5zdGFsbCAoKQorICAiSW5zdGFs
bCBzeXN0ZW0tdGFza2JhciBwcm9ncmVzcyByZXBvcnRlcnMuIgorICAoYWRkLWhvb2sgJ3Byb2dy
ZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMgIydzeXN0ZW0tdGFza2Jhci0tcHJvZ3Jlc3Mt
cmVwb3J0ZXItdXBkYXRlKQorICAoYWRkLWhvb2sgJ3Byb2dyZXNzLXJlcG9ydGVyLWRvbmUtZnVu
Y3Rpb25zICMnc3lzdGVtLXRhc2tiYXItLXByb2dyZXNzLXJlcG9ydGVyLWRvbmUpKQorCisoZGVm
dW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXItcmVtb3ZlICgpCisgICJSZW1vdmUg
c3lzdGVtLXRhc2tiYXIgcHJvZ3Jlc3MgcmVwb3J0ZXJzLiIKKyAgKHJlbW92ZS1ob29rICdwcm9n
cmVzcy1yZXBvcnRlci11cGRhdGUtZnVuY3Rpb25zICMnc3lzdGVtLXRhc2tiYXItLXByb2dyZXNz
LXJlcG9ydGVyLXVwZGF0ZSkKKyAgKHJlbW92ZS1ob29rICdwcm9ncmVzcy1yZXBvcnRlci1kb25l
LWZ1bmN0aW9ucyAjJ3N5c3RlbS10YXNrYmFyLS1wcm9ncmVzcy1yZXBvcnRlci1kb25lKSkKKwor
KGRlZmN1c3RvbSBzeXN0ZW0tdGFza2Jhci11c2UtcHJvZ3Jlc3MtcmVwb3J0ZXIgdAorICAiU3Vw
cGxlbWVudCBwcm9ncmVzcy1yZXBvcnRlcnMgd2l0aCBHVUkgc3lzdGVtIHRhc2tiYXIgcHJvZ3Jl
c3MgYmFycy4iCisgIDp0eXBlICdib29sZWFuCisgIDpzZXQgKGxhbWJkYSAodmFyaWFibGUgdmFs
dWUpCisgICAgICAgICAoc2V0LWRlZmF1bHQgdmFyaWFibGUgdmFsdWUpCisgICAgICAgICAoaWYg
dmFsdWUKKyAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXItaW5z
dGFsbCkKKyAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyLXJlbW92
ZSkpKQorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gc3lzdGVtLXRhc2tiYXItY2xl
YXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzIHQKKyAgIkNsZWFyIHRoZSBpY29uIGF0dGVudGlv
biBpbmRpY2F0b3Igd2hlbiBhbnkgR1VJIGZyYW1lIGlzIGZvY3VzZWQuCitCYWNrIGVuZHMgdGhh
dCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yLCBzdWNoIGFzCitt
YWNPUy9HTlVzdGVwIGFuZCBNUy1XaW5kb3dzLCBpZ25vcmUgdGhpcyBvcHRpb24uIgorICA6dHlw
ZSAnYm9vbGVhbgorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gc3lzdGVtLXRhc2ti
YXItZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSAiZW1hY3NjbGllbnQiCisgICJELUJ1cyBkZXNrdG9w
IGZpbGUgYmFzZSBuYW1lIGZvciB0aGUgc3lzdGVtIHRhc2tiYXIgZGVzdGluYXRpb24uCitUaGlz
IHNob3VsZCBiZSB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkZXNrdG9wIGZpbGUgdXNlZCB0byBsYXVu
Y2ggYW4gRW1hY3MKK2luc3RhbmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgbGF1bmNoZXIgZGVz
a3RvcCBmaWxlIGlzIGNhbGxlZAorXCJlbWFjcy5kZXNrdG9wXCIsIHRoaXMgb3B0aW9uIHNob3Vs
ZCBiZSBcImVtYWNzXCIuIgorICA6dHlwZSAnc3RyaW5nCisgIDp2ZXJzaW9uICIzMS4xIikKKwor
KGRlZmN1c3RvbSBzeXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQgbmlsCisgICJOdW1iZXIgb2Yg
bWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIEQtQnVzIHJlc3BvbnNlcy4KK0lmIG5pbCwgdXNlIHRo
ZSBgZGJ1c2AgZGVmYXVsdCB0aW1lb3V0IGluIGBkYnVzLWNhbGwtbWV0aG9kYCB3aGljaCBpcwor
MjUwMDAgKGkuZS4sIDI1bXMpLgorCitJZiB5b3VyIEQtQnVzIGRlc2t0b3AgZXh0ZW5zaW9uIG5l
ZWRzIGV4dHJhIHRpbWUgdG8gcmVzcG9uZCwgaW4gd2hpY2gKK2Nhc2UgYHN5c3RlbS10YXNrYmFy
LW1vZGVgIG1pZ2h0IG5vdCBpbml0aWFsaXplIG9yIHJlbGF0ZWQgZnVuY3Rpb25zCittaWdodCBu
b3QgdGFrZSB2aXNpYmxlIGVmZmVjdCwgYmluZCB0aGlzIHRvIGEgdmFsdWUgaGlnaGVyIHRoYW4g
MjUwMDAgdG8KK2ZpbmQgd2hhdCB3b3JrcyBmb3IgeW91ciBzeXN0ZW0uIgorICA6dHlwZSAnKGNo
b2ljZSAoY29uc3QgOnRhZyAiRGVmYXVsdCIgbmlsKSBuYXRudW0pCisgIDp2ZXJzaW9uICIzMS4x
IikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgbmlsCisgICJHZW5lcmljIHRh
c2tiYXIgbWV0aG9kIHN5c3RlbSBkaXNwYXRjaGVyLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jh
ci0tc2V0LWJhY2stZW5kICgpCisgICJEZXRlcm1pbmUgdGFza2JhciBob3N0IHN5c3RlbSB0eXBl
LiIKKyAgOzsgT3JkZXIgbWF0dGVycyB0byBhY2NvbW1vZGF0ZSB0aGUgY2FzZXMgd2hlcmUgYW4g
TlMgb3IgTVMtV2luZG93cworICA7OyBidWlsZCBoYXZlIHRoZSBkYnVzIGZlYXR1cmUuCisgIChj
b25kICgoYm91bmRwICducy12ZXJzaW9uLXN0cmluZykKKyAgICAgICAgIChzZXRxIHN5c3RlbS10
YXNrYmFyLS1iYWNrLWVuZCAnbnMpKQorICAgICAgICAoKGJvdW5kLWFuZC10cnVlLXAgdzMyLWlu
aXRpYWxpemVkKQorICAgICAgICAgKHNldHEgc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kICd3MzIp
KQorICAgICAgICAoKGFuZCAoZmVhdHVyZXAgJ2RidXNiaW5kKQorICAgICAgICAgICAgICAobWVt
YmVyICJvcmcuZnJlZWRlc2t0b3AubG9naW4xIgorICAgICAgICAgICAgICAgICAgICAgIChkYnVz
LWxpc3QtYWN0aXZhdGFibGUtbmFtZXMgOnN5c3RlbSkpKQorICAgICAgICAgKHNldHEgc3lzdGVt
LXRhc2tiYXItLWJhY2stZW5kICdkYnVzKSkKKyAgICAgICAgKHQKKyAgICAgICAgIChzZXRxIHN5
c3RlbS10YXNrYmFyLS1iYWNrLWVuZCBuaWwpKSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmaW5l
LW1pbm9yLW1vZGUgc3lzdGVtLXRhc2tiYXItbW9kZQorICAiU3lzdGVtIEdVSSB0YXNrYmFyIGlj
b24gYmFkZ2UsIHByb2dyZXNzIHJlcG9ydCwgYWxlcnRpbmcuIgorICA6Z2xvYmFsIHQKKyAgKHdo
ZW4gbm9uaW50ZXJhY3RpdmUKKyAgICAod2FybiAiQmF0Y2ggbW9kZSBkb2VzIG5vdCBzdXBwb3J0
IGBzeXN0ZW0tdGFza2JhciciKSkKKyAgKGNvbmQgKHN5c3RlbS10YXNrYmFyLW1vZGUKKyAgICAg
ICAgIChpZiAoc3lzdGVtLXRhc2tiYXItLXNldC1iYWNrLWVuZCkKKyAgICAgICAgICAgICAoc3lz
dGVtLXRhc2tiYXItLWVuYWJsZSkKKyAgICAgICAgICAgKHdhcm4gIlN5c3RlbSBkb2VzIG5vdCBz
dXBwb3J0IGBzeXN0ZW0tdGFza2JhciciKSkKKyAgICAgICAgICh3aGVuIHN5c3RlbS10YXNrYmFy
LXVzZS1wcm9ncmVzcy1yZXBvcnRlcgorICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jl
c3MtcmVwb3J0ZXItaW5zdGFsbCkpKQorICAgICAgICAodAorICAgICAgICAgKHN5c3RlbS10YXNr
YmFyLXByb2dyZXNzLXJlcG9ydGVyLXJlbW92ZSkKKyAgICAgICAgICh3aGVuIHN5c3RlbS10YXNr
YmFyLS1iYWNrLWVuZAorICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWRpc2FibGUpCisgICAg
ICAgICAgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCBuaWwpKSkpKQorCisoY2wtZGVm
Z2VuZXJpYyBzeXN0ZW0tdGFza2Jhci0tZW5hYmxlICgpCisgICJFbmFibGUgdGhlIHN5c3RlbS10
YXNrYmFyIGJhY2sgZW5kLiIpCisKKyhjbC1kZWZnZW5lcmljIHN5c3RlbS10YXNrYmFyLS1kaXNh
YmxlICgpCisgICJEaXNhYmxlIHRoZSBzeXN0ZW0tdGFza2JhciBiYWNrIGVuZC4iKQorCisoY2wt
ZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci1iYWRnZSAoJm9wdGlvbmFsIGNvdW50KQorICAiRGlz
cGxheSBhIENPVU5UIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIEVtYWNzIGljb24uCitJ
ZiBDT1VOVCBpcyBhbiBpbnRlZ2VyLCBkaXNwbGF5IHRoYXQgYXMgdGhlIGljb24gYmFkZ2UuCitJ
ZiBDT1VOVCBpcyBhIHN0cmluZyBvbiBiYWNrIGVuZHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgc3Ry
aW5ncywgY29udmVydAorQ09VTlQgdG8gYW4gaW50ZWdlciwgb3IgbmlsIGlmIHRoYXQgZmFpbHMu
CitJZiBDT1VOVCBpcyBuaWwgb3IgYW4gZW1wdHkgc3RyaW5nLCByZW1vdmUgdGhlIGNvdW50ZXIu
IikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uICgmb3B0aW9uYWwg
dXJnZW5jeSB0aW1lb3V0KQorICAiRmxhc2ggdGhlIHN5c3RlbSB0YXNrYmFyIGljb24gYW5kL29y
IGZyYW1lIHRvIGFsZXJ0IHRoZSB1c2VyLgorSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBpbmZv
cm1hdGlvbmFsJywgcmVxdWVzdCBub3JtYWwgYXR0ZW50aW9uLgorSWYgVVJHRU5DWSBpcyB0aGUg
c3ltYm9sIGBjcml0aWNhbCcsIHJlcXVlc3QgdXJnZW50IGF0dGVudGlvbi4KK0lmIFVSR0VOQ1kg
aXMgbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9uIGluZGljYXRvci4KKworSWYgVElNRU9VVCBpcyBu
b24tbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9uIGluZGljYXRvciBhZnRlciBUSU1FT1VUCitzZWNv
bmRzLCBvdGhlcndpc2UgdGhlIGF0dGVudGlvbiBpbmRpY2F0b3Igd2lsbCBiZSBjbGVhcmVkIGVp
dGhlciBpZiB0aGUKK2ZyYW1lIGlzIGZvY3VzZWQgYnkgdGhlIHVzZXIgb3IgaWYgYHN5c3RlbS10
YXNrYmFyLWF0dGVudGlvbicgaXMgY2FsbGVkCit3aXRoIG5pbCBVUkdFTkNZLgorCitPbiBzb21l
IGJhY2sgZW5kcywgYW4gYGluZm9ybWF0aW9uYWwnIGF0dGVudGlvbiByZXF1ZXN0IHdpbGwgdGlt
ZSBvdXQKK2F1dG9tYXRpY2FsbHkuICBJbiBjb250cmFzdCwgYSBgY3JpdGljYWxgIHJlcXVlc3Qg
cmVxdWlyZXMgdGhhdCB0aGUgdXNlcgorYnJpbmcgRW1hY3MgaW50byBmb2N1cyBhbmQgd2lsbCBu
b3QgdGltZSBvdXQuICBPbiBzb21lIGJhY2sgZW5kcywKK2Bjcml0aWNhbCcgaGFzIHRoZSBzYW1l
IGVmZmVjdCBhcyBgaW5mb3JtYXRpb25hbCcuIikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRh
c2tiYXItcHJvZ3Jlc3MgKCZvcHRpb25hbCBwcm9ncmVzcykKKyAgIkRpc3BsYXkgYSBwcm9ncmVz
cyBpbmRpY2F0b3Igb3ZlcmxheSBvbiB0aGUgc3lzdGVtIHRhc2tiYXIgaWNvbi4KK1BST0dSRVNT
IGlzIGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAuCitJZiBQUk9HUkVTUyBpcyBuaWws
IHJlbW92ZSB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jh
ci0tdmFsaWRhdGUtcHJvZ3Jlc3MgKHByb2dyZXNzKQorICAiUmV0dXJuIFBST0dSRVNTIGFzIGEg
ZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAsIG9yIG5pbC4iCisgICh3aGVuIChuYXRudW1w
IHByb2dyZXNzKQorICAgIChzZXRxIHByb2dyZXNzIChmbG9hdCBwcm9ncmVzcykpKQorICAod2hl
biAoYW5kIHByb2dyZXNzICg+PSBwcm9ncmVzcyAwLjApICg8PSBwcm9ncmVzcyAxLjApKQorICAg
IHByb2dyZXNzKSkKKworDAorOzsgYHByb2dyZXNzLXJlcG9ydGVyJyBzdXBwb3J0LgorCisoZGVm
dW4gc3lzdGVtLXRhc2tiYXItLXByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSAoX3JlcG9ydGVyIHBl
cmNlbnRhZ2UgaW5kZXgpCisgICJgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlYCBjYWxsYmFj
ay4KK1JFUE9SVEVSIHNob3VsZCBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBgbWFrZS1wcm9n
cmVzcy1yZXBvcnRlcicuCitQRVJDRU5UQUdFIGlzIGluIHRoZSByYW5nZSAwLTEwMCwgb3Igbmls
IGZvciBhIHB1bHNpbmcgcmVwb3J0ZXIuCitJTkRFWCBpcyBpbiB0aGUgcmFuZ2UgMC0zLCBvciBu
aWwgZm9yIGEgbnVtZXJpYyByZXBvcnRlci4iCisgIChjb25kIChwZXJjZW50YWdlCisgICAgICAg
ICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKC8gcGVyY2VudGFnZSAxMDAuMCkpKQorICAgICAg
ICAoaW5kZXgKKyAgICAgICAgIChzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyAoLyAoMSsgaW5kZXgp
IDQuMCkpKSkpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tcHJvZ3Jlc3MtcmVwb3J0ZXItZG9u
ZSAoX3JlcG9ydGVyKQorICAiYHByb2dyZXNzLXJlcG9ydGVyLWRvbmVgIGNhbGxiYWNrLgorUkVQ
T1JURVIgc2hvdWxkIGJlIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIGBtYWtlLXByb2dyZXNzLXJl
cG9ydGVyJy4iCisgIChzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyBuaWwpKQorCisMCis7OyBELUJ1
cyBzdXBwb3J0LgorCisoZGVmY29uc3Qgc3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZSAiY29t
LmNhbm9uaWNhbC5Vbml0eSIpCisoZGVmY29uc3Qgc3lzdGVtLXRhc2tiYXItLWRidXMtaW50ZXJm
YWNlICJjb20uY2Fub25pY2FsLlVuaXR5LkxhdW5jaGVyRW50cnkiKQorCisoZGVmdmFyIHN5c3Rl
bS10YXNrYmFyLS1kYnVzLWF0dGVudGlvbiBuaWwKKyAgIk5vbi1uaWwgd2hlbiBhdHRlbnRpb24g
aXMgcmVxdWVzdGVkLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZW5kLXNpZ25h
bCAobWVzc2FnZSkKKyAgIlNlbmQgTUVTU0FHRSB0byB0aGUgRC1CdXMgc3lzdGVtIHRhc2tiYXIg
c2VydmljZS4iCisgIChsZXQgKChhcHAtdXJpCisgICAgICAgICAoZm9ybWF0ICJhcHBsaWNhdGlv
bjovLyVzLmRlc2t0b3AiCisgICAgICAgICAgICAgICAgIHN5c3RlbS10YXNrYmFyLWRidXMtZGVz
a3RvcC1maWxlLW5hbWUpKSkKKyAgICAoZGJ1cy1zZW5kLXNpZ25hbAorICAgICA6c2Vzc2lvbgor
ICAgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNlCisgICAgICIvIgorICAgICBzeXN0ZW0t
dGFza2Jhci0tZGJ1cy1pbnRlcmZhY2UKKyAgICAgIlVwZGF0ZSIKKyAgICAgYXBwLXVyaQorICAg
ICBtZXNzYWdlKSkpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1jbGVhci1hdHRlbnRp
b24tb24tZnJhbWUtZm9jdXMgKCkKKyAgIkNsZWFyIGFuIGFjdGl2ZSBELUJ1cyBhdHRlbnRpb24g
cmVxdWVzdCBpZiBhbnkgZnJhbWUgaXMgZm9jdXNlZC4iCisgICh3aGVuIChhbmQgc3lzdGVtLXRh
c2tiYXItLWRidXMtYXR0ZW50aW9uCisgICAgICAgICAgICAgKGNhdGNoIDpjbGVhcgorICAgICAg
ICAgICAgICAgKGRvbGlzdCAoZnJhbWUgKGZyYW1lLWxpc3QpKQorICAgICAgICAgICAgICAgICAo
d2hlbiAoZXEgKGZyYW1lLWZvY3VzLXN0YXRlIGZyYW1lKSB0KQorICAgICAgICAgICAgICAgICAg
ICh0aHJvdyA6Y2xlYXIgdCkpKSkpCisgICAgKHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBuaWwp
KSkKKworKGRlZnVuIHN5c3RlbS10YXNrYmFyLWRidXMtcGluZy1zZXJ2aWNlICgpCisgICJSZXR1
cm4gbm9uLW5pbCBpZiBgc3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZScgcmVzcG9uZHMuCitS
ZXR1cm4gbmlsIGlmIG5vIHJlc3BvbnNlIHdpdGhpbiBgc3lzdGVtLXRhc2tiYXItZGJ1cy10aW1l
b3V0Jy4iCisgIChkYnVzLXBpbmcKKyAgIDpzZXNzaW9uCisgICBzeXN0ZW0tdGFza2Jhci0tZGJ1
cy1zZXJ2aWNlCisgICBzeXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQpKQorCisoY2wtZGVmbWV0
aG9kIHN5c3RlbS10YXNrYmFyLS1lbmFibGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykp
KQorICAodW5sZXNzIChzeXN0ZW0tdGFza2Jhci1kYnVzLXBpbmctc2VydmljZSkKKyAgICAoZXJy
b3IgIkQtQnVzIHNlcnZpY2UgYCVzJyB1bmF2YWlsYWJsZSIgc3lzdGVtLXRhc2tiYXItLWRidXMt
c2VydmljZSkpCisgICh3aGVuIHN5c3RlbS10YXNrYmFyLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFt
ZS1mb2N1cworICAgIChhZGQtZnVuY3Rpb24gOmFmdGVyIGFmdGVyLWZvY3VzLWNoYW5nZS1mdW5j
dGlvbgorICAgICAgICAgICAgICAgICAgIydzeXN0ZW0tdGFza2Jhci0tZGJ1cy1jbGVhci1hdHRl
bnRpb24tb24tZnJhbWUtZm9jdXMpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0t
ZGlzYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpKQorICAocmVtb3ZlLWZ1bmN0
aW9uIGFmdGVyLWZvY3VzLWNoYW5nZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICMnc3lz
dGVtLXRhc2tiYXItLWRidXMtY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzKSkKKworKGNs
LWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRnZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1
cykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgY291bnQp
CisgICJEaXNwbGF5IENPVU5UIGFzIGFuIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIEVt
YWNzIGljb24uCitJZiBDT1VOVCBpcyBhbiBpbnRlZ2VyLCBkaXNwbGF5IHRoYXQuICBJZiBDT1VO
VCBpcyBhIHN0cmluZywgY29udmVydCBpdAordG8gYW4gaW50ZWdlciwgb3IgbmlsIGlmIHRoYXQg
ZmFpbHMuICBJZiBDT1VOVCBpcyBhbnkgb3RoZXIgdHlwZSwgdXNlCituaWwuICBJZiBDT1VOVCBp
cyBuaWwgb3IgYW4gZW1wdHkgc3RyaW5nLCByZW1vdmUgdGhlIGJhZGdlLgorTm90ZTogVGhlIFVu
aXR5IEQtQnVzIHByb3RvY29sIHN1cHBvcnRzIG9ubHkgaW50ZWdlciBiYWRnZXMuIgorICAoY29u
ZCAoKHN0cmluZ3AgY291bnQpCisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1wIGNvdW50KQor
ICAgICAgICAgICAgIChzZXRxIGNvdW50IG5pbCkKKyAgICAgICAgICAgKGxldCAoKGNvdW50LTEg
KHN0cmluZy10by1udW1iZXIgY291bnQpKSkKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAoaWYg
KGludGVnZXJwIGNvdW50LTEpIGNvdW50LTEgbmlsKSkpKSkKKyAgICAgICAgKChub3QgKGludGVn
ZXJwIGNvdW50KSkKKyAgICAgICAgIChzZXRxIGNvdW50IG5pbCkpKQorICAoc3lzdGVtLXRhc2ti
YXItLWRidXMtc2VuZC1zaWduYWwKKyAgIGAoKDpkaWN0LWVudHJ5ICJjb3VudC12aXNpYmxlIgor
ICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDpib29sZWFuICwobm90IChudWxsIGNvdW50KSkp
KQorICAgICAoOmRpY3QtZW50cnkgImNvdW50IgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50
IDp1aW50MzIgLChpZiAobnVsbCBjb3VudCkgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY291bnQpKSkpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1h
dHRlbnRpb24gKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICdkYnVzKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAi
UmVxdWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9uIHRoZSBzeXN0ZW0gdGFza2JhciBFbWFj
cyBpY29uLgorVGhlIHJlcXVlc3Qgd2lsbCB0aW1lIG91dCB3aXRoaW4gdGhlIFRJTUVPVVQgc2Vj
b25kcyBpbnRlcnZhbC4KK1RoZSBVbml0eSBELUJ1cyBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0
IGRpZmZlcmVudGlhdGVkIHVyZ2VuY2llcy4iCisgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1kYnVz
LWF0dGVudGlvbiB1cmdlbmN5KQorICAoc3lzdGVtLXRhc2tiYXItLWRidXMtc2VuZC1zaWduYWwK
KyAgIGAoKDpkaWN0LWVudHJ5ICJ1cmdlbnQiCisgICAgICAgICAgICAgICAgICAoOnZhcmlhbnQg
OmJvb2xlYW4gLChub3QgKG51bGwgdXJnZW5jeSkpKSkpKQorICAod2hlbiAoYW5kIHVyZ2VuY3kg
dGltZW91dCkKKyAgICAocnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAg
ICAgIydzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gbmlsKSkpCisKKyhjbC1kZWZtZXRob2Qgc3lz
dGVtLXRhc2tiYXItcHJvZ3Jlc3MgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ2RidXMpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByb2dyZXNzKQor
ICAiRGlzcGxheSBhIHByb2dyZXNzIGJhciBvdmVybGF5IG9uIHRoZSBzeXN0ZW0gdGFza2JhciBp
Y29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBS
T0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBiYXIuIgorICAoc2V0cSBwcm9ncmVz
cyAoc3lzdGVtLXRhc2tiYXItLXZhbGlkYXRlLXByb2dyZXNzIHByb2dyZXNzKSkKKyAgKHN5c3Rl
bS10YXNrYmFyLS1kYnVzLXNlbmQtc2lnbmFsCisgICBgKCg6ZGljdC1lbnRyeSAicHJvZ3Jlc3Mt
dmlzaWJsZSIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFudCA6Ym9vbGVhbiAsKG5vdCAobnVs
bCBwcm9ncmVzcykpKSkKKyAgICAgKDpkaWN0LWVudHJ5ICJwcm9ncmVzcyIKKyAgICAgICAgICAg
ICAgICAgICg6dmFyaWFudCA6ZG91YmxlICwoaWYgKG51bGwgcHJvZ3Jlc3MpIDAgcHJvZ3Jlc3Mp
KSkpKSkKKworDAorOzsgbWFjT1MvR05Vc3RlcCBOUyBzdXBwb3J0LgorCisoZGVjbGFyZS1mdW5j
dGlvbiBucy1iYWRnZSAibnNmbnMubSIpCisoZGVjbGFyZS1mdW5jdGlvbiBucy1yZXF1ZXN0LXVz
ZXItYXR0ZW50aW9uICJuc2Zucy5tIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG5zLXByb2dyZXNzLWlu
ZGljYXRvciAibnNmbnMubSIpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItLWVuYWJs
ZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3Rl
bS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICducykpKQorICAoaWdub3JlKSkKKworKGNsLWRlZm1l
dGhvZCBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMp
KSkKKyAgKGlnbm9yZSkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItYmFkZ2UgKCZj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2ti
YXItLWJhY2stZW5kIChlcWwgJ25zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZvcHRpb25hbCBjb3VudCkKKyAgIkRpc3BsYXkgQ09VTlQgYXMgYW4gb3ZlcmxheSBvbiB0
aGUgRG9jayBiYWRnZS4KK0lmIENPVU5UIGlzIGFuIGludGVnZXIgb3IgYSBub24tZW1wdHkgc3Ry
aW5nLCBkaXNwbGF5IHRoYXQuICBJZiBDT1VOVCBpcworbmlsIG9yIGFuIGVtcHR5IHN0cmluZywg
Y2xlYXIgdGhlIGJhZGdlIG92ZXJsYXkuCitOb3RlOiBOUyB3aWxsIGFiYnJldmlhdGUgbG9uZyBz
dHJpbmdzIHRvIGZpdCB0aGUgYmFkZ2UncyBhbGxvY2F0ZWQKK3NwYWNlLiIKKyAgKGNvbmQgKChz
dHJpbmdwIGNvdW50KQorICAgICAgICAgKHdoZW4gKHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAg
ICAgICAgICAoc2V0cSBjb3VudCBuaWwpKSkKKyAgICAgICAgKChpbnRlZ2VycCBjb3VudCkKKyAg
ICAgICAgIChzZXRxIGNvdW50IChudW1iZXItdG8tc3RyaW5nIGNvdW50KSkpCisgICAgICAgICh0
IChzZXRxIGNvdW50IG5pbCkpKQorICAobnMtYmFkZ2UgY291bnQpKQorCisoY2wtZGVmbWV0aG9k
IHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ25zKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5j
eSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9uIHRoZSBEb2Nr
LgorVGhlIGF0dGVudGlvbiBpbmRpY2F0b3Igd2lsbCBiZSBjbGVhcmVkIGFmdGVyIFRJTUVPVVQg
c2Vjb25kcy4iCisgIChucy1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uIHVyZ2VuY3kpCisgICh3aGVu
IChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAgIChydW4td2l0aC10aW1lcgorICAgICB0aW1lb3V0
CisgICAgIG5pbAorICAgICAjJ3N5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBuaWwpKSkKKworKGNs
LWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyAoJmNvbnRleHQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVx
bCAnbnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFs
IHByb2dyZXNzKQorICAiRGlzcGxheSBhIHByb2dyZXNzIGJhciBvdmVybGF5IG9uIHRoZSBEb2Nr
IGFuZCBBcHAgU3dpdGNoZXIuCitQUk9HUkVTUyBpcyBhIGZsb2F0IGluIHRoZSByYW5nZSAwLjAg
dG8gMS4wLgorSWYgUFJPR1JFU1MgaXMgbmlsLCByZW1vdmUgdGhlIHByb2dyZXNzIGJhci4iCisg
IChucy1wcm9ncmVzcy1pbmRpY2F0b3IgKHN5c3RlbS10YXNrYmFyLS12YWxpZGF0ZS1wcm9ncmVz
cyBwcm9ncmVzcykpKQorCisMCis7OyBNUy1XaW5kb3dzIHN1cHBvcnQuCisKKyhkZWNsYXJlLWZ1
bmN0aW9uIHczMi1iYWRnZSAidzMyZm5zLmMiKQorKGRlY2xhcmUtZnVuY3Rpb24gdzMyLXJlcXVl
c3QtdXNlci1hdHRlbnRpb24gInczMmZucy5jIikKKyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1wcm9n
cmVzcy1pbmRpY2F0b3IgInczMmZucy5jIikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci13MzIt
YmFkZ2UtYmFja2dyb3VuZCAiI2U3NTg1NyIgOyByZWRpc2gKKyAgInczMiBiYWRnZSBiYWNrZ3Jv
dW5kIFJHQiB0cmlwbGUgc3RyaW5nLiIpCisKKyhkZWZ2YXIgc3lzdGVtLXRhc2tiYXItdzMyLWJh
ZGdlLWZvcmVncm91bmQgIiNmZmZmZmYiIDsgd2hpdGUKKyAgInczMiBiYWRnZSBmb3JlZ3JvdW5k
IFJHQiB0cmlwbGUgc3RyaW5nLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tdzMyLWNsZWFy
LWZyYW1lLWluZGljYXRvcnMgKGZyYW1lKQorICA7OyBOT1RFOiBVcGRhdGUgdGhlIGJlbG93IGlm
IGFkZGluZyBuZXcgdzMyIHN5c3RlbS10YXNrYmFyIGZ1bmN0aW9ucy4KKyAgKHdpdGgtc2VsZWN0
ZWQtZnJhbWUgZnJhbWUKKyAgICAoc3lzdGVtLXRhc2tiYXItYmFkZ2UgbmlsKQorICAgIChzeXN0
ZW0tdGFza2Jhci1hdHRlbnRpb24gbmlsKQorICAgIChzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyBu
aWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZW5hYmxlICgmY29udGV4dAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJh
Y2stZW5kIChlcWwgJ3czMikpKQorICA7OyBDbGVhciBzeXN0ZW0tdGFza2JhciBpbmRpY2F0b3Jz
IGZvciBhIGZyYW1lIHdoZW4gaXQgaXMgZGVsZXRlZC4KKyAgKGFkZC1ob29rICdkZWxldGUtZnJh
bWUtZnVuY3Rpb25zCisgICAgICAgICAgICAjJ3N5c3RlbS10YXNrYmFyLS13MzItY2xlYXItZnJh
bWUtaW5kaWNhdG9ycykpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItLWRpc2FibGUg
KCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVt
LXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ3czMikpKQorICAocmVtb3ZlLWhvb2sgJ2RlbGV0ZS1m
cmFtZS1mdW5jdGlvbnMKKyAgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLXczMi1jbGVh
ci1mcmFtZS1pbmRpY2F0b3JzKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRn
ZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0t
dGFza2Jhci0tYmFjay1lbmQgKGVxbCAndzMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZvcHRpb25hbCBjb3VudCkKKyAgIkRpc3BsYXkgYSBDT1VOVCBvdmVybGF5IG9u
IHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorVGhlIHRhc2tiYXIgaWNvbiB0YXJnZXQgaXMgYXNz
b2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBmcmFtZS4KKworSWYgQ09VTlQgaXMgYW4gaW50ZWdl
ciBvciBhIG5vbi1lbXB0eSBzdHJpbmcsIGRpc3BsYXkgdGhhdC4gIElmIENPVU5UIGlzCituaWwg
b3IgYW4gZW1wdHkgc3RyaW5nLCBjbGVhciB0aGUgYmFkZ2UuCisKK0R1ZSB0byBNUy1XaW5kb3dz
IGljb24gb3ZlcmxheSBzaXplIGxpbWl0YXRpb25zLCBpZiBDT1VOVCBpcyBhbiBpbnRlZ2VyCith
bmQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgLTk5IHRvIDk5LCBkaXNwbGF5IFwiLTk5XCIgYW5kIFwi
OTkrXCIsCityZXNwZWN0aXZlbHksIGlmIENPVU5UIGlzIGEgc3RyaW5nIGxvbmdlciB0aGFuIDIg
Y2hhcmFjdGVycyB0cnVuY2F0ZSBpdAordXNpbmcgYHRydW5jYXRlLXN0cmluZy10by13aWR0aGAu
CisKK0NvbnN1bHQgYHN5c3RlbS10YXNrYmFyLXczMi1iYWRnZS1iYWNrZ3JvdW5kYCBhbmQKK2Bz
eXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtZm9yZWdyb3VuZGAgZm9yIHRoZSBiYWNrZ3JvdW5kIGFu
ZCBmb3JlZ3JvdW5kCitjb2xvcnMgZm9yIHRoZSBwYWludGVkIG92ZXJsYXkuIgorICAoY29uZCAo
KHN0cmluZ3AgY291bnQpCisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAg
ICAgICAgICAgIChzZXRxIGNvdW50IG5pbCkKKyAgICAgICAgICAgKHdoZW4gKGxlbmd0aD4gY291
bnQgMikKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAodHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRo
IGNvdW50IDMgMCBuaWwgdCkpKSkpCisgICAgICAgICgoaW50ZWdlcnAgY291bnQpCisgICAgICAg
ICAoaWYgKGFuZCAoPiBjb3VudCAtMTAwKQorICAgICAgICAgICAgICAgICAgKDwgY291bnQgMTAw
KSkKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAobnVtYmVyLXRvLXN0cmluZyBjb3VudCkpCisg
ICAgICAgICAgIChpZiAoPCBjb3VudCAwKQorICAgICAgICAgICAgICAgKHNldHEgY291bnQgIi05
OSIpCisgICAgICAgICAgICAgKHNldHEgY291bnQgIjk5KyIpKSkpCisgICAgICAgICh0IChzZXRx
IGNvdW50IG5pbCkpKQorICAodzMyLWJhZGdlIGNvdW50CisgICAgICAgICAgICAgc3lzdGVtLXRh
c2tiYXItdzMyLWJhZGdlLWJhY2tncm91bmQKKyAgICAgICAgICAgICBzeXN0ZW0tdGFza2Jhci13
MzItYmFkZ2UtZm9yZWdyb3VuZCkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItYXR0
ZW50aW9uICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAndzMyKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVx
dWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgor
SW5kaWNhdGUgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBmcmFtZS4KK0lm
IFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGZsYXNoIHRoZSB0YXNrYmFy
IGljb24uCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2FsJywgZmxhc2ggdGhlIHRh
c2tiYXIgaWNvbiBhbmQgdGhlCitNUy1XaW5kb3dzIHdpbmRvdyBmcmFtZS4KK0NsZWFyIGF0dGVu
dGlvbiBpbmRpY2F0b3IgYWZ0ZXIgVElNRU9VVCBzZWNvbmRzLiAgSWYgVElNRU9VVCBpcyBuaWws
CitkZWZhdWx0IHRvIE1TLVdpbmRvd3MgZGVmYXVsdCBiZWhhdmlvci4iCisgICh3MzItcmVxdWVz
dC11c2VyLWF0dGVudGlvbiB1cmdlbmN5KQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkK
KyAgICAocnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydzeXN0
ZW0tdGFza2Jhci1hdHRlbnRpb24gbmlsKSkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2ti
YXItcHJvZ3Jlc3MgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ3czMikpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5
IGEgcHJvZ3Jlc3MgYmFyIG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorUFJPR1JFU1MgaXMg
YSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwgcmVt
b3ZlIHRoZSBwcm9ncmVzcyBiYXIuIgorICAodzMyLXByb2dyZXNzLWluZGljYXRvciAoc3lzdGVt
LXRhc2tiYXItLXZhbGlkYXRlLXByb2dyZXNzIHByb2dyZXNzKSkpCisKKwwKKworKHByb3ZpZGUg
J3N5c3RlbS10YXNrYmFyKQorCis7Ozsgc3lzdGVtLXRhc2tiYXIuZWwgZW5kcyBoZXJlCmRpZmYg
LS1naXQgYS9zcmMvbnNmbnMubSBiL3NyYy9uc2Zucy5tCmluZGV4IDM1MjhjNGFjZDUwLi4xYThm
OTVjMTRlZiAxMDA2NDQKLS0tIGEvc3JjL25zZm5zLm0KKysrIGIvc3JjL25zZm5zLm0KQEAgLTM2
NzQsNiArMzY3NCwxMjkgQEAgVGhlIHBvc2l0aW9uIGlzIHJldHVybmVkIGFzIGEgY29ucyBjZWxs
IChYIC4gWSkgb2YgdGhlCiAgIHJldHVybiBRbmlsOwogfQogCitERUZVTiAoIm5zLWJhZGdlIiwg
Rm5zX2JhZGdlLCBTbnNfYmFkZ2UsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBTZXQgdGhlIGFw
cCBpY29uIGJhZGdlIHRvIEJBREdFLgorQkFER0Ugc2hvdWxkIGJlIGEgc3RyaW5nIHNob3J0IGVu
b3VnaCB0byBkaXNwbGF5IG5pY2VseSBpbiB0aGUgc2hvcnQKK3NwYWNlIGludGVuZGVkIGZvciBi
YWRnZXMuCitJZiBCQURHRSBpcyBuaWwsIGNsZWFyIHRoZSBhcHAgYmFkZ2UuICAqLykKKyAgKExp
c3BfT2JqZWN0IGJhZGdlKQoreworICBibG9ja19pbnB1dCAoKTsKKyAgaWYgKE5JTFAgKGJhZGdl
KSkKKyAgICBbW05TQXBwIGRvY2tUaWxlXSBzZXRCYWRnZUxhYmVsOiBuaWxdOworICBlbHNlCisg
ICAgeworICAgICAgQ0hFQ0tfU1RSSU5HIChiYWRnZSk7CisgICAgICBbW05TQXBwIGRvY2tUaWxl
XSBzZXRCYWRnZUxhYmVsOgorCQkJICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6IFNT
REFUQSAoYmFkZ2UpXV07CisgICAgfQorICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gUW5p
bDsKK30KKworLyogVXNlIC0xIHRvIGluZGljYXRlIG5vIGFjdGl2ZSByZXF1ZXN0LiAgKi8KK3N0
YXRpYyBOU0ludGVnZXIgbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworCitERUZV
TiAoIm5zLXJlcXVlc3QtdXNlci1hdHRlbnRpb24iLAorICAgICAgIEZuc19yZXF1ZXN0X3VzZXJf
YXR0ZW50aW9uLAorICAgICAgIFNuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAgICAgIDEs
IDEsIDAsCisgICAgICAgZG9jOiAvKiBCb3VuY2UgdGhlIGFwcCBkb2NrIGljb24gdG8gcmVxdWVz
dCB1c2VyIGF0dGVudGlvbi4KK0lmIFVSR0VOQ1kgbmlsLCBjYW5jZWwgdGhlIG91dHN0YW5kaW5n
IHJlcXVlc3QsIGlmIGFueS4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5mb3JtYXRpb25h
bCcsIGJvdW5jaW5nIGxhc3RzIGEgZmV3IHNlY29uZHMuCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1i
b2wgYGNyaXRpY2FsJywgYm91bmNpbmcgbGFzdHMgdW50aWwgRW1hY3MgaXMKK2ZvY3VzZWQuICAq
LykKKyAgKExpc3BfT2JqZWN0IHVyZ2VuY3kpCit7CisgIGJsb2NrX2lucHV0ICgpOworICBpZiAo
bnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCAhPSAtMSkKKyAgICB7CisgICAgICBbTlNBcHAg
Y2FuY2VsVXNlckF0dGVudGlvblJlcXVlc3Q6IG5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faWRd
OworICAgICAgbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworICAgIH0KKyAgaWYg
KCFOSUxQICh1cmdlbmN5KSAmJiBTWU1CT0xQICh1cmdlbmN5KSkKKyAgICB7CisgICAgICBpZiAo
RVEgKHVyZ2VuY3ksIFFpbmZvcm1hdGlvbmFsKSkKKwluc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9u
X2lkID0gW05TQXBwIHJlcXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNJbmZvcm1hdGlvbmFs
UmVxdWVzdF07CisgICAgICBlbHNlIGlmIChFUSAodXJnZW5jeSwgUWNyaXRpY2FsKSkKKwluc19y
ZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gW05TQXBwIHJlcXVlc3RVc2VyQXR0ZW50aW9uOgor
CQkJCQkJTlNDcml0aWNhbFJlcXVlc3RdOworICAgIH0KKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAg
cmV0dXJuIFFuaWw7Cit9CisKK0RFRlVOICgibnMtcHJvZ3Jlc3MtaW5kaWNhdG9yIiwKKyAgICAg
ICBGbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIFNuc19wcm9ncmVzc19pbmRpY2F0b3Is
CisgICAgICAgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIEJvdW5jZSB0aGUgYXBwIGRvY2sgaWNv
biB0byByZXF1ZXN0IHVzZXIgYXR0ZW50aW9uLgorCSAgICAgICBQUk9HUkVTUyBpcyBhIGZsb2F0
IGJldHdlZW4gMC4wIGFuZCAxLjAuCisJICAgICAgIElmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3Zl
IHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IuICAqLykKKyAgKExpc3BfT2JqZWN0IHByb2dyZXNzKQor
eworICBibG9ja19pbnB1dCAoKTsKKyAgTlNEb2NrVGlsZSAqZG9ja190aWxlID0gW05TQXBwIGRv
Y2tUaWxlXTsKKyAgLyogVXNlIE5TTGV2ZWxJbmRpY2F0b3Igd2l0aCByZWxpYWJsZSByZWRyYXdz
LCBub3QgTlNQcm9ncmVzc0luZGljYXRvci4gICovCisgIE5TTGV2ZWxJbmRpY2F0b3IgKmxldmVs
X2luZGljYXRvcjsKKyAgLyogUmV1c2UgdGhlIGluZGljYXRvciBzdWJ2aWV3IG9yIGNyZWF0ZSBv
bmUuICovCisgIGlmIChkb2NrX3RpbGUuY29udGVudFZpZXcKKyAgICAgICYmIFtbZG9ja190aWxl
LmNvbnRlbnRWaWV3IHN1YnZpZXdzXSBjb3VudF0gPiAwCisgICAgICAmJiBbW1tkb2NrX3RpbGUu
Y29udGVudFZpZXcgc3Vidmlld3NdIGxhc3RPYmplY3RdCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc0tpbmRPZkNsYXNzOltOU0xldmVsSW5kaWNhdG9yIGNsYXNzXV0pCisgICAgbGV2ZWxfaW5k
aWNhdG9yID0KKyAgICAgIChOU0xldmVsSW5kaWNhdG9yICopW1tbZG9ja190aWxlIGNvbnRlbnRW
aWV3XSBzdWJ2aWV3c10gbGFzdE9iamVjdF07CisgICAgZWxzZQorICAgICAgeworCWlmICghZG9j
a190aWxlLmNvbnRlbnRWaWV3KQorCSAgeworCSAgICBOU0ltYWdlVmlldyogaW1hZ2VfdmlldyA9
IFtbTlNJbWFnZVZpZXcgYWxsb2NdIGluaXRdOworCSAgICBbaW1hZ2VfdmlldyBzZXRJbWFnZTog
W05TQXBwIGFwcGxpY2F0aW9uSWNvbkltYWdlXV07CisJICAgIFtkb2NrX3RpbGUgc2V0Q29udGVu
dFZpZXc6IGltYWdlX3ZpZXddOworCSAgfQorCS8qIFNldCB3aWR0aCB0byB0aGUgd2lkdGggb2Yg
dGhlIGFwcGxpY2F0aW9uIGljb24sIGFuZCBoZWlnaHQgdG8KKwkgICAlIG9mIHRoZSBpY29uIGhl
aWdodCB0byByZXNwZWN0IHNjYWxlZCBpY29ucy4gICovCisJZmxvYXQgd2lkdGggPSBbW05TQXBw
IGFwcGxpY2F0aW9uSWNvbkltYWdlXSBzaXplXS53aWR0aDsKKwlmbG9hdCBoZWlnaHQgPSAwLjEw
ICogW1tOU0FwcCBhcHBsaWNhdGlvbkljb25JbWFnZV0gc2l6ZV0uaGVpZ2h0OworCWxldmVsX2lu
ZGljYXRvciA9CisJICBbW05TTGV2ZWxJbmRpY2F0b3IgYWxsb2NdIGluaXRXaXRoRnJhbWU6CisJ
CQkJICAgICAgTlNNYWtlUmVjdCAoMC4wLCAwLjAsCisJCQkJCQkgIHdpZHRoLCBoZWlnaHQpXTsK
KwlbbGV2ZWxfaW5kaWNhdG9yIHNldFdhbnRzTGF5ZXI6IFlFU107IC8qIFBlcmZvcm1hbmNlLiAg
Ki8KKwlbbGV2ZWxfaW5kaWNhdG9yIHNldEVuYWJsZWQ6IE5PXTsgLyogSWdub3JlIG1vdXNlIGlu
cHV0LiAgKi8KKwlbbGV2ZWxfaW5kaWNhdG9yIHNldExldmVsSW5kaWNhdG9yU3R5bGU6CisJCQkg
ICBOU0xldmVsSW5kaWNhdG9yU3R5bGVDb250aW51b3VzQ2FwYWNpdHldOworCS8qIE1hdGNoIE5T
UHJvZ3Jlc3NJbmRpY2F0b3IgY29sb3IuICAqLworCVtsZXZlbF9pbmRpY2F0b3Igc2V0RmlsbENv
bG9yOiBbTlNDb2xvciBjb250cm9sQWNjZW50Q29sb3JdXTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNl
dE1pblZhbHVlOiAwLjBdOworCVtsZXZlbF9pbmRpY2F0b3Igc2V0TWF4VmFsdWU6IDEuMF07CisJ
LyogVGhlIGNvbnRlbnRWaWV3IHRha2VzIG93bmVyc2hpcC4gICovCisJW2RvY2tfdGlsZS5jb250
ZW50VmlldyBhZGRTdWJ2aWV3OiBsZXZlbF9pbmRpY2F0b3JdOworICAgICAgfQorICBkb3VibGUg
cHJvZ3Jlc3NfdmFsdWU7CisgIEJPT0wgaGlkZSA9IChOSUxQIChwcm9ncmVzcykKKwkgICAgICAg
fHwgKCFOSUxQIChwcm9ncmVzcykgJiYgIShGTE9BVFAgKHByb2dyZXNzKSkpKTsKKyAgaWYgKCFo
aWRlKQorICAgIHsKKyAgICAgIHByb2dyZXNzX3ZhbHVlID0gWEZMT0FUX0RBVEEgKHByb2dyZXNz
KTsKKyAgICAgIGhpZGUgPSAocHJvZ3Jlc3NfdmFsdWUgPCAwLjAgfHwgcHJvZ3Jlc3NfdmFsdWUg
PiAxLjApOworICAgIH0KKyAgaWYgKGhpZGUpCisgICAgeworICAgICAgW2xldmVsX2luZGljYXRv
ciBzZXREb3VibGVWYWx1ZTogMC4wXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVu
OiBZRVNdOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0
RG91YmxlVmFsdWU6IHByb2dyZXNzX3ZhbHVlXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0
SGlkZGVuOiBOT107CisgICAgfQorICBbZG9ja190aWxlIGRpc3BsYXldOworICB1bmJsb2NrX2lu
cHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKwogI2lmZGVmIE5TX0lNUExfQ09DT0EKIAogREVG
VU4gKCJucy1zZW5kLWl0ZW1zIiwKQEAgLTM5NTcsNiArNDA4MCw5IEBAIC0gKExpc3BfT2JqZWN0
KWxpc3BTdHJpbmcKICAgZGVmc3ViciAoJlNuc19zZXRfbW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9z
aXRpb24pOwogICBkZWZzdWJyICgmU25zX21vdXNlX2Fic29sdXRlX3BpeGVsX3Bvc2l0aW9uKTsK
ICAgZGVmc3ViciAoJlNuc19zaG93X2NoYXJhY3Rlcl9wYWxldHRlKTsKKyAgZGVmc3ViciAoJlNu
c19iYWRnZSk7CisgIGRlZnN1YnIgKCZTbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbik7CisgIGRl
ZnN1YnIgKCZTbnNfcHJvZ3Jlc3NfaW5kaWNhdG9yKTsKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAg
IGRlZnN1YnIgKCZTbnNfc2VuZF9pdGVtcyk7CiAjZW5kaWYKQEAgLTQwMjMsNCArNDE0OSw2IEBA
IC0gKExpc3BfT2JqZWN0KWxpc3BTdHJpbmcKICAgREVGU1lNIChRYXNzcV9kZWxldGVfYWxsLCAi
YXNzcS1kZWxldGUtYWxsIik7CiAgIERFRlNZTSAoUXJ1bl9hdF90aW1lLCAicnVuLWF0LXRpbWUi
KTsKICAgREVGU1lNIChReF9oaWRlX3RpcCwgIngtaGlkZS10aXAiKTsKKyAgREVGU1lNIChRaW5m
b3JtYXRpb25hbCwgImluZm9ybWF0aW9uYWwiKTsKKyAgREVGU1lNIChRY3JpdGljYWwsICJjcml0
aWNhbCIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3czMmZucy5jIGIvc3JjL3czMmZucy5jCmluZGV4
IDY3OWU4MTk3ZmQ4Li4xYTJmYzllODg0MiAxMDA2NDQKLS0tIGEvc3JjL3czMmZucy5jCisrKyBi
L3NyYy93MzJmbnMuYwpAQCAtMzUsNyArMzUsMTIgQEAgI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgw
NjAwCiAjaW5jbHVkZSA8Yy1jdHlwZS5oPgogCiAjZGVmaW5lIENPQkpNQUNST1MgLyogQXNrIGZv
ciBDIGRlZmluaXRpb25zIGZvciBDT00uICAqLworI2lmICFkZWZpbmVkIE1JTkdXX1c2NCAmJiAh
ZGVmaW5lZCBDWUdXSU4KKyMgZGVmaW5lIElOSVRHVUlECisjZW5kaWYKKyNpbmNsdWRlIDxpbml0
Z3VpZC5oPgogI2luY2x1ZGUgPHNobG9iai5oPgorI2luY2x1ZGUgPHNob2JqaWRsLmg+CiAjaW5j
bHVkZSA8b2xlaWRsLmg+CiAjaW5jbHVkZSA8b2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlMi5oPgpA
QCAtMjM3LDYgKzI0Miw4IEBAIERFQ0xBUkVfSEFORExFKEhNT05JVE9SKTsKIHR5cGVkZWYgQk9P
TCAoV0lOQVBJICogU2V0R2VzdHVyZUNvbmZpZ19wcm9jKSAoSFdORCwgRFdPUkQsIFVJTlQsCiAJ
CQkJCSAgICAgICBFbWFjc19QR0VTVFVSRUNPTkZJRywgVUlOVCk7CiAKK3R5cGVkZWYgQk9PTCAo
V0lOQVBJICogRmxhc2hXaW5kb3dFeF9Qcm9jKSAoUEZMQVNIV0lORk8gcGZ3aSk7CisKIHN0YXRp
YyBUcmFja01vdXNlRXZlbnRfUHJvYyB0cmFja19tb3VzZV9ldmVudF9mbiA9IE5VTEw7CiBzdGF0
aWMgSW1tR2V0Q29tcG9zaXRpb25TdHJpbmdfUHJvYyBnZXRfY29tcG9zaXRpb25fc3RyaW5nX2Zu
ID0gTlVMTDsKIHN0YXRpYyBJbW1HZXRDb250ZXh0X1Byb2MgZ2V0X2ltZV9jb250ZXh0X2ZuID0g
TlVMTDsKQEAgLTI1OSw2ICsyNjYsNyBAQCBERUNMQVJFX0hBTkRMRShITU9OSVRPUik7CiBzdGF0
aWMgV1RTUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9uX1Byb2MgV1RTUmVnaXN0ZXJTZXNzaW9u
Tm90aWZpY2F0aW9uX2ZuID0gTlVMTDsKIHN0YXRpYyBSZWdpc3RlclRvdWNoV2luZG93X3Byb2Mg
UmVnaXN0ZXJUb3VjaFdpbmRvd19mbiA9IE5VTEw7CiBzdGF0aWMgU2V0R2VzdHVyZUNvbmZpZ19w
cm9jIFNldEdlc3R1cmVDb25maWdfZm4gPSBOVUxMOworc3RhdGljIEZsYXNoV2luZG93RXhfUHJv
YyBmbGFzaF93aW5kb3dfZXhfZm4gPSBOVUxMOwogCiBleHRlcm4gQXBwZW5kTWVudVdfUHJvYyB1
bmljb2RlX2FwcGVuZF9tZW51OwogCkBAIC0xMTAxMCw2ICsxMTAxOCwzMTMgQEAgREVGVU4gKCJ3
MzItc3lzdGVtLWlkbGUtdGltZSIsIEZ3MzJfc3lzdGVtX2lkbGVfdGltZSwgU3czMl9zeXN0ZW1f
aWRsZV90aW1lLAogCiAjZW5kaWYKIAorDAorI2lmZGVmIFdJTkRPV1NOVAorCisvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKwkJICAgICBUYXNrYmFyIEluZGljYXRvcnMKKyAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lm
bmRlZiBNSU5HV19XNjQKKyAgLyogbWluZ3cub3JnJ3MgTWluR1cgZG9lc24ndCBoYXZlIHRoaXMg
c3R1ZmYuICAqLworICBERUZJTkVfR1VJRChDTFNJRF9UYXNrYmFyTGlzdCwgMHg1NmZkZjM0NCwg
MHhmZDZkLCAweDExZDAsIDB4OTUsMHg4YSwgMHgwMCwweDYwLDB4OTcsMHhjOSwweGEwLDB4OTAp
OworICBERUZJTkVfR1VJRChJSURfSVRhc2tiYXJMaXN0MywgMHhlYTFhZmI5MSwgMHg5ZTI4LCAw
eDRiODYsIDB4OTAsMHhlOSwgMHg5ZSwweDlmLDB4OGEsMHg1ZSwweGVmLDB4YWYpOworI2VuZGlm
CisKK0RFRlVOICgidzMyLWJhZGdlIiwKKyAgICAgICBGdzMyX2JhZGdlLAorICAgICAgIFN3MzJf
YmFkZ2UsCisgICAgICAgMywgMywgMCwKKyAgICAgICBkb2M6IC8qIERpc3BsYXkgYSB0YXNrYmFy
IGljb24gb3ZlcmxheSBpbWFnZSBvbiB0aGUgc2VsZWN0ZWQgZnJhbWUuCitCQURHRSBpcyBhIHN0
cmluZy4gIElmIEJBREdFIGlzIG5pbCwgcmVtb3ZlIHRoZSBvdmVybGF5LiAgRG8gbm90aGluZyBp
ZgorV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJVGFza2Jhckxpc3QzIGludGVyZmFjZSBh
bmQgcmV0dXJuIG5pbCwKK290aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcgaWYgdGhlIHNl
bGVjdGVkIGZyYW1lIGlzIG5vdCAoeWV0KQorYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93IGhhbmRs
ZS4gIEJBQ0tHUk9VTkQgYW5kIEZPUkVHUk9VTkQgYXJlIFJHQgordHJpcGxldCBzdHJpbmdzIG9m
IHRoZSBmb3JtIFwiI1JSR0dCQlwiLiAgKi8pCisgIChMaXNwX09iamVjdCBiYWRnZSwgTGlzcF9P
YmplY3QgYmFja2dyb3VuZCwgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCkKK3sKKyAgc3RydWN0IGZy
YW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBIV05EIGh3bmQgPSBOVUxMOworCisgIGlm
IChGUkFNRV9XMzJfUCAoc2YpICYmIEZSQU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFN
RV9XMzJfV0lORE9XIChzZik7CisKKyAgaWYgKGh3bmQgPT0gTlVMTCkKKyAgICByZXR1cm4gUW5p
bDsKKworICBDb0luaXRpYWxpemUgKE5VTEwpOworICBJVGFza2Jhckxpc3QzICp0YXNrX2Jhcl9s
aXN0ID0gTlVMTDsKKyAgSFJFU1VMVCByID0gQ29DcmVhdGVJbnN0YW5jZSgmQ0xTSURfVGFza2Jh
ckxpc3QsCisJCQkgICAgICAgTlVMTCwKKwkJCSAgICAgICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwK
KwkJCSAgICAgICAmSUlEX0lUYXNrYmFyTGlzdDMsCisJCQkgICAgICAgKHZvaWQgKiopJnRhc2tf
YmFyX2xpc3QpOworICBpZiAociAhPSBTX09LKQorICAgIHJldHVybiBRbmlsOworCisgIGlmICgh
TklMUCAoYmFkZ2UpICYmIFNUUklOR1AgKGJhZGdlKQorICAgICAgJiYgU1RSSU5HUCAoYmFja2dy
b3VuZCkgJiYgU1RSSU5HUCAoZm9yZWdyb3VuZCkpCisgICAgeworICAgICAgQ09MT1JSRUYgYmdf
cmdiOworICAgICAgQ09MT1JSRUYgZmdfcmdiOworICAgICAgdW5zaWduZWQgc2hvcnQgciwgZywg
YjsKKyAgICAgIGlmIChwYXJzZV9jb2xvcl9zcGVjIChTU0RBVEEgKGJhY2tncm91bmQpLCAmciwg
JmcsICZiKSkKKwliZ19yZ2IgPSBSR0IgKHIsIGIsIGIpOworICAgICAgZWxzZQorCXJldHVybiBR
bmlsOworICAgICAgaWYgKHBhcnNlX2NvbG9yX3NwZWMgKFNTREFUQSAoZm9yZWdyb3VuZCksICZy
LCAmZywgJmIpKQorCWZnX3JnYiA9IFJHQiAociwgYiwgYik7CisgICAgICBlbHNlCisJcmV0dXJu
IFFuaWw7CisKKyAgICAgIC8qIFByZXBhcmUgYSBzdHJpbmcgZm9yIGRyYXdpbmcgYW5kIGFzIGFs
dC10ZXh0LiAgKi8KKyAgICAgIExpc3BfT2JqZWN0IGJhZGdlX3V0ZjggPSBFTkNPREVfVVRGXzgg
KGJhZGdlKTsKKyAgICAgIGludCB3aWRlX2xlbiA9IHBNdWx0aUJ5dGVUb1dpZGVDaGFyIChDUF9V
VEY4LCAwLAorCQkJCQkgICBTU0RBVEEgKGJhZGdlX3V0ZjgpLAorCQkJCQkgICAtMSwgTlVMTCwg
MCk7CisgICAgICB3Y2hhcl90ICpiYWRnZV93ID0gYWxsb2NhICgod2lkZV9sZW4gKyAxKSAqIHNp
emVvZiAod2NoYXJfdCkpOworICAgICAgcE11bHRpQnl0ZVRvV2lkZUNoYXIgKENQX1VURjgsIDAs
IFNTREFUQSAoYmFkZ2VfdXRmOCksIC0xLAorCQkJICAgIChMUFdTVFIpIGJhZGdlX3csCisJCQkg
ICAgd2lkZV9sZW4pOworCisgICAgICAvKiBVc2UgdGhlIHNtYWxsIGljb24gc2l6ZSBXaW5kb3dz
IHN1Z2dlc3RzIHRvIG5vdCBoYXJkIGNvZGUgMTZ4MTYuICAqLworICAgICAgaW50IGljb25fd2lk
dGggPSBHZXRTeXN0ZW1NZXRyaWNzIChTTV9DWFNNSUNPTik7CisgICAgICBpbnQgaWNvbl9oZWln
aHQgPSBHZXRTeXN0ZW1NZXRyaWNzIChTTV9DWFNNSUNPTik7CisKKyAgICAgIEhEQyBod25kX2Rj
ID0gR2V0REMgKGh3bmQpOworICAgICAgSERDIGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDIChod25k
X2RjKTsKKworICAgICAgQklUTUFQVjVIRUFERVIgYmk7CisgICAgICBtZW1zZXQgKCZiaSwgMCwg
c2l6ZW9mIChiaSkpOworICAgICAgYmkuYlY1U2l6ZSA9IHNpemVvZiAoYmkpOworICAgICAgYmku
YlY1V2lkdGggPSBpY29uX3dpZHRoOworICAgICAgYmkuYlY1SGVpZ2h0ID0gLWljb25faGVpZ2h0
OyAvKiBOZWdhdGl2ZSBmb3IgYSB0b3AtZG93biBESUIuICAqLworICAgICAgYmkuYlY1UGxhbmVz
ID0gMTsKKyAgICAgIGJpLmJWNUJpdENvdW50ID0gMzI7CisgICAgICBiaS5iVjVDb21wcmVzc2lv
biA9IEJJX0JJVEZJRUxEUzsgIC8qIEVuYWJsZSB0aGUgbWFza3MgYmVsb3cuICAqLworICAgICAg
YmkuYlY1UmVkTWFzayAgID0gIDB4MDBGRjAwMDA7CisgICAgICBiaS5iVjVHcmVlbk1hc2sgPSAg
MHgwMDAwRkYwMDsKKyAgICAgIGJpLmJWNUJsdWVNYXNrICA9ICAweDAwMDAwMEZGOworICAgICAg
YmkuYlY1QWxwaGFNYXNrID0gIDB4RkYwMDAwMDA7CisKKyAgICAgIERXT1JEICpiaXRtYXBfcGl4
ZWxzOworICAgICAgSEJJVE1BUCBiaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uIChkYywgKEJJVE1B
UElORk8gKikgJmJpLAorCQkJCQkgRElCX1JHQl9DT0xPUlMsCisJCQkJCSAodm9pZCAqKikgJmJp
dG1hcF9waXhlbHMsCisJCQkJCSBOVUxMLCAwKTsKKyAgICAgIEhHRElPQkogb2xkX2JpdG1hcCA9
IFNlbGVjdE9iamVjdChkYywgYml0bWFwKTsKKworICAgICAgLyogRHJhdyBhIGNpcmNsZSBmaWxs
ZWQgd2l0aCBiZy4gICovCisgICAgICBIQlJVU0ggYmdfYnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNo
IChiZ19yZ2IpOworICAgICAgSEdESU9CSiBvbGRfYnJ1c2ggPSBTZWxlY3RPYmplY3QgKGRjLCBi
Z19icnVzaCk7CisgICAgICBFbGxpcHNlIChkYywgMCwgMCwgaWNvbl93aWR0aCwgaWNvbl9oZWln
aHQpOworICAgICAgU2VsZWN0T2JqZWN0IChkYywgb2xkX2JydXNoKTsKKyAgICAgIERlbGV0ZU9i
amVjdCAoYmdfYnJ1c2gpOworCisgICAgICAvKiBEZXJpdmUgYSBmb250IHNjYWxlZCB0byBmaXQg
dGhlIGljb24uICBGaXJzdCBmaW5kIHRoZSBzeXN0ZW0ncworCSBiYXNlIGZvbnQuICBUaGVuIHNj
YWxlIGl0IHRvIGZpdCBpY29uX2hlaWdodC4gICovCisgICAgICBIRk9OVCBiYXNlX2ZvbnQ7Cisg
ICAgICBCT09MIGNsZWFuX3VwX2Jhc2VfZm9udCA9IEZBTFNFOworICAgICAgaWYgKHN5c3RlbV9w
YXJhbWV0ZXJzX2luZm9fd19mbikKKwl7CisJICBOT05DTElFTlRNRVRSSUNTIG5jbTsKKwkgIG1l
bXNldCAoJm5jbSwgMCwgc2l6ZW9mIChuY20pKTsKKwkgIG5jbS5jYlNpemUgPSBzaXplb2YgKG5j
bSk7CisJICBTeXN0ZW1QYXJhbWV0ZXJzSW5mbyAoU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNp
emVvZiAobmNtKSwgJm5jbSwgMCk7CisJICBiYXNlX2ZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3Qg
KCZuY20ubGZTbUNhcHRpb25Gb250KTsKKwkgIGNsZWFuX3VwX2Jhc2VfZm9udCA9IFRSVUU7CisJ
fQorICAgICAgZWxzZQorCWJhc2VfZm9udCA9IChIRk9OVCkgR2V0U3RvY2tPYmplY3QgKERFRkFV
TFRfR1VJX0ZPTlQpOworICAgICAgaWYgKGNsZWFuX3VwX2Jhc2VfZm9udCkKKwlEZWxldGVPYmpl
Y3QgKGJhc2VfZm9udCk7CisKKyAgICAgIExPR0ZPTlQgbGY7CisgICAgICBHZXRPYmplY3QgKGJh
c2VfZm9udCwgc2l6ZW9mIChsZiksICZsZik7CisgICAgICBsZi5sZldlaWdodCA9IEZXX0JPTEQ7
CisgICAgICBsZi5sZk91dFByZWNpc2lvbiA9IE9VVF9PVVRMSU5FX1BSRUNJUzsKKyAgICAgIC8q
IENsZWFyVHlwZSBxdWFsaXR5IG5lZWRzIG9wcWF1ZSwgYnV0IHdlIGRyYXcgdHJhbnNwYXJlbnQu
ICAqLworICAgICAgbGYubGZRdWFsaXR5ID0gQU5USUFMSUFTRURfUVVBTElUWTsKKyAgICAgIC8q
IE5lZ2F0aXZlIGxmSGVpZ2h0IGluZGljYXRlcyBwaXhlbCB1bml0cyB2cy4gcG9zaXRpdmUgaW4g
cG9pbnRzLgorCSBVc2UgdGhlIExPR1BJWEVMU1kgcHgvaW4gb2YgdGhlIHByaW1hcnkgbW9uaXRv
ci4gICovCisgICAgICBsZi5sZkhlaWdodCA9IC1NdWxEaXYoaWNvbl9oZWlnaHQgLyAyLCAvKiBG
aXQgfjMgY2hhcnMuICAqLworCQkJICAgIDcyLAorCQkJICAgIEdldERldmljZUNhcHMgKEdldERD
IChOVUxMKSwgTE9HUElYRUxTWSkpOworICAgICAgLyogRW5zdXJlIGxmSGVpZ2h0IHBpeGVsIGlu
dGVycHJldGF0aW9uLiAgKi8KKyAgICAgIGludCBvbGRfbWFwX21vZGUgPSBTZXRNYXBNb2RlIChk
YywgTU1fVEVYVCk7CisgICAgICBIRk9OVCBzY2FsZWRfZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVj
dCAoJmxmKTsKKyAgICAgIEhHRElPQkogb2xkX2ZvbnQgPSBTZWxlY3RPYmplY3QgKGRjLCBzY2Fs
ZWRfZm9udCk7CisgICAgICBTZXRNYXBNb2RlIChkYywgb2xkX21hcF9tb2RlKTsKKworICAgICAg
LyogRHJhdyBiYWRnZSB0ZXh0LiAgKi8KKyAgICAgIFNldEJrTW9kZSAoZGMsIFRSQU5TUEFSRU5U
KTsKKyAgICAgIFNldFRleHRDb2xvciAoZGMsIGZnX3JnYik7CisgICAgICBSRUNUIHJlY3Q7Cisg
ICAgICByZWN0LmxlZnQgPSByZWN0LnRvcCA9IDA7CisgICAgICByZWN0LnJpZ2h0ID0gaWNvbl93
aWR0aDsKKyAgICAgIHJlY3QuYm90dG9tID0gaWNvbl9oZWlnaHQ7CisgICAgICBEcmF3VGV4dCAo
ZGMsIFNTREFUQSAoYmFkZ2VfdXRmOCksCisJCS0xLCAvKiBJbmRpY2F0ZSBudWxsLXRlcm1pbmF0
ZWQgc3RyaW5nLiAgKi8KKwkJJnJlY3QsCisJCURUX0NFTlRFUiB8IERUX1ZDRU5URVIgfCBEVF9T
SU5HTEVMSU5FIHwgRFRfTk9DTElQKTsKKyAgICAgIFNlbGVjdE9iamVjdCAoZGMsIG9sZF9mb250
KTsKKyAgICAgIERlbGV0ZU9iamVjdCAoc2NhbGVkX2ZvbnQpOworCisgICAgICAvKiBNYWtlIHRo
ZSBjaXJjbGUgYW5kIGl0cyB0ZXh0IG9wYXF1ZSBieSBzZXR0aW5nIHRoZSBhbHBoYQorCSBjaGFu
bmVsIG9uIGVhY2ggcGl4ZWwgZmFsbGluZyB3aXRoaW4gdGhlIGNpcmNsZS4gICovCisgICAgICBp
bnQgY2lyY2xlX2NlbnRlcl94ID0gaWNvbl93aWR0aCAvIDI7CisgICAgICBpbnQgY2lyY2xlX2Nl
bnRlcl95ID0gaWNvbl9oZWlnaHQgLyAyOworICAgICAgaW50IGNpcmNsZV9yYWRpdXMgPSAoaWNv
bl93aWR0aCA8IGljb25faGVpZ2h0CisJCQkgICA/IGljb25fd2lkdGgKKwkJCSAgIDogaWNvbl9o
ZWlnaHQpIC8gMiAtIDI7CisgICAgICBpbnQgY2lyY2xlX3JhZGl1c19zcSA9IGNpcmNsZV9yYWRp
dXMgKiBjaXJjbGVfcmFkaXVzOworICAgICAgRFdPUkQgKnBpeGVsOworICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBpY29uX2hlaWdodDsgKyt5KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGljb25fd2lkdGg7ICsreCkKKwkgIHsKKyAgICAgICAgICAgIGludCBkeCA9IHggLSBjaXJjbGVf
Y2VudGVyX3g7CisgICAgICAgICAgICBpbnQgZHkgPSB5IC0gY2lyY2xlX2NlbnRlcl95OworICAg
ICAgICAgICAgaWYgKGR4ICogZHggKyBkeSAqIGR5IDw9IGNpcmNsZV9yYWRpdXNfc3EpCisJICAg
ICAgeworCQkgIHBpeGVsID0gYml0bWFwX3BpeGVscyArICh5ICogaWNvbl93aWR0aCArIHgpOwor
CQkgICpwaXhlbCB8PSAweGZmMDAwMDAwOyAvKiBGbGlwIHRoZSAweEFBUlJHR0JCIGFscGhhIGNo
YW5uZWwuICAqLworCSAgICAgIH0KKwkgIH0KKworICAgICAgLyogRHVtbXkgbW9ub2Nocm9tZSBi
aXRtYXAgbWFzaywgaWdub3JlZCB3aGVuIHRoZSBjb2xvciBiaXRtYXAgaGFzCisJIGFuIGFscGhh
IGNoYW5uZWwsIGJ1dCBuZWVkZWQgdG8gc2F0aXNmeSBDcmVhdGVJY29uSW5kaXJlY3QuICAqLwor
ICAgICAgSEJJVE1BUCBtYXNrX2JpdG1hcCA9IENyZWF0ZUJpdG1hcCAoaWNvbl93aWR0aCwgaWNv
bl9oZWlnaHQsIDEsIDEsIE5VTEwpOworCisgICAgICAvKiBodHRwczovL2xlYXJuLm1pY3Jvc29m
dC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWNyZWF0ZWlj
b25pbmRpcmVjdAorCSBoYm1NYXNrIGFuZCBoYm1Db2xvciBtZW1iZXJzIG9mIHRoZSBJQ09OSU5G
TyBzdHJ1Y3R1cmUgc2hvdWxkCisJIG5vdCBhbHJlYWR5IGJlIHNlbGVjdGVkIGludG8gYSBkZXZp
Y2UgY29udGV4dC4gICovCisgICAgICBTZWxlY3RPYmplY3QgKGRjLCBvbGRfYml0bWFwKTsKKwor
ICAgICAgSUNPTklORk8gaWNvbl9pbmZvOworICAgICAgbWVtc2V0ICgmaWNvbl9pbmZvLCAwLCBz
aXplb2YgKGljb25faW5mbykpOworICAgICAgaWNvbl9pbmZvLmZJY29uID0gVFJVRTsKKyAgICAg
IGljb25faW5mby5oYm1NYXNrID0gbWFza19iaXRtYXA7CisgICAgICBpY29uX2luZm8uaGJtQ29s
b3IgPSBiaXRtYXA7CisKKyAgICAgIEhJQ09OIGljb24gPSBDcmVhdGVJY29uSW5kaXJlY3QgKCZp
Y29uX2luZm8pOworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRPdmVybGF5SWNvbiAo
dGFza19iYXJfbGlzdCwgaHduZCwgaWNvbiwgYmFkZ2Vfdyk7CisKKyAgICAgIERlc3Ryb3lJY29u
IChpY29uKTsKKyAgICAgIERlbGV0ZU9iamVjdCAobWFza19iaXRtYXApOworICAgICAgRGVsZXRl
T2JqZWN0IChiaXRtYXApOworICAgICAgRGVsZXRlREMgKGRjKTsKKyAgICAgIFJlbGVhc2VEQyAo
aHduZCwgaHduZF9kYyk7CisgICAgfQorICBlbHNlCisgICAgdGFza19iYXJfbGlzdC0+bHBWdGJs
LT5TZXRPdmVybGF5SWNvbiAodGFza19iYXJfbGlzdCwgaHduZCwgTlVMTCwgTlVMTCk7CisKKyAg
dGFza19iYXJfbGlzdC0+bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICByZXR1cm4g
UXQ7Cit9CisKK0RFRlVOICgidzMyLXJlcXVlc3QtdXNlci1hdHRlbnRpb24iLAorICAgICAgIEZ3
MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAgICAgICBTdzMyX3JlcXVlc3RfdXNlcl9hdHRl
bnRpb24sCisgICAgICAgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIEZsYXNoIHRoZSBzZWxlY3Rl
ZCBmcmFtZSdzIHRhc2tiYXIgaWNvbiBhbmQvb3IgaXRzIHdpbmRvdy4KK0lmIFVSR0VOQ1kgaXMg
bmlsLCBjYW5jZWwgdGhlIHJlcXVlc3QsIGlmIGFueS4gIElmIFVSR0VOQ1kgaXMgdGhlIHN5bWJv
bAorYGluZm9ybWF0aW9uYWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uLiAgSWYgVVJHRU5DWSBp
cyB0aGUgc3ltYm9sCitgY3JpdGljYWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uIGFuZCB0aGUg
ZnJhbWUuICBXaW5kb3dzIHN0b3BzCitmbGFzaGluZyBpZiB0aGUgdXNlciBmb2N1c2VzIHRoZSBm
cmFtZS4gIERvIG5vdGhpbmcgaWYgV2luZG93cyBkb2VzIG5vdAorc3VwcG9ydCBGbGFzaFdpbmRv
d0V4IGFuZCByZXR1cm4gbmlsLCBvdGhlcndpc2UgcmV0dXJuIHQuICBEbyBub3RoaW5nIGlmCit0
aGUgZnJhbWUgaXMgbm90ICh5ZXQpIGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdyBoYW5kbGUuICAq
LykKKyAgKExpc3BfT2JqZWN0IHVyZ2VuY3kpCit7CisgIGlmIChmbGFzaF93aW5kb3dfZXhfZm4g
PT0gTlVMTCkKKyAgICByZXR1cm4gUW5pbDsKKworICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNU
RURfRlJBTUUgKCk7CisgIEhXTkQgaHduZCA9IE5VTEw7CisKKyAgaWYgKEZSQU1FX1czMl9QIChz
ZikgJiYgRlJBTUVfTElWRV9QIChzZikpCisgICAgaHduZCA9IEZSQU1FX1czMl9XSU5ET1cgKHNm
KTsKKworICBpZiAoaHduZCA9PSBOVUxMKQorICAgIHJldHVybiBRbmlsOworCisgIEZMQVNIV0lO
Rk8gZmxhc2hfaW5mbzsKKyAgZmxhc2hfaW5mby5jYlNpemUgPSBzaXplb2YoZmxhc2hfaW5mbyk7
CisgIGZsYXNoX2luZm8udUNvdW50ID0gMDsKKyAgZmxhc2hfaW5mby5kd1RpbWVvdXQgPSAwOwor
ICBmbGFzaF9pbmZvLmh3bmQgPSBod25kOworICBpZiAoIU5JTFAgKHVyZ2VuY3kpICYmIFNZTUJP
TFAgKHVyZ2VuY3kpKQorICAgIHsKKyAgICAgIC8qIFRoZSBpbnRlbmRlZCBjYWxsZXIsICdzeXN0
ZW0tdGFza2Jhci1hdHRlbnRpb24nLCBoYXMgYW4KKwkgb3B0aW9uYWwgdGltZXIgdG8gY2xlYXIg
dGhlIGF0dGVudGlvbiBpbmRpY2F0b3Igc28gdGhpcyB3aWxsCisJIGZsYXNoIHVudGlsIGNsZWFy
ZWQgdmlhIHRoZSB0aW1lciwgb3IgdGhlIHdpbmRvdyBjb21lcyB0byB0aGUKKwkgZm9yZWdyb3Vu
ZC4gIEZvciBpbmZvcm1hdGlvbmFsIGF0dGVudGlvbiwgZmxhc2ggdGhlIHRyYXkgaWNvbi4KKwkg
Rm9yIGNyaXRpY2FsIGF0dGVudGlvbiwgZmxhc2ggdGhlIHRyYXkgaWNvbiBhbmQgdGhlIHdpbmRv
dy4gICovCisgICAgICBpZiAoRVEgKHVyZ2VuY3ksIFFpbmZvcm1hdGlvbmFsKSkKKwlmbGFzaF9p
bmZvLmR3RmxhZ3MgPSBGTEFTSFdfVFJBWSB8IEZMQVNIV19USU1FUk5PRkc7CisgICAgICBlbHNl
IGlmIChFUSAodXJnZW5jeSwgUWNyaXRpY2FsKSkKKwlmbGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFT
SFdfQUxMIHwgRkxBU0hXX1RJTUVSTk9GRzsKKyAgICB9CisgIGVsc2UKKyAgICBmbGFzaF9pbmZv
LmR3RmxhZ3MgPSBGTEFTSFdfU1RPUDsKKworICBmbGFzaF93aW5kb3dfZXhfZm4gKCZmbGFzaF9p
bmZvKTsKKyAgcmV0dXJuIFF0OworfQorCitERUZVTiAoInczMi1wcm9ncmVzcy1pbmRpY2F0b3Ii
LAorICAgICAgIEZ3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIFN3MzJfcHJvZ3Jlc3Nf
aW5kaWNhdG9yLAorICAgICAgIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBTaG93IGEgcHJvZ3Jl
c3MgYmFyIG9uIHRoZSBzZWxlY3RlZCBmcmFtZSdzIHRhc2tiYXIgaWNvbi4KK1BST0dSRVNTIGlz
IGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAuICBJZiBQUk9HUkVTUyBpcyBuaWwsIHJl
bW92ZQordGhlIHByb2dyZXNzIGluZGljYXRvci4gIERvIG5vdGhpbmcgaWYgV2luZG93cyBkb2Vz
IG5vdCBzdXBwb3J0IHRoZQorSVRhc2tiYXJMaXN0MyBpbnRlcmZhY2UgYW5kIHJldHVybiBuaWws
IG90aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcKK2lmIHRoZSBzZWxlY3RlZCBmcmFtZSBp
cyBub3QgKHlldCkgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93IGhhbmRsZSAgKi8pCisgIChMaXNw
X09iamVjdCBwcm9ncmVzcykKK3sKKyAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1F
ICgpOworICBIV05EIGh3bmQgPSBOVUxMOworCisgIGlmIChGUkFNRV9XMzJfUCAoc2YpICYmIEZS
QU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFNRV9XMzJfV0lORE9XIChzZik7CisKKyAg
aWYgKGh3bmQgPT0gTlVMTCkKKyAgICByZXR1cm4gUW5pbDsKKworICBDb0luaXRpYWxpemUgKE5V
TEwpOworICBJVGFza2Jhckxpc3QzICp0YXNrX2Jhcl9saXN0ID0gTlVMTDsKKyAgSFJFU1VMVCBy
ID0gQ29DcmVhdGVJbnN0YW5jZSgmQ0xTSURfVGFza2Jhckxpc3QsCisJCQkgICAgICAgTlVMTCwK
KwkJCSAgICAgICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwKKwkJCSAgICAgICAmSUlEX0lUYXNrYmFy
TGlzdDMsCisJCQkgICAgICAgKHZvaWQgKiopJnRhc2tfYmFyX2xpc3QpOworICBpZiAociAhPSBT
X09LKQorICAgIHJldHVybiBRbmlsOworCisgIC8qIFNjYWxlIHRhc2sgYmFyIHByb2dyZXNzIGZy
b20gMC4wLTEuMCB0byAwLTEwMC4gICovCisgIFVMT05HTE9ORyBhZGpfcHJvZ3Jlc3MgPSAwOwor
ICBpZiAoIU5JTFAgKHByb2dyZXNzKSAmJiBGTE9BVFAgKHByb2dyZXNzKSkKKyAgICAgIGFkal9w
cm9ncmVzcyA9IChVTE9OR0xPTkcpICgxMDAuMCAqCisJCQkJICBYRkxPQVRfREFUQSAocHJvZ3Jl
c3MpKTsKKyAgaWYgKGFkal9wcm9ncmVzcyA+IDApCisgICAgeworICAgICAgdGFza19iYXJfbGlz
dC0+bHBWdGJsLT5TZXRQcm9ncmVzc1N0YXRlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAg
aHduZCwgVEJQRl9OT1JNQUwpOworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9n
cmVzc1ZhbHVlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgYWRqX3Byb2dyZXNz
LCAxMDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRi
bC0+U2V0UHJvZ3Jlc3NTdGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIGh3bmQsIFRC
UEZfTk9QUk9HUkVTUyk7CisgICAgfQorCisgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+UmVsZWFz
ZSh0YXNrX2Jhcl9saXN0KTsKKyAgcmV0dXJuIFF0OworfQorCisjZW5kaWYgLyogV0lORE9XU05U
ICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogCQkJICAgIEluaXRpYWxpemF0aW9uCiAgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCkBAIC0xMTUxMSw2ICsxMTgyNiwxNSBAQCBzeW1zX29mX3czMmZucyAodm9pZCkKICAg
REVGU1lNIChRY2Fwc2xvY2ssICJjYXBzbG9jayIpOwogICBERUZTWU0gKFFrcF9udW1sb2NrLCAi
a3AtbnVtbG9jayIpOwogICBERUZTWU0gKFFzY3JvbGwsICJzY3JvbGwiKTsKKworICAjaWZkZWYg
V0lORE9XU05UCisgIC8qIFRhc2tiYXIgaW5kaWNhdG9ycyBzdXBwb3J0LiAgKi8KKyAgZGVmc3Vi
ciAoJlN3MzJfYmFkZ2UpOworICBkZWZzdWJyICgmU3czMl9wcm9ncmVzc19pbmRpY2F0b3IpOwor
ICBkZWZzdWJyICgmU3czMl9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uKTsKKyAgREVGU1lNIChRaW5m
b3JtYXRpb25hbCwgImluZm9ybWF0aW9uYWwiKTsKKyAgREVGU1lNIChRY3JpdGljYWwsICJjcml0
aWNhbCIpOworICAjZW5kaWYKIH0KIAogDApAQCAtMTE3OTksNiArMTIxMjMsOSBAQCBnbG9iYWxz
X29mX3czMmZucyAodm9pZCkKICAgU2V0R2VzdHVyZUNvbmZpZ19mbgogICAgID0gKFNldEdlc3R1
cmVDb25maWdfcHJvYykgZ2V0X3Byb2NfYWRkciAodXNlcjMyX2xpYiwKIAkJCQkJICAgICAiU2V0
R2VzdHVyZUNvbmZpZyIpOworICBmbGFzaF93aW5kb3dfZXhfZm4KKyAgICA9IChGbGFzaFdpbmRv
d0V4X1Byb2MpIGdldF9wcm9jX2FkZHIgKHVzZXIzMl9saWIsCisJCQkJCSAgIkZsYXNoV2luZG93
RXgiKTsKIAogICB7CiAgICAgSE1PRFVMRSBpbW0zMl9saWIgPSBHZXRNb2R1bGVIYW5kbGUgKCJp
bW0zMi5kbGwiKTsKZGlmZiAtLWdpdCBhL3N5c3RlbS10YXNrYmFyLnRleGkgYi9zeXN0ZW0tdGFz
a2Jhci50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMTgzZDUw
ZjU4MgotLS0gL2Rldi9udWxsCisrKyBiL3N5c3RlbS10YXNrYmFyLnRleGkKQEAgLTAsMCArMSwy
NjAgQEAKK1xpbnB1dCB0ZXhpbmZvICAgIEBjIC0qLXRleGluZm8tKi0KKworQHNldGZpbGVuYW1l
IC4uLy4uL2luZm8vZG9jay1tb2RlLmluZm8KK0BzZXR0aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIg
RmVhdHVyZXMKK0BpbmNsdWRlIGRvY3N0eWxlLnRleGkKKworQGNvcHlpbmcKK1RoaXMgZmlsZSBk
ZXNjcmliZXMgRW1hY3Mgc3lzdGVtIEdVSSB0YXNrYmFyIGludGVncmF0aW9uLgorCitDb3B5cmln
aHQgQGNvcHlyaWdodHt9IDIwMjUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK0Bx
dW90YXRpb24KK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9v
ciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBE
b2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubworSW52YXJp
YW50IFNlY3Rpb25zLCB3aXRoIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBgYEEgR05VIE1h
bnVhbCwnJworYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYXMgaW4gKGEpIGJlbG93LiAg
QSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzCitpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxl
ZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEJh
Y2stQ292ZXIgVGV4dCBpczogYGBZb3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBjb3B5IGFuZAorbW9k
aWZ5IHRoaXMgR05VIG1hbnVhbC4nJworQGVuZCBxdW90YXRpb24KK0BlbmQgY29weWluZworCitA
ZGlyY2F0ZWdvcnkgRW1hY3MgbWlzYyBmZWF0dXJlcworQGRpcmVudHJ5CisqIFN5c3RlbSBHVUkg
VGFza2JhcjogKHRhc2tiYXIpLiAgICAgICBTeXN0ZW0gR1VJIHRhc2tiYXIgaW50ZWdyYXRpb24u
CitAZW5kIGRpcmVudHJ5CisKK0B0aXRsZXBhZ2UKK0B0aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIg
SW50ZWdyYXRpb24KK0BwYWdlCitAdnNraXAgMHB0IHBsdXMgMWZpbGxsCitAaW5zZXJ0Y29weWlu
ZworQGVuZCB0aXRsZXBhZ2UKKworQGNvbnRlbnRzCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitA
dG9wIEVtYWNzIFN5c3RlbSBHVUkgVGFza2JhciBJbnRlZ3JhdGlvbgorVGhpcyBtYW51YWwgZGVz
Y3JpYmVzIEVtYWNzIHN5c3RlbSBHVUkgdGFza2JhciBpbnRlZ3JhdGlvbi4KKworVGhlIEBkZm57
c3lzdGVtLXRhc2tiYXJ9IHBhY2thZ2UgYWRkcyBFbWFjcyBpbnRlZ3JhdGlvbiB3aXRoIHN5c3Rl
bSBHVUkKK3Rhc2tiYXIgKGFsc28gY2FsbGVkIGRvY2tzIG9yIGxhdW5jaGVycyBvciBzb21ldGhp
bmcgc2ltaWxhcikgdG8gZGlzcGxheQorYSB0YXNrYmFyIGljb24gImJhZGdlIiBvdmVybGF5LCBh
IHByb2dyZXNzIGJhciByZXBvcnQgb3ZlcmxheSwgYWxlcnQgdGhlCit1c2VyIHRoYXQgYW4gRW1h
Y3Mgc2Vzc2lvbiBuZWVkcyBhdHRlbnRpb24sIG9mdGVuIGJ5IGZsYXNoaW5nIG9yCitib3VuY2lu
ZyB0aGUgRW1hY3MgYXBwbGljYXRpb24gaWNvbi4gIFRhc2tiYXIgY2FwYWJsZSBzeXN0ZW1zIGFy
ZQorR05VL0xpbnV4IHZpYSBELUJ1cywgbWFjT1MvR05Vc3RlcCAxMC41KywgTVMtV2luZG93cyA3
Ky4KKworT24gR05VL0xpbnV4LCB0aGUgdmlzaWJsZSBlZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRo
ZSBkZXN0aW5hdGlvbnMKK2RldGVybWluZWQgYnkgeW91ciBzaGVsbCBleHRlbnNpb24sIG1vc3Qg
b2Z0ZW4gdGhlIGFwcGxpY2F0aW9uIGxhdW5jaGVyCitvciBkb2NrIHBhbmVsLCBvciB0aGUgdG9w
IHBhbmVsLiAgRWZmZWN0cyBhcmUgZ2xvYmFsIGZvciBhbiBFbWFjcworaW5zdGFuY2UuCisKK09u
IG1hY09TL0dOVXN0ZXAsIHRoZSBlZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRoZSBEb2NrIGFuZCBp
biB0aGUgQXBwCitTd2l0Y2hlci4gIEVmZmVjdHMgYXJlIGdsb2JhbCBmb3IgYW4gRW1hY3MgaW5z
dGFuY2UuCisKK09uIE1TLVdpbmRvd3MsIHRoZSBlZmZlY3RzIGFwcGVhciBvbiB0aGUgdGFza2Jh
ci4gIEVmZmVjdHMgYXJlCithc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIGZyb20gd2hpY2ggdGhl
eSBhcmUgaW5pdGlhdGVkLgorCitAaW5zZXJ0Y29weWluZworCitAbWVudQorKiBPdmVydmlldzo6
ICAgICAgICAgICAgICAgICAgICBPdmVydmlldyBvZiBzeXN0ZW0gR1VJIHRhc2tiYXIgaW50ZWdy
YXRpb24KKyogUHJlcmVxdWlzaXRlczo6CisqIFVzZXIgT3B0aW9uczo6CisqIEZ1bmN0aW9uIFJl
ZmVyZW5jZTo6CisqIFN5c3RlbSBUYXNrYmFyIFVzYWdlIEV4YW1wbGVzOjoKKyogR05VIEZyZWUg
RG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogIFRoZSBsaWNlbnNlIGZvciB0aGlzIGRvY3VtZW50YXRp
b24uCisqIEZ1bmN0aW9uIEluZGV4OjoKKyogVmFyaWFibGUgSW5kZXg6OgorQGVuZCBtZW51CitA
ZW5kIGlmbm90dGV4CisKK0Bub2RlIE92ZXJ2aWV3CitAY2hhcHRlciBPdmVydmlldworCitUaGUg
U3lzdGVtIFRhc2tiYXIgcGFja2FnZSBwcm92aWRlcyB0aGVzZSBzeXN0ZW0gR1VJIHRhc2tiYXIg
ZmVhdHVyZXM6CisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtIEljb24gYmFkZ2UKK0BpdGVtIElj
b24gcHJvZ3Jlc3MgaW5kaWNhdG9yCitAaXRlbSBJY29uIGF0dGVudGlvbiBhbGVydAorQGVuZCBp
dGVtaXplCisKK0Bub2RlIFByZXJlcXVpc2l0ZXMKK0BjaGFwdGVyIFByZXJlcXVpc2l0ZXMKKwor
bWFjT1MvR05Vc3RlcCwgYW5kIE1TLVdpbmRvd3MgdXNlcnMgbmVlZCBubyBzcGVjaWFsIGNvbmZp
Z3VyYXRpb24uCisKK09uIEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1wbGVtZW50YXRpb24gaXMg
dmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCitzaGVsbHMgYW5kL29yIHNoZWxsIGV4dGVuc2lvbnMg
c3VjaCBhcworQGZpbGV7aHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRlbnNpb24vMzA3
L2Rhc2gtdG8tZG9jay99IHRoYXQKK2ltcGxlbWVudCBVYnVudHUncyBVbml0eSBsYXVuY2hlciBz
cGVjIHdoaWNoIHlvdSBjYW4gcmVhZCBtb3JlIGFib3V0CitoZXJlIEBmaWxle2h0dHBzOi8vd2lr
aS51YnVudHUuY29tL1VuaXR5L0xhdW5jaGVyQVBJfS4KKworQG5vZGUgVXNlciBPcHRpb25zCitA
Y2hhcHRlciBVc2VyIE9wdGlvbnMKKworQGRlZm9wdCBzeXN0ZW0tdGFza2Jhci1jbGVhci1hdHRl
bnRpb24tb24tZnJhbWUtZm9jdXMKK1RoZSB2YXJpYWJsZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1j
bGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXN9IGNhbiBiZQorY3VzdG9taXplZCB0byBjbGVh
ciB0aGUgdGFza2JhciBpY29uIGF0dGVudGlvbiBpbmRpY2F0b3Igd2hlbiBhbnkgRW1hY3MKK0dV
SSBmcmFtZSBpcyBmb2N1c2VkLiAgVGhpcyBpcyB1c2VmdWwgb24gR05VL0xpbnV4IGFuZCBpZ25v
cmVkIG9uIGJhY2sKK2VuZHMgdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBhdHRlbnRpb24g
aW5kaWNhdG9yIChNUy1XaW5kb3dzIGFuZAorbWFjT1MvR05Vc3RlcCkuICBJdCBkZWZhdWx0cyB0
byBAY29kZXt0fS4gIEN1c3RvbWl6ZSB0aGlzIGJlZm9yZQorZW5hYmxpbmcgQGNvZGV7c3lzdGVt
LXRhc2tiYXItbW9kZX0uCitAZW5kIGRlZm9wdAorCitAZGVmb3B0IHN5c3RlbS10YXNrYmFyLWRi
dXMtZGVza3RvcC1maWxlLW5hbWUKK1RoZSB2YXJpYWJsZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1k
YnVzLWRlc2t0b3AtZmlsZS1uYW1lfSBpcyBjb25zdWx0ZWQKK29uIEdOVS9MaW51eCBELUJ1cyBz
eXN0ZW1zLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gaW5kaWNhdGUgd2hpY2gKK2Rlc2t0b3Ag
ZmlsZSBuYW1lIGlkZW50aWZpZXMgeW91ciBFbWFjcyBpbnN0YW5jZS4gIEl0IGRlZmF1bHRzIHRv
IHRoZQorZGVza3RvcCBmaWxlIGJhc2UgbmFtZSBAY29kZXsiZW1hY3NjbGllbnQifSBhbmQgbWln
aHQgbmVlZCB0byBiZSBzZXQgdG8KK0Bjb2RleyJlbWFjcyJ9IG9uIHlvdXIgc3lzdGVtLiAgRW1h
Y3MgaW5zdGFsbGVkIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMKK2NhbiB2YXJ5IG9uIHRoZWlyIG5h
bWluZyBzY2hlbWUgYW5kIG9mdGVuIGluY2x1ZGUgZGVza3RvcCBmaWxlcyBmb3IKK2JvdGguCitA
ZW5kIGRlZm9wdAorCitAZGVmb3B0IHN5c3RlbS10YXNrYmFyLWRidXMtdGltZW91dAorVGhlIHZh
cmlhYmxlIEBjb2Rle3N5c3RlbS10YXNrYmFyLWRidXMtdGltZW91dH0gaXMgY29uc3VsdGVkIG9u
CitHTlUvTGludXggRC1CdXMgc3lzdGVtcywgYW5kIGNhbiBiZSBjdXN0b21pemVkIHRvIHNwZWNp
ZnkgdGhlIG51bWJlciBvZgorbWlsbGlzZWNvbmRzIEVtYWNzIHdpbGwgd2FpdCBmb3IgRC1CdXMg
cmVzcG9uc2VzIGJlZm9yZSB0aW1pbmcgb3V0IGFuZAorY29uc2lkZXJpbmcgbWVzc2FnZXMgdW5k
ZWxpdmVyYWJsZS4gIEl0IGRlZmF1bHRzIHRvIG5pbCB3aGljaCB3aWxsIHVzZQordGhlIEQtQnVz
IHBhY2thZ2UgZGVmYXVsdCBvZiAyNTAwMCBtaWxsaXNlY29uZHMsIHdoaWNoIHNlZSwKK0BweHJl
ZntUb3AsLCwgZGJ1cywgRC1CdXMgaW50ZWdyYXRpb24gaW4gRW1hY3N9LgorQGVuZCBkZWZvcHQK
KworQG5vZGUgRnVuY3Rpb24gUmVmZXJlbmNlCitAY2hhcHRlciBGdW5jdGlvbiBSZWZlcmVuY2UK
KworQGRlZmZuIHN5c3RlbS10YXNrYmFyLW1vZGUKK0Bjb2Rle3N5c3RlbS10YXNrYmFyLW1vZGV9
IG11c3QgYmUgZW5hYmxlZCB0byBpbml0aWFsaXplIHRoZSBzeXN0ZW0gYmFjaworZW5kIGJlZm9y
ZSBjYWxsaW5nIGFueSBvZiB0aGlzIHBhY2thZ2UncyBmdW5jdGlvbnMuICBPbiBhIEdOVS9MaW51
eAorRC1CdXMgc3lzdGVtLCB0aGUgcmVxdWlyZWQgRC1CdXMgcHJvdG9jb2wgaXMgcHJvYmVkIGFu
ZCBpZiBub3QKK2F2YWlsYWJsZSwgYW4gZXJyb3IgaXMgc2lnbmFsZWQuCitAZW5kIGRlZmZuCisK
K0BkZWZ1biBzeXN0ZW0tdGFza2Jhci1iYWRnZSAmb3B0aW9uYWwgY291bnQKK0Rpc3BsYXkgdGhl
IHRhc2tiYXIgaWNvbiBiYWRnZSBzZXQgdG8gQHZhcntjb3VudH0uICBJZiBAdmFye2NvdW50fSBp
cworQGNvZGV7bmlsfSwgY2xlYXIgdGhlIGJhZGdlLiAgQHZhcntjb3VudH0gaXMgdHlwaWNhbGx5
IGFuIGludGVnZXIuCisKK0lmIEB2YXJ7Y291bnR9IGlzIGEgc3RyaW5nLCBpdCBpcyBjb252ZXJ0
ZWQgdG8gYW4gaW50ZWdlciBvbiBzeXN0ZW1zCit0aGF0IGRvIG5vdCBzdXBwb3J0IHN0cmluZyBi
YWRnZXMsIHN1Y2ggYXMgR05VL0xpbnV4IEQtQnVzLCBhbmQgdGhlCitiYWRnZSB3aWxsIGJlIGNs
ZWFyZWQgaWYgdGhlIHN0cmluZyBpcyBhbiBpbnZhbGlkIGludGVnZXIKK3JlcHJlc2VudGF0aW9u
LiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3RyaW5ncywgc3VjaCBhcyBtYWNPUy9HTlVzdGVw
CithbmQgTVMtV2luZG93cywgdGhlIGJhZGdlIGlzIHNldCB0byB0aGUgc3RyaW5nIGFuZCBkaXNw
bGF5ZWQsIGFuZCBtYXkgYmUKK3RydW5jYXRlZCB0byBmaXQgdGhlIHZpc3VhbCBzcGFjZSBhbGxv
Y2F0ZWQgYnkgdGhlIHN5c3RlbS4gIEluIGFueSBjYXNlLAoraWYgdGhlIHN0cmluZyBpcyBlbXB0
eSwgY2xlYXIgdGhlIGJhZGdlLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gc3lzdGVtLXRhc2tiYXIt
YXR0ZW50aW9uICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQKK0Rpc3BsYXkgYSB0YXNrYmFyIGlj
b24gYWxlcnQuICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYm91bmNpbmcgb3IKK2ZsYXNoaW5nIHRh
c2tiYXIgaWNvbi4gIE9uIHNvbWUgYmFjayBlbmRzLCBhdHRlbnRpb24gd2lsbCBiZSBkaXNwbGF5
ZWQKK29ubHkgaWYgRW1hY3MgaXMgbm90IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBhcHBsaWNhdGlv
bi4KKworSWYgQHZhcnt1cmdlbmN5fSBpcyB0aGUgc3ltYm9sIEBjb2Rle2luZm9ybWF0aW9uYWx9
LCBub3JtYWwgYXR0ZW50aW9uIGlzCityZXF1ZXN0ZWQuICBJZiBAdmFye3VyZ2VuY3l9IGlzIHRo
ZSBzeW1ib2wgQGNvZGV7Y3JpdGljYWx9LCB1cmdlbnQKK2F0dGVudGlvbiBpcyByZXF1ZXN0ZWQu
ICBJZiBAdmFye3VyZ2VudH0gaXMgQGNvZGV7bmlsfSwgY2xlYXIgdGhlCithdHRlbnRpb24gaW5k
aWNhdG9yLgorCitFbWFjcyB3YWl0cyBAdmFye3RpbWVvdXR9IHNlY29uZHMgYmVmb3JlIGF1dG9t
YXRpY2FsbHkgcmVtb3ZpbmcgdGhlCitpbmRpY2F0b3IuICBJZiBAdmFye3RpbWVvdXR9IGlzIEBj
b2Rle25pbH0sIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yIHdpbGwKK2JlIGNsZWFyZWQgYnkgdGhl
IHN5c3RlbSBvciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWdhaW4gcGFzc2luZyBhCitAY29k
ZXtuaWx9IHVyZ2VuY3kuCisKK09uIHNvbWUgYmFjayBlbmRzLCBhbiBAY29kZXtpbmZvcm1hdGlv
bmFsfSBhdHRlbnRpb24gcmVxdWVzdCB3aWxsIHRpbWUKK291dCBhdXRvbWF0aWNhbGx5LiAgSW4g
Y29udHJhc3QsIGEgQGNvZGV7Y3JpdGljYWx9IHJlcXVlc3QgcmVxdWlyZXMgdGhhdAordGhlIHVz
ZXIgYnJpbmcgRW1hY3MgaW50byBmb2N1cyBhbmQgd2lsbCBub3QgdGltZSBvdXQuICBPbiBzb21l
IGJhY2sKK2VuZHMsIEBjb2Rle2NyaXRpY2FsfSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIEBjb2Rl
e2luZm9ybWF0aW9uYWx9LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gc3lzdGVtLXRhc2tiYXItcHJv
Z3Jlc3MgJm9wdGlvbmFsIHByb2dyZXNzCitTZXQgdGhlIHRhc2tiYXIgaWNvbiB0byBpbmRpY2F0
ZSBwcm9ncmVzcyBvZiBhIGxvbmctcnVubmluZyBvcGVyYXRpb24uCitUYXNrYmFyIHByb2dyZXNz
IGlzIHR5cGljYWxseSByZXByZXNlbnRlZCBhcyBhIGdyYXBoaWNhbCBiYXIgdGhhdAorZnJhY3Rp
b25hbGx5IHNwYW5zIHRoZSB0YXNrYmFyIGljb24uICBAdmFye3Byb2dyZXNzfSBpcyBhIGZsb2F0
IGluIHRoZQorcmFuZ2UgMC4wIHRvIDEuMC4gIElmIEB2YXJ7cHJvZ3Jlc3N9IGlzIG5pbCwgcmVt
b3ZlIHRoZSBwcm9ncmVzcworaW5kaWNhdG9yLgorCitAQEAgVGhlIHR3byBtYWNyb3MgYmVsb3cg
Y2FuIGJlIHVzZWQgdG8gc3VwcGxlbWVudCBjb252ZW50aW9uYWwgRW1hY3MKK3Byb2dyZXNzIHJl
cG9ydGluZyBpbiB0aGUgZWNobyBhcmVhLiAgQHhyZWZ7UHJvZ3Jlc3MsLCBEaXNwbGF5LCBlbGlz
cCwgVGhlIEVtYWNzIExpc3AKK1JlZmVyZW5jZSBNYW51YWx9LgorCitAZW5kIGRlZnVuCisKK0Bk
ZWZtYWMgZG90aW1lcy13aXRoLXN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyICh2YXIg
Y291bnQgW3Jlc3VsdF0pIHJlcG9ydGVyLW9yLW1lc3NhZ2UgYm9keUBkb3Rze30KK1RoaXMgaXMg
YSBjb252ZW5pZW5jZSBtYWNybyBhbmFsb2dvdXMgdG8KK0Bjb2Rle2RvdGltZXMtd2l0aC1wcm9n
cmVzcy1yZXBvcnRlcn0gYW5kIHdvcmtzIHRoZSBzYW1lIHdheSBhcworQGNvZGV7ZG90aW1lc30g
ZG9lcywgYnV0IGFsc28gcmVwb3J0cyBsb29wIHByb2dyZXNzIG9uIHRoZSBFbWFjcyB0YXNrYmFy
CitpY29uLiBAQEAgQHhyZWZ7UHJvZ3Jlc3MsLCBEaXNwbGF5LCBlbGlzcCwgVGhlIEVtYWNzIExp
c3AgUmVmZXJlbmNlCitNYW51YWx9LgorQGVuZCBkZWZtYWMKKworQGRlZm1hYyBkb2xpc3Qtd2l0
aC1zeXN0ZW0tdGFza2Jhci1wcm9ncmVzcy1yZXBvcnRlciAodmFyIGxpc3QgW3Jlc3VsdF0pIHJl
cG9ydGVyLW9yLW1lc3NhZ2UgYm9keUBkb3Rze30KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBtYWNy
byBhbmFsb2dvdXMgdG8KK0Bjb2Rle2RvbGlzdC13aXRoLXByb2dyZXNzLXJlcG9ydGVyfSBhbmQg
d29ya3MgdGhlIHNhbWUgd2F5IGFzCitAY29kZXtkb2xpc3R9IGRvZXMsIGJ1dCBhbHNvIHJlcG9y
dHMgbG9vcCBwcm9ncmVzcyBvbiB0aGUgRW1hY3MgdGFza2JhcgoraWNvbi4gIEBAQCBAeHJlZntQ
cm9ncmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUgRW1hY3MgTGlzcCBSZWZlcmVuY2UKK01hbnVh
bH0uCitAZW5kIGRlZm1hYworCitAbm9kZSBTeXN0ZW0gVGFza2JhciBVc2FnZSBFeGFtcGxlcwor
QGNoYXB0ZXIgU3lzdGVtIFRhc2tiYXIgVXNhZ2UgRXhhbXBsZXMKKworQGxpc3AKK0Bncm91cAor
OzsgRW5hYmxlIGFuZCBpbml0aWFsaXplIHN5c3RlbS10YXNrYmFyLW1vZGUgYmVmb3JlIGNhbGxp
bmcgaXRzCis7OyBjb21wYW5pb24gZnVuY3Rpb25zLgorKHN5c3RlbS10YXNrYmFyLW1vZGUpCisK
Kzs7IERpc3BsYXkgYSBiYWRnZSBvbiB0aGUgdGFza2JhciBpY29uLgorKHN5c3RlbS10YXNrYmFy
LWJhZGdlIGVtYWNzLW1ham9yLXZlcnNpb24pCisoc3lzdGVtLXRhc2tiYXItYmFkZ2UgIjMxIikg
OyBjb252ZXJ0ZWQgdG8gaW50ZWdlciBvbiBHTlUvTGludXgKKyhzeXN0ZW0tdGFza2Jhci1iYWRn
ZSAiVGVzdCIpIDsgd29ya3Mgb24gbWFjT1MvR05Vc3RlcCBhbmQgTVMtV2luZG93cworCis7OyBD
bGVhciB0aGUgYmFkZ2UuCisoc3lzdGVtLXRhc2tiYXItYmFkZ2UgbmlsKQorOzsgT3IganVzdAor
KHN5c3RlbS10YXNrYmFyLWJhZGdlKQorQGVuZCBncm91cAorCitAZ3JvdXAKKzs7IEdldCB0aGUg
dXNlcidzIGF0dGVudGlvbi4KKyhzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gJ2luZm9ybWF0aW9u
YWwgMykgOyBjbGVhciB0aGUgcmVxdWVzdCBhZnRlciAzIHNlY29uZHMKKyhzeXN0ZW0tdGFza2Jh
ci1hdHRlbnRpb24gJ2NyaXRpY2FsKSA7IGNsZWFyIHdoZW4gdGhlIEVtYWNzIGFwcGxpY2F0aW9u
IGlzIGZvY3VzZWQKKworOzsgQ2xlYXIgdGhlIGF0dGVudGlvbiByZXF1ZXN0LgorKHN5c3RlbS10
YXNrYmFyLWF0dGVudGlvbiBuaWwpCis7OyBPciBqdXN0Cisoc3lzdGVtLXRhc2tiYXItYXR0ZW50
aW9uKQorQGVuZCBncm91cAorCitAZ3JvdXAKKzs7IFJlcG9ydCBgZG90aW1lc2AgcHJvZ3Jlc3Mg
b24gdGhlIHRhc2tiYXIgaWNvbi4KKyhkb3RpbWVzLXdpdGgtc3lzdGVtLXRhc2tiYXItcHJvZ3Jl
c3MtcmVwb3J0ZXIKKyAoaSAxMCkgIkNvdW50aW5nIGZyb20gMSB0byAxMC4uLiIKKyAoc2xlZXAt
Zm9yIDEpKQorCis7OyBSZXBvcnQgYGRvbGlzdGAgcHJvZ3Jlc3Mgb24gdGhlIHRhc2tiYXIgaWNv
bi4KKyhkb2xpc3Qtd2l0aC1zeXN0ZW0tdGFza2Jhci1wcm9ncmVzcy1yZXBvcnRlcgorIChpICht
YWtlLWxpc3QgMTAgdCkpICJQcm9ncmVzcyBmcm9tIDEgdG8gMTAgZWxlbWVudHMuLi4iCisgKHNs
ZWVwLWZvciAxKSkKK0BlbmQgZ3JvdXAKK0BlbmQgbGlzcAorCitAbm9kZSBHTlUgRnJlZSBEb2N1
bWVudGF0aW9uIExpY2Vuc2UKK0BhcHBlbmRpeCBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vu
c2UKK0BpbmNsdWRlIGRvY2xpY2Vuc2UudGV4aQorCitAbm9kZSBGdW5jdGlvbiBJbmRleAorQHVu
bnVtYmVyZWQgRnVuY3Rpb24gSW5kZXgKK0BwcmludGluZGV4IGZuCisKK0Bub2RlIFZhcmlhYmxl
IEluZGV4CitAdW5udW1iZXJlZCBWYXJpYWJsZSBJbmRleAorQHByaW50aW5kZXggdnIKKworQGJ5
ZQorCitAYyBFbmQ6Ci0tIAoyLjQ3LjEKCg==
--0000000000004f726a0645b17e19--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 22:17:06 +0000
Resent-Message-ID: <handler.79859.B79859.1765491422887 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.1765491422887
          (code B ref 79859); Thu, 11 Dec 2025 22:17:06 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 22:17:02 +0000
Received: from localhost ([127.0.0.1]:49081 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vToy3-0000Di-4k
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 17:17:01 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:54751)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vToxx-0000C0-M6
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 17:16:56 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 67776441BC5;
 Thu, 11 Dec 2025 17:16:47 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765491405;
 bh=85RL7lQSt0z4DkJHLNyl55QvH3k8rGnRddKKe7r7P5E=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=pqfG6bSXiTtwTaBgSzQO1ZvlwWulJxzsgwVxCfp3E5mWwIlUmDSIxH+Kl+yf5gV5H
 dQ+HUlMS5RRShXBrwe09cvjKcOL90hZRm6PUj5aVIUyxCQ0n8qH0h4dautv60wDDYe
 Gv33aXvp9idSj4QCoyQFvXEJtLYrOjaZ4k1BCetvwvwSbnkH1MeY2Pq/vKVlsMSC2M
 IXdTY4e09jgErvThr6ho5kBKM5Lqh+pVT2Mp92wXBhLLZVseLYnKST1+gpWMyn5bpt
 sJHXXXJYbpEPRdm0uR9ydN6jIOF/Ppw2bjIEkemGSrgUHRRUZ2FBbicQALWi8Yd8EF
 w3oHavJcFPdLw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 6D757441BB7;
 Thu, 11 Dec 2025 17:16:45 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 9F950120BDB;
 Thu, 11 Dec 2025 17:16:43 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
Message-ID: <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
Date: Thu, 11 Dec 2025 17:16:39 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.111 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

> Updated patch, attached.  This one does away with the callbacks and uses
> global hooks instead and installs the GUI progress bars, by default, when
> the mode is enabled, and also does away with the convenience macros which
> are no longer needed.

Thanks.  I hadn't looked at the code yet, so I'll give a bit of feedback
about the code now.  I haven't looked at the system-dependent code
because I'm not familiar with those APIs anyway.

> diff --git a/lisp/subr.el b/lisp/subr.el
> index fcf931b64e9..ef67e5cc4d0 100644
> --- a/lisp/subr.el
> +++ b/lisp/subr.el
> @@ -6974,14 +6974,27 @@ set-transient-map
>  ;; digits of precision, it doesn't really matter here.  On the other
>  ;; hand, it greatly simplifies the code.
>  
> +(defvar progress-reporter-update-functions nil
> +  "Special hook run on progress-reporter updates.
> +These functions are called by `progress-reporter-do-update` with three
> +arguments, the reporter, the percentage done in the range 0-100 for a
> +numeric reporter and which is nil for a pulsing reporter, the index that
> +cycles through the range 0-3 for a pulsing reporter and which is nil for
> +a numeric reporter.")

Sounds like only two of the three args are used.

> +(defvar progress-reporter-done-functions nil
> +  "Special hook run when a progress-reporter is done.
> +These functions are called by `progress-reporter-done` with one
> +argument, the reporter.")

I think I'd merge them into a single hook.
E.g.

    (defvar progress-reporter-update-functions nil
      "Special hook run on progress-reporter updates.
    These functions are called with two arguments (REPORTER STATE)
    and their return value is ignored.  STATE can be:
    - `done', when the job is, well, done.
    - An integer in the range 0-3 (for pulsing reporters).
    - A float between 0 and 1 (for numeric reporters).")

> @@ -7100,7 +7113,9 @@ progress-reporter-do-update
>                   (setq suffix (or (aref parameters 6) "")))
>                 (if (plusp percentage)
>                     (message "%s%d%% %s" text percentage suffix)
> -                 (message "%s %s" text suffix)))))
> +                 (message "%s %s" text suffix))
> +               (run-hook-with-args 'progress-reporter-update-functions
> +                                   reporter percentage nil))))
>  	  ;; Pulsing indicator
>  	  (enough-time-passed
>             (when (and value (not suffix))

I think it would be even better if the echo-area feedback is moved to
the initial value of `progress-reporter-update-functions`, in case
someone wants to remove it or replace it with something else.
This will also make sure the API of `progress-reporter-update-functions`
is sufficient to reproduce this default behavior.

> +(defcustom system-taskbar-use-progress-reporter t
> +  "Supplement progress-reporters with GUI system taskbar progress bars."
> +  :type 'boolean
> +  :set (lambda (variable value)
> +         (set-default variable value)
> +         (if value
> +             (system-taskbar-progress-reporter-install)
> +           (system-taskbar-progress-reporter-remove)))
> +  :version "31.1")

This seems redundant with `system-taskbar-mode`.  IIUC the difference is
that `system-taskbar-mode` covers a bit more functionality, but as it
stands the code behaves strangely if you set
`system-taskbar-use-progress-reporter` to nil but enable
`system-taskbar-mode`.
I suggest to either merge them into a single option or to really
decouple the two (one for progress-reporter and one for the
badge/alerting).

> +(defvar system-taskbar--back-end nil
> +  "Generic taskbar method system dispatcher.")
> +
> +(defun system-taskbar--set-back-end ()
> +  "Determine taskbar host system type."
> +  ;; Order matters to accommodate the cases where an NS or MS-Windows
> +  ;; build have the dbus feature.

Maybe test `window-system` instead of `ns-version-string` and
`w32-initialized`?

> +  (cond ((boundp 'ns-version-string)
> +         (setq system-taskbar--back-end 'ns))
> +        ((bound-and-true-p w32-initialized)
> +         (setq system-taskbar--back-end 'w32))
> +        ((and (featurep 'dbusbind)
> +              (member "org.freedesktop.login1"
> +                      (dbus-list-activatable-names :system)))
> +         (setq system-taskbar--back-end 'dbus))
> +        (t
> +         (setq system-taskbar--back-end nil))))

You can hoist the `(setq system-taskbar--back-end` out of the `cond`.

> +(cl-defgeneric system-taskbar-badge (&optional count)
> +  "Display a COUNT overlay on the system taskbar Emacs icon.
> +If COUNT is an integer, display that as the icon badge.
> +If COUNT is a string on back ends which do not support strings, convert
> +COUNT to an integer, or nil if that fails.
> +If COUNT is nil or an empty string, remove the counter.")

The wording for the string case is a bit confusing.  How do we "convert
COUNT to an integer"?  `length` is one option, but there are
many others.
Maybe we should also say something a bout the kind of strings that are
expected to appear here (I assume these should be short, for example).

> +(cl-defgeneric system-taskbar-attention (&optional urgency timeout)
> +  "Flash the system taskbar icon and/or frame to alert the user.
> +If URGENCY is the symbol `informational', request normal attention.
> +If URGENCY is the symbol `critical', request urgent attention.
> +If URGENCY is nil, clear the attention indicator.

I don't find "normal attention" much more enlightening than
`informational` and same for the second line, so I think you can shorten
that to

    URGENCY can be one of the symbols `informational' or`critical',
    or nil which clears the attention indicator.

> +If TIMEOUT is non-nil, clear the attention indicator after TIMEOUT
> +seconds, otherwise the attention indicator will be cleared either if the
> +frame is focused by the user or if `system-taskbar-attention' is called
> +with nil URGENCY.

Replace "either" with something that clarifies which.  Presumably it's
whichever comes first.

> +(cl-defmethod system-taskbar-progress (&context
> +                                       (system-taskbar--back-end (eql 'dbus))
> +                                       &optional progress)
> +  "Display a progress bar overlay on the system taskbar icon.
> +PROGRESS is a float in the range 0.0 to 1.0.
> +If PROGRESS is nil, remove the progress bar."
> +  (setq progress (system-taskbar--validate-progress progress))
> +  (system-taskbar--dbus-send-signal
> +   `((:dict-entry "progress-visible"
> +                  (:variant :boolean ,(not (null progress))))
> +     (:dict-entry "progress"
> +                  (:variant :double ,(if (null progress) 0 progress))))))

[ Side note: while I'm to blame for the `&context` and I stand by it,
  I'm not completely sure we should abuse it so much.  At the same time,
  this is quite similar to what I've done with the `git-*selection*`
  generic functions and it proved convenient when extending it for
  non-GUI support.  So maybe it's fine, sorry 'bout the noise.  ]

> +
> +;; macOS/GNUstep NS support.
> +;; MS-Windows support.

Move them to `term/ns|w32-win.el`?
Not sure where the D-Bus support would move to, OTOH.
So, again, maybe it's fine leaving that code here.


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Thu, 11 Dec 2025 23:12:02 +0000
Resent-Message-ID: <handler.79859.B79859.176549466417582 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176549466417582
          (code B ref 79859); Thu, 11 Dec 2025 23:12:02 +0000
Received: (at 79859) by debbugs.gnu.org; 11 Dec 2025 23:11:04 +0000
Received: from localhost ([127.0.0.1]:49534 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTpoO-0004ZV-99
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 18:11:04 -0500
Received: from mail-vs1-xe33.google.com ([2607:f8b0:4864:20::e33]:47429)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vTpoJ-0004YW-Fu
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 18:11:01 -0500
Received: by mail-vs1-xe33.google.com with SMTP id
 ada2fe7eead31-5de23ddba5eso478830137.3
 for <79859 <at> debbugs.gnu.org>; Thu, 11 Dec 2025 15:10:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765494653; x=1766099453; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=B5iKi19ghRmtiKPCZnh7w6yAXLzVgZD7yiAMlUde7EQ=;
 b=XClcQ7AMdkS7yHJVzaMzFhfr3pXad+5EU46Ti2i5jTZbvZz26hPDM9dnyZ289ZqJch
 Yx26l0s1fn/H8VH4SF7GRljj10d4NlBLTwnOu+2NZyI1hXmN/sPyNjPrtm6rTqcosfy1
 iml//twH/UfAa8w5mtAO/O8qJw4SfkKeJzJQVkeYSq7uOEfJnveOtUoYAgscrXSSqaTg
 eFpvgBTU40FGgGZUlL4nPhtVbMoFUTnagAOWS380sXzTUpTR82baUB6caYT5K97yACA1
 ysJJT880M3Bzh51UjZTVZ0YvnB+fdeYYvXoj/sehb2ZSqqCu8kGnuWoMBLrnfv6V2fVs
 7vRw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765494653; x=1766099453;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=B5iKi19ghRmtiKPCZnh7w6yAXLzVgZD7yiAMlUde7EQ=;
 b=X8yDovKHT3h9NcytBMxRZtLoZB+HwhVS2OXc4dWINynEpBy+n7Wi/VZJouIu54o9Hl
 980yWQehYsxbr/gdJGx3Gc8Ap87r72xBfuM2HWOxSiTxmvucF3zsTeAe+Ra4fszW4oV2
 +nEwFreWmRD71Gu/TIL/iN+/d02MEbIyIKYJtQ24Gexxd7wqNCnWLPTWNrFaYW79D+gZ
 SqGzr9RA2tP9ybwAU0OczVir8aDvoMqzz0RyVUv/Te5dijkk5VCYkVb4yv+jUbhct6MX
 nyAVwJFoulue6i0h1dQCa5ZFnooU2givrwLhyv4oHJN+EaHvmAw/0gPU5a5kWlZrL2xg
 2f9A==
X-Forwarded-Encrypted: i=1;
 AJvYcCUegmQhvMl8lk+1C+nox6GifXVfrZ5jfMUAGrcy0oqzA4tgL9v9Rol1Ngw7YODTPcP2LYF3jQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yzg9ayfSHQjALsD8HQeG/cu5ElYYdlLU/vUx/Go8t27c+dmM/NL
 xXqXgh3NdaghsRNTNwIbW5/fS6GCwu4JbCN+mJS+m1b6pB8owCXqovkpi/I0Di1qWBgctjqkd/N
 lcuUyqRreQgBOVJSG2AbV0Hhnk9AZ/v0=
X-Gm-Gg: AY/fxX4ejYrtFbJH9wQsYsnYlheVEi8uouw6AlU7YOFxfbsnXeFQn4eYaPsqHdON6bG
 iNK42v2lPmWJhqce6pKEGVGnDigneCDX2U+KIHq0y7bu2qAzIJ6cmDXtL5yxc94gpHdvJkOpRF4
 cLWl3Go6LPWqDS9S4W2iSsKvR+Y9wzDcnCEWN1U+TROnvILOAUaEQaX1cQTHv+ib7I/gjqiUjFS
 bdvz+aDCT4N2GOcy3qqRO3p5ctLk8WEjeLPp0z5P8dhNLb/S5NYGdQqBB/1OW/KmJNgCH0=
X-Google-Smtp-Source: AGHT+IGKkO3ZsNcVRgrXcbs4KN2xscJD2H98UrQafbzHJaxbVEp18YjMvfg4WeFsfHSs8ZeCJpmTccOepJQcgfYqVRU=
X-Received: by 2002:a05:6102:e13:b0:5de:736:71d9 with SMTP id
 ada2fe7eead31-5e571f302c9mr3336017137.28.1765494653371; Thu, 11 Dec 2025
 15:10:53 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Thu, 11 Dec 2025 18:10:41 -0500
X-Gm-Features: AQt7F2qalS9naQs7DvZ9sNIaD1PWAsgxceeWau3syqx1vBy5hzkS_CjBOqKvuDM
Message-ID: <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000aade3c0645b541ee"
X-Spam-Score: 0.0 (/)
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>

--000000000000aade3c0645b541ee
Content-Type: multipart/alternative; boundary="000000000000aade3b0645b541ec"

--000000000000aade3b0645b541ec
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 5:16=E2=80=AFPM Stefan Monnier <monnier@HIDDEN=
al.ca>
wrote:

> > Updated patch, attached.  This one does away with the callbacks and use=
s
> > global hooks instead and installs the GUI progress bars, by default, wh=
en
> > the mode is enabled, and also does away with the convenience macros whi=
ch
> > are no longer needed.
>
> Thanks.  I hadn't looked at the code yet, so I'll give a bit of feedback
> about the code now.  I haven't looked at the system-dependent code
> because I'm not familiar with those APIs anyway.
>

Thanks for looking.

> diff --git a/lisp/subr.el b/lisp/subr.el
> > index fcf931b64e9..ef67e5cc4d0 100644
> > --- a/lisp/subr.el
> > +++ b/lisp/subr.el
> > @@ -6974,14 +6974,27 @@ set-transient-map
> >  ;; digits of precision, it doesn't really matter here.  On the other
> >  ;; hand, it greatly simplifies the code.
> >
> > +(defvar progress-reporter-update-functions nil
> > +  "Special hook run on progress-reporter updates.
> > +These functions are called by `progress-reporter-do-update` with three
> > +arguments, the reporter, the percentage done in the range 0-100 for a
> > +numeric reporter and which is nil for a pulsing reporter, the index th=
at
> > +cycles through the range 0-3 for a pulsing reporter and which is nil f=
or
> > +a numeric reporter.")
>
> Sounds like only two of the three args are used.
>

All three are passed for completeness.  The system-taskbar implementation
uses only two but could interrogate the reporter if needed.

> +(defvar progress-reporter-done-functions nil
> > +  "Special hook run when a progress-reporter is done.
> > +These functions are called by `progress-reporter-done` with one
> > +argument, the reporter.")
>
> I think I'd merge them into a single hook.
> E.g.
>
>     (defvar progress-reporter-update-functions nil
>       "Special hook run on progress-reporter updates.
>     These functions are called with two arguments (REPORTER STATE)
>     and their return value is ignored.  STATE can be:
>     - `done', when the job is, well, done.
>     - An integer in the range 0-3 (for pulsing reporters).
>     - A float between 0 and 1 (for numeric reporters).")
>

Could do.  I'd prefer avoiding type-of conditionals and perhaps it could be
reporter state value.  I'll take a stab at that.

> @@ -7100,7 +7113,9 @@ progress-reporter-do-update
> >                   (setq suffix (or (aref parameters 6) "")))
> >                 (if (plusp percentage)
> >                     (message "%s%d%% %s" text percentage suffix)
> > -                 (message "%s %s" text suffix)))))
> > +                 (message "%s %s" text suffix))
> > +               (run-hook-with-args 'progress-reporter-update-functions
> > +                                   reporter percentage nil))))
> >         ;; Pulsing indicator
> >         (enough-time-passed
> >             (when (and value (not suffix))
>
> I think it would be even better if the echo-area feedback is moved to
> the initial value of `progress-reporter-update-functions`, in case
> someone wants to remove it or replace it with something else.
> This will also make sure the API of `progress-reporter-update-functions`
> is sufficient to reproduce this default behavior.
>

I suggested that earlier but wasn't sure it was worth the trouble, and not
so sure people should be encouraged to remove echo area feedback.

Happy to do it if you really think it's a good idea.

> +(defcustom system-taskbar-use-progress-reporter t
> > +  "Supplement progress-reporters with GUI system taskbar progress bars=
."
> > +  :type 'boolean
> > +  :set (lambda (variable value)
> > +         (set-default variable value)
> > +         (if value
> > +             (system-taskbar-progress-reporter-install)
> > +           (system-taskbar-progress-reporter-remove)))
> > +  :version "31.1")
>
> This seems redundant with `system-taskbar-mode`.  IIUC the difference is
> that `system-taskbar-mode` covers a bit more functionality, but as it
> stands the code behaves strangely if you set
> `system-taskbar-use-progress-reporter` to nil but enable
> `system-taskbar-mode`.
> I suggest to either merge them into a single option or to really
> decouple the two (one for progress-reporter and one for the
> badge/alerting).
>

Behaves strangely how so?  It works here
with system-taskbar-use-progress-reporter on or off.

> +(defvar system-taskbar--back-end nil
> > +  "Generic taskbar method system dispatcher.")
> > +
> > +(defun system-taskbar--set-back-end ()
> > +  "Determine taskbar host system type."
> > +  ;; Order matters to accommodate the cases where an NS or MS-Windows
> > +  ;; build have the dbus feature.
>
> Maybe test `window-system` instead of `ns-version-string` and
> `w32-initialized`?
>

Happy to.  As long as there's no race condition setting up the initial w32
frame with the invocation of system-taskbar-mode.

> +  (cond ((boundp 'ns-version-string)
> > +         (setq system-taskbar--back-end 'ns))
> > +        ((bound-and-true-p w32-initialized)
> > +         (setq system-taskbar--back-end 'w32))
> > +        ((and (featurep 'dbusbind)
> > +              (member "org.freedesktop.login1"
> > +                      (dbus-list-activatable-names :system)))
> > +         (setq system-taskbar--back-end 'dbus))
> > +        (t
> > +         (setq system-taskbar--back-end nil))))
>
> You can hoist the `(setq system-taskbar--back-end` out of the `cond`.
>

Indeed. Done.

> +(cl-defgeneric system-taskbar-badge (&optional count)
> > +  "Display a COUNT overlay on the system taskbar Emacs icon.
> > +If COUNT is an integer, display that as the icon badge.
> > +If COUNT is a string on back ends which do not support strings, conver=
t
> > +COUNT to an integer, or nil if that fails.
> > +If COUNT is nil or an empty string, remove the counter.")
>
> The wording for the string case is a bit confusing.  How do we "convert
> COUNT to an integer"?  `length` is one option, but there are
> many others.
> Maybe we should also say something a bout the kind of strings that are
> expected to appear here (I assume these should be short, for example).
>

I've reworded a touch.

> +(cl-defgeneric system-taskbar-attention (&optional urgency timeout)
> > +  "Flash the system taskbar icon and/or frame to alert the user.
> > +If URGENCY is the symbol `informational', request normal attention.
> > +If URGENCY is the symbol `critical', request urgent attention.
> > +If URGENCY is nil, clear the attention indicator.
>
> I don't find "normal attention" much more enlightening than
> `informational` and same for the second line, so I think you can shorten
> that to
>
>     URGENCY can be one of the symbols `informational' or`critical',
>     or nil which clears the attention indicator.
>

Good.

> +If TIMEOUT is non-nil, clear the attention indicator after TIMEOUT
> > +seconds, otherwise the attention indicator will be cleared either if t=
he
> > +frame is focused by the user or if `system-taskbar-attention' is calle=
d
> > +with nil URGENCY.
>
> Replace "either" with something that clarifies which.  Presumably it's
> whichever comes first.
>

Good.  Simplified my obtuse language.

> +(cl-defmethod system-taskbar-progress (&context
> > +                                       (system-taskbar--back-end (eql
> 'dbus))
> > +                                       &optional progress)
> > +  "Display a progress bar overlay on the system taskbar icon.
> > +PROGRESS is a float in the range 0.0 to 1.0.
> > +If PROGRESS is nil, remove the progress bar."
> > +  (setq progress (system-taskbar--validate-progress progress))
> > +  (system-taskbar--dbus-send-signal
> > +   `((:dict-entry "progress-visible"
> > +                  (:variant :boolean ,(not (null progress))))
> > +     (:dict-entry "progress"
> > +                  (:variant :double ,(if (null progress) 0
> progress))))))
>
> [ Side note: while I'm to blame for the `&context` and I stand by it,
>   I'm not completely sure we should abuse it so much.  At the same time,
>   this is quite similar to what I've done with the `git-*selection*`
>   generic functions and it proved convenient when extending it for
>   non-GUI support.  So maybe it's fine, sorry 'bout the noise.  ]
>

Not noise, really.  It's there and it's useful.

> +
> > +;; macOS/GNUstep NS support.
> > +;; MS-Windows support.
>
> Move them to `term/ns|w32-win.el`?
> Not sure where the D-Bus support would move to, OTOH.
> So, again, maybe it's fine leaving that code here.
>

I prefer it as is, and all in one place.

Revised patch attached.  I'll do the documentation work last.

-St=C3=A9phane

--000000000000aade3b0645b541ec
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 5:16=E2=80=AFPM Stefan Monnier &lt;<a href=3D"mailt=
o:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span><=
/div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex">&gt; Updated patch, attached.=C2=A0 This=
 one does away with the callbacks and uses<br>
&gt; global hooks instead and installs the GUI progress bars, by default, w=
hen<br>
&gt; the mode is enabled, and also does away with the convenience macros wh=
ich<br>
&gt; are no longer needed.<br>
<br>
Thanks.=C2=A0 I hadn&#39;t looked at the code yet, so I&#39;ll give a bit o=
f feedback<br>
about the code now.=C2=A0 I haven&#39;t looked at the system-dependent code=
<br>
because I&#39;m not familiar with those APIs anyway.<br></blockquote><div><=
br></div><div><div class=3D"gmail_default" style=3D"font-family:monospace">=
Thanks for=C2=A0looking.</div></div><div class=3D"gmail_default" style=3D"f=
ont-family:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex">
&gt; diff --git a/lisp/subr.el b/lisp/subr.el<br>
&gt; index fcf931b64e9..ef67e5cc4d0 100644<br>
&gt; --- a/lisp/subr.el<br>
&gt; +++ b/lisp/subr.el<br>
&gt; @@ -6974,14 +6974,27 @@ set-transient-map<br>
&gt;=C2=A0 ;; digits of precision, it doesn&#39;t really matter here.=C2=A0=
 On the other<br>
&gt;=C2=A0 ;; hand, it greatly simplifies the code.<br>
&gt;=C2=A0 <br>
&gt; +(defvar progress-reporter-update-functions nil<br>
&gt; +=C2=A0 &quot;Special hook run on progress-reporter updates.<br>
&gt; +These functions are called by `progress-reporter-do-update` with thre=
e<br>
&gt; +arguments, the reporter, the percentage done in the range 0-100 for a=
<br>
&gt; +numeric reporter and which is nil for a pulsing reporter, the index t=
hat<br>
&gt; +cycles through the range 0-3 for a pulsing reporter and which is nil =
for<br>
&gt; +a numeric reporter.&quot;)<br>
<br>
Sounds like only two of the three args are used.<br></blockquote><div><br><=
/div><div><div class=3D"gmail_default" style=3D"font-family:monospace">All =
three are passed for completeness.=C2=A0 The system-taskbar implementation =
uses only two but could interrogate the reporter if needed.</div></div><div=
 class=3D"gmail_default" style=3D"font-family:monospace"><br></div><blockqu=
ote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px=
 solid rgb(204,204,204);padding-left:1ex">
&gt; +(defvar progress-reporter-done-functions nil<br>
&gt; +=C2=A0 &quot;Special hook run when a progress-reporter is done.<br>
&gt; +These functions are called by `progress-reporter-done` with one<br>
&gt; +argument, the reporter.&quot;)<br>
<br>
I think I&#39;d merge them into a single hook.<br>
E.g.<br>
<br>
=C2=A0 =C2=A0 (defvar progress-reporter-update-functions nil<br>
=C2=A0 =C2=A0 =C2=A0 &quot;Special hook run on progress-reporter updates.<b=
r>
=C2=A0 =C2=A0 These functions are called with two arguments (REPORTER STATE=
)<br>
=C2=A0 =C2=A0 and their return value is ignored.=C2=A0 STATE can be:<br>
=C2=A0 =C2=A0 - `done&#39;, when the job is, well, done.<br>
=C2=A0 =C2=A0 - An integer in the range 0-3 (for pulsing reporters).<br>
=C2=A0 =C2=A0 - A float between 0 and 1 (for numeric reporters).&quot;)<br>=
</blockquote><div><br></div><div><div class=3D"gmail_default" style=3D"font=
-family:monospace">Could do.=C2=A0 I&#39;d prefer avoiding type-of conditio=
nals and perhaps it could be reporter state value.=C2=A0 I&#39;ll take a st=
ab at that.</div></div><div><br></div><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddi=
ng-left:1ex">
&gt; @@ -7100,7 +7113,9 @@ progress-reporter-do-update<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(s=
etq suffix (or (aref parameters 6) &quot;&quot;)))<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if (plus=
p percentage)<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0(message &quot;%s%d%% %s&quot; text percentage suffix)<br>
&gt; -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(messag=
e &quot;%s %s&quot; text suffix)))))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(messag=
e &quot;%s %s&quot; text suffix))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(run-hook-with=
-args &#39;progress-reporter-update-functions<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0reporter percentage=
 nil))))<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0;; Pulsing indicator<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(enough-time-passed<br>
&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when (and value (not s=
uffix))<br>
<br>
I think it would be even better if the echo-area feedback is moved to<br>
the initial value of `progress-reporter-update-functions`, in case<br>
someone wants to remove it or replace it with something else.<br>
This will also make sure the API of `progress-reporter-update-functions`<br=
>
is sufficient to reproduce this default behavior.<br></blockquote><div><br>=
</div><div><div class=3D"gmail_default" style=3D"font-family:monospace">I s=
uggested that earlier but wasn&#39;t sure it was worth the trouble, and not=
 so sure people should be encouraged to remove echo area feedback.</div></d=
iv><div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><=
div class=3D"gmail_default" style=3D"font-family:monospace">Happy to do it =
if you really think it&#39;s a good idea.</div><div><br></div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex">
&gt; +(defcustom system-taskbar-use-progress-reporter t<br>
&gt; +=C2=A0 &quot;Supplement progress-reporters with GUI system taskbar pr=
ogress bars.&quot;<br>
&gt; +=C2=A0 :type &#39;boolean<br>
&gt; +=C2=A0 :set (lambda (variable value)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(set-default variable value)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if value<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(system-taskbar-progr=
ess-reporter-install)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(system-taskbar-progress-rep=
orter-remove)))<br>
&gt; +=C2=A0 :version &quot;31.1&quot;)<br>
<br>
This seems redundant with `system-taskbar-mode`.=C2=A0 IIUC the difference =
is<br>
that `system-taskbar-mode` covers a bit more functionality, but as it<br>
stands the code behaves strangely if you set<br>
`system-taskbar-use-progress-reporter` to nil but enable<br>
`system-taskbar-mode`.<br>
I suggest to either merge them into a single option or to really<br>
decouple the two (one for progress-reporter and one for the<br>
badge/alerting).<br></blockquote><div><br></div><div><div class=3D"gmail_de=
fault" style=3D"font-family:monospace">Behaves strangely how so?=C2=A0 It w=
orks here with=C2=A0system-taskbar-use-progress-reporter on or off.</div></=
div><div><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +(defvar system-taskbar--back-end nil<br>
&gt; +=C2=A0 &quot;Generic taskbar method system dispatcher.&quot;)<br>
&gt; +<br>
&gt; +(defun system-taskbar--set-back-end ()<br>
&gt; +=C2=A0 &quot;Determine taskbar host system type.&quot;<br>
&gt; +=C2=A0 ;; Order matters to accommodate the cases where an NS or MS-Wi=
ndows<br>
&gt; +=C2=A0 ;; build have the dbus feature.<br>
<br>
Maybe test `window-system` instead of `ns-version-string` and<br>
`w32-initialized`?<br></blockquote><div><br></div><div><div class=3D"gmail_=
default" style=3D"font-family:monospace">Happy to.=C2=A0 As long as there&#=
39;s no race condition setting up the initial w32 frame with the invocation=
 of system-taskbar-mode.</div><div class=3D"gmail_default" style=3D"font-fa=
mily:monospace"><br></div></div><blockquote class=3D"gmail_quote" style=3D"=
margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex">
&gt; +=C2=A0 (cond ((boundp &#39;ns-version-string)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq system-taskbar--back-end &#39=
;ns))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 ((bound-and-true-p w32-initialized)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq system-taskbar--back-end &#39=
;w32))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 ((and (featurep &#39;dbusbind)<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (member &quot;org.fr=
eedesktop.login1&quot;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 (dbus-list-activatable-names :system)))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq system-taskbar--back-end &#39=
;dbus))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (t<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq system-taskbar--back-end nil)=
)))<br>
<br>
You can hoist the `(setq system-taskbar--back-end` out of the `cond`.<br></=
blockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family=
:monospace">Indeed. Done.</div><div class=3D"gmail_default" style=3D"font-f=
amily:monospace"><br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
">
&gt; +(cl-defgeneric system-taskbar-badge (&amp;optional count)<br>
&gt; +=C2=A0 &quot;Display a COUNT overlay on the system taskbar Emacs icon=
.<br>
&gt; +If COUNT is an integer, display that as the icon badge.<br>
&gt; +If COUNT is a string on back ends which do not support strings, conve=
rt<br>
&gt; +COUNT to an integer, or nil if that fails.<br>
&gt; +If COUNT is nil or an empty string, remove the counter.&quot;)<br>
<br>
The wording for the string case is a bit confusing.=C2=A0 How do we &quot;c=
onvert<br>
COUNT to an integer&quot;?=C2=A0 `length` is one option, but there are<br>
many others.<br>
Maybe we should also say something a bout the kind of strings that are<br>
expected to appear here (I assume these should be short, for example).<br><=
/blockquote><div><br></div><div><div class=3D"gmail_default" style=3D"font-=
family:monospace">I&#39;ve reworded a touch.</div></div><div><br></div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +(cl-defgeneric system-taskbar-attention (&amp;optional urgency timeou=
t)<br>
&gt; +=C2=A0 &quot;Flash the system taskbar icon and/or frame to alert the =
user.<br>
&gt; +If URGENCY is the symbol `informational&#39;, request normal attentio=
n.<br>
&gt; +If URGENCY is the symbol `critical&#39;, request urgent attention.<br=
>
&gt; +If URGENCY is nil, clear the attention indicator.<br>
<br>
I don&#39;t find &quot;normal attention&quot; much more enlightening than<b=
r>
`informational` and same for the second line, so I think you can shorten<br=
>
that to<br>
<br>
=C2=A0 =C2=A0 URGENCY can be one of the symbols `informational&#39; or`crit=
ical&#39;,<br>
=C2=A0 =C2=A0 or nil which clears the attention indicator.<br></blockquote>=
<div><br></div><div class=3D"gmail_default" style=3D"font-family:monospace"=
>Good.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex">
&gt; +If TIMEOUT is non-nil, clear the attention indicator after TIMEOUT<br=
>
&gt; +seconds, otherwise the attention indicator will be cleared either if =
the<br>
&gt; +frame is focused by the user or if `system-taskbar-attention&#39; is =
called<br>
&gt; +with nil URGENCY.<br>
<br>
Replace &quot;either&quot; with something that clarifies which.=C2=A0 Presu=
mably it&#39;s<br>
whichever comes first.<br></blockquote><div><br></div><div><div class=3D"gm=
ail_default" style=3D"font-family:monospace">Good.=C2=A0 Simplified my obtu=
se language.</div></div><div><br></div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd=
ing-left:1ex">
&gt; +(cl-defmethod system-taskbar-progress (&amp;context<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(syst=
em-taskbar--back-end (eql &#39;dbus))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&amp;=
optional progress)<br>
&gt; +=C2=A0 &quot;Display a progress bar overlay on the system taskbar ico=
n.<br>
&gt; +PROGRESS is a float in the range 0.0 to 1.0.<br>
&gt; +If PROGRESS is nil, remove the progress bar.&quot;<br>
&gt; +=C2=A0 (setq progress (system-taskbar--validate-progress progress))<b=
r>
&gt; +=C2=A0 (system-taskbar--dbus-send-signal<br>
&gt; +=C2=A0 =C2=A0`((:dict-entry &quot;progress-visible&quot;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (:vari=
ant :boolean ,(not (null progress))))<br>
&gt; +=C2=A0 =C2=A0 =C2=A0(:dict-entry &quot;progress&quot;<br>
&gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (:vari=
ant :double ,(if (null progress) 0 progress))))))<br>
<br>
[ Side note: while I&#39;m to blame for the `&amp;context` and I stand by i=
t,<br>
=C2=A0 I&#39;m not completely sure we should abuse it so much.=C2=A0 At the=
 same time,<br>
=C2=A0 this is quite similar to what I&#39;ve done with the `git-*selection=
*`<br>
=C2=A0 generic functions and it proved convenient when extending it for<br>
=C2=A0 non-GUI support.=C2=A0 So maybe it&#39;s fine, sorry &#39;bout the n=
oise.=C2=A0 ]<br></blockquote><div><br></div><div><div class=3D"gmail_defau=
lt" style=3D"font-family:monospace">Not noise, really.=C2=A0 It&#39;s there=
 and it&#39;s useful.</div></div><div><br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex">
&gt; +=0C<br>
&gt; +;; macOS/GNUstep NS support.<br>
&gt; +;; MS-Windows support.<br>
<br>
Move them to `term/ns|w32-win.el`?<br>
Not sure where the D-Bus support would move to, OTOH.<br>
So, again, maybe it&#39;s fine leaving that code here.<br></blockquote><div=
><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">I p=
refer it as is, and all in one place.</div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=
=3D"font-family:monospace">Revised patch attached.=C2=A0 I&#39;ll do the do=
cumentation work last.</div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">-St=C3=A9phane=C2=A0</div></div></div>

--000000000000aade3b0645b541ec--

--000000000000aade3c0645b541ee
Content-Type: application/octet-stream; 
	name="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Disposition: attachment; 
	filename="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mj21wcik0>
X-Attachment-Id: f_mj21wcik0

RnJvbSA0ZTFlNzBmYjNlNWU2MDEzYjQxMjk0OTBhYWNmY2U3MTg0MjkwYWM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjAgTm92IDIwMjUgMTI6NTQ6NDAgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBTeXN0ZW0gR1VJIHRhc2tiYXIgYW5kIHByb2dyZXNzIHJlcG9ydGVy
IGhvb2tzCgpJbXBsZW1lbnQgc3lzdGVtIEdVSSB0YXNrYmFyL2RvY2svbGF1bmNoZXIgaWNvbiBi
YWRnZSwgaWNvbgpwcm9ncmVzcyBpbmRpY2F0b3IsIGljb24gYXR0ZW50aW9uIGFsZXJ0IGZlYXR1
cmVzIGZvciBELUJ1cwpwbGF0Zm9ybXMgKHRlc3RlZCBvbiBLREUgYW5kIEdOT01FKSwgTlMgKG1h
Y09TL0dOVXN0ZXApLApNUy1XaW5kb3dzLgoKQWRkICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUt
ZnVuY3Rpb25zJwoncHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZS1mdW5jdGlvbnMnIGFibm9ybWFsIGhv
b2tzIHRvIGZhY2lsaXRhdGUKdGFza2JhciBwcm9ncmVzcyBkaXNwbGF5LCBhbmQgb3RoZXIgY3Vz
dG9tIHByb2dyZXNzIHJlcG9ydGVycy4KCiogbGlzcC9zdWJyLmVsIChwcm9ncmVzcy1yZXBvcnRl
ci11cGRhdGUtZnVuY3Rpb25zKQoocHJvZ3Jlc3MtcmVwb3J0ZXItZG9uZS1mdW5jdGlvbnMpOiBO
ZXcgZGVmdmFyLgoocHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlKTogUnVuCnByb2dyZXNzLXJl
cG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMgZm9yIGJvdGggbnVtZXJpY2FsIGFuZApwdWxzaW5nIHJl
cG9ydGVycy4KKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUpOiBSdW4gcHJvZ3Jlc3MtcmVwb3J0ZXIt
ZG9uZS1mdW5jdGlvbnMuCiogbGlzcC9zeXN0ZW0tdGFza2Jhci5lbDogTmV3IGZpbGUuCiogc3Jj
L25zZm5zLm0gKEZuc19iYWRnZSwgRm5zX3Byb2dyZXNzX2luZGljYXRvcikKKEZuc19yZXF1ZXN0
X3VzZXJfYXR0ZW50aW9uKTogTmV3IGZ1bmN0aW9uLgooc3ltc19vZl9uc2Zucyk6IEFkZCBkZWZz
dWJyIFNuc19iYWRnZSwKU25zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIFNuc19wcm9ncmVzc19p
bmRpY2F0b3IuIEFkZCBERUZTWU0KUWluZm9ybWF0aW9uYWwsIFFjcml0aWNhbC4KKiBzcmMvdzMy
Zm5zLmMgKHJnYl9saXN0X3RvX2NvbG9ycmVmLCBGdzMyX2JhZGdlKQooRnczMl9yZXF1ZXN0X3Vz
ZXJfYXR0ZW50aW9uLCBGdzMyX3Byb2dyZXNzX2luZGljYXRvcik6IE5ldwpmdW5jdGlvbi4KKHN5
bXNfb2ZfdzMyZm5zKTogQWRkIGRlZnN1YnIgU3czMl9iYWRnZSwKU3czMl9wcm9ncmVzc19pbmRp
Y2F0b3IsIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbi4gQWRkIERFRlNZTQpRaW5mb3JtYXRp
b25hbCwgUWNyaXRpY2FsLgoqIHN5c3RlbS10YXNiYXIudGV4aTogTmV3IGZpbGUgKFdJTEwgQkUg
TUVSR0VEIElOVE8gRU1BQ1MgQU5ECkVMSVNQIE1BTlVBTCkuCiogZXRjL05FV1M6IEFubm91bmNl
IHN5c3RlbS10YXNrYmFyLW1vZGUuICBBbm5vdW5jZSBwcm9ncmVzcwpyZXBvcnRlciBjYWxsYmFj
ayBlbmhhbmNlbWVudHMuCi0tLQogZXRjL05FV1MgICAgICAgICAgICAgICB8ICAyMiArKwogbGlz
cC9zdWJyLmVsICAgICAgICAgICB8ICAzOSArKystCiBsaXNwL3N5c3RlbS10YXNrYmFyLmVsIHwg
NDgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvbnNmbnMu
bSAgICAgICAgICAgIHwgMTI4ICsrKysrKysrKysrCiBzcmMvdzMyZm5zLmMgICAgICAgICAgIHwg
MzI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHN5c3RlbS10YXNrYmFyLnRleGkgICAg
fCAyNTQgKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMjM5IGluc2Vy
dGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpc3Avc3lzdGVt
LXRhc2tiYXIuZWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXN0ZW0tdGFza2Jhci50ZXhpCgpkaWZm
IC0tZ2l0IGEvZXRjL05FV1MgYi9ldGMvTkVXUwppbmRleCBmZGIxZWUwMjgxOS4uNjc2MTQ0ZGZm
MTIgMTAwNjQ0Ci0tLSBhL2V0Yy9ORVdTCisrKyBiL2V0Yy9ORVdTCkBAIC0zMTUxLDYgKzMxNTEs
MjEgQEAgVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGZ1bmN0aW9ucyB0byB0aHJvdHRsZSBvciBkZWJv
dW5jZSBFbWFjcyBMaXNwCiBmdW5jdGlvbnMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29ycmFsbGlu
ZyBvdmVyZWFnZXIgY29kZSB0aGF0IGlzIHNsb3cKIGFuZCBibG9ja3MgRW1hY3MsIG9yIGRvZXMg
bm90IHByb3ZpZGUgd2F5cyB0byBsaW1pdCBob3cgb2Z0ZW4gaXQgcnVucy4KIAorKysrCisqKiog
TmV3IG1vZGUgJ3N5c3RlbS10YXNrYmFyLW1vZGUnLgorVGhpcyBpcyBhIGdsb2JhbCBtaW5vciBt
b2RlIGFuZCBjb21wYW5pb24gZnVuY3Rpb25zIHRoYXQgaW50ZWdyYXRlIEVtYWNzCit3aXRoIHN5
c3RlbSBHVUkgdGFza2JhcnMgKGFsc28gY2FsbGVkIGRvY2tzIG9yIGxhdW5jaGVycyBvciBzb21l
dGhpbmcKK3NpbWlsYXIpIHRvIGRpc3BsYXkgYSB0YXNrYmFyIGljb24gImJhZGdlIiBvdmVybGF5
LCBhIHByb2dyZXNzIGJhcgorcmVwb3J0IG92ZXJsYXksIGFsZXJ0IHRoZSB1c2VyIHRoYXQgYW4g
RW1hY3Mgc2Vzc2lvbiBuZWVkcyBhdHRlbnRpb24sCitvZnRlbiBieSBmbGFzaGluZyBvciBib3Vu
Y2luZyB0aGUgRW1hY3MgYXBwbGljYXRpb24gaWNvbi4gIFN1cHBvcnRlZAorY2FwYWJsZSBzeXN0
ZW1zIGFyZSBHTlUvTGludXggdmlhIEQtQnVzLCBtYWNPUy9HTlVzdGVwIDEwLjUrLCBNUy1XaW5k
b3dzCis3Ky4KKworT24gR05VL0xpbnV4IHN5c3RlbXMsIHNoZWxsIGV4dGVuc2lvbnMgb3Igc2lt
aWxhciBoZWxwZXJzIHN1Y2ggYXMKKyJkYXNoLXRvLWRvY2siIG1heSBiZSByZXF1aXJlZC4gIFNl
ZQorPGh0dHBzOi8vZXh0ZW5zaW9ucy5nbm9tZS5vcmcvZXh0ZW5zaW9uLzMwNy9kYXNoLXRvLWRv
Y2svPiBhbmQKKzxodHRwczovL3dpa2kudWJ1bnR1LmNvbS9Vbml0eS9MYXVuY2hlckFQST4uCisK
IAwKICogSW5jb21wYXRpYmxlIExpc3AgQ2hhbmdlcyBpbiBFbWFjcyAzMS4xCiAKQEAgLTM1Nzks
NiArMzU5NCwxMyBAQCBFbWFjcyB3aGVuIGJ1aWx0IHdpdGggdGhlIHB1cmUgR1RLIHRvb2xraXQg
bm93IHJlc3BlY3RzIGRlc2t0b3AKIGRhcmsgYW5kIGxpZ2h0IG1vZGVzIGZvciBkcmF3aW5nIGEg
R1RLIHRvb2xiYXIgYW5kIHdpZGdldHMsCiBhdXRvbWF0aWNhbGx5IHRvZ2dsaW5nIGJldHdlZW4g
dGhlbS4KIAorKysrCisqKiBQcm9ncmVzcyByZXBvcnRlciBjYWxsYmFja3MuCisnbWFrZS1wcm9n
cmVzcy1yZXBvcnRlcicgbm93IGFjY2VwdHMgb3B0aW9uYWwgYXJndW1lbnRzIFVQREFURS1DQUxM
QkFDSywKK2NhbGxlZCBvbiBwcm9ncmVzcyBzdGVwcywgYW5kIERPTkUtQ0FMTEJBQ0ssIGNhbGxl
ZCB3aGVuIHRoZSBwcm9ncmVzcworcmVwb3J0ZXIgaXMgZG9uZS4gIFNlZSB0aGUgJ21ha2UtcHJv
Z3Jlc3MtcmVwb3J0ZXInIGRvY3N0cmluZyBmb3IgYSBmdWxsCitzcGVjaWZpY2F0aW9uIG9mIHRo
ZXNlIG5ldyBvcHRpb25hbCBhcmd1bWVudHMuCisKIAwKICogQ2hhbmdlcyBpbiBFbWFjcyAzMS4x
IG9uIE5vbi1GcmVlIE9wZXJhdGluZyBTeXN0ZW1zCiAKZGlmZiAtLWdpdCBhL2xpc3Avc3Vici5l
bCBiL2xpc3Avc3Vici5lbAppbmRleCBmY2Y5MzFiNjRlOS4uNWJhODJlNGJkMzQgMTAwNjQ0Ci0t
LSBhL2xpc3Avc3Vici5lbAorKysgYi9saXNwL3N1YnIuZWwKQEAgLTY5NzQsMTQgKzY5NzQsMjIg
QEAgc2V0LXRyYW5zaWVudC1tYXAKIDs7IGRpZ2l0cyBvZiBwcmVjaXNpb24sIGl0IGRvZXNuJ3Qg
cmVhbGx5IG1hdHRlciBoZXJlLiAgT24gdGhlIG90aGVyCiA7OyBoYW5kLCBpdCBncmVhdGx5IHNp
bXBsaWZpZXMgdGhlIGNvZGUuCiAKKyhkZWZ2YXIgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlLWZ1
bmN0aW9ucyBuaWwKKyAgIlNwZWNpYWwgaG9vayBydW4gb24gcHJvZ3Jlc3MtcmVwb3J0ZXIgdXBk
YXRlcy4KK1RoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggZm91ciBhcmd1bWVudHM6CitS
RVBPUlRFUiBpcyB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBgbWFrZS1wcm9ncmVzcy1yZXBvcnRl
cicuCitTVEFURSBpcyB0aGUgc3ltYm9sIGB1cGRhdGUnIG9yIGBkb25lJy4KK1BFUkNFTlRBR0Ug
aXMgYSBudW1iZXIgaW4gdGhlIHJhbmdlIDAtMTAwLCBvciBuaWwgZm9yIGEgcHVsc2luZyByZXBv
cnRlci4KK0lOREVYIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwLTMsIG9yIG5pbCBmb3IgYSBu
dW1lcmljIHJlcG9ydGVyLiIpCisKIChkZWZzdWJzdCBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUg
KHJlcG9ydGVyICZvcHRpb25hbCB2YWx1ZSBzdWZmaXgpCiAgICJSZXBvcnQgcHJvZ3Jlc3Mgb2Yg
YW4gb3BlcmF0aW9uIGluIHRoZSBlY2hvIGFyZWEuCiBSRVBPUlRFUiBzaG91bGQgYmUgdGhlIHJl
c3VsdCBvZiBhIGNhbGwgdG8gYG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInLgogCiBJZiBSRVBPUlRF
UiBpcyBhIG51bWVyaWNhbCBwcm9ncmVzcyByZXBvcnRlci0tLWkuZS4gaWYgaXQgd2FzCi0gbWFk
ZSB1c2luZyBub24tbmlsIE1JTi1WQUxVRSBhbmQgTUFYLVZBTFVFIGFyZ3VtZW50cyB0bwotIGBt
YWtlLXByb2dyZXNzLXJlcG9ydGVyJy0tLXRoZW4gVkFMVUUgc2hvdWxkIGJlIGEgbnVtYmVyIGJl
dHdlZW4KLSBNSU4tVkFMVUUgYW5kIE1BWC1WQUxVRS4KK21hZGUgdXNpbmcgbm9uLW5pbCBNSU4t
VkFMVUUgYW5kIE1BWC1WQUxVRSBhcmd1bWVudHMgdG8KK2BtYWtlLXByb2dyZXNzLXJlcG9ydGVy
Jy0tLXRoZW4gVkFMVUUgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4KK01JTi1WQUxVRSBhbmQg
TUFYLVZBTFVFLgogCiBPcHRpb25hbCBhcmd1bWVudCBTVUZGSVggaXMgYSBzdHJpbmcgdG8gYmUg
ZGlzcGxheWVkIGFmdGVyCiBSRVBPUlRFUidzIG1haW4gbWVzc2FnZSBhbmQgcHJvZ3Jlc3MgdGV4
dC4gIElmIFJFUE9SVEVSIGlzIGEKQEAgLTcwNjEsMTEgKzcwNjksMTEgQEAgcHJvZ3Jlc3MtcmVw
b3J0ZXItLXB1bHNlLWNoYXJhY3RlcnMKICAgIkNoYXJhY3RlcnMgdG8gdXNlIGZvciBwdWxzaW5n
IHByb2dyZXNzIHJlcG9ydGVycy4iKQogCiAoZGVmdW4gcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBk
YXRlIChyZXBvcnRlciB2YWx1ZSAmb3B0aW9uYWwgc3VmZml4KQotICAobGV0KiAoKHBhcmFtZXRl
cnMgICAoY2RyIHJlcG9ydGVyKSkKLQkgKHVwZGF0ZS10aW1lICAoYXJlZiBwYXJhbWV0ZXJzIDAp
KQotCSAobWluLXZhbHVlICAgIChhcmVmIHBhcmFtZXRlcnMgMSkpCi0JIChtYXgtdmFsdWUgICAg
KGFyZWYgcGFyYW1ldGVycyAyKSkKLQkgKHRleHQgICAgICAgICAoYXJlZiBwYXJhbWV0ZXJzIDMp
KQorICAobGV0KiAoKHBhcmFtZXRlcnMgICAgICAoY2RyIHJlcG9ydGVyKSkKKwkgKHVwZGF0ZS10
aW1lICAgICAoYXJlZiBwYXJhbWV0ZXJzIDApKQorCSAobWluLXZhbHVlICAgICAgIChhcmVmIHBh
cmFtZXRlcnMgMSkpCisJIChtYXgtdmFsdWUgICAgICAgKGFyZWYgcGFyYW1ldGVycyAyKSkKKwkg
KHRleHQgICAgICAgICAgICAoYXJlZiBwYXJhbWV0ZXJzIDMpKQogCSAoZW5vdWdoLXRpbWUtcGFz
c2VkCiAJICA7OyBTZWUgaWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCB1
cGRhdGUuCiAJICAob3IgKG5vdCB1cGRhdGUtdGltZSkKQEAgLTcxMDAsNyArNzEwOCw5IEBAIHBy
b2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZQogICAgICAgICAgICAgICAgICAoc2V0cSBzdWZmaXgg
KG9yIChhcmVmIHBhcmFtZXRlcnMgNikgIiIpKSkKICAgICAgICAgICAgICAgIChpZiAocGx1c3Ag
cGVyY2VudGFnZSkKICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiJXMlZCUlICVzIiB0ZXh0
IHBlcmNlbnRhZ2Ugc3VmZml4KQotICAgICAgICAgICAgICAgICAobWVzc2FnZSAiJXMgJXMiIHRl
eHQgc3VmZml4KSkpKSkKKyAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIiVzICVzIiB0ZXh0IHN1
ZmZpeCkpCisgICAgICAgICAgICAgICAocnVuLWhvb2std2l0aC1hcmdzICdwcm9ncmVzcy1yZXBv
cnRlci11cGRhdGUtZnVuY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydGVyICd1cGRhdGUgcGVyY2VudGFnZSBuaWwpKSkpCiAJICA7OyBQdWxzaW5nIGluZGlj
YXRvcgogCSAgKGVub3VnaC10aW1lLXBhc3NlZAogICAgICAgICAgICAod2hlbiAoYW5kIHZhbHVl
IChub3Qgc3VmZml4KSkKQEAgLTcxMTMsMTEgKzcxMjMsMTYgQEAgcHJvZ3Jlc3MtcmVwb3J0ZXIt
ZG8tdXBkYXRlCiAgICAgICAgICAgICAgICAgICAocHVsc2UtY2hhciAoYXJlZiBwcm9ncmVzcy1y
ZXBvcnRlci0tcHVsc2UtY2hhcmFjdGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXgpKSkKIAkgICAgIChzZXRjYXIgcmVwb3J0ZXIgaW5kZXgpCi0gICAgICAgICAg
ICAgKG1lc3NhZ2UgIiVzICVzICVzIiB0ZXh0IHB1bHNlLWNoYXIgc3VmZml4KSkpKSkpCisgICAg
ICAgICAgICAgKG1lc3NhZ2UgIiVzICVzICVzIiB0ZXh0IHB1bHNlLWNoYXIgc3VmZml4KQorICAg
ICAgICAgICAgIChydW4taG9vay13aXRoLWFyZ3MgJ3Byb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1m
dW5jdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyICd1cGRh
dGUgbmlsIGluZGV4KSkpKSkpCiAKIChkZWZ1biBwcm9ncmVzcy1yZXBvcnRlci1kb25lIChyZXBv
cnRlcikKLSAgIlByaW50IHJlcG9ydGVyJ3MgbWVzc2FnZSBmb2xsb3dlZCBieSB3b3JkIFwiZG9u
ZVwiIGluIGVjaG8gYXJlYS4iCi0gIChtZXNzYWdlICIlc2RvbmUiIChhcmVmIChjZHIgcmVwb3J0
ZXIpIDMpKSkKKyAgIlByaW50IHJlcG9ydGVyJ3MgbWVzc2FnZSBmb2xsb3dlZCBieSB3b3JkIFwi
ZG9uZVwiIGluIGVjaG8gYXJlYS4KK0NhbGwgdGhlIGZ1bmN0aW9ucyBvbiBgcHJvZ3Jlc3MtcmVw
b3J0ZXItdXBkYXRlLWZ1bmN0aW9uc2AuIgorICAobWVzc2FnZSAiJXNkb25lIiAoYXJlZiAoY2Ry
IHJlcG9ydGVyKSAzKSkKKyAgKHJ1bi1ob29rLXdpdGgtYXJncyAncHJvZ3Jlc3MtcmVwb3J0ZXIt
dXBkYXRlLWZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyICdkb25lIG5p
bCBuaWwpKQogCiAoZGVmbWFjcm8gZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9ydGVyIChzcGVj
IHJlcG9ydGVyLW9yLW1lc3NhZ2UgJnJlc3QgYm9keSkKICAgIkxvb3AgYSBjZXJ0YWluIG51bWJl
ciBvZiB0aW1lcyBhbmQgcmVwb3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEuCmRpZmYgLS1n
aXQgYS9saXNwL3N5c3RlbS10YXNrYmFyLmVsIGIvbGlzcC9zeXN0ZW0tdGFza2Jhci5lbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjI1NGY1M2I5MzEKLS0tIC9kZXYv
bnVsbAorKysgYi9saXNwL3N5c3RlbS10YXNrYmFyLmVsCkBAIC0wLDAgKzEsNDgxIEBACis7Ozsg
c3lzdGVtLXRhc2tiYXIuZWwgLS0tIFN5c3RlbSBHVUkgdGFza2Jhci9kb2NrL2xhdW5jaGVyIHN0
YXR1cyBkaXNwbGF5IC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQgLSotCisKKzs7IENvcHlyaWdodCAo
QykgMjAyNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgQXV0aG9yOiBTdGVw
aGFuZSBNYXJrcworOzsgTWFpbnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZworOzsgS2V5d29y
ZHM6IGNvbnZlbmllbmNlCis7OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGVtYWNzICIzMS4xIikpCisK
Kzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgR05VIEVtYWNzIGlzIGZy
ZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv
biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdpdGgg
R05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K
KworOzs7IENvbW1lbnRhcnk6CisKKzs7IFVzZSB0aGlzIHBhY2thZ2UgdG8gZGlzcGxheSBhIHRh
c2tiYXIgaWNvbiAiYmFkZ2UiIG92ZXJsYXksIGEKKzs7IHByb2dyZXNzIGJhciByZXBvcnQgb3Zl
cmxheSwgb3IgYWxlcnQgdGhlIHVzZXIgdGhhdCBhbiBFbWFjcyBzZXNzaW9uCis7OyBuZWVkcyBh
dHRlbnRpb24sIG9mdGVuIGJ5IGZsYXNoaW5nIG9yIGJvdW5jaW5nIHRoZSBFbWFjcyBhcHBsaWNh
dGlvbgorOzsgaWNvbi4KKzs7Cis7OyBOb3RlOiBUaGUgdGVybSB0YXNrYmFyIGlzIGluY2x1c2l2
ZSBvZiBkb2NrIG9yIGxhdW5jaGVyIG9yIHNvbWUgb3RoZXIKKzs7IHRlcm1pbm9sb2d5IGFzIG1h
eSBiZSB1c2VkIGZvciB5b3VyIHN5c3RlbS4KKzs7Cis7OyBPbiBHTlUvTGludXgsIHRoZSB2aXNp
YmxlIGVmZmVjdHMgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9ucworOzsgZGV0ZXJtaW5l
ZCBieSB5b3VyIHNoZWxsIGV4dGVuc2lvbiwgbW9zdCBvZnRlbiB0aGUgYXBwbGljYXRpb24KKzs7
IGxhdW5jaGVyIG9yIGRvY2sgcGFuZWwsIG9yIHRoZSB0b3AgcGFuZWwuICBFZmZlY3RzIGFyZSBn
bG9iYWwgZm9yIGFuCis7OyBFbWFjcyBpbnN0YW5jZS4KKzs7Cis7OyBPbiBtYWNPUy9HTlVzdGVw
LCB0aGUgZWZmZWN0cyB3aWxsIGFwcGVhciBvbiB0aGUgRG9jayBhbmQgaW4gdGhlIEFwcAorOzsg
U3dpdGNoZXIuICBFZmZlY3RzIGFyZSBnbG9iYWwgZm9yIGFuIEVtYWNzIGluc3RhbmNlLgorOzsK
Kzs7IE9uIE1TLVdpbmRvd3MsIHRoZSBlZmZlY3RzIGFwcGVhciBvbiB0aGUgdGFza2Jhci4gIEVm
ZmVjdHMgYXJlCis7OyBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIGZyb20gd2hpY2ggdGhleSBh
cmUgaW5pdGlhdGVkLgorCis7OzsgVXNhZ2U6CisKKzs7IFRoZSBnbG9iYWwgbWlub3IgbW9kZSBg
c3lzdGVtLXRhc2tiYXItbW9kZScgaW5pdGlhbGl6ZXMgdGhlIEdVSQorOzsgcGxhdGZvcm0gYmFj
ay1lbmQgYW5kIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdXNpbmcgdGhlIGZ1bmN0aW9ucworOzsg
YmVsb3cuCis7OworOzsgYHN5c3RlbS10YXNrYmFyLWJhZGdlJyBvdmVybGF5cyBhIGNvdW50LCB3
aGljaCBpcyBhbiBpbnRlZ2VyLCBvbiB0aGUKKzs7IEVtYWNzIHRhc2tiYXIgaWNvbi4gIFlvdSBj
YW4gdXNlIHRoaXMsIGZvciBleGFtcGxlLCB0byBpbmRpY2F0ZSB0aGUKKzs7IG51bWJlciBvZiB1
bnJlYWQgZW1haWwgbWVzc2FnZXMuICBPbiBHTlUvTGludXgsIHRoZSBjb3VudCBtdXN0IGJlIGFu
Cis7OyBpbnRlZ2VyIG9yIG5pbC4gIE9uIG1hY09TL0dOVXN0ZXAsIHRoZSBjb3VudCBtYXkgYmUg
YW4gaW50ZWdlciBvciBhCis7OyBzdHJpbmcsIHdoaWNoIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdp
bGwgYWJicmV2aWF0ZSBpZiB0b28gbG9uZy4gIE9uCis7OyBNUy1XaW5kb3dzLCB0aGUgdGFza2Jh
ciBiYWRnZSB3aWxsIGJlIGFiYnJldmlhdGVkIHRvIHRocmVlCis7OyBjaGFyYWN0ZXJzOyBpZiB0
aGUgY291bnQgaXMgYW4gaW50ZWdlciBvdXRzaWRlIHRoZSByYW5nZSAtOTkgdG8gOTksCis7OyBp
dCBpcyBzaG93biBhcyAiLTk5IiBvciAiOTkrIiwgaWYgY291bnQgaXMgYSBzdHJpbmcgbG9uZ2Vy
IHRoYW4gMworOzsgY2hhcmFjdGVycyBpdCBpcyB0cnVuY2F0ZWQuCis7OworOzsgYHN5c3RlbS10
YXNrYmFyLWF0dGVudGlvbicgZmxhc2hlcyBvciBib3VuY2VzIHRoZSBFbWFjcyB0YXNrYmFyIGlj
b24KKzs7IHRvIGluZGljYXRlIHRoYXQgeW91ciBFbWFjcyBzZXNzaW9uIHdhbnRzIGF0dGVudGlv
bi4gIEl0cyBiZWhhdmlvcnMKKzs7IGFyZSBiYWNrLWVuZCBzcGVjaWZpYy4KKzs7Cis7OyBgc3lz
dGVtLXRhc2tiYXItcHJvZ3Jlc3MnIG92ZXJsYXlzIGEgZ3JhcGhpY2FsIHByb2dyZXNzIGJhciBv
biB0aGUKKzs7IEVtYWNzIHRhc2tiYXIgaWNvbiB0byBpbGx1c3RyYXRlIHByb2dyZXNzIG9mIGEg
cG90ZW50aWFsbHkKKzs7IGxvbmctcnVubmluZyBvcGVyYXRpb24uCis7OworOzsgV2hlbiBgc3lz
dGVtLXRhc2tiYXItbW9kZWAgaXMgZW5hYmxlZCwgRW1hY3MgcHJvZ3Jlc3MgcmVwb3J0ZXJzIHdp
bGwKKzs7IGJlIGVuaGFuY2VkIHRvIGRpc3BsYXkgdGFza2JhciBHVUkgcHJvZ3Jlc3MgYmFycy4g
IEN1c3RvbWl6ZQorOzsgYHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlcmAgaWYg
eW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzLgorOzsKKzs7IE9uIEdOVS9MaW51eCBzeXN0ZW1zLCB0
aGUgaW1wbGVtZW50YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCis7OyBzaGVsbHMg
YW5kL29yIHNoZWxsIGV4dGVuc2lvbnMgc3VjaCBhcworOzsgaHR0cHM6Ly9leHRlbnNpb25zLmdu
b21lLm9yZy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9jay8gdGhhdAorOzsgaW1wbGVtZW50IFVi
dW50dSdzIFVuaXR5IGxhdW5jaGVyIHNwZWMKKzs7IGh0dHBzOi8vd2lraS51YnVudHUuY29tL1Vu
aXR5L0xhdW5jaGVyQVBJLgorOzsKKzs7IFlvdXIgTGludXggRW1hY3MgaW5zdGFuY2Ugc2hvdWxk
IGJlIGxhdW5jaGVkIHZpYSBhbiBhcHByb3ByaWF0ZSBzaGVsbAorOzsgImRlc2t0b3AiIGZpbGUg
c3VjaCBhcyB0aG9zZSBkaXN0cmlidXRlZCB3aXRoIEVtYWNzOyBlLmcuLAorOzsgImV0Yy9lbWFj
c2NsaWVudC5kZXNrdG9wIiBhcyBkb2N1bWVudGVkIGhlcmUKKzs7IGh0dHBzOi8vc3BlY2lmaWNh
dGlvbnMuZnJlZWRlc2t0b3Aub3JnL2Rlc2t0b3AtZW50cnkvbGF0ZXN0LyBhbmQKKzs7IHdoaWNo
IHlvdXIgR1VJIHN5c3RlbSBzaG91bGQgaW1wbGVtZW50LgorOzsKKzs7IE9uIG1hY09TL0dOVXN0
ZXAgc3lzdGVtcyAoYWthIE5TKSBhbmQgTVMtV2luZG93cywgbmF0aXZlIEFQSXMgYXJlCis7OyB1
c2VkIGFuZCBELUJ1cyBpcyBub3QsIGV2ZW4gaWYgRC1CdXMgaXMgY29uZmlndXJlZCBpbiB5b3Vy
IGJ1aWxkLgorOzsKKzs7IFRvIGFkZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHN5c3RlbXMsIHBy
b3ZpZGUgYSBiYWNrIGVuZCB0aGF0IGltcGxlbWVudHMKKzs7IHRoZSBjbC1nZW5lcmljIGZ1bmN0
aW9ucyBiZWxvdy4KKworOzs7IENvZGU6CisKKyhyZXF1aXJlICdkYnVzKQorCisoZGVmZ3JvdXAg
c3lzdGVtLXRhc2tiYXIgbmlsCisgICJTeXN0ZW0gR1VJIHRhc2tiYXIgaWNvbiBiYWRnZSwgcHJv
Z3Jlc3MgcmVwb3J0LCBhbGVydGluZy4iCisgIDpncm91cCAnY29udmVuaWVuY2UKKyAgOnZlcnNp
b24gIjMxLjEiKQorCisoZGVmdW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXItaW5z
dGFsbCAoKQorICAiSW5zdGFsbCBzeXN0ZW0tdGFza2JhciBwcm9ncmVzcyByZXBvcnRlcnMuIgor
ICAoYWRkLWhvb2sgJ3Byb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMgIydzeXN0ZW0t
dGFza2Jhci0tcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlKSkKKworKGRlZnVuIHN5c3RlbS10YXNr
YmFyLXByb2dyZXNzLXJlcG9ydGVyLXJlbW92ZSAoKQorICAiUmVtb3ZlIHN5c3RlbS10YXNrYmFy
IHByb2dyZXNzIHJlcG9ydGVycy4iCisgIChyZW1vdmUtaG9vayAncHJvZ3Jlc3MtcmVwb3J0ZXIt
dXBkYXRlLWZ1bmN0aW9ucyAjJ3N5c3RlbS10YXNrYmFyLS1wcm9ncmVzcy1yZXBvcnRlci11cGRh
dGUpKQorCisoZGVmY3VzdG9tIHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlciB0
CisgICJTdXBwbGVtZW50IHByb2dyZXNzLXJlcG9ydGVycyB3aXRoIEdVSSB0YXNrYmFyIGljb24g
cHJvZ3Jlc3MgYmFycy4iCisgIDp0eXBlICdib29sZWFuCisgIDpzZXQgKGxhbWJkYSAodmFyaWFi
bGUgdmFsdWUpCisgICAgICAgICAoc2V0LWRlZmF1bHQgdmFyaWFibGUgdmFsdWUpCisgICAgICAg
ICAoaWYgdmFsdWUKKyAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0
ZXItaW5zdGFsbCkKKyAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVy
LXJlbW92ZSkpKQorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gc3lzdGVtLXRhc2ti
YXItY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzIHQKKyAgIkNsZWFyIHRoZSBpY29uIGF0
dGVudGlvbiBpbmRpY2F0b3Igd2hlbiBhbnkgR1VJIGZyYW1lIGlzIGZvY3VzZWQuCitCYWNrIGVu
ZHMgdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yLCBzdWNo
IGFzCittYWNPUy9HTlVzdGVwIGFuZCBNUy1XaW5kb3dzLCBpZ25vcmUgdGhpcyBvcHRpb24uIgor
ICA6dHlwZSAnYm9vbGVhbgorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gc3lzdGVt
LXRhc2tiYXItZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSAiZW1hY3NjbGllbnQiCisgICJELUJ1cyBk
ZXNrdG9wIGZpbGUgYmFzZSBuYW1lIGZvciB0aGUgc3lzdGVtIHRhc2tiYXIgZGVzdGluYXRpb24u
CitUaGlzIHNob3VsZCBiZSB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkZXNrdG9wIGZpbGUgdXNlZCB0
byBsYXVuY2ggYW4gRW1hY3MKK2luc3RhbmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgbGF1bmNo
ZXIgZGVza3RvcCBmaWxlIGlzIGNhbGxlZAorXCJlbWFjcy5kZXNrdG9wXCIsIHRoaXMgb3B0aW9u
IHNob3VsZCBiZSBcImVtYWNzXCIuIgorICA6dHlwZSAnc3RyaW5nCisgIDp2ZXJzaW9uICIzMS4x
IikKKworKGRlZmN1c3RvbSBzeXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQgbmlsCisgICJOdW1i
ZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIEQtQnVzIHJlc3BvbnNlcy4KK0lmIG5pbCwg
dXNlIHRoZSBgZGJ1c2AgZGVmYXVsdCB0aW1lb3V0IGluIGBkYnVzLWNhbGwtbWV0aG9kYCB3aGlj
aCBpcworMjUwMDAgKGkuZS4sIDI1bXMpLgorCitJZiB5b3VyIEQtQnVzIGRlc2t0b3AgZXh0ZW5z
aW9uIG5lZWRzIGV4dHJhIHRpbWUgdG8gcmVzcG9uZCwgaW4gd2hpY2gKK2Nhc2UgYHN5c3RlbS10
YXNrYmFyLW1vZGVgIG1pZ2h0IG5vdCBpbml0aWFsaXplIG9yIHJlbGF0ZWQgZnVuY3Rpb25zCitt
aWdodCBub3QgdGFrZSB2aXNpYmxlIGVmZmVjdCwgYmluZCB0aGlzIHRvIGEgdmFsdWUgaGlnaGVy
IHRoYW4gMjUwMDAgdG8KK2ZpbmQgd2hhdCB3b3JrcyBmb3IgeW91ciBzeXN0ZW0uIgorICA6dHlw
ZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRGVmYXVsdCIgbmlsKSBuYXRudW0pCisgIDp2ZXJzaW9u
ICIzMS4xIikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgbmlsCisgICJHZW5l
cmljIHRhc2tiYXIgbWV0aG9kIHN5c3RlbSBkaXNwYXRjaGVyLiIpCisKKyhkZWZ1biBzeXN0ZW0t
dGFza2Jhci0tc2V0LWJhY2stZW5kICgpCisgICJEZXRlcm1pbmUgdGFza2JhciBob3N0IHN5c3Rl
bSB0eXBlLiIKKyAgOzsgT3JkZXIgbWF0dGVycyB0byBhY2NvbW1vZGF0ZSB0aGUgY2FzZXMgd2hl
cmUgYW4gTlMgb3IgTVMtV2luZG93cworICA7OyBidWlsZCBoYXZlIHRoZSBkYnVzIGZlYXR1cmUu
CisgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZAorICAgICAgICAoY29uZCAoKGVxICh3
aW5kb3ctc3lzdGVtKSAnbnMpICducykKKyAgICAgICAgICAgICAgKChlcSAod2luZG93LXN5c3Rl
bSkgJ3czMikgJ3czMikKKyAgICAgICAgICAgICAgKChhbmQgKGZlYXR1cmVwICdkYnVzYmluZCkK
KyAgICAgICAgICAgICAgICAgICAgKG1lbWJlciAib3JnLmZyZWVkZXNrdG9wLmxvZ2luMSIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJ1cy1saXN0LWFjdGl2YXRhYmxlLW5hbWVzIDpz
eXN0ZW0pKSkKKyAgICAgICAgICAgICAgICdkYnVzKQorICAgICAgICAgICAgICAodCBuaWwpKSkp
CisKKzs7OyMjI2F1dG9sb2FkCisoZGVmaW5lLW1pbm9yLW1vZGUgc3lzdGVtLXRhc2tiYXItbW9k
ZQorICAiU3lzdGVtIEdVSSB0YXNrYmFyIGljb24gYmFkZ2UsIHByb2dyZXNzIHJlcG9ydCwgYWxl
cnRpbmcuIgorICA6Z2xvYmFsIHQKKyAgKHdoZW4gbm9uaW50ZXJhY3RpdmUKKyAgICAod2FybiAi
QmF0Y2ggbW9kZSBkb2VzIG5vdCBzdXBwb3J0IGBzeXN0ZW0tdGFza2JhciciKSkKKyAgKGNvbmQg
KHN5c3RlbS10YXNrYmFyLW1vZGUKKyAgICAgICAgIChpZiAoc3lzdGVtLXRhc2tiYXItLXNldC1i
YWNrLWVuZCkKKyAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWVuYWJsZSkKKyAgICAgICAg
ICAgKHdhcm4gIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGBzeXN0ZW0tdGFza2JhciciKSkKKyAg
ICAgICAgICh3aGVuIHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlcgorICAgICAg
ICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVwb3J0ZXItaW5zdGFsbCkpKQorICAgICAg
ICAodAorICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyLXJlbW92ZSkK
KyAgICAgICAgICh3aGVuIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZAorICAgICAgICAgICAoc3lz
dGVtLXRhc2tiYXItLWRpc2FibGUpCisgICAgICAgICAgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1i
YWNrLWVuZCBuaWwpKSkpKQorCisoY2wtZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci0tZW5hYmxl
ICgpCisgICJFbmFibGUgdGhlIHN5c3RlbS10YXNrYmFyIGJhY2sgZW5kLiIpCisKKyhjbC1kZWZn
ZW5lcmljIHN5c3RlbS10YXNrYmFyLS1kaXNhYmxlICgpCisgICJEaXNhYmxlIHRoZSBzeXN0ZW0t
dGFza2JhciBiYWNrIGVuZC4iKQorCisoY2wtZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci1iYWRn
ZSAoJm9wdGlvbmFsIGNvdW50KQorICAiRGlzcGxheSBDT1VOVCBhcyBhbiBvdmVybGF5IG9uIHRo
ZSBzeXN0ZW0gdGFza2JhciBFbWFjcyBpY29uLgorSWYgQ09VTlQgaXMgYW4gaW50ZWdlciwgZGlz
cGxheSB0aGF0LgorSWYgQ09VTlQgaXMgYSBzdHJpbmcgb24gYmFjayBlbmRzIHRoYXQgc3VwcG9y
dCBzdHJpbmdzLCBkaXNwbGF5IHRoYXQuCitUaGUgc3RyaW5nIHNob3VsZCBiZSBzaG9ydC4KK09u
IGJhY2sgZW5kcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBzdHJpbmdzLCBjb252ZXJ0IENPVU5UIHRv
IGFuIGludGVnZXIKK3VzaW5nIGBzdHJpbmctdG8tbnVtYmVyJyBhbmQgdGVzdGluZyBgaW50ZWdl
cnAnLCBvciBuaWwgaWYgdGhhdCBmYWlscy4KK0lmIENPVU5UIGlzIG5pbCBvciBhbiBlbXB0eSBz
dHJpbmcsIHJlbW92ZSB0aGUgY291bnRlci4iKQorCisoY2wtZGVmZ2VuZXJpYyBzeXN0ZW0tdGFz
a2Jhci1hdHRlbnRpb24gKCZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJGbGFzaCB0aGUg
c3lzdGVtIHRhc2tiYXIgaWNvbiBhbmQvb3IgZnJhbWUgdG8gYWxlcnQgdGhlIHVzZXIuCitVUkdF
TkNZIGNhbiBiZSBvbmUgb2YgdGhlIHN5bWJvbHMgYGluZm9ybWF0aW9uYWwnLCBvciBgY3JpdGlj
YWwnLgorSWYgVVJHRU5DWSBpcyBuaWwsIGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yLgor
CitUaGUgYXR0ZW50aW9uIGluZGljYXRvciBpcyBjbGVhcmVkIGJ5IHRoZSBlYXJsaWVzdCBvZiBi
cmluZ2luZyB0aGUgRW1hY3MKK0dVSSBpbnRvIGZvY3VzLCBvciBhZnRlciBUSU1FT1VUIHNlY29u
ZHMuICBJZiBUSU1FT1VUIGlzIG5pbCwgdGhlIHN5c3RlbQorR1VJIGJlaGF2aW9yIGhhcyBwcmlv
cml0eS4KKworT24gc29tZSBiYWNrIGVuZHMsIGBjcml0aWNhbCcgaGFzIHRoZSBzYW1lIGVmZmVj
dCBhcyBgaW5mb3JtYXRpb25hbCcuIikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRhc2tiYXIt
cHJvZ3Jlc3MgKCZvcHRpb25hbCBwcm9ncmVzcykKKyAgIkRpc3BsYXkgYSBwcm9ncmVzcyBpbmRp
Y2F0b3Igb3ZlcmxheSBvbiB0aGUgc3lzdGVtIHRhc2tiYXIgaWNvbi4KK1BST0dSRVNTIGlzIGEg
ZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAuCitJZiBQUk9HUkVTUyBpcyBuaWwsIHJlbW92
ZSB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tdmFs
aWRhdGUtcHJvZ3Jlc3MgKHByb2dyZXNzKQorICAiUmV0dXJuIFBST0dSRVNTIGFzIGEgZmxvYXQg
aW4gdGhlIHJhbmdlIDAuMCB0byAxLjAsIG9yIG5pbC4iCisgICh3aGVuIChuYXRudW1wIHByb2dy
ZXNzKQorICAgIChzZXRxIHByb2dyZXNzIChmbG9hdCBwcm9ncmVzcykpKQorICAod2hlbiAoYW5k
IHByb2dyZXNzICg+PSBwcm9ncmVzcyAwLjApICg8PSBwcm9ncmVzcyAxLjApKQorICAgIHByb2dy
ZXNzKSkKKworDAorOzsgYHByb2dyZXNzLXJlcG9ydGVyJyBzdXBwb3J0LgorCisoZGVmdW4gc3lz
dGVtLXRhc2tiYXItLXByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZSAoX3JlcG9ydGVyIHN0YXRlIHBl
cmNlbnRhZ2UgaW5kZXgpCisgICJgcHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlYCBjYWxsYmFj
ay4iCisgIChwY2FzZSBzdGF0ZQorICAgICgndXBkYXRlCisgICAgIChjb25kIChwZXJjZW50YWdl
CisgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKC8gcGVyY2VudGFnZSAxMDAu
MCkpKQorICAgICAgICAgICAoaW5kZXgKKyAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci1wcm9n
cmVzcyAoLyAoMSsgaW5kZXgpIDQuMCkpKSkpCisgICAgKCdkb25lCisgICAgIChzeXN0ZW0tdGFz
a2Jhci1wcm9ncmVzcyBuaWwpKSkpCisKKwwKKzs7IEQtQnVzIHN1cHBvcnQuCisKKyhkZWZjb25z
dCBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNlICJjb20uY2Fub25pY2FsLlVuaXR5IikKKyhk
ZWZjb25zdCBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1pbnRlcmZhY2UgImNvbS5jYW5vbmljYWwuVW5p
dHkuTGF1bmNoZXJFbnRyeSIpCisKKyhkZWZ2YXIgc3lzdGVtLXRhc2tiYXItLWRidXMtYXR0ZW50
aW9uIG5pbAorICAiTm9uLW5pbCB3aGVuIGF0dGVudGlvbiBpcyByZXF1ZXN0ZWQuIikKKworKGRl
ZnVuIHN5c3RlbS10YXNrYmFyLS1kYnVzLXNlbmQtc2lnbmFsIChtZXNzYWdlKQorICAiU2VuZCBN
RVNTQUdFIHRvIHRoZSBELUJ1cyBzeXN0ZW0gdGFza2JhciBzZXJ2aWNlLiIKKyAgKGxldCAoKGFw
cC11cmkKKyAgICAgICAgIChmb3JtYXQgImFwcGxpY2F0aW9uOi8vJXMuZGVza3RvcCIKKyAgICAg
ICAgICAgICAgICAgc3lzdGVtLXRhc2tiYXItZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSkpKQorICAg
IChkYnVzLXNlbmQtc2lnbmFsCisgICAgIDpzZXNzaW9uCisgICAgIHN5c3RlbS10YXNrYmFyLS1k
YnVzLXNlcnZpY2UKKyAgICAgIi8iCisgICAgIHN5c3RlbS10YXNrYmFyLS1kYnVzLWludGVyZmFj
ZQorICAgICAiVXBkYXRlIgorICAgICBhcHAtdXJpCisgICAgIG1lc3NhZ2UpKSkKKworKGRlZnVu
IHN5c3RlbS10YXNrYmFyLS1kYnVzLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1cyAoKQor
ICAiQ2xlYXIgYW4gYWN0aXZlIEQtQnVzIGF0dGVudGlvbiByZXF1ZXN0IGlmIGFueSBmcmFtZSBp
cyBmb2N1c2VkLiIKKyAgKHdoZW4gKGFuZCBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1hdHRlbnRpb24K
KyAgICAgICAgICAgICAoY2F0Y2ggOmNsZWFyCisgICAgICAgICAgICAgICAoZG9saXN0IChmcmFt
ZSAoZnJhbWUtbGlzdCkpCisgICAgICAgICAgICAgICAgICh3aGVuIChlcSAoZnJhbWUtZm9jdXMt
c3RhdGUgZnJhbWUpIHQpCisgICAgICAgICAgICAgICAgICAgKHRocm93IDpjbGVhciB0KSkpKSkK
KyAgICAoc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uIG5pbCkpKQorCisoZGVmdW4gc3lzdGVtLXRh
c2tiYXItZGJ1cy1waW5nLXNlcnZpY2UgKCkKKyAgIlJldHVybiBub24tbmlsIGlmIGBzeXN0ZW0t
dGFza2Jhci0tZGJ1cy1zZXJ2aWNlJyByZXNwb25kcy4KK1JldHVybiBuaWwgaWYgbm8gcmVzcG9u
c2Ugd2l0aGluIGBzeXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQnLiIKKyAgKGRidXMtcGluZwor
ICAgOnNlc3Npb24KKyAgIHN5c3RlbS10YXNrYmFyLS1kYnVzLXNlcnZpY2UKKyAgIHN5c3RlbS10
YXNrYmFyLWRidXMtdGltZW91dCkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItLWVu
YWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5
c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICdkYnVzKSkpCisgICh1bmxlc3MgKHN5c3RlbS10
YXNrYmFyLWRidXMtcGluZy1zZXJ2aWNlKQorICAgIChlcnJvciAiRC1CdXMgc2VydmljZSBgJXMn
IHVuYXZhaWxhYmxlIiBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNlKSkKKyAgKHdoZW4gc3lz
dGVtLXRhc2tiYXItY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzCisgICAgKGFkZC1mdW5j
dGlvbiA6YWZ0ZXIgYWZ0ZXItZm9jdXMtY2hhbmdlLWZ1bmN0aW9uCisgICAgICAgICAgICAgICAg
ICAjJ3N5c3RlbS10YXNrYmFyLS1kYnVzLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1cykp
KQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLS1kaXNhYmxlICgmY29udGV4dAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNr
LWVuZCAoZXFsICdkYnVzKSkpCisgIChyZW1vdmUtZnVuY3Rpb24gYWZ0ZXItZm9jdXMtY2hhbmdl
LWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgIydzeXN0ZW0tdGFza2Jhci0tZGJ1cy1jbGVh
ci1hdHRlbnRpb24tb24tZnJhbWUtZm9jdXMpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNr
YmFyLWJhZGdlICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICdkYnVzKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBjb3VudCkKKyAgIkRpc3BsYXkgQ09VTlQgYXMg
YW4gb3ZlcmxheSBvbiB0aGUgc3lzdGVtIHRhc2tiYXIgRW1hY3MgaWNvbi4KK0lmIENPVU5UIGlz
IGFuIGludGVnZXIsIGRpc3BsYXkgdGhhdC4gIElmIENPVU5UIGlzIGEgc3RyaW5nLCBjb252ZXJ0
IGl0Cit0byBhbiBpbnRlZ2VyLCBvciBuaWwgaWYgdGhhdCBmYWlscy4gIElmIENPVU5UIGlzIGFu
eSBvdGhlciB0eXBlLCB1c2UKK25pbC4gIElmIENPVU5UIGlzIG5pbCBvciBhbiBlbXB0eSBzdHJp
bmcsIHJlbW92ZSB0aGUgYmFkZ2UuCitOb3RlOiBUaGUgVW5pdHkgRC1CdXMgcHJvdG9jb2wgc3Vw
cG9ydHMgb25seSBpbnRlZ2VyIGJhZGdlcy4iCisgIChjb25kICgoc3RyaW5ncCBjb3VudCkKKyAg
ICAgICAgIChpZiAoc3RyaW5nLWVtcHR5LXAgY291bnQpCisgICAgICAgICAgICAgKHNldHEgY291
bnQgbmlsKQorICAgICAgICAgICAobGV0ICgoY291bnQtMSAoc3RyaW5nLXRvLW51bWJlciBjb3Vu
dCkpKQorICAgICAgICAgICAgIChzZXRxIGNvdW50IChpZiAoaW50ZWdlcnAgY291bnQtMSkgY291
bnQtMSBuaWwpKSkpKQorICAgICAgICAoKG5vdCAoaW50ZWdlcnAgY291bnQpKQorICAgICAgICAg
KHNldHEgY291bnQgbmlsKSkpCisgIChzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZW5kLXNpZ25hbAor
ICAgYCgoOmRpY3QtZW50cnkgImNvdW50LXZpc2libGUiCisgICAgICAgICAgICAgICAgICAoOnZh
cmlhbnQgOmJvb2xlYW4gLChub3QgKG51bGwgY291bnQpKSkpCisgICAgICg6ZGljdC1lbnRyeSAi
Y291bnQiCisgICAgICAgICAgICAgICAgICAoOnZhcmlhbnQgOnVpbnQzMiAsKGlmIChudWxsIGNv
dW50KSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpKSkp
KQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiAoJmNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJh
Y2stZW5kIChlcWwgJ2RidXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJSZXF1ZXN0IFVSR0VOQ1kgdXNlciBh
dHRlbnRpb24gb24gdGhlIHN5c3RlbSB0YXNrYmFyIEVtYWNzIGljb24uCitUaGUgcmVxdWVzdCB3
aWxsIHRpbWUgb3V0IHdpdGhpbiB0aGUgVElNRU9VVCBzZWNvbmRzIGludGVydmFsLgorVGhlIFVu
aXR5IEQtQnVzIHByb3RvY29sIGRvZXMgbm90IHN1cHBvcnQgZGlmZmVyZW50aWF0ZWQgdXJnZW5j
aWVzLiIKKyAgKHNldHEgc3lzdGVtLXRhc2tiYXItLWRidXMtYXR0ZW50aW9uIHVyZ2VuY3kpCisg
IChzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZW5kLXNpZ25hbAorICAgYCgoOmRpY3QtZW50cnkgInVy
Z2VudCIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFudCA6Ym9vbGVhbiAsKG5vdCAobnVsbCB1
cmdlbmN5KSkpKSkpCisgICh3aGVuIChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAgIChydW4td2l0
aC10aW1lcgorICAgICB0aW1lb3V0CisgICAgIG5pbAorICAgICAjJ3N5c3RlbS10YXNrYmFyLWF0
dGVudGlvbiBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyAo
JmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0t
dGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGEgcHJvZ3Jlc3Mg
YmFyIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIGljb24uCitQUk9HUkVTUyBpcyBhIGZs
b2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLgorSWYgUFJPR1JFU1MgaXMgbmlsLCByZW1vdmUg
dGhlIHByb2dyZXNzIGJhci4iCisgIChzZXRxIHByb2dyZXNzIChzeXN0ZW0tdGFza2Jhci0tdmFs
aWRhdGUtcHJvZ3Jlc3MgcHJvZ3Jlc3MpKQorICAoc3lzdGVtLXRhc2tiYXItLWRidXMtc2VuZC1z
aWduYWwKKyAgIGAoKDpkaWN0LWVudHJ5ICJwcm9ncmVzcy12aXNpYmxlIgorICAgICAgICAgICAg
ICAgICAgKDp2YXJpYW50IDpib29sZWFuICwobm90IChudWxsIHByb2dyZXNzKSkpKQorICAgICAo
OmRpY3QtZW50cnkgInByb2dyZXNzIgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDpkb3Vi
bGUgLChpZiAobnVsbCBwcm9ncmVzcykgMCBwcm9ncmVzcykpKSkpKQorCisMCis7OyBtYWNPUy9H
TlVzdGVwIE5TIHN1cHBvcnQuCisKKyhkZWNsYXJlLWZ1bmN0aW9uIG5zLWJhZGdlICJuc2Zucy5t
IikKKyhkZWNsYXJlLWZ1bmN0aW9uIG5zLXJlcXVlc3QtdXNlci1hdHRlbnRpb24gIm5zZm5zLm0i
KQorKGRlY2xhcmUtZnVuY3Rpb24gbnMtcHJvZ3Jlc3MtaW5kaWNhdG9yICJuc2Zucy5tIikKKwor
KGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZW5hYmxlICgmY29udGV4dAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChl
cWwgJ25zKSkpCisgIChpZ25vcmUpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLS1k
aXNhYmxlICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICducykpKQorICAoaWdub3JlKSkKKworKGNs
LWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRnZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIGNvdW50KQor
ICAiRGlzcGxheSBDT1VOVCBhcyBhbiBvdmVybGF5IG9uIHRoZSBEb2NrIGJhZGdlLgorSWYgQ09V
TlQgaXMgYW4gaW50ZWdlciBvciBhIG5vbi1lbXB0eSBzdHJpbmcsIGRpc3BsYXkgdGhhdC4gIElm
IENPVU5UIGlzCituaWwgb3IgYW4gZW1wdHkgc3RyaW5nLCBjbGVhciB0aGUgYmFkZ2Ugb3Zlcmxh
eS4KK05vdGU6IE5TIHdpbGwgYWJicmV2aWF0ZSBsb25nIHN0cmluZ3MgdG8gZml0IHRoZSBiYWRn
ZSdzIGFsbG9jYXRlZAorc3BhY2UuIgorICAoY29uZCAoKHN0cmluZ3AgY291bnQpCisgICAgICAg
ICAod2hlbiAoc3RyaW5nLWVtcHR5LXAgY291bnQpCisgICAgICAgICAgIChzZXRxIGNvdW50IG5p
bCkpKQorICAgICAgICAoKGludGVnZXJwIGNvdW50KQorICAgICAgICAgKHNldHEgY291bnQgKG51
bWJlci10by1zdHJpbmcgY291bnQpKSkKKyAgICAgICAgKHQgKHNldHEgY291bnQgbmlsKSkpCisg
IChucy1iYWRnZSBjb3VudCkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItYXR0ZW50
aW9uICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
eXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJSZXF1ZXN0
IFVSR0VOQ1kgdXNlciBhdHRlbnRpb24gb24gdGhlIERvY2suCitUaGUgYXR0ZW50aW9uIGluZGlj
YXRvciB3aWxsIGJlIGNsZWFyZWQgYWZ0ZXIgVElNRU9VVCBzZWNvbmRzLiIKKyAgKG5zLXJlcXVl
c3QtdXNlci1hdHRlbnRpb24gdXJnZW5jeSkKKyAgKHdoZW4gKGFuZCB1cmdlbmN5IHRpbWVvdXQp
CisgICAgKHJ1bi13aXRoLXRpbWVyCisgICAgIHRpbWVvdXQKKyAgICAgbmlsCisgICAgICMnc3lz
dGVtLXRhc2tiYXItYXR0ZW50aW9uIG5pbCkpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNr
YmFyLXByb2dyZXNzICgmY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFsICducykpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5
IGEgcHJvZ3Jlc3MgYmFyIG92ZXJsYXkgb24gdGhlIERvY2sgYW5kIEFwcCBTd2l0Y2hlci4KK1BS
T0dSRVNTIGlzIGEgZmxvYXQgaW4gdGhlIHJhbmdlIDAuMCB0byAxLjAuCitJZiBQUk9HUkVTUyBp
cyBuaWwsIHJlbW92ZSB0aGUgcHJvZ3Jlc3MgYmFyLiIKKyAgKG5zLXByb2dyZXNzLWluZGljYXRv
ciAoc3lzdGVtLXRhc2tiYXItLXZhbGlkYXRlLXByb2dyZXNzIHByb2dyZXNzKSkpCisKKwwKKzs7
IE1TLVdpbmRvd3Mgc3VwcG9ydC4KKworKGRlY2xhcmUtZnVuY3Rpb24gdzMyLWJhZGdlICJ3MzJm
bnMuYyIpCisoZGVjbGFyZS1mdW5jdGlvbiB3MzItcmVxdWVzdC11c2VyLWF0dGVudGlvbiAidzMy
Zm5zLmMiKQorKGRlY2xhcmUtZnVuY3Rpb24gdzMyLXByb2dyZXNzLWluZGljYXRvciAidzMyZm5z
LmMiKQorCisoZGVmdmFyIHN5c3RlbS10YXNrYmFyLXczMi1iYWRnZS1iYWNrZ3JvdW5kICIjZTc1
ODU3IiA7IHJlZGlzaAorICAidzMyIGJhZGdlIGJhY2tncm91bmQgUkdCIHRyaXBsZSBzdHJpbmcu
IikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtZm9yZWdyb3VuZCAiI2ZmZmZm
ZiIgOyB3aGl0ZQorICAidzMyIGJhZGdlIGZvcmVncm91bmQgUkdCIHRyaXBsZSBzdHJpbmcuIikK
KworKGRlZnVuIHN5c3RlbS10YXNrYmFyLS13MzItY2xlYXItZnJhbWUtaW5kaWNhdG9ycyAoZnJh
bWUpCisgIDs7IE5PVEU6IFVwZGF0ZSB0aGUgYmVsb3cgaWYgYWRkaW5nIG5ldyB3MzIgc3lzdGVt
LXRhc2tiYXIgZnVuY3Rpb25zLgorICAod2l0aC1zZWxlY3RlZC1mcmFtZSBmcmFtZQorICAgIChz
eXN0ZW0tdGFza2Jhci1iYWRnZSBuaWwpCisgICAgKHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBu
aWwpCisgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzIG5pbCkpKQorCisoY2wtZGVmbWV0aG9k
IHN5c3RlbS10YXNrYmFyLS1lbmFibGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAndzMyKSkpCisg
IDs7IENsZWFyIHN5c3RlbS10YXNrYmFyIGluZGljYXRvcnMgZm9yIGEgZnJhbWUgd2hlbiBpdCBp
cyBkZWxldGVkLgorICAoYWRkLWhvb2sgJ2RlbGV0ZS1mcmFtZS1mdW5jdGlvbnMKKyAgICAgICAg
ICAgICMnc3lzdGVtLXRhc2tiYXItLXczMi1jbGVhci1mcmFtZS1pbmRpY2F0b3JzKSkKKworKGNs
LWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVx
bCAndzMyKSkpCisgIChyZW1vdmUtaG9vayAnZGVsZXRlLWZyYW1lLWZ1bmN0aW9ucworICAgICAg
ICAgICAgICAgIydzeXN0ZW0tdGFza2Jhci0tdzMyLWNsZWFyLWZyYW1lLWluZGljYXRvcnMpKQor
CisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFyLWJhZGdlICgmY29udGV4dAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZCAoZXFs
ICd3MzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIGNv
dW50KQorICAiRGlzcGxheSBhIENPVU5UIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIGlj
b24uCitUaGUgdGFza2JhciBpY29uIHRhcmdldCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVj
dGVkIGZyYW1lLgorCitJZiBDT1VOVCBpcyBhbiBpbnRlZ2VyIG9yIGEgbm9uLWVtcHR5IHN0cmlu
ZywgZGlzcGxheSB0aGF0LiAgSWYgQ09VTlQgaXMKK25pbCBvciBhbiBlbXB0eSBzdHJpbmcsIGNs
ZWFyIHRoZSBiYWRnZS4KKworRHVlIHRvIE1TLVdpbmRvd3MgaWNvbiBvdmVybGF5IHNpemUgbGlt
aXRhdGlvbnMsIGlmIENPVU5UIGlzIGFuIGludGVnZXIKK2FuZCBpcyBvdXRzaWRlIHRoZSByYW5n
ZSAtOTkgdG8gOTksIGRpc3BsYXkgXCItOTlcIiBhbmQgXCI5OStcIiwKK3Jlc3BlY3RpdmVseSwg
aWYgQ09VTlQgaXMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4gMiBjaGFyYWN0ZXJzIHRydW5jYXRlIGl0
Cit1c2luZyBgdHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRoYC4KKworQ29uc3VsdCBgc3lzdGVtLXRh
c2tiYXItdzMyLWJhZGdlLWJhY2tncm91bmRgIGFuZAorYHN5c3RlbS10YXNrYmFyLXczMi1iYWRn
ZS1mb3JlZ3JvdW5kYCBmb3IgdGhlIGJhY2tncm91bmQgYW5kIGZvcmVncm91bmQKK2NvbG9ycyBm
b3IgdGhlIHBhaW50ZWQgb3ZlcmxheS4iCisgIChjb25kICgoc3RyaW5ncCBjb3VudCkKKyAgICAg
ICAgIChpZiAoc3RyaW5nLWVtcHR5LXAgY291bnQpCisgICAgICAgICAgICAgKHNldHEgY291bnQg
bmlsKQorICAgICAgICAgICAod2hlbiAobGVuZ3RoPiBjb3VudCAyKQorICAgICAgICAgICAgIChz
ZXRxIGNvdW50ICh0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGggY291bnQgMyAwIG5pbCB0KSkpKSkK
KyAgICAgICAgKChpbnRlZ2VycCBjb3VudCkKKyAgICAgICAgIChpZiAoYW5kICg+IGNvdW50IC0x
MDApCisgICAgICAgICAgICAgICAgICAoPCBjb3VudCAxMDApKQorICAgICAgICAgICAgIChzZXRx
IGNvdW50IChudW1iZXItdG8tc3RyaW5nIGNvdW50KSkKKyAgICAgICAgICAgKGlmICg8IGNvdW50
IDApCisgICAgICAgICAgICAgICAoc2V0cSBjb3VudCAiLTk5IikKKyAgICAgICAgICAgICAoc2V0
cSBjb3VudCAiOTkrIikpKSkKKyAgICAgICAgKHQgKHNldHEgY291bnQgbmlsKSkpCisgICh3MzIt
YmFkZ2UgY291bnQKKyAgICAgICAgICAgICBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtYmFja2dy
b3VuZAorICAgICAgICAgICAgIHN5c3RlbS10YXNrYmFyLXczMi1iYWRnZS1mb3JlZ3JvdW5kKSkK
KworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gKCZjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNr
LWVuZCAoZXFsICd3MzIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQpCisgICJSZXF1ZXN0IFVSR0VOQ1kgdXNlciBhdHRl
bnRpb24gb24gdGhlIHN5c3RlbSB0YXNrYmFyIGljb24uCitJbmRpY2F0ZSB0aGUgaWNvbiBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGZyYW1lLgorSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9s
IGBpbmZvcm1hdGlvbmFsJywgZmxhc2ggdGhlIHRhc2tiYXIgaWNvbi4KK0lmIFVSR0VOQ1kgaXMg
dGhlIHN5bWJvbCBgY3JpdGljYWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uIGFuZCB0aGUKK01T
LVdpbmRvd3Mgd2luZG93IGZyYW1lLgorQ2xlYXIgYXR0ZW50aW9uIGluZGljYXRvciBhZnRlciBU
SU1FT1VUIHNlY29uZHMuICBJZiBUSU1FT1VUIGlzIG5pbCwKK2RlZmF1bHQgdG8gTVMtV2luZG93
cyBkZWZhdWx0IGJlaGF2aW9yLiIKKyAgKHczMi1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uIHVyZ2Vu
Y3kpCisgICh3aGVuIChhbmQgdXJnZW5jeSB0aW1lb3V0KQorICAgIChydW4td2l0aC10aW1lcgor
ICAgICB0aW1lb3V0CisgICAgIG5pbAorICAgICAjJ3N5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBu
aWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyAoJmNvbnRleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0t
YmFjay1lbmQgKGVxbCAndzMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZvcHRpb25hbCBwcm9ncmVzcykKKyAgIkRpc3BsYXkgYSBwcm9ncmVzcyBiYXIgb24gdGhl
IHN5c3RlbSB0YXNrYmFyIGljb24uCitQUk9HUkVTUyBpcyBhIGZsb2F0IGluIHRoZSByYW5nZSAw
LjAgdG8gMS4wLgorSWYgUFJPR1JFU1MgaXMgbmlsLCByZW1vdmUgdGhlIHByb2dyZXNzIGJhci4i
CisgICh3MzItcHJvZ3Jlc3MtaW5kaWNhdG9yIChzeXN0ZW0tdGFza2Jhci0tdmFsaWRhdGUtcHJv
Z3Jlc3MgcHJvZ3Jlc3MpKSkKKworDAorCisocHJvdmlkZSAnc3lzdGVtLXRhc2tiYXIpCisKKzs7
OyBzeXN0ZW0tdGFza2Jhci5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL3NyYy9uc2Zucy5tIGIv
c3JjL25zZm5zLm0KaW5kZXggMzUyOGM0YWNkNTAuLjFhOGY5NWMxNGVmIDEwMDY0NAotLS0gYS9z
cmMvbnNmbnMubQorKysgYi9zcmMvbnNmbnMubQpAQCAtMzY3NCw2ICszNjc0LDEyOSBAQCBUaGUg
cG9zaXRpb24gaXMgcmV0dXJuZWQgYXMgYSBjb25zIGNlbGwgKFggLiBZKSBvZiB0aGUKICAgcmV0
dXJuIFFuaWw7CiB9CiAKK0RFRlVOICgibnMtYmFkZ2UiLCBGbnNfYmFkZ2UsIFNuc19iYWRnZSwg
MSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIFNldCB0aGUgYXBwIGljb24gYmFkZ2UgdG8gQkFER0Uu
CitCQURHRSBzaG91bGQgYmUgYSBzdHJpbmcgc2hvcnQgZW5vdWdoIHRvIGRpc3BsYXkgbmljZWx5
IGluIHRoZSBzaG9ydAorc3BhY2UgaW50ZW5kZWQgZm9yIGJhZGdlcy4KK0lmIEJBREdFIGlzIG5p
bCwgY2xlYXIgdGhlIGFwcCBiYWRnZS4gICovKQorICAoTGlzcF9PYmplY3QgYmFkZ2UpCit7Cisg
IGJsb2NrX2lucHV0ICgpOworICBpZiAoTklMUCAoYmFkZ2UpKQorICAgIFtbTlNBcHAgZG9ja1Rp
bGVdIHNldEJhZGdlTGFiZWw6IG5pbF07CisgIGVsc2UKKyAgICB7CisgICAgICBDSEVDS19TVFJJ
TkcgKGJhZGdlKTsKKyAgICAgIFtbTlNBcHAgZG9ja1RpbGVdIHNldEJhZGdlTGFiZWw6CisJCQkg
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzogU1NEQVRBIChiYWRnZSldXTsKKyAgICB9
CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiBRbmlsOworfQorCisvKiBVc2UgLTEgdG8g
aW5kaWNhdGUgbm8gYWN0aXZlIHJlcXVlc3QuICAqLworc3RhdGljIE5TSW50ZWdlciBuc19yZXF1
ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gLTE7CisKK0RFRlVOICgibnMtcmVxdWVzdC11c2VyLWF0
dGVudGlvbiIsCisgICAgICAgRm5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sCisgICAgICAgU25z
X3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sCisgICAgICAgMSwgMSwgMCwKKyAgICAgICBkb2M6IC8q
IEJvdW5jZSB0aGUgYXBwIGRvY2sgaWNvbiB0byByZXF1ZXN0IHVzZXIgYXR0ZW50aW9uLgorSWYg
VVJHRU5DWSBuaWwsIGNhbmNlbCB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdCwgaWYgYW55LgorSWYg
VVJHRU5DWSBpcyB0aGUgc3ltYm9sIGBpbmZvcm1hdGlvbmFsJywgYm91bmNpbmcgbGFzdHMgYSBm
ZXcgc2Vjb25kcy4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgY3JpdGljYWwnLCBib3VuY2lu
ZyBsYXN0cyB1bnRpbCBFbWFjcyBpcworZm9jdXNlZC4gICovKQorICAoTGlzcF9PYmplY3QgdXJn
ZW5jeSkKK3sKKyAgYmxvY2tfaW5wdXQgKCk7CisgIGlmIChuc19yZXF1ZXN0X3VzZXJfYXR0ZW50
aW9uX2lkICE9IC0xKQorICAgIHsKKyAgICAgIFtOU0FwcCBjYW5jZWxVc2VyQXR0ZW50aW9uUmVx
dWVzdDogbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZF07CisgICAgICBuc19yZXF1ZXN0X3Vz
ZXJfYXR0ZW50aW9uX2lkID0gLTE7CisgICAgfQorICBpZiAoIU5JTFAgKHVyZ2VuY3kpICYmIFNZ
TUJPTFAgKHVyZ2VuY3kpKQorICAgIHsKKyAgICAgIGlmIChFUSAodXJnZW5jeSwgUWluZm9ybWF0
aW9uYWwpKQorCW5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faWQgPSBbTlNBcHAgcmVxdWVzdFVz
ZXJBdHRlbnRpb246CisJCQkJCQlOU0luZm9ybWF0aW9uYWxSZXF1ZXN0XTsKKyAgICAgIGVsc2Ug
aWYgKEVRICh1cmdlbmN5LCBRY3JpdGljYWwpKQorCW5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25f
aWQgPSBbTlNBcHAgcmVxdWVzdFVzZXJBdHRlbnRpb246CisJCQkJCQlOU0NyaXRpY2FsUmVxdWVz
dF07CisgICAgfQorICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKworREVG
VU4gKCJucy1wcm9ncmVzcy1pbmRpY2F0b3IiLAorICAgICAgIEZuc19wcm9ncmVzc19pbmRpY2F0
b3IsCisgICAgICAgU25zX3Byb2dyZXNzX2luZGljYXRvciwKKyAgICAgICAxLCAxLCAwLAorICAg
ICAgIGRvYzogLyogQm91bmNlIHRoZSBhcHAgZG9jayBpY29uIHRvIHJlcXVlc3QgdXNlciBhdHRl
bnRpb24uCisJICAgICAgIFBST0dSRVNTIGlzIGEgZmxvYXQgYmV0d2VlbiAwLjAgYW5kIDEuMC4K
KwkgICAgICAgSWYgUFJPR1JFU1MgaXMgbmlsLCByZW1vdmUgdGhlIHByb2dyZXNzIGluZGljYXRv
ci4gICovKQorICAoTGlzcF9PYmplY3QgcHJvZ3Jlc3MpCit7CisgIGJsb2NrX2lucHV0ICgpOwor
ICBOU0RvY2tUaWxlICpkb2NrX3RpbGUgPSBbTlNBcHAgZG9ja1RpbGVdOworICAvKiBVc2UgTlNM
ZXZlbEluZGljYXRvciB3aXRoIHJlbGlhYmxlIHJlZHJhd3MsIG5vdCBOU1Byb2dyZXNzSW5kaWNh
dG9yLiAgKi8KKyAgTlNMZXZlbEluZGljYXRvciAqbGV2ZWxfaW5kaWNhdG9yOworICAvKiBSZXVz
ZSB0aGUgaW5kaWNhdG9yIHN1YnZpZXcgb3IgY3JlYXRlIG9uZS4gKi8KKyAgaWYgKGRvY2tfdGls
ZS5jb250ZW50VmlldworICAgICAgJiYgW1tkb2NrX3RpbGUuY29udGVudFZpZXcgc3Vidmlld3Nd
IGNvdW50XSA+IDAKKyAgICAgICYmIFtbW2RvY2tfdGlsZS5jb250ZW50VmlldyBzdWJ2aWV3c10g
bGFzdE9iamVjdF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzS2luZE9mQ2xhc3M6W05TTGV2
ZWxJbmRpY2F0b3IgY2xhc3NdXSkKKyAgICBsZXZlbF9pbmRpY2F0b3IgPQorICAgICAgKE5TTGV2
ZWxJbmRpY2F0b3IgKilbW1tkb2NrX3RpbGUgY29udGVudFZpZXddIHN1YnZpZXdzXSBsYXN0T2Jq
ZWN0XTsKKyAgICBlbHNlCisgICAgICB7CisJaWYgKCFkb2NrX3RpbGUuY29udGVudFZpZXcpCisJ
ICB7CisJICAgIE5TSW1hZ2VWaWV3KiBpbWFnZV92aWV3ID0gW1tOU0ltYWdlVmlldyBhbGxvY10g
aW5pdF07CisJICAgIFtpbWFnZV92aWV3IHNldEltYWdlOiBbTlNBcHAgYXBwbGljYXRpb25JY29u
SW1hZ2VdXTsKKwkgICAgW2RvY2tfdGlsZSBzZXRDb250ZW50VmlldzogaW1hZ2Vfdmlld107CisJ
ICB9CisJLyogU2V0IHdpZHRoIHRvIHRoZSB3aWR0aCBvZiB0aGUgYXBwbGljYXRpb24gaWNvbiwg
YW5kIGhlaWdodCB0bworCSAgICUgb2YgdGhlIGljb24gaGVpZ2h0IHRvIHJlc3BlY3Qgc2NhbGVk
IGljb25zLiAgKi8KKwlmbG9hdCB3aWR0aCA9IFtbTlNBcHAgYXBwbGljYXRpb25JY29uSW1hZ2Vd
IHNpemVdLndpZHRoOworCWZsb2F0IGhlaWdodCA9IDAuMTAgKiBbW05TQXBwIGFwcGxpY2F0aW9u
SWNvbkltYWdlXSBzaXplXS5oZWlnaHQ7CisJbGV2ZWxfaW5kaWNhdG9yID0KKwkgIFtbTlNMZXZl
bEluZGljYXRvciBhbGxvY10gaW5pdFdpdGhGcmFtZToKKwkJCQkgICAgICBOU01ha2VSZWN0ICgw
LjAsIDAuMCwKKwkJCQkJCSAgd2lkdGgsIGhlaWdodCldOworCVtsZXZlbF9pbmRpY2F0b3Igc2V0
V2FudHNMYXllcjogWUVTXTsgLyogUGVyZm9ybWFuY2UuICAqLworCVtsZXZlbF9pbmRpY2F0b3Ig
c2V0RW5hYmxlZDogTk9dOyAvKiBJZ25vcmUgbW91c2UgaW5wdXQuICAqLworCVtsZXZlbF9pbmRp
Y2F0b3Igc2V0TGV2ZWxJbmRpY2F0b3JTdHlsZToKKwkJCSAgIE5TTGV2ZWxJbmRpY2F0b3JTdHls
ZUNvbnRpbnVvdXNDYXBhY2l0eV07CisJLyogTWF0Y2ggTlNQcm9ncmVzc0luZGljYXRvciBjb2xv
ci4gICovCisJW2xldmVsX2luZGljYXRvciBzZXRGaWxsQ29sb3I6IFtOU0NvbG9yIGNvbnRyb2xB
Y2NlbnRDb2xvcl1dOworCVtsZXZlbF9pbmRpY2F0b3Igc2V0TWluVmFsdWU6IDAuMF07CisJW2xl
dmVsX2luZGljYXRvciBzZXRNYXhWYWx1ZTogMS4wXTsKKwkvKiBUaGUgY29udGVudFZpZXcgdGFr
ZXMgb3duZXJzaGlwLiAgKi8KKwlbZG9ja190aWxlLmNvbnRlbnRWaWV3IGFkZFN1YnZpZXc6IGxl
dmVsX2luZGljYXRvcl07CisgICAgICB9CisgIGRvdWJsZSBwcm9ncmVzc192YWx1ZTsKKyAgQk9P
TCBoaWRlID0gKE5JTFAgKHByb2dyZXNzKQorCSAgICAgICB8fCAoIU5JTFAgKHByb2dyZXNzKSAm
JiAhKEZMT0FUUCAocHJvZ3Jlc3MpKSkpOworICBpZiAoIWhpZGUpCisgICAgeworICAgICAgcHJv
Z3Jlc3NfdmFsdWUgPSBYRkxPQVRfREFUQSAocHJvZ3Jlc3MpOworICAgICAgaGlkZSA9IChwcm9n
cmVzc192YWx1ZSA8IDAuMCB8fCBwcm9ncmVzc192YWx1ZSA+IDEuMCk7CisgICAgfQorICBpZiAo
aGlkZSkKKyAgICB7CisgICAgICBbbGV2ZWxfaW5kaWNhdG9yIHNldERvdWJsZVZhbHVlOiAwLjBd
OworICAgICAgW2xldmVsX2luZGljYXRvciBzZXRIaWRkZW46IFlFU107CisgICAgfQorICBlbHNl
CisgICAgeworICAgICAgW2xldmVsX2luZGljYXRvciBzZXREb3VibGVWYWx1ZTogcHJvZ3Jlc3Nf
dmFsdWVdOworICAgICAgW2xldmVsX2luZGljYXRvciBzZXRIaWRkZW46IE5PXTsKKyAgICB9Cisg
IFtkb2NrX3RpbGUgZGlzcGxheV07CisgIHVuYmxvY2tfaW5wdXQgKCk7CisgIHJldHVybiBRbmls
OworfQorCiAjaWZkZWYgTlNfSU1QTF9DT0NPQQogCiBERUZVTiAoIm5zLXNlbmQtaXRlbXMiLApA
QCAtMzk1Nyw2ICs0MDgwLDkgQEAgLSAoTGlzcF9PYmplY3QpbGlzcFN0cmluZwogICBkZWZzdWJy
ICgmU25zX3NldF9tb3VzZV9hYnNvbHV0ZV9waXhlbF9wb3NpdGlvbik7CiAgIGRlZnN1YnIgKCZT
bnNfbW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9zaXRpb24pOwogICBkZWZzdWJyICgmU25zX3Nob3df
Y2hhcmFjdGVyX3BhbGV0dGUpOworICBkZWZzdWJyICgmU25zX2JhZGdlKTsKKyAgZGVmc3ViciAo
JlNuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uKTsKKyAgZGVmc3ViciAoJlNuc19wcm9ncmVzc19p
bmRpY2F0b3IpOwogI2lmZGVmIE5TX0lNUExfQ09DT0EKICAgZGVmc3ViciAoJlNuc19zZW5kX2l0
ZW1zKTsKICNlbmRpZgpAQCAtNDAyMyw0ICs0MTQ5LDYgQEAgLSAoTGlzcF9PYmplY3QpbGlzcFN0
cmluZwogICBERUZTWU0gKFFhc3NxX2RlbGV0ZV9hbGwsICJhc3NxLWRlbGV0ZS1hbGwiKTsKICAg
REVGU1lNIChRcnVuX2F0X3RpbWUsICJydW4tYXQtdGltZSIpOwogICBERUZTWU0gKFF4X2hpZGVf
dGlwLCAieC1oaWRlLXRpcCIpOworICBERUZTWU0gKFFpbmZvcm1hdGlvbmFsLCAiaW5mb3JtYXRp
b25hbCIpOworICBERUZTWU0gKFFjcml0aWNhbCwgImNyaXRpY2FsIik7CiB9CmRpZmYgLS1naXQg
YS9zcmMvdzMyZm5zLmMgYi9zcmMvdzMyZm5zLmMKaW5kZXggNjc5ZTgxOTdmZDguLjFhMmZjOWU4
ODQyIDEwMDY0NAotLS0gYS9zcmMvdzMyZm5zLmMKKysrIGIvc3JjL3czMmZucy5jCkBAIC0zNSw3
ICszNSwxMiBAQCAjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA2MDAKICNpbmNsdWRlIDxjLWN0eXBl
Lmg+CiAKICNkZWZpbmUgQ09CSk1BQ1JPUyAvKiBBc2sgZm9yIEMgZGVmaW5pdGlvbnMgZm9yIENP
TS4gICovCisjaWYgIWRlZmluZWQgTUlOR1dfVzY0ICYmICFkZWZpbmVkIENZR1dJTgorIyBkZWZp
bmUgSU5JVEdVSUQKKyNlbmRpZgorI2luY2x1ZGUgPGluaXRndWlkLmg+CiAjaW5jbHVkZSA8c2hs
b2JqLmg+CisjaW5jbHVkZSA8c2hvYmppZGwuaD4KICNpbmNsdWRlIDxvbGVpZGwuaD4KICNpbmNs
dWRlIDxvYmppZGwuaD4KICNpbmNsdWRlIDxvbGUyLmg+CkBAIC0yMzcsNiArMjQyLDggQEAgREVD
TEFSRV9IQU5ETEUoSE1PTklUT1IpOwogdHlwZWRlZiBCT09MIChXSU5BUEkgKiBTZXRHZXN0dXJl
Q29uZmlnX3Byb2MpIChIV05ELCBEV09SRCwgVUlOVCwKIAkJCQkJICAgICAgIEVtYWNzX1BHRVNU
VVJFQ09ORklHLCBVSU5UKTsKIAordHlwZWRlZiBCT09MIChXSU5BUEkgKiBGbGFzaFdpbmRvd0V4
X1Byb2MpIChQRkxBU0hXSU5GTyBwZndpKTsKKwogc3RhdGljIFRyYWNrTW91c2VFdmVudF9Qcm9j
IHRyYWNrX21vdXNlX2V2ZW50X2ZuID0gTlVMTDsKIHN0YXRpYyBJbW1HZXRDb21wb3NpdGlvblN0
cmluZ19Qcm9jIGdldF9jb21wb3NpdGlvbl9zdHJpbmdfZm4gPSBOVUxMOwogc3RhdGljIEltbUdl
dENvbnRleHRfUHJvYyBnZXRfaW1lX2NvbnRleHRfZm4gPSBOVUxMOwpAQCAtMjU5LDYgKzI2Niw3
IEBAIERFQ0xBUkVfSEFORExFKEhNT05JVE9SKTsKIHN0YXRpYyBXVFNSZWdpc3RlclNlc3Npb25O
b3RpZmljYXRpb25fUHJvYyBXVFNSZWdpc3RlclNlc3Npb25Ob3RpZmljYXRpb25fZm4gPSBOVUxM
Owogc3RhdGljIFJlZ2lzdGVyVG91Y2hXaW5kb3dfcHJvYyBSZWdpc3RlclRvdWNoV2luZG93X2Zu
ID0gTlVMTDsKIHN0YXRpYyBTZXRHZXN0dXJlQ29uZmlnX3Byb2MgU2V0R2VzdHVyZUNvbmZpZ19m
biA9IE5VTEw7CitzdGF0aWMgRmxhc2hXaW5kb3dFeF9Qcm9jIGZsYXNoX3dpbmRvd19leF9mbiA9
IE5VTEw7CiAKIGV4dGVybiBBcHBlbmRNZW51V19Qcm9jIHVuaWNvZGVfYXBwZW5kX21lbnU7CiAK
QEAgLTExMDEwLDYgKzExMDE4LDMxMyBAQCBERUZVTiAoInczMi1zeXN0ZW0taWRsZS10aW1lIiwg
RnczMl9zeXN0ZW1faWRsZV90aW1lLCBTdzMyX3N5c3RlbV9pZGxlX3RpbWUsCiAKICNlbmRpZgog
CisMCisjaWZkZWYgV0lORE9XU05UCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkgICAgIFRhc2tiYXIg
SW5kaWNhdG9ycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1JTkdXX1c2NAorICAvKiBt
aW5ndy5vcmcncyBNaW5HVyBkb2Vzbid0IGhhdmUgdGhpcyBzdHVmZi4gICovCisgIERFRklORV9H
VUlEKENMU0lEX1Rhc2tiYXJMaXN0LCAweDU2ZmRmMzQ0LCAweGZkNmQsIDB4MTFkMCwgMHg5NSww
eDhhLCAweDAwLDB4NjAsMHg5NywweGM5LDB4YTAsMHg5MCk7CisgIERFRklORV9HVUlEKElJRF9J
VGFza2Jhckxpc3QzLCAweGVhMWFmYjkxLCAweDllMjgsIDB4NGI4NiwgMHg5MCwweGU5LCAweDll
LDB4OWYsMHg4YSwweDVlLDB4ZWYsMHhhZik7CisjZW5kaWYKKworREVGVU4gKCJ3MzItYmFkZ2Ui
LAorICAgICAgIEZ3MzJfYmFkZ2UsCisgICAgICAgU3czMl9iYWRnZSwKKyAgICAgICAzLCAzLCAw
LAorICAgICAgIGRvYzogLyogRGlzcGxheSBhIHRhc2tiYXIgaWNvbiBvdmVybGF5IGltYWdlIG9u
IHRoZSBzZWxlY3RlZCBmcmFtZS4KK0JBREdFIGlzIGEgc3RyaW5nLiAgSWYgQkFER0UgaXMgbmls
LCByZW1vdmUgdGhlIG92ZXJsYXkuICBEbyBub3RoaW5nIGlmCitXaW5kb3dzIGRvZXMgbm90IHN1
cHBvcnQgdGhlIElUYXNrYmFyTGlzdDMgaW50ZXJmYWNlIGFuZCByZXR1cm4gbmlsLAorb3RoZXJ3
aXNlIHJldHVybiB0LiAgRG8gbm90aGluZyBpZiB0aGUgc2VsZWN0ZWQgZnJhbWUgaXMgbm90ICh5
ZXQpCithc3NvY2lhdGVkIHdpdGggYSB3aW5kb3cgaGFuZGxlLiAgQkFDS0dST1VORCBhbmQgRk9S
RUdST1VORCBhcmUgUkdCCit0cmlwbGV0IHN0cmluZ3Mgb2YgdGhlIGZvcm0gXCIjUlJHR0JCXCIu
ICAqLykKKyAgKExpc3BfT2JqZWN0IGJhZGdlLCBMaXNwX09iamVjdCBiYWNrZ3JvdW5kLCBMaXNw
X09iamVjdCBmb3JlZ3JvdW5kKQoreworICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJB
TUUgKCk7CisgIEhXTkQgaHduZCA9IE5VTEw7CisKKyAgaWYgKEZSQU1FX1czMl9QIChzZikgJiYg
RlJBTUVfTElWRV9QIChzZikpCisgICAgaHduZCA9IEZSQU1FX1czMl9XSU5ET1cgKHNmKTsKKwor
ICBpZiAoaHduZCA9PSBOVUxMKQorICAgIHJldHVybiBRbmlsOworCisgIENvSW5pdGlhbGl6ZSAo
TlVMTCk7CisgIElUYXNrYmFyTGlzdDMgKnRhc2tfYmFyX2xpc3QgPSBOVUxMOworICBIUkVTVUxU
IHIgPSBDb0NyZWF0ZUluc3RhbmNlKCZDTFNJRF9UYXNrYmFyTGlzdCwKKwkJCSAgICAgICBOVUxM
LAorCQkJICAgICAgIENMU0NUWF9JTlBST0NfU0VSVkVSLAorCQkJICAgICAgICZJSURfSVRhc2ti
YXJMaXN0MywKKwkJCSAgICAgICAodm9pZCAqKikmdGFza19iYXJfbGlzdCk7CisgIGlmIChyICE9
IFNfT0spCisgICAgcmV0dXJuIFFuaWw7CisKKyAgaWYgKCFOSUxQIChiYWRnZSkgJiYgU1RSSU5H
UCAoYmFkZ2UpCisgICAgICAmJiBTVFJJTkdQIChiYWNrZ3JvdW5kKSAmJiBTVFJJTkdQIChmb3Jl
Z3JvdW5kKSkKKyAgICB7CisgICAgICBDT0xPUlJFRiBiZ19yZ2I7CisgICAgICBDT0xPUlJFRiBm
Z19yZ2I7CisgICAgICB1bnNpZ25lZCBzaG9ydCByLCBnLCBiOworICAgICAgaWYgKHBhcnNlX2Nv
bG9yX3NwZWMgKFNTREFUQSAoYmFja2dyb3VuZCksICZyLCAmZywgJmIpKQorCWJnX3JnYiA9IFJH
QiAociwgYiwgYik7CisgICAgICBlbHNlCisJcmV0dXJuIFFuaWw7CisgICAgICBpZiAocGFyc2Vf
Y29sb3Jfc3BlYyAoU1NEQVRBIChmb3JlZ3JvdW5kKSwgJnIsICZnLCAmYikpCisJZmdfcmdiID0g
UkdCIChyLCBiLCBiKTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gUW5pbDsKKworICAgICAgLyogUHJl
cGFyZSBhIHN0cmluZyBmb3IgZHJhd2luZyBhbmQgYXMgYWx0LXRleHQuICAqLworICAgICAgTGlz
cF9PYmplY3QgYmFkZ2VfdXRmOCA9IEVOQ09ERV9VVEZfOCAoYmFkZ2UpOworICAgICAgaW50IHdp
ZGVfbGVuID0gcE11bHRpQnl0ZVRvV2lkZUNoYXIgKENQX1VURjgsIDAsCisJCQkJCSAgIFNTREFU
QSAoYmFkZ2VfdXRmOCksCisJCQkJCSAgIC0xLCBOVUxMLCAwKTsKKyAgICAgIHdjaGFyX3QgKmJh
ZGdlX3cgPSBhbGxvY2EgKCh3aWRlX2xlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAg
ICBwTXVsdGlCeXRlVG9XaWRlQ2hhciAoQ1BfVVRGOCwgMCwgU1NEQVRBIChiYWRnZV91dGY4KSwg
LTEsCisJCQkgICAgKExQV1NUUikgYmFkZ2VfdywKKwkJCSAgICB3aWRlX2xlbik7CisKKyAgICAg
IC8qIFVzZSB0aGUgc21hbGwgaWNvbiBzaXplIFdpbmRvd3Mgc3VnZ2VzdHMgdG8gbm90IGhhcmQg
Y29kZSAxNngxNi4gICovCisgICAgICBpbnQgaWNvbl93aWR0aCA9IEdldFN5c3RlbU1ldHJpY3Mg
KFNNX0NYU01JQ09OKTsKKyAgICAgIGludCBpY29uX2hlaWdodCA9IEdldFN5c3RlbU1ldHJpY3Mg
KFNNX0NYU01JQ09OKTsKKworICAgICAgSERDIGh3bmRfZGMgPSBHZXREQyAoaHduZCk7CisgICAg
ICBIREMgZGMgPSBDcmVhdGVDb21wYXRpYmxlREMgKGh3bmRfZGMpOworCisgICAgICBCSVRNQVBW
NUhFQURFUiBiaTsKKyAgICAgIG1lbXNldCAoJmJpLCAwLCBzaXplb2YgKGJpKSk7CisgICAgICBi
aS5iVjVTaXplID0gc2l6ZW9mIChiaSk7CisgICAgICBiaS5iVjVXaWR0aCA9IGljb25fd2lkdGg7
CisgICAgICBiaS5iVjVIZWlnaHQgPSAtaWNvbl9oZWlnaHQ7IC8qIE5lZ2F0aXZlIGZvciBhIHRv
cC1kb3duIERJQi4gICovCisgICAgICBiaS5iVjVQbGFuZXMgPSAxOworICAgICAgYmkuYlY1Qml0
Q291bnQgPSAzMjsKKyAgICAgIGJpLmJWNUNvbXByZXNzaW9uID0gQklfQklURklFTERTOyAgLyog
RW5hYmxlIHRoZSBtYXNrcyBiZWxvdy4gICovCisgICAgICBiaS5iVjVSZWRNYXNrICAgPSAgMHgw
MEZGMDAwMDsKKyAgICAgIGJpLmJWNUdyZWVuTWFzayA9ICAweDAwMDBGRjAwOworICAgICAgYmku
YlY1Qmx1ZU1hc2sgID0gIDB4MDAwMDAwRkY7CisgICAgICBiaS5iVjVBbHBoYU1hc2sgPSAgMHhG
RjAwMDAwMDsKKworICAgICAgRFdPUkQgKmJpdG1hcF9waXhlbHM7CisgICAgICBIQklUTUFQIGJp
dG1hcCA9IENyZWF0ZURJQlNlY3Rpb24gKGRjLCAoQklUTUFQSU5GTyAqKSAmYmksCisJCQkJCSBE
SUJfUkdCX0NPTE9SUywKKwkJCQkJICh2b2lkICoqKSAmYml0bWFwX3BpeGVscywKKwkJCQkJIE5V
TEwsIDApOworICAgICAgSEdESU9CSiBvbGRfYml0bWFwID0gU2VsZWN0T2JqZWN0KGRjLCBiaXRt
YXApOworCisgICAgICAvKiBEcmF3IGEgY2lyY2xlIGZpbGxlZCB3aXRoIGJnLiAgKi8KKyAgICAg
IEhCUlVTSCBiZ19icnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2ggKGJnX3JnYik7CisgICAgICBIR0RJ
T0JKIG9sZF9icnVzaCA9IFNlbGVjdE9iamVjdCAoZGMsIGJnX2JydXNoKTsKKyAgICAgIEVsbGlw
c2UgKGRjLCAwLCAwLCBpY29uX3dpZHRoLCBpY29uX2hlaWdodCk7CisgICAgICBTZWxlY3RPYmpl
Y3QgKGRjLCBvbGRfYnJ1c2gpOworICAgICAgRGVsZXRlT2JqZWN0IChiZ19icnVzaCk7CisKKyAg
ICAgIC8qIERlcml2ZSBhIGZvbnQgc2NhbGVkIHRvIGZpdCB0aGUgaWNvbi4gIEZpcnN0IGZpbmQg
dGhlIHN5c3RlbSdzCisJIGJhc2UgZm9udC4gIFRoZW4gc2NhbGUgaXQgdG8gZml0IGljb25faGVp
Z2h0LiAgKi8KKyAgICAgIEhGT05UIGJhc2VfZm9udDsKKyAgICAgIEJPT0wgY2xlYW5fdXBfYmFz
ZV9mb250ID0gRkFMU0U7CisgICAgICBpZiAoc3lzdGVtX3BhcmFtZXRlcnNfaW5mb193X2ZuKQor
CXsKKwkgIE5PTkNMSUVOVE1FVFJJQ1MgbmNtOworCSAgbWVtc2V0ICgmbmNtLCAwLCBzaXplb2Yg
KG5jbSkpOworCSAgbmNtLmNiU2l6ZSA9IHNpemVvZiAobmNtKTsKKwkgIFN5c3RlbVBhcmFtZXRl
cnNJbmZvIChTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mIChuY20pLCAmbmNtLCAwKTsK
KwkgIGJhc2VfZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCAoJm5jbS5sZlNtQ2FwdGlvbkZvbnQp
OworCSAgY2xlYW5fdXBfYmFzZV9mb250ID0gVFJVRTsKKwl9CisgICAgICBlbHNlCisJYmFzZV9m
b250ID0gKEhGT05UKSBHZXRTdG9ja09iamVjdCAoREVGQVVMVF9HVUlfRk9OVCk7CisgICAgICBp
ZiAoY2xlYW5fdXBfYmFzZV9mb250KQorCURlbGV0ZU9iamVjdCAoYmFzZV9mb250KTsKKworICAg
ICAgTE9HRk9OVCBsZjsKKyAgICAgIEdldE9iamVjdCAoYmFzZV9mb250LCBzaXplb2YgKGxmKSwg
JmxmKTsKKyAgICAgIGxmLmxmV2VpZ2h0ID0gRldfQk9MRDsKKyAgICAgIGxmLmxmT3V0UHJlY2lz
aW9uID0gT1VUX09VVExJTkVfUFJFQ0lTOworICAgICAgLyogQ2xlYXJUeXBlIHF1YWxpdHkgbmVl
ZHMgb3BxYXVlLCBidXQgd2UgZHJhdyB0cmFuc3BhcmVudC4gICovCisgICAgICBsZi5sZlF1YWxp
dHkgPSBBTlRJQUxJQVNFRF9RVUFMSVRZOworICAgICAgLyogTmVnYXRpdmUgbGZIZWlnaHQgaW5k
aWNhdGVzIHBpeGVsIHVuaXRzIHZzLiBwb3NpdGl2ZSBpbiBwb2ludHMuCisJIFVzZSB0aGUgTE9H
UElYRUxTWSBweC9pbiBvZiB0aGUgcHJpbWFyeSBtb25pdG9yLiAgKi8KKyAgICAgIGxmLmxmSGVp
Z2h0ID0gLU11bERpdihpY29uX2hlaWdodCAvIDIsIC8qIEZpdCB+MyBjaGFycy4gICovCisJCQkg
ICAgNzIsCisJCQkgICAgR2V0RGV2aWNlQ2FwcyAoR2V0REMgKE5VTEwpLCBMT0dQSVhFTFNZKSk7
CisgICAgICAvKiBFbnN1cmUgbGZIZWlnaHQgcGl4ZWwgaW50ZXJwcmV0YXRpb24uICAqLworICAg
ICAgaW50IG9sZF9tYXBfbW9kZSA9IFNldE1hcE1vZGUgKGRjLCBNTV9URVhUKTsKKyAgICAgIEhG
T05UIHNjYWxlZF9mb250ID0gQ3JlYXRlRm9udEluZGlyZWN0ICgmbGYpOworICAgICAgSEdESU9C
SiBvbGRfZm9udCA9IFNlbGVjdE9iamVjdCAoZGMsIHNjYWxlZF9mb250KTsKKyAgICAgIFNldE1h
cE1vZGUgKGRjLCBvbGRfbWFwX21vZGUpOworCisgICAgICAvKiBEcmF3IGJhZGdlIHRleHQuICAq
LworICAgICAgU2V0QmtNb2RlIChkYywgVFJBTlNQQVJFTlQpOworICAgICAgU2V0VGV4dENvbG9y
IChkYywgZmdfcmdiKTsKKyAgICAgIFJFQ1QgcmVjdDsKKyAgICAgIHJlY3QubGVmdCA9IHJlY3Qu
dG9wID0gMDsKKyAgICAgIHJlY3QucmlnaHQgPSBpY29uX3dpZHRoOworICAgICAgcmVjdC5ib3R0
b20gPSBpY29uX2hlaWdodDsKKyAgICAgIERyYXdUZXh0IChkYywgU1NEQVRBIChiYWRnZV91dGY4
KSwKKwkJLTEsIC8qIEluZGljYXRlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICAqLworCQkmcmVj
dCwKKwkJRFRfQ0VOVEVSIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUgfCBEVF9OT0NMSVAp
OworICAgICAgU2VsZWN0T2JqZWN0IChkYywgb2xkX2ZvbnQpOworICAgICAgRGVsZXRlT2JqZWN0
IChzY2FsZWRfZm9udCk7CisKKyAgICAgIC8qIE1ha2UgdGhlIGNpcmNsZSBhbmQgaXRzIHRleHQg
b3BhcXVlIGJ5IHNldHRpbmcgdGhlIGFscGhhCisJIGNoYW5uZWwgb24gZWFjaCBwaXhlbCBmYWxs
aW5nIHdpdGhpbiB0aGUgY2lyY2xlLiAgKi8KKyAgICAgIGludCBjaXJjbGVfY2VudGVyX3ggPSBp
Y29uX3dpZHRoIC8gMjsKKyAgICAgIGludCBjaXJjbGVfY2VudGVyX3kgPSBpY29uX2hlaWdodCAv
IDI7CisgICAgICBpbnQgY2lyY2xlX3JhZGl1cyA9IChpY29uX3dpZHRoIDwgaWNvbl9oZWlnaHQK
KwkJCSAgID8gaWNvbl93aWR0aAorCQkJICAgOiBpY29uX2hlaWdodCkgLyAyIC0gMjsKKyAgICAg
IGludCBjaXJjbGVfcmFkaXVzX3NxID0gY2lyY2xlX3JhZGl1cyAqIGNpcmNsZV9yYWRpdXM7Cisg
ICAgICBEV09SRCAqcGl4ZWw7CisgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGljb25faGVpZ2h0
OyArK3kpCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaWNvbl93aWR0aDsgKyt4KQorCSAg
eworICAgICAgICAgICAgaW50IGR4ID0geCAtIGNpcmNsZV9jZW50ZXJfeDsKKyAgICAgICAgICAg
IGludCBkeSA9IHkgLSBjaXJjbGVfY2VudGVyX3k7CisgICAgICAgICAgICBpZiAoZHggKiBkeCAr
IGR5ICogZHkgPD0gY2lyY2xlX3JhZGl1c19zcSkKKwkgICAgICB7CisJCSAgcGl4ZWwgPSBiaXRt
YXBfcGl4ZWxzICsgKHkgKiBpY29uX3dpZHRoICsgeCk7CisJCSAgKnBpeGVsIHw9IDB4ZmYwMDAw
MDA7IC8qIEZsaXAgdGhlIDB4QUFSUkdHQkIgYWxwaGEgY2hhbm5lbC4gICovCisJICAgICAgfQor
CSAgfQorCisgICAgICAvKiBEdW1teSBtb25vY2hyb21lIGJpdG1hcCBtYXNrLCBpZ25vcmVkIHdo
ZW4gdGhlIGNvbG9yIGJpdG1hcCBoYXMKKwkgYW4gYWxwaGEgY2hhbm5lbCwgYnV0IG5lZWRlZCB0
byBzYXRpc2Z5IENyZWF0ZUljb25JbmRpcmVjdC4gICovCisgICAgICBIQklUTUFQIG1hc2tfYml0
bWFwID0gQ3JlYXRlQml0bWFwIChpY29uX3dpZHRoLCBpY29uX2hlaWdodCwgMSwgMSwgTlVMTCk7
CisKKyAgICAgIC8qIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dp
bjMyL2FwaS93aW51c2VyL25mLXdpbnVzZXItY3JlYXRlaWNvbmluZGlyZWN0CisJIGhibU1hc2sg
YW5kIGhibUNvbG9yIG1lbWJlcnMgb2YgdGhlIElDT05JTkZPIHN0cnVjdHVyZSBzaG91bGQKKwkg
bm90IGFscmVhZHkgYmUgc2VsZWN0ZWQgaW50byBhIGRldmljZSBjb250ZXh0LiAgKi8KKyAgICAg
IFNlbGVjdE9iamVjdCAoZGMsIG9sZF9iaXRtYXApOworCisgICAgICBJQ09OSU5GTyBpY29uX2lu
Zm87CisgICAgICBtZW1zZXQgKCZpY29uX2luZm8sIDAsIHNpemVvZiAoaWNvbl9pbmZvKSk7Cisg
ICAgICBpY29uX2luZm8uZkljb24gPSBUUlVFOworICAgICAgaWNvbl9pbmZvLmhibU1hc2sgPSBt
YXNrX2JpdG1hcDsKKyAgICAgIGljb25faW5mby5oYm1Db2xvciA9IGJpdG1hcDsKKworICAgICAg
SElDT04gaWNvbiA9IENyZWF0ZUljb25JbmRpcmVjdCAoJmljb25faW5mbyk7CisgICAgICB0YXNr
X2Jhcl9saXN0LT5scFZ0YmwtPlNldE92ZXJsYXlJY29uICh0YXNrX2Jhcl9saXN0LCBod25kLCBp
Y29uLCBiYWRnZV93KTsKKworICAgICAgRGVzdHJveUljb24gKGljb24pOworICAgICAgRGVsZXRl
T2JqZWN0IChtYXNrX2JpdG1hcCk7CisgICAgICBEZWxldGVPYmplY3QgKGJpdG1hcCk7CisgICAg
ICBEZWxldGVEQyAoZGMpOworICAgICAgUmVsZWFzZURDIChod25kLCBod25kX2RjKTsKKyAgICB9
CisgIGVsc2UKKyAgICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlNldE92ZXJsYXlJY29uICh0YXNr
X2Jhcl9saXN0LCBod25kLCBOVUxMLCBOVUxMKTsKKworICB0YXNrX2Jhcl9saXN0LT5scFZ0Ymwt
PlJlbGVhc2UodGFza19iYXJfbGlzdCk7CisgIHJldHVybiBRdDsKK30KKworREVGVU4gKCJ3MzIt
cmVxdWVzdC11c2VyLWF0dGVudGlvbiIsCisgICAgICAgRnczMl9yZXF1ZXN0X3VzZXJfYXR0ZW50
aW9uLAorICAgICAgIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbiwKKyAgICAgICAxLCAxLCAw
LAorICAgICAgIGRvYzogLyogRmxhc2ggdGhlIHNlbGVjdGVkIGZyYW1lJ3MgdGFza2JhciBpY29u
IGFuZC9vciBpdHMgd2luZG93LgorSWYgVVJHRU5DWSBpcyBuaWwsIGNhbmNlbCB0aGUgcmVxdWVz
dCwgaWYgYW55LiAgSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sCitgaW5mb3JtYXRpb25hbCcsIGZs
YXNoIHRoZSB0YXNrYmFyIGljb24uICBJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wKK2Bjcml0aWNh
bCcsIGZsYXNoIHRoZSB0YXNrYmFyIGljb24gYW5kIHRoZSBmcmFtZS4gIFdpbmRvd3Mgc3RvcHMK
K2ZsYXNoaW5nIGlmIHRoZSB1c2VyIGZvY3VzZXMgdGhlIGZyYW1lLiAgRG8gbm90aGluZyBpZiBX
aW5kb3dzIGRvZXMgbm90CitzdXBwb3J0IEZsYXNoV2luZG93RXggYW5kIHJldHVybiBuaWwsIG90
aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcgaWYKK3RoZSBmcmFtZSBpcyBub3QgKHlldCkg
YXNzb2NpYXRlZCB3aXRoIGEgd2luZG93IGhhbmRsZS4gICovKQorICAoTGlzcF9PYmplY3QgdXJn
ZW5jeSkKK3sKKyAgaWYgKGZsYXNoX3dpbmRvd19leF9mbiA9PSBOVUxMKQorICAgIHJldHVybiBR
bmlsOworCisgIHN0cnVjdCBmcmFtZSAqc2YgPSBTRUxFQ1RFRF9GUkFNRSAoKTsKKyAgSFdORCBo
d25kID0gTlVMTDsKKworICBpZiAoRlJBTUVfVzMyX1AgKHNmKSAmJiBGUkFNRV9MSVZFX1AgKHNm
KSkKKyAgICBod25kID0gRlJBTUVfVzMyX1dJTkRPVyAoc2YpOworCisgIGlmIChod25kID09IE5V
TEwpCisgICAgcmV0dXJuIFFuaWw7CisKKyAgRkxBU0hXSU5GTyBmbGFzaF9pbmZvOworICBmbGFz
aF9pbmZvLmNiU2l6ZSA9IHNpemVvZihmbGFzaF9pbmZvKTsKKyAgZmxhc2hfaW5mby51Q291bnQg
PSAwOworICBmbGFzaF9pbmZvLmR3VGltZW91dCA9IDA7CisgIGZsYXNoX2luZm8uaHduZCA9IGh3
bmQ7CisgIGlmICghTklMUCAodXJnZW5jeSkgJiYgU1lNQk9MUCAodXJnZW5jeSkpCisgICAgewor
ICAgICAgLyogVGhlIGludGVuZGVkIGNhbGxlciwgJ3N5c3RlbS10YXNrYmFyLWF0dGVudGlvbics
IGhhcyBhbgorCSBvcHRpb25hbCB0aW1lciB0byBjbGVhciB0aGUgYXR0ZW50aW9uIGluZGljYXRv
ciBzbyB0aGlzIHdpbGwKKwkgZmxhc2ggdW50aWwgY2xlYXJlZCB2aWEgdGhlIHRpbWVyLCBvciB0
aGUgd2luZG93IGNvbWVzIHRvIHRoZQorCSBmb3JlZ3JvdW5kLiAgRm9yIGluZm9ybWF0aW9uYWwg
YXR0ZW50aW9uLCBmbGFzaCB0aGUgdHJheSBpY29uLgorCSBGb3IgY3JpdGljYWwgYXR0ZW50aW9u
LCBmbGFzaCB0aGUgdHJheSBpY29uIGFuZCB0aGUgd2luZG93LiAgKi8KKyAgICAgIGlmIChFUSAo
dXJnZW5jeSwgUWluZm9ybWF0aW9uYWwpKQorCWZsYXNoX2luZm8uZHdGbGFncyA9IEZMQVNIV19U
UkFZIHwgRkxBU0hXX1RJTUVSTk9GRzsKKyAgICAgIGVsc2UgaWYgKEVRICh1cmdlbmN5LCBRY3Jp
dGljYWwpKQorCWZsYXNoX2luZm8uZHdGbGFncyA9IEZMQVNIV19BTEwgfCBGTEFTSFdfVElNRVJO
T0ZHOworICAgIH0KKyAgZWxzZQorICAgIGZsYXNoX2luZm8uZHdGbGFncyA9IEZMQVNIV19TVE9Q
OworCisgIGZsYXNoX3dpbmRvd19leF9mbiAoJmZsYXNoX2luZm8pOworICByZXR1cm4gUXQ7Cit9
CisKK0RFRlVOICgidzMyLXByb2dyZXNzLWluZGljYXRvciIsCisgICAgICAgRnczMl9wcm9ncmVz
c19pbmRpY2F0b3IsCisgICAgICAgU3czMl9wcm9ncmVzc19pbmRpY2F0b3IsCisgICAgICAgMSwg
MSwgMCwKKyAgICAgICBkb2M6IC8qIFNob3cgYSBwcm9ncmVzcyBiYXIgb24gdGhlIHNlbGVjdGVk
IGZyYW1lJ3MgdGFza2JhciBpY29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2Ug
MC4wIHRvIDEuMC4gIElmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlCit0aGUgcHJvZ3Jlc3MgaW5k
aWNhdG9yLiAgRG8gbm90aGluZyBpZiBXaW5kb3dzIGRvZXMgbm90IHN1cHBvcnQgdGhlCitJVGFz
a2Jhckxpc3QzIGludGVyZmFjZSBhbmQgcmV0dXJuIG5pbCwgb3RoZXJ3aXNlIHJldHVybiB0LiAg
RG8gbm90aGluZworaWYgdGhlIHNlbGVjdGVkIGZyYW1lIGlzIG5vdCAoeWV0KSBhc3NvY2lhdGVk
IHdpdGggYSB3aW5kb3cgaGFuZGxlICAqLykKKyAgKExpc3BfT2JqZWN0IHByb2dyZXNzKQorewor
ICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7CisgIEhXTkQgaHduZCA9IE5V
TEw7CisKKyAgaWYgKEZSQU1FX1czMl9QIChzZikgJiYgRlJBTUVfTElWRV9QIChzZikpCisgICAg
aHduZCA9IEZSQU1FX1czMl9XSU5ET1cgKHNmKTsKKworICBpZiAoaHduZCA9PSBOVUxMKQorICAg
IHJldHVybiBRbmlsOworCisgIENvSW5pdGlhbGl6ZSAoTlVMTCk7CisgIElUYXNrYmFyTGlzdDMg
KnRhc2tfYmFyX2xpc3QgPSBOVUxMOworICBIUkVTVUxUIHIgPSBDb0NyZWF0ZUluc3RhbmNlKCZD
TFNJRF9UYXNrYmFyTGlzdCwKKwkJCSAgICAgICBOVUxMLAorCQkJICAgICAgIENMU0NUWF9JTlBS
T0NfU0VSVkVSLAorCQkJICAgICAgICZJSURfSVRhc2tiYXJMaXN0MywKKwkJCSAgICAgICAodm9p
ZCAqKikmdGFza19iYXJfbGlzdCk7CisgIGlmIChyICE9IFNfT0spCisgICAgcmV0dXJuIFFuaWw7
CisKKyAgLyogU2NhbGUgdGFzayBiYXIgcHJvZ3Jlc3MgZnJvbSAwLjAtMS4wIHRvIDAtMTAwLiAg
Ki8KKyAgVUxPTkdMT05HIGFkal9wcm9ncmVzcyA9IDA7CisgIGlmICghTklMUCAocHJvZ3Jlc3Mp
ICYmIEZMT0FUUCAocHJvZ3Jlc3MpKQorICAgICAgYWRqX3Byb2dyZXNzID0gKFVMT05HTE9ORykg
KDEwMC4wICoKKwkJCQkgIFhGTE9BVF9EQVRBIChwcm9ncmVzcykpOworICBpZiAoYWRqX3Byb2dy
ZXNzID4gMCkKKyAgICB7CisgICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlNldFByb2dyZXNz
U3RhdGUgKHRhc2tfYmFyX2xpc3QsCisJCQkJCSAgICAgICBod25kLCBUQlBGX05PUk1BTCk7Cisg
ICAgICB0YXNrX2Jhcl9saXN0LT5scFZ0YmwtPlNldFByb2dyZXNzVmFsdWUgKHRhc2tfYmFyX2xp
c3QsCisJCQkJCSAgICAgICBod25kLCBhZGpfcHJvZ3Jlc3MsIDEwMCk7CisgICAgfQorICBlbHNl
CisgICAgeworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1N0YXRlICh0
YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgVEJQRl9OT1BST0dSRVNTKTsKKyAgICB9
CisKKyAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICBy
ZXR1cm4gUXQ7Cit9CisKKyNlbmRpZiAvKiBXSU5ET1dTTlQgKi8KKwogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CiAJCQkgICAgSW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTExNTExLDYgKzEx
ODI2LDE1IEBAIHN5bXNfb2ZfdzMyZm5zICh2b2lkKQogICBERUZTWU0gKFFjYXBzbG9jaywgImNh
cHNsb2NrIik7CiAgIERFRlNZTSAoUWtwX251bWxvY2ssICJrcC1udW1sb2NrIik7CiAgIERFRlNZ
TSAoUXNjcm9sbCwgInNjcm9sbCIpOworCisgICNpZmRlZiBXSU5ET1dTTlQKKyAgLyogVGFza2Jh
ciBpbmRpY2F0b3JzIHN1cHBvcnQuICAqLworICBkZWZzdWJyICgmU3czMl9iYWRnZSk7CisgIGRl
ZnN1YnIgKCZTdzMyX3Byb2dyZXNzX2luZGljYXRvcik7CisgIGRlZnN1YnIgKCZTdzMyX3JlcXVl
c3RfdXNlcl9hdHRlbnRpb24pOworICBERUZTWU0gKFFpbmZvcm1hdGlvbmFsLCAiaW5mb3JtYXRp
b25hbCIpOworICBERUZTWU0gKFFjcml0aWNhbCwgImNyaXRpY2FsIik7CisgICNlbmRpZgogfQog
CiAMCkBAIC0xMTc5OSw2ICsxMjEyMyw5IEBAIGdsb2JhbHNfb2ZfdzMyZm5zICh2b2lkKQogICBT
ZXRHZXN0dXJlQ29uZmlnX2ZuCiAgICAgPSAoU2V0R2VzdHVyZUNvbmZpZ19wcm9jKSBnZXRfcHJv
Y19hZGRyICh1c2VyMzJfbGliLAogCQkJCQkgICAgICJTZXRHZXN0dXJlQ29uZmlnIik7CisgIGZs
YXNoX3dpbmRvd19leF9mbgorICAgID0gKEZsYXNoV2luZG93RXhfUHJvYykgZ2V0X3Byb2NfYWRk
ciAodXNlcjMyX2xpYiwKKwkJCQkJICAiRmxhc2hXaW5kb3dFeCIpOwogCiAgIHsKICAgICBITU9E
VUxFIGltbTMyX2xpYiA9IEdldE1vZHVsZUhhbmRsZSAoImltbTMyLmRsbCIpOwpkaWZmIC0tZ2l0
IGEvc3lzdGVtLXRhc2tiYXIudGV4aSBiL3N5c3RlbS10YXNrYmFyLnRleGkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY5ZTkyMGQ2OTFjCi0tLSAvZGV2L251bGwKKysr
IGIvc3lzdGVtLXRhc2tiYXIudGV4aQpAQCAtMCwwICsxLDI1NCBAQAorXGlucHV0IHRleGluZm8g
ICAgQGMgLSotdGV4aW5mby0qLQorCitAc2V0ZmlsZW5hbWUgLi4vLi4vaW5mby9kb2NrLW1vZGUu
aW5mbworQHNldHRpdGxlIFN5c3RlbSBHVUkgVGFza2JhciBGZWF0dXJlcworQGluY2x1ZGUgZG9j
c3R5bGUudGV4aQorCitAY29weWluZworVGhpcyBmaWxlIGRlc2NyaWJlcyBFbWFjcyBzeXN0ZW0g
R1VJIHRhc2tiYXIgaW50ZWdyYXRpb24uCisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAyNSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworQHF1b3RhdGlvbgorUGVybWlzc2lvbiBp
cyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50
Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwg
VmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIG5vCitJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggdGhl
IEZyb250LUNvdmVyIFRleHRzIGJlaW5nIGBgQSBHTlUgTWFudWFsLCcnCithbmQgd2l0aCB0aGUg
QmFjay1Db3ZlciBUZXh0cyBhcyBpbiAoYSkgYmVsb3cuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2Ug
aXMKK2luY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRh
dGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOiBgYFlv
dSBoYXZlIHRoZSBmcmVlZG9tIHRvIGNvcHkgYW5kCittb2RpZnkgdGhpcyBHTlUgbWFudWFsLicn
CitAZW5kIHF1b3RhdGlvbgorQGVuZCBjb3B5aW5nCisKK0BkaXJjYXRlZ29yeSBFbWFjcyBtaXNj
IGZlYXR1cmVzCitAZGlyZW50cnkKKyogU3lzdGVtIEdVSSBUYXNrYmFyOiAodGFza2JhcikuICAg
ICAgIFN5c3RlbSBHVUkgdGFza2JhciBpbnRlZ3JhdGlvbi4KK0BlbmQgZGlyZW50cnkKKworQHRp
dGxlcGFnZQorQHRpdGxlIFN5c3RlbSBHVUkgVGFza2JhciBJbnRlZ3JhdGlvbgorQHBhZ2UKK0B2
c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAZW5kIHRpdGxlcGFnZQorCitA
Y29udGVudHMKKworQGlmbm90dGV4CitAbm9kZSBUb3AKK0B0b3AgRW1hY3MgU3lzdGVtIEdVSSBU
YXNrYmFyIEludGVncmF0aW9uCitUaGlzIG1hbnVhbCBkZXNjcmliZXMgRW1hY3Mgc3lzdGVtIEdV
SSB0YXNrYmFyIGludGVncmF0aW9uLgorCitUaGUgQGRmbntzeXN0ZW0tdGFza2Jhcn0gcGFja2Fn
ZSBhZGRzIEVtYWNzIGludGVncmF0aW9uIHdpdGggc3lzdGVtIEdVSQordGFza2JhciAoYWxzbyBj
YWxsZWQgZG9ja3Mgb3IgbGF1bmNoZXJzIG9yIHNvbWV0aGluZyBzaW1pbGFyKSB0byBkaXNwbGF5
CithIHRhc2tiYXIgaWNvbiAiYmFkZ2UiIG92ZXJsYXksIGEgcHJvZ3Jlc3MgYmFyIHJlcG9ydCBv
dmVybGF5LCBhbGVydCB0aGUKK3VzZXIgdGhhdCBhbiBFbWFjcyBzZXNzaW9uIG5lZWRzIGF0dGVu
dGlvbiwgb2Z0ZW4gYnkgZmxhc2hpbmcgb3IKK2JvdW5jaW5nIHRoZSBFbWFjcyBhcHBsaWNhdGlv
biBpY29uLiAgVGFza2JhciBjYXBhYmxlIHN5c3RlbXMgYXJlCitHTlUvTGludXggdmlhIEQtQnVz
LCBtYWNPUy9HTlVzdGVwIDEwLjUrLCBNUy1XaW5kb3dzIDcrLgorCitPbiBHTlUvTGludXgsIHRo
ZSB2aXNpYmxlIGVmZmVjdHMgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9ucworZGV0ZXJt
aW5lZCBieSB5b3VyIHNoZWxsIGV4dGVuc2lvbiwgbW9zdCBvZnRlbiB0aGUgYXBwbGljYXRpb24g
bGF1bmNoZXIKK29yIGRvY2sgcGFuZWwsIG9yIHRoZSB0b3AgcGFuZWwuICBFZmZlY3RzIGFyZSBn
bG9iYWwgZm9yIGFuIEVtYWNzCitpbnN0YW5jZS4KKworT24gbWFjT1MvR05Vc3RlcCwgdGhlIGVm
ZmVjdHMgd2lsbCBhcHBlYXIgb24gdGhlIERvY2sgYW5kIGluIHRoZSBBcHAKK1N3aXRjaGVyLiAg
RWZmZWN0cyBhcmUgZ2xvYmFsIGZvciBhbiBFbWFjcyBpbnN0YW5jZS4KKworT24gTVMtV2luZG93
cywgdGhlIGVmZmVjdHMgYXBwZWFyIG9uIHRoZSB0YXNrYmFyLiAgRWZmZWN0cyBhcmUKK2Fzc29j
aWF0ZWQgd2l0aCB0aGUgZnJhbWUgZnJvbSB3aGljaCB0aGV5IGFyZSBpbml0aWF0ZWQuCisKK0Bp
bnNlcnRjb3B5aW5nCisKK0BtZW51CisqIE92ZXJ2aWV3OjogICAgICAgICAgICAgICAgICAgIE92
ZXJ2aWV3IG9mIHN5c3RlbSBHVUkgdGFza2JhciBpbnRlZ3JhdGlvbgorKiBQcmVyZXF1aXNpdGVz
OjoKKyogVXNlciBPcHRpb25zOjoKKyogRnVuY3Rpb24gUmVmZXJlbmNlOjoKKyogU3lzdGVtIFRh
c2tiYXIgVXNhZ2UgRXhhbXBsZXM6OgorKiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U6
OiAgVGhlIGxpY2Vuc2UgZm9yIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyogRnVuY3Rpb24gSW5kZXg6
OgorKiBWYXJpYWJsZSBJbmRleDo6CitAZW5kIG1lbnUKK0BlbmQgaWZub3R0ZXgKKworQG5vZGUg
T3ZlcnZpZXcKK0BjaGFwdGVyIE92ZXJ2aWV3CisKK1RoZSBTeXN0ZW0gVGFza2JhciBwYWNrYWdl
IHByb3ZpZGVzIHRoZXNlIHN5c3RlbSBHVUkgdGFza2JhciBmZWF0dXJlczoKKworQGl0ZW1pemUg
QGJ1bGxldAorQGl0ZW0gSWNvbiBiYWRnZQorQGl0ZW0gSWNvbiBwcm9ncmVzcyBpbmRpY2F0b3IK
K0BpdGVtIEljb24gYXR0ZW50aW9uIGFsZXJ0CitAZW5kIGl0ZW1pemUKKworQG5vZGUgUHJlcmVx
dWlzaXRlcworQGNoYXB0ZXIgUHJlcmVxdWlzaXRlcworCittYWNPUy9HTlVzdGVwLCBhbmQgTVMt
V2luZG93cyB1c2VycyBuZWVkIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbi4KKworT24gR05VL0xp
bnV4IHN5c3RlbXMsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB2aWEgRC1CdXMgdG8gY29udHJvbCBH
VUkKK3NoZWxscyBhbmQvb3Igc2hlbGwgZXh0ZW5zaW9ucyBzdWNoIGFzCitAZmlsZXtodHRwczov
L2V4dGVuc2lvbnMuZ25vbWUub3JnL2V4dGVuc2lvbi8zMDcvZGFzaC10by1kb2NrL30gdGhhdAor
aW1wbGVtZW50IFVidW50dSdzIFVuaXR5IGxhdW5jaGVyIHNwZWMgd2hpY2ggeW91IGNhbiByZWFk
IG1vcmUgYWJvdXQKK2hlcmUgQGZpbGV7aHR0cHM6Ly93aWtpLnVidW50dS5jb20vVW5pdHkvTGF1
bmNoZXJBUEl9LgorCitAbm9kZSBVc2VyIE9wdGlvbnMKK0BjaGFwdGVyIFVzZXIgT3B0aW9ucwor
CitAZGVmb3B0IHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlcgorVGhlIHZhcmlh
YmxlIEBjb2Rle3N5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBvcnRlcn0gaXMgdXNlZCB0
bworc3VwcGxlbWVudCBidWlsdC1pbiBwcm9ncmVzcyByZXBvcnRzIHdpdGggR1VJIHRhc2tiYXIg
aWNvbiBwcm9ncmVzcyBiYXJzCitpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBlY2hvIGFyZWEg
cmVwb3J0cy4gIEl0IGRlZmF1bHRzIHRvIEBjb2Rle3R9LgorKysrIEB4cmVme1Byb2dyZXNzLCwg
RGlzcGxheSwgZWxpc3AsIFRoZSBFbWFjcyBMaXNwIFJlZmVyZW5jZSBNYW51YWx9LgorQGVuZCBk
ZWZvcHQKKworQGRlZm9wdCBzeXN0ZW0tdGFza2Jhci1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUt
Zm9jdXMKK1RoZSB2YXJpYWJsZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1jbGVhci1hdHRlbnRpb24t
b24tZnJhbWUtZm9jdXN9IGNhbiBiZQorY3VzdG9taXplZCB0byBjbGVhciB0aGUgdGFza2JhciBp
Y29uIGF0dGVudGlvbiBpbmRpY2F0b3Igd2hlbiBhbnkgRW1hY3MKK0dVSSBmcmFtZSBpcyBmb2N1
c2VkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBmb3IgR05VL0xpbnV4LCBhbmQgaXMgaWdub3JlZAor
b24gTVMtV2luZG93cyBhbmQgbWFjT1MvR05Vc3RlcCB3aGljaCBhdXRvbWF0aWNhbGx5IGNsZWFy
IHRoZSBhdHRlbnRpb24KK2luZGljYXRvci4gIEl0IGRlZmF1bHRzIHRvIEBjb2Rle3R9LiAgQ3Vz
dG9taXplIHRoaXMgYmVmb3JlIGVuYWJsaW5nCitAY29kZXtzeXN0ZW0tdGFza2Jhci1tb2RlfS4K
K0BlbmQgZGVmb3B0CisKK0BkZWZvcHQgc3lzdGVtLXRhc2tiYXItZGJ1cy1kZXNrdG9wLWZpbGUt
bmFtZQorVGhlIHZhcmlhYmxlIEBjb2Rle3N5c3RlbS10YXNrYmFyLWRidXMtZGVza3RvcC1maWxl
LW5hbWV9IGlzIGNvbnN1bHRlZAorb24gR05VL0xpbnV4IEQtQnVzIHN5c3RlbXMsIGFuZCBjYW4g
YmUgY3VzdG9taXplZCB0byBpbmRpY2F0ZSB3aGljaAorZGVza3RvcCBmaWxlIG5hbWUgaWRlbnRp
ZmllcyB5b3VyIEVtYWNzIGluc3RhbmNlLiAgSXQgZGVmYXVsdHMgdG8gdGhlCitkZXNrdG9wIGZp
bGUgYmFzZSBuYW1lIEBjb2RleyJlbWFjc2NsaWVudCJ9IGFuZCBtaWdodCBuZWVkIHRvIGJlIHNl
dCB0bworQGNvZGV7ImVtYWNzIn0gb24geW91ciBzeXN0ZW0uICBFbWFjcyBpbnN0YWxsZWQgYnkg
TGludXggZGlzdHJpYnV0aW9ucworY2FuIHZhcnkgb24gdGhlaXIgbmFtaW5nIHNjaGVtZSBhbmQg
b2Z0ZW4gaW5jbHVkZSBkZXNrdG9wIGZpbGVzIGZvcgorYm90aC4KK0BlbmQgZGVmb3B0CisKK0Bk
ZWZvcHQgc3lzdGVtLXRhc2tiYXItZGJ1cy10aW1lb3V0CitUaGUgdmFyaWFibGUgQGNvZGV7c3lz
dGVtLXRhc2tiYXItZGJ1cy10aW1lb3V0fSBpcyBjb25zdWx0ZWQgb24KK0dOVS9MaW51eCBELUJ1
cyBzeXN0ZW1zLCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9m
CittaWxsaXNlY29uZHMgRW1hY3Mgd2lsbCB3YWl0IGZvciBELUJ1cyByZXNwb25zZXMgYmVmb3Jl
IHRpbWluZyBvdXQgYW5kCitjb25zaWRlcmluZyBtZXNzYWdlcyB1bmRlbGl2ZXJhYmxlLiAgSXQg
ZGVmYXVsdHMgdG8gbmlsIHdoaWNoIHdpbGwgdXNlCit0aGUgRC1CdXMgcGFja2FnZSBkZWZhdWx0
IG9mIDI1MDAwIG1pbGxpc2Vjb25kcywgd2hpY2ggc2VlLAorQHB4cmVme1RvcCwsLCBkYnVzLCBE
LUJ1cyBpbnRlZ3JhdGlvbiBpbiBFbWFjc30uCitAZW5kIGRlZm9wdAorCitAbm9kZSBGdW5jdGlv
biBSZWZlcmVuY2UKK0BjaGFwdGVyIEZ1bmN0aW9uIFJlZmVyZW5jZQorCitAZGVmZm4gc3lzdGVt
LXRhc2tiYXItbW9kZQorQGNvZGV7c3lzdGVtLXRhc2tiYXItbW9kZX0gbXVzdCBiZSBlbmFibGVk
IHRvIGluaXRpYWxpemUgdGhlIHN5c3RlbSBiYWNrCitlbmQgYmVmb3JlIGNhbGxpbmcgYW55IG9m
IHRoaXMgcGFja2FnZSdzIGZ1bmN0aW9ucy4gIE9uIGEgR05VL0xpbnV4CitELUJ1cyBzeXN0ZW0s
IHRoZSByZXF1aXJlZCBELUJ1cyBwcm90b2NvbCBpcyBwcm9iZWQgYW5kIGlmIG5vdAorYXZhaWxh
YmxlLCBhbiBlcnJvciBpcyBzaWduYWxlZC4KK0BlbmQgZGVmZm4KKworQGRlZnVuIHN5c3RlbS10
YXNrYmFyLWJhZGdlICZvcHRpb25hbCBjb3VudAorRGlzcGxheSB0aGUgdGFza2JhciBpY29uIGJh
ZGdlIHNldCB0byBAdmFye2NvdW50fS4gIElmIEB2YXJ7Y291bnR9IGlzCitAY29kZXtuaWx9LCBj
bGVhciB0aGUgYmFkZ2UuICBAdmFye2NvdW50fSBpcyB0eXBpY2FsbHkgYW4gaW50ZWdlci4KKwor
SWYgQHZhcntjb3VudH0gaXMgYSBzdHJpbmcsIGl0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2Vy
IG9uIHN5c3RlbXMKK3RoYXQgZG8gbm90IHN1cHBvcnQgc3RyaW5nIGJhZGdlcywgc3VjaCBhcyBH
TlUvTGludXggRC1CdXMsIGFuZCB0aGUKK2JhZGdlIHdpbGwgYmUgY2xlYXJlZCBpZiB0aGUgc3Ry
aW5nIGlzIGFuIGludmFsaWQgaW50ZWdlcgorcmVwcmVzZW50YXRpb24uICBPbiBzeXN0ZW1zIHRo
YXQgc3VwcG9ydCBzdHJpbmdzLCBzdWNoIGFzIG1hY09TL0dOVXN0ZXAKK2FuZCBNUy1XaW5kb3dz
LCB0aGUgYmFkZ2UgaXMgc2V0IHRvIHRoZSBzdHJpbmcgYW5kIGRpc3BsYXllZCwgYW5kIG1heSBi
ZQordHJ1bmNhdGVkIHRvIGZpdCB0aGUgdmlzdWFsIHNwYWNlIGFsbG9jYXRlZCBieSB0aGUgc3lz
dGVtLiAgSW4gYW55IGNhc2UsCitpZiB0aGUgc3RyaW5nIGlzIGVtcHR5LCBjbGVhciB0aGUgYmFk
Z2UuCitAZW5kIGRlZnVuCisKK0BkZWZ1biBzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gJm9wdGlv
bmFsIHVyZ2VuY3kgdGltZW91dAorRGlzcGxheSBhIHRhc2tiYXIgaWNvbiBhbGVydC4gIFRoaXMg
d2lsbCByZXN1bHQgaW4gYSBib3VuY2luZyBvcgorZmxhc2hpbmcgdGFza2JhciBpY29uLiAgT24g
c29tZSBiYWNrIGVuZHMsIGF0dGVudGlvbiB3aWxsIGJlIGRpc3BsYXllZAorb25seSBpZiBFbWFj
cyBpcyBub3QgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGFwcGxpY2F0aW9uLgorCitJZiBAdmFye3Vy
Z2VuY3l9IGlzIHRoZSBzeW1ib2wgQGNvZGV7aW5mb3JtYXRpb25hbH0sIG5vcm1hbCBhdHRlbnRp
b24gaXMKK3JlcXVlc3RlZC4gIElmIEB2YXJ7dXJnZW5jeX0gaXMgdGhlIHN5bWJvbCBAY29kZXtj
cml0aWNhbH0sIHVyZ2VudAorYXR0ZW50aW9uIGlzIHJlcXVlc3RlZC4gIElmIEB2YXJ7dXJnZW50
fSBpcyBAY29kZXtuaWx9LCBjbGVhciB0aGUKK2F0dGVudGlvbiBpbmRpY2F0b3IuCisKK0VtYWNz
IHdhaXRzIEB2YXJ7dGltZW91dH0gc2Vjb25kcyBiZWZvcmUgYXV0b21hdGljYWxseSByZW1vdmlu
ZyB0aGUKK2luZGljYXRvci4gIElmIEB2YXJ7dGltZW91dH0gaXMgQGNvZGV7bmlsfSwgdGhlIGF0
dGVudGlvbiBpbmRpY2F0b3Igd2lsbAorYmUgY2xlYXJlZCBieSB0aGUgc3lzdGVtIG9yIGJ5IGNh
bGxpbmcgdGhpcyBmdW5jdGlvbiBhZ2FpbiBwYXNzaW5nIGEKK0Bjb2Rle25pbH0gdXJnZW5jeS4K
KworT24gc29tZSBiYWNrIGVuZHMsIGFuIEBjb2Rle2luZm9ybWF0aW9uYWx9IGF0dGVudGlvbiBy
ZXF1ZXN0IHdpbGwgdGltZQorb3V0IGF1dG9tYXRpY2FsbHkuICBJbiBjb250cmFzdCwgYSBAY29k
ZXtjcml0aWNhbH0gcmVxdWVzdCByZXF1aXJlcyB0aGF0Cit0aGUgdXNlciBicmluZyBFbWFjcyBp
bnRvIGZvY3VzIGFuZCB3aWxsIG5vdCB0aW1lIG91dC4gIE9uIHNvbWUgYmFjaworZW5kcywgQGNv
ZGV7Y3JpdGljYWx9IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgQGNvZGV7aW5mb3JtYXRpb25hbH0u
CitAZW5kIGRlZnVuCisKK0BkZWZ1biBzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyAmb3B0aW9uYWwg
cHJvZ3Jlc3MKK1NldCB0aGUgdGFza2JhciBpY29uIHRvIGluZGljYXRlIHByb2dyZXNzIG9mIGEg
bG9uZy1ydW5uaW5nIG9wZXJhdGlvbi4KK1Rhc2tiYXIgcHJvZ3Jlc3MgaXMgdHlwaWNhbGx5IHJl
cHJlc2VudGVkIGFzIGEgZ3JhcGhpY2FsIGJhciB0aGF0CitmcmFjdGlvbmFsbHkgc3BhbnMgdGhl
IHRhc2tiYXIgaWNvbi4gIEB2YXJ7cHJvZ3Jlc3N9IGlzIGEgZmxvYXQgaW4gdGhlCityYW5nZSAw
LjAgdG8gMS4wLiAgSWYgQHZhcntwcm9ncmVzc30gaXMgbmlsLCByZW1vdmUgdGhlIHByb2dyZXNz
CitpbmRpY2F0b3IuICBUaGUgYnVpbHQtaW4gcHJvZ3Jlc3MgcmVwb3J0ZXIgc2hvdWxkIGJlIHBy
ZWZlcnJlZCBvdmVyCittYW51YWxseSBpbmRpY2F0aW5nIHByb2dyZXNzLgorKysrCitAeHJlZntQ
cm9ncmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFs
fS4KK0BlbmQgZGVmdW4KKworQG5vZGUgU3lzdGVtIFRhc2tiYXIgVXNhZ2UgRXhhbXBsZXMKK0Bj
aGFwdGVyIFN5c3RlbSBUYXNrYmFyIFVzYWdlIEV4YW1wbGVzCisKK0BsaXNwCitAZ3JvdXAKKzs7
IEVuYWJsZSBhbmQgaW5pdGlhbGl6ZSBzeXN0ZW0tdGFza2Jhci1tb2RlIGJlZm9yZSBjYWxsaW5n
IGl0cworOzsgY29tcGFuaW9uIGZ1bmN0aW9ucy4KKyhzeXN0ZW0tdGFza2Jhci1tb2RlKQorCis7
OyBEaXNwbGF5IGEgYmFkZ2Ugb24gdGhlIHRhc2tiYXIgaWNvbi4KKyhzeXN0ZW0tdGFza2Jhci1i
YWRnZSBlbWFjcy1tYWpvci12ZXJzaW9uKQorKHN5c3RlbS10YXNrYmFyLWJhZGdlICIzMSIpIDsg
Y29udmVydGVkIHRvIGludGVnZXIgb24gR05VL0xpbnV4Cisoc3lzdGVtLXRhc2tiYXItYmFkZ2Ug
IlRlc3QiKSA7IHdvcmtzIG9uIG1hY09TL0dOVXN0ZXAgYW5kIE1TLVdpbmRvd3MKKworOzsgQ2xl
YXIgdGhlIGJhZGdlLgorKHN5c3RlbS10YXNrYmFyLWJhZGdlIG5pbCkKKzs7IE9yIGp1c3QKKyhz
eXN0ZW0tdGFza2Jhci1iYWRnZSkKK0BlbmQgZ3JvdXAKKworQGdyb3VwCis7OyBHZXQgdGhlIHVz
ZXIncyBhdHRlbnRpb24uCisoc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uICdpbmZvcm1hdGlvbmFs
IDMpIDsgY2xlYXIgdGhlIHJlcXVlc3QgYWZ0ZXIgMyBzZWNvbmRzCisoc3lzdGVtLXRhc2tiYXIt
YXR0ZW50aW9uICdjcml0aWNhbCkgOyBjbGVhciB3aGVuIHRoZSBFbWFjcyBhcHBsaWNhdGlvbiBp
cyBmb2N1c2VkCisKKzs7IENsZWFyIHRoZSBhdHRlbnRpb24gcmVxdWVzdC4KKyhzeXN0ZW0tdGFz
a2Jhci1hdHRlbnRpb24gbmlsKQorOzsgT3IganVzdAorKHN5c3RlbS10YXNrYmFyLWF0dGVudGlv
bikKK0BlbmQgZ3JvdXAKKworQGdyb3VwCis7OyBFbmFibGUgdGFza2JhciBpY29uIHByb2dyZXNz
IGZlZWRiYWNrLgorKHNldG9wdCBzeXN0ZW0tdGFza2Jhci11c2UtcHJvZ3Jlc3MtcmVwb3J0ZXIg
dCkgOyB0aGlzIGlzIHRoZSBkZWZhdWx0CisKKzs7IFJlcG9ydCBgZG90aW1lc2AgcHJvZ3Jlc3Mg
b24gdGhlIHRhc2tiYXIgaWNvbi4KKyhkb3RpbWVzLXdpdGgtcHJvZ3Jlc3MtcmVwb3J0ZXIKKyAg
ICAoaSAxMCkKKyAgICAiQ291bnRpbmcgZnJvbSAxIHRvIDEwLi4uIgorICAoc2xlZXAtZm9yIDEp
KQorCis7OyBSZXBvcnQgYGRvbGlzdGAgcHJvZ3Jlc3Mgb24gdGhlIHRhc2tiYXIgaWNvbi4KKyhk
b2xpc3Qtd2l0aC1wcm9ncmVzcy1yZXBvcnRlcgorICAgIChpIChtYWtlLWxpc3QgMTAgdCkpCisg
ICAgIlByb2dyZXNzIGZyb20gMSB0byAxMCBlbGVtZW50cy4uLiIKKyAgKHNsZWVwLWZvciAxKSkK
K0BlbmQgZ3JvdXAKK0BlbmQgbGlzcAorCitAbm9kZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExp
Y2Vuc2UKK0BhcHBlbmRpeCBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKK0BpbmNsdWRl
IGRvY2xpY2Vuc2UudGV4aQorCitAbm9kZSBGdW5jdGlvbiBJbmRleAorQHVubnVtYmVyZWQgRnVu
Y3Rpb24gSW5kZXgKK0BwcmludGluZGV4IGZuCisKK0Bub2RlIFZhcmlhYmxlIEluZGV4CitAdW5u
dW1iZXJlZCBWYXJpYWJsZSBJbmRleAorQHByaW50aW5kZXggdnIKKworQGJ5ZQorCitAYyBFbmQ6
Ci0tIAoyLjQ3LjEKCg==
--000000000000aade3c0645b541ee--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 03:07:02 +0000
Resent-Message-ID: <handler.79859.B79859.176550876627880 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176550876627880
          (code B ref 79859); Fri, 12 Dec 2025 03:07:02 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 03:06:06 +0000
Received: from localhost ([127.0.0.1]:51435 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vTtTq-0007Fb-2j
	for submit <at> debbugs.gnu.org; Thu, 11 Dec 2025 22:06:06 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:61864)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vTtTo-0007F0-NR
 for 79859 <at> debbugs.gnu.org; Thu, 11 Dec 2025 22:06:05 -0500
Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4CE9581C28;
 Thu, 11 Dec 2025 22:05:59 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765508758;
 bh=g53JyBBlPpDir1t/CzXSkl223fX750M3okUDA3EZu8Y=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=i8hGs/p40lhGsLF195YX49sfk9KLZu+8MJS4tkOIeiBd3JpkN7aYOCLTj1uzI9wWy
 xOfE2yM+6JOG/VABh7xdhcakt24+Cr6wsiYHBVESPmGmhLeqlvElHJXmlGC5REPOoZ
 wwsgn6Mr+GwY7rlKrHkJMhS6HneeExEqCnUJjAZJsvqhP4RhmB9fOiZNMjiyEnq1oJ
 NYEQSeLST70fx9uO1eBoqg3ZbpTxsu+C/7d29nQCPKfMqEyoW15MPFW/16iMTSqSDz
 5w2IwOdww1kZ5rb//hMFkqxzW/hDEOGBleomhzq39CURYiVTJf7aE2mt/i1sdL+jg6
 CbnBfQEUKSjzw==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0BB6280471;
 Thu, 11 Dec 2025 22:05:58 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 5B21E12059D;
 Thu, 11 Dec 2025 22:05:56 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
Message-ID: <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
Date: Thu, 11 Dec 2025 22:05:53 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.215 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> I think I'd merge them into a single hook.
>> E.g.
>>
>>     (defvar progress-reporter-update-functions nil
>>       "Special hook run on progress-reporter updates.
>>     These functions are called with two arguments (REPORTER STATE)
>>     and their return value is ignored.  STATE can be:
>>     - `done', when the job is, well, done.
>>     - An integer in the range 0-3 (for pulsing reporters).
>>     - A float between 0 and 1 (for numeric reporters).")
>
> Could do.  I'd prefer avoiding type-of conditionals and perhaps it could be
> reporter state value.  I'll take a stab at that.

I think an `integerp` conditional is clean.  It's Lisp's way to mimic
algebraic data types.  When the data type is more complex, we use
a heavier encoding (typically a `cons` cell with a symbol in the `car`
that stands for the tag), but for simple cases it's the most idiomatic
way to design an API, taking advantage of Lisp's dynamic types.

>> I think it would be even better if the echo-area feedback is moved to
>> the initial value of `progress-reporter-update-functions`, in case
>> someone wants to remove it or replace it with something else.
>> This will also make sure the API of `progress-reporter-update-functions`
>> is sufficient to reproduce this default behavior.
>
> I suggested that earlier but wasn't sure it was worth the trouble, and not
> so sure people should be encouraged to remove echo area feedback.

I don't see a reason to discourage people from removing it, but don't
intend to encourage people to do so either, no.
I see two reasons to do it:

1- As a sanity check that the API doesn't lack some important element.
2- As a "free" source of flexibility.  Based on all the fancy mode-line
   packages I've seen over the years, I'd be surprised if noone picks
   this up and creates a fancy progress reporter that displays its state
   in a pseudo-graphical way in the echo-area or the mode-line.

>> +(defcustom system-taskbar-use-progress-reporter t
>> > +  "Supplement progress-reporters with GUI system taskbar progress bars."
>> > +  :type 'boolean
>> > +  :set (lambda (variable value)
>> > +         (set-default variable value)
>> > +         (if value
>> > +             (system-taskbar-progress-reporter-install)
>> > +           (system-taskbar-progress-reporter-remove)))
>> > +  :version "31.1")
>>
>> This seems redundant with `system-taskbar-mode`.  IIUC the difference is
>> that `system-taskbar-mode` covers a bit more functionality, but as it
>> stands the code behaves strangely if you set
>> `system-taskbar-use-progress-reporter` to nil but enable
>> `system-taskbar-mode`.
>> I suggest to either merge them into a single option or to really
>> decouple the two (one for progress-reporter and one for the
>> badge/alerting).
> Behaves strangely how so?  It works here
> with system-taskbar-use-progress-reporter on or off.

AFAICT it will display the progress reporter in the taskbar even tho
`system-taskbar-use-progress-reporter` says not to.

>> +(defvar system-taskbar--back-end nil
>> > +  "Generic taskbar method system dispatcher.")
>> > +(defun system-taskbar--set-back-end ()
>> > +  "Determine taskbar host system type."
>> > +  ;; Order matters to accommodate the cases where an NS or MS-Windows
>> > +  ;; build have the dbus feature.
>> Maybe test `window-system` instead of `ns-version-string` and
>> `w32-initialized`?
> Happy to.  As long as there's no race condition setting up the initial w32
> frame with the invocation of system-taskbar-mode.

Ah, you mean if we start in daemon mode, maybe `window-system` is nil
until a first GUI frame is created?  You might be right.
Maybe another option is to test `window-system` in the `&context`
thingy and skip `system-taskbar--back-end` altogether?


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 14:01:01 +0000
Resent-Message-ID: <handler.79859.B79859.176554800717551 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176554800717551
          (code B ref 79859); Fri, 12 Dec 2025 14:01:01 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 14:00:07 +0000
Received: from localhost ([127.0.0.1]:56590 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU3gi-0004Yz-Vv
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:00:06 -0500
Received: from mail-ua1-x92d.google.com ([2607:f8b0:4864:20::92d]:44231)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vU3gd-0004Xa-80
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 09:00:01 -0500
Received: by mail-ua1-x92d.google.com with SMTP id
 a1e0cc1a2514c-93a9f6efe8bso328634241.0
 for <79859 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 05:59:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765547993; x=1766152793; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=Rm252u+h+feUzlEVnEj4keFHsRlsDtlCmvlm1R7K48c=;
 b=iPzanstnBpHPCHnesAHxupN/uCjUB/6WPValiFGBFY3456Gv+XxZDSvWnYx8AqWg3X
 f2uHReoYoI5RpkcdlGWUrZS9cyqCQOl/LJAM/N2ZjjA+PNPfKWJrfbyuMvRM5f0aJH2a
 ypdFll6Mc/b4SKvz8oVZl13Zh8k18nu5P0aOmXYJqcIovCN2Iupwyn2CEY6uyvkZSVwH
 o9DOlTkhp7tGAh1IAB6BBbSQrG3J8v64ftjM3Uq172TSWdQMGqz9wB1DsfDl99frV1sI
 rKRtwAYr68UMEJnhnXmkMjZuvNKrYV6OzF7SFSd8MNNe7KXfbWGdPvY0R1rmXrIN5lnU
 P+uw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765547993; x=1766152793;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=Rm252u+h+feUzlEVnEj4keFHsRlsDtlCmvlm1R7K48c=;
 b=MZbOZnCaUC3UuvFSZlik9d4BOOpLL14kZInPH40McYBNc+SN9+wmUQJsuzoOJI6fiv
 WKQR3bBTG8apYDa5pwhH7Ay/VOepjUCAzE8qOFcMbPz4HlnvEAwXM/LmsDATtCwyEI/Q
 OAjtbnI/yag3VgvEFCrnZSVosjM58Vv29AZQiqLep2pxH7R9+gyL1KTxXA8OexMhea/m
 3v9SlDJOFEF/eLBoF/fc3Ilc6PieDzQ2X/dIG0XuyElYUhYB0hkb/+xO2ZbZePE/IN35
 8FPpaXh+9P5Klxk1n8RqXw34HNNSz5rhG6J7vKwFVQiUh41gPVtONp7JiAt00PP/AT9G
 WKdw==
X-Forwarded-Encrypted: i=1;
 AJvYcCXuhuQyEduxNLTCJkwMtsmeejnqiiQUQy+yJh7wWs8DzhBul0Pvo6Zr8qU1VtmnNKspVfar3A==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yz3GSmytFqYLDq8qVu8jPYB9G4Tb6phkzwTHbD/0A4TPAm3ioWh
 yFGho2xAANuoUxZydNOlWkLVdBwTvCxxomwfcXsdElkQqP/sCD450k2n6khI3+Ov7B8B9OkMa0/
 3J5IZHOesRgAfuAUA+TE4FAknQMM7nFQ=
X-Gm-Gg: AY/fxX7kn/wW9EssV7CTwdM5PerRM+2Qi5wa5E65DIHPgxnSfijWa1Dk1H8nkV4Dtwb
 qL8zjoCvQhkyeqAbpE8gMeK7YQmAPU7OZxJlQagPoNms/GxYr2HeBUeGCsObmWecfCKnD1QlEy+
 6Mh8nxKhUfJ1LOwM5IGI3MwgG82+dfE5j4Im4Wr3jLWsbdQbZ5yGfxuFgMTgNLU1nxyyCYv9IYN
 MvsK43+gXwJMXtY6baqLm2eeicnGx1p8QNDYHSlvWI9kP+3RsrVsbZAw1Q/GYy0wYqeCn4=
X-Google-Smtp-Source: AGHT+IHp5n8ACcUNT4TA99wpTEj6uyGP1WlVtO2FVdBMIK52x4uGTgvnHS/ZLDeuihAoCiQCRrm4L7+TT//q82LXKGg=
X-Received: by 2002:a05:6102:26c2:b0:5df:c15b:4feb with SMTP id
 ada2fe7eead31-5e8277cddb4mr381634137.26.1765547993275; Fri, 12 Dec 2025
 05:59:53 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Fri, 12 Dec 2025 08:59:39 -0500
X-Gm-Features: AQt7F2rSnP0zcAXRXWtkbHr-RqmnCtGBekAKzeTm2foS2J5rt1KfwkbXS36-Wxo
Message-ID: <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
Content-Type: multipart/mixed; boundary="000000000000f945560645c1ac1d"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000f945560645c1ac1d
Content-Type: multipart/alternative; boundary="000000000000f945540645c1ac1b"

--000000000000f945540645c1ac1b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Dec 11, 2025 at 10:06=E2=80=AFPM Stefan Monnier <monnier@HIDDEN=
eal.ca>
wrote:

> >> I think I'd merge them into a single hook.
> >> E.g.
> >>
> >>     (defvar progress-reporter-update-functions nil
> >>       "Special hook run on progress-reporter updates.
> >>     These functions are called with two arguments (REPORTER STATE)
> >>     and their return value is ignored.  STATE can be:
> >>     - `done', when the job is, well, done.
> >>     - An integer in the range 0-3 (for pulsing reporters).
> >>     - A float between 0 and 1 (for numeric reporters).")
> >
> > Could do.  I'd prefer avoiding type-of conditionals and perhaps it coul=
d
> be
> > reporter state value.  I'll take a stab at that.
>
> I think an `integerp` conditional is clean.  It's Lisp's way to mimic
> algebraic data types.  When the data type is more complex, we use
> a heavier encoding (typically a `cons` cell with a symbol in the `car`
> that stands for the tag), but for simple cases it's the most idiomatic
> way to design an API, taking advantage of Lisp's dynamic types.
>
> >> I think it would be even better if the echo-area feedback is moved to
> >> the initial value of `progress-reporter-update-functions`, in case
> >> someone wants to remove it or replace it with something else.
> >> This will also make sure the API of `progress-reporter-update-function=
s`
> >> is sufficient to reproduce this default behavior.
> >
> > I suggested that earlier but wasn't sure it was worth the trouble, and
> not
> > so sure people should be encouraged to remove echo area feedback.
>
> I don't see a reason to discourage people from removing it, but don't
> intend to encourage people to do so either, no.
> I see two reasons to do it:
>
> 1- As a sanity check that the API doesn't lack some important element.
> 2- As a "free" source of flexibility.  Based on all the fancy mode-line
>    packages I've seen over the years, I'd be surprised if noone picks
>    this up and creates a fancy progress reporter that displays its state
>    in a pseudo-graphical way in the echo-area or the mode-line.
>

Done.  It was a worthy exercise.  I added more convenience arguments to the
functions.


> >> +(defcustom system-taskbar-use-progress-reporter t
> >> > +  "Supplement progress-reporters with GUI system taskbar progress
> bars."
> >> > +  :type 'boolean
> >> > +  :set (lambda (variable value)
> >> > +         (set-default variable value)
> >> > +         (if value
> >> > +             (system-taskbar-progress-reporter-install)
> >> > +           (system-taskbar-progress-reporter-remove)))
> >> > +  :version "31.1")
> >>
> >> This seems redundant with `system-taskbar-mode`.  IIUC the difference =
is
> >> that `system-taskbar-mode` covers a bit more functionality, but as it
> >> stands the code behaves strangely if you set
> >> `system-taskbar-use-progress-reporter` to nil but enable
> >> `system-taskbar-mode`.
> >> I suggest to either merge them into a single option or to really
> >> decouple the two (one for progress-reporter and one for the
> >> badge/alerting).
> > Behaves strangely how so?  It works here
> > with system-taskbar-use-progress-reporter on or off.
>
> AFAICT it will display the progress reporter in the taskbar even tho
> `system-taskbar-use-progress-reporter` says not to.
>

I'm guessing you haven't run the code.  I don't experience that condition.
If you (setopt system-taskbar-use-progress-reporter nil) or set it nil in
advance of enabling the mode, the hook will not have system-taskbar
functions on it.

>> +(defvar system-taskbar--back-end nil
> >> > +  "Generic taskbar method system dispatcher.")
> >> > +(defun system-taskbar--set-back-end ()
> >> > +  "Determine taskbar host system type."
> >> > +  ;; Order matters to accommodate the cases where an NS or MS-Windo=
ws
> >> > +  ;; build have the dbus feature.
> >> Maybe test `window-system` instead of `ns-version-string` and
> >> `w32-initialized`?
> > Happy to.  As long as there's no race condition setting up the initial
> w32
> > frame with the invocation of system-taskbar-mode.
>
> Ah, you mean if we start in daemon mode, maybe `window-system` is nil
> until a first GUI frame is created?  You might be right.
> Maybe another option is to test `window-system` in the `&context`
> thingy and skip `system-taskbar--back-end` altogether?
>

I reverted the conditions specifically for that, yep.  `window-system` is
an insufficient condition given dbus.  We could change the &context to a
function call that does all the conditional tests, but testing dbus
availability each time would be "expensive" and I prefer to do that only
once.

Patch attached.

-St=C3=A9phane

--000000000000f945540645c1ac1b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 11, 2025 at 10:06=E2=80=AFPM Stefan Monnier &lt;<a href=3D"mail=
to:monnier@HIDDEN">monnier@HIDDEN</a>&gt; wrote:</span>=
</div></div><div class=3D"gmail_quote gmail_quote_container"><blockquote cl=
ass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid=
 rgb(204,204,204);padding-left:1ex">&gt;&gt; I think I&#39;d merge them int=
o a single hook.<br>
&gt;&gt; E.g.<br>
&gt;&gt;<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0(defvar progress-reporter-update-functions nil<=
br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;Special hook run on progress-repor=
ter updates.<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0These functions are called with two arguments (=
REPORTER STATE)<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0and their return value is ignored.=C2=A0 STATE =
can be:<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0- `done&#39;, when the job is, well, done.<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0- An integer in the range 0-3 (for pulsing repo=
rters).<br>
&gt;&gt;=C2=A0 =C2=A0 =C2=A0- A float between 0 and 1 (for numeric reporter=
s).&quot;)<br>
&gt;<br>
&gt; Could do.=C2=A0 I&#39;d prefer avoiding type-of conditionals and perha=
ps it could be<br>
&gt; reporter state value.=C2=A0 I&#39;ll take a stab at that.<br>
<br>
I think an `integerp` conditional is clean.=C2=A0 It&#39;s Lisp&#39;s way t=
o mimic<br>
algebraic data types.=C2=A0 When the data type is more complex, we use<br>
a heavier encoding (typically a `cons` cell with a symbol in the `car`<br>
that stands for the tag), but for simple cases it&#39;s the most idiomatic<=
br>
way to design an API, taking advantage of Lisp&#39;s dynamic types.<br>
<br>
&gt;&gt; I think it would be even better if the echo-area feedback is moved=
 to<br>
&gt;&gt; the initial value of `progress-reporter-update-functions`, in case=
<br>
&gt;&gt; someone wants to remove it or replace it with something else.<br>
&gt;&gt; This will also make sure the API of `progress-reporter-update-func=
tions`<br>
&gt;&gt; is sufficient to reproduce this default behavior.<br>
&gt;<br>
&gt; I suggested that earlier but wasn&#39;t sure it was worth the trouble,=
 and not<br>
&gt; so sure people should be encouraged to remove echo area feedback.<br>
<br>
I don&#39;t see a reason to discourage people from removing it, but don&#39=
;t<br>
intend to encourage people to do so either, no.<br>
I see two reasons to do it:<br>
<br>
1- As a sanity check that the API doesn&#39;t lack some important element.<=
br>
2- As a &quot;free&quot; source of flexibility.=C2=A0 Based on all the fanc=
y mode-line<br>
=C2=A0 =C2=A0packages I&#39;ve seen over the years, I&#39;d be surprised if=
 noone picks<br>
=C2=A0 =C2=A0this up and creates a fancy progress reporter that displays it=
s state<br>
=C2=A0 =C2=A0in a pseudo-graphical way in the echo-area or the mode-line.<b=
r></blockquote><div><br></div><div><div class=3D"gmail_default" style=3D"fo=
nt-family:monospace">Done.=C2=A0 It was a worthy exercise.=C2=A0 I added mo=
re convenience arguments to the functions.</div></div><div>=C2=A0</div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex">
&gt;&gt; +(defcustom system-taskbar-use-progress-reporter t<br>
&gt;&gt; &gt; +=C2=A0 &quot;Supplement progress-reporters with GUI system t=
askbar progress bars.&quot;<br>
&gt;&gt; &gt; +=C2=A0 :type &#39;boolean<br>
&gt;&gt; &gt; +=C2=A0 :set (lambda (variable value)<br>
&gt;&gt; &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(set-default variable valu=
e)<br>
&gt;&gt; &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if value<br>
&gt;&gt; &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(system-task=
bar-progress-reporter-install)<br>
&gt;&gt; &gt; +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(system-taskbar-pro=
gress-reporter-remove)))<br>
&gt;&gt; &gt; +=C2=A0 :version &quot;31.1&quot;)<br>
&gt;&gt;<br>
&gt;&gt; This seems redundant with `system-taskbar-mode`.=C2=A0 IIUC the di=
fference is<br>
&gt;&gt; that `system-taskbar-mode` covers a bit more functionality, but as=
 it<br>
&gt;&gt; stands the code behaves strangely if you set<br>
&gt;&gt; `system-taskbar-use-progress-reporter` to nil but enable<br>
&gt;&gt; `system-taskbar-mode`.<br>
&gt;&gt; I suggest to either merge them into a single option or to really<b=
r>
&gt;&gt; decouple the two (one for progress-reporter and one for the<br>
&gt;&gt; badge/alerting).<br>
&gt; Behaves strangely how so?=C2=A0 It works here<br>
&gt; with system-taskbar-use-progress-reporter on or off.<br>
<br>
AFAICT it will display the progress reporter in the taskbar even tho<br>
`system-taskbar-use-progress-reporter` says not to.<br></blockquote><div><b=
r></div><div><div class=3D"gmail_default" style=3D""><font face=3D"monospac=
e">I&#39;m guessing you haven&#39;t run the code.=C2=A0 I don&#39;t experie=
nce that condition.=C2=A0 If you (setopt=C2=A0system-taskbar-use-progress-r=
eporter nil) or set it nil in advance of enabling the mode, the hook will n=
ot have system-taskbar functions on it.</font></div></div><div><br></div><b=
lockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-le=
ft:1px solid rgb(204,204,204);padding-left:1ex">
&gt;&gt; +(defvar system-taskbar--back-end nil<br>
&gt;&gt; &gt; +=C2=A0 &quot;Generic taskbar method system dispatcher.&quot;=
)<br>
&gt;&gt; &gt; +(defun system-taskbar--set-back-end ()<br>
&gt;&gt; &gt; +=C2=A0 &quot;Determine taskbar host system type.&quot;<br>
&gt;&gt; &gt; +=C2=A0 ;; Order matters to accommodate the cases where an NS=
 or MS-Windows<br>
&gt;&gt; &gt; +=C2=A0 ;; build have the dbus feature.<br>
&gt;&gt; Maybe test `window-system` instead of `ns-version-string` and<br>
&gt;&gt; `w32-initialized`?<br>
&gt; Happy to.=C2=A0 As long as there&#39;s no race condition setting up th=
e initial w32<br>
&gt; frame with the invocation of system-taskbar-mode.<br>
<br>
Ah, you mean if we start in daemon mode, maybe `window-system` is nil<br>
until a first GUI frame is created?=C2=A0 You might be right.<br>
Maybe another option is to test `window-system` in the `&amp;context`<br>
thingy and skip `system-taskbar--back-end` altogether?<br></blockquote><div=
><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">I r=
everted the conditions specifically for that, yep.=C2=A0 `window-system` is=
 an insufficient condition given dbus.=C2=A0 We could change the &amp;conte=
xt to a function call=C2=A0that does all the conditional tests, but testing=
 dbus availability each time would be &quot;expensive&quot; and I prefer to=
 do that only once.</div><div class=3D"gmail_default" style=3D"font-family:=
monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mono=
space">Patch attached.</div><div class=3D"gmail_default" style=3D"font-fami=
ly:monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:m=
onospace">-St=C3=A9phane=C2=A0</div></div></div>

--000000000000f945540645c1ac1b--

--000000000000f945560645c1ac1d
Content-Type: application/octet-stream; 
	name="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Disposition: attachment; 
	filename="0001-System-GUI-taskbar-and-progress-reporter-hooks.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mj2xogy30>
X-Attachment-Id: f_mj2xogy30

RnJvbSA5NTAwN2NmMjhjNTViMjI3MzNlODgwZmE5NDMwOTNlZmM1MjBkMjU1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo
aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFRodSwgMjAgTm92IDIwMjUgMTI6NTQ6NDAgLTA1MDAK
U3ViamVjdDogW1BBVENIXSBTeXN0ZW0gR1VJIHRhc2tiYXIgYW5kIHByb2dyZXNzIHJlcG9ydGVy
IGhvb2tzCgpJbXBsZW1lbnQgc3lzdGVtIEdVSSB0YXNrYmFyL2RvY2svbGF1bmNoZXIgaWNvbiBi
YWRnZSwgaWNvbgpwcm9ncmVzcyBpbmRpY2F0b3IsIGljb24gYXR0ZW50aW9uIGFsZXJ0IGZlYXR1
cmVzIGZvciBELUJ1cwpwbGF0Zm9ybXMgKHRlc3RlZCBvbiBLREUgYW5kIEdOT01FKSwgTlMgKG1h
Y09TL0dOVXN0ZXApLApNUy1XaW5kb3dzLgoKQWRkICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUt
ZnVuY3Rpb25zJyBhYm5vcm1hbCBob29rIHRvIGZhY2lsaXRhdGUKdGFza2JhciBwcm9ncmVzcyBk
aXNwbGF5LCBhbmQgb3RoZXIgY3VzdG9tIHByb2dyZXNzIHJlcG9ydGVycy4KVGhlIGRlZmF1bHQg
ZnVuY3Rpb24gbGlzdCBpcyAncHJvZ3Jlc3MtcmVwb3J0ZXItZWNoby1hcmVhJyB3aGljaAppcyBi
YWNrd2FyZCBjb21wYXRpYmxlLgoKKiBsaXNwL3N1YnIuZWwgKHByb2dyZXNzLXJlcG9ydGVyLXVw
ZGF0ZS1mdW5jdGlvbnMpOgpOZXcgZGVmdmFyLgoocHJvZ3Jlc3MtcmVwb3J0ZXItZWNoby1hcmVh
KTogTmV3IGRlZnVuLgoocHJvZ3Jlc3MtcmVwb3J0ZXItZG8tdXBkYXRlKTogUnVuCnByb2dyZXNz
LXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMgZm9yIGJvdGggbnVtZXJpY2FsIGFuZApwdWxzaW5n
IHJlcG9ydGVycy4KKHByb2dyZXNzLXJlcG9ydGVyLWRvbmUpOiBSdW4gcHJvZ3Jlc3MtcmVwb3J0
ZXItZG9uZS1mdW5jdGlvbnMuCiogbGlzcC9zeXN0ZW0tdGFza2Jhci5lbDogTmV3IGZpbGUuCiog
c3JjL25zZm5zLm0gKEZuc19iYWRnZSwgRm5zX3Byb2dyZXNzX2luZGljYXRvcikKKEZuc19yZXF1
ZXN0X3VzZXJfYXR0ZW50aW9uKTogTmV3IGZ1bmN0aW9uLgooc3ltc19vZl9uc2Zucyk6IEFkZCBk
ZWZzdWJyIFNuc19iYWRnZSwKU25zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sIFNuc19wcm9ncmVz
c19pbmRpY2F0b3IuIEFkZCBERUZTWU0KUWluZm9ybWF0aW9uYWwsIFFjcml0aWNhbC4KKiBzcmMv
dzMyZm5zLmMgKHJnYl9saXN0X3RvX2NvbG9ycmVmLCBGdzMyX2JhZGdlKQooRnczMl9yZXF1ZXN0
X3VzZXJfYXR0ZW50aW9uLCBGdzMyX3Byb2dyZXNzX2luZGljYXRvcik6IE5ldwpmdW5jdGlvbi4K
KHN5bXNfb2ZfdzMyZm5zKTogQWRkIGRlZnN1YnIgU3czMl9iYWRnZSwKU3czMl9wcm9ncmVzc19p
bmRpY2F0b3IsIFN3MzJfcmVxdWVzdF91c2VyX2F0dGVudGlvbi4gQWRkIERFRlNZTQpRaW5mb3Jt
YXRpb25hbCwgUWNyaXRpY2FsLgoqIHN5c3RlbS10YXNiYXIudGV4aTogTmV3IGZpbGUgKFdJTEwg
QkUgTUVSR0VEIElOVE8gRU1BQ1MgQU5ECkVMSVNQIE1BTlVBTCkuCiogZXRjL05FV1M6IEFubm91
bmNlIHN5c3RlbS10YXNrYmFyLW1vZGUuICBBbm5vdW5jZSBwcm9ncmVzcwpyZXBvcnRlciBjYWxs
YmFjayBlbmhhbmNlbWVudHMuCi0tLQogZXRjL05FV1MgICAgICAgICAgICAgICB8ICAyMiArKwog
bGlzcC9zdWJyLmVsICAgICAgICAgICB8ICA4OCArKysrKystLQogbGlzcC9zeXN0ZW0tdGFza2Jh
ci5lbCB8IDQ4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3Jj
L25zZm5zLm0gICAgICAgICAgICB8IDEyOCArKysrKysrKysrKwogc3JjL3czMmZucy5jICAgICAg
ICAgICB8IDMyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzeXN0ZW0tdGFza2Jhci50
ZXhpICAgIHwgMjU0ICsrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMTI4
MSBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaXNw
L3N5c3RlbS10YXNrYmFyLmVsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzdGVtLXRhc2tiYXIudGV4
aQoKZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggZmRiMWVlMDI4MTkuLjY3
NjE0NGRmZjEyIDEwMDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVXUwpAQCAtMzE1MSw2
ICszMTUxLDIxIEBAIFRoaXMgbGlicmFyeSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gdGhyb3R0bGUg
b3IgZGVib3VuY2UgRW1hY3MgTGlzcAogZnVuY3Rpb25zLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGNv
cnJhbGxpbmcgb3ZlcmVhZ2VyIGNvZGUgdGhhdCBpcyBzbG93CiBhbmQgYmxvY2tzIEVtYWNzLCBv
ciBkb2VzIG5vdCBwcm92aWRlIHdheXMgdG8gbGltaXQgaG93IG9mdGVuIGl0IHJ1bnMuCiAKKysr
KworKioqIE5ldyBtb2RlICdzeXN0ZW0tdGFza2Jhci1tb2RlJy4KK1RoaXMgaXMgYSBnbG9iYWwg
bWlub3IgbW9kZSBhbmQgY29tcGFuaW9uIGZ1bmN0aW9ucyB0aGF0IGludGVncmF0ZSBFbWFjcwor
d2l0aCBzeXN0ZW0gR1VJIHRhc2tiYXJzIChhbHNvIGNhbGxlZCBkb2NrcyBvciBsYXVuY2hlcnMg
b3Igc29tZXRoaW5nCitzaW1pbGFyKSB0byBkaXNwbGF5IGEgdGFza2JhciBpY29uICJiYWRnZSIg
b3ZlcmxheSwgYSBwcm9ncmVzcyBiYXIKK3JlcG9ydCBvdmVybGF5LCBhbGVydCB0aGUgdXNlciB0
aGF0IGFuIEVtYWNzIHNlc3Npb24gbmVlZHMgYXR0ZW50aW9uLAorb2Z0ZW4gYnkgZmxhc2hpbmcg
b3IgYm91bmNpbmcgdGhlIEVtYWNzIGFwcGxpY2F0aW9uIGljb24uICBTdXBwb3J0ZWQKK2NhcGFi
bGUgc3lzdGVtcyBhcmUgR05VL0xpbnV4IHZpYSBELUJ1cywgbWFjT1MvR05Vc3RlcCAxMC41Kywg
TVMtV2luZG93cworNysuCisKK09uIEdOVS9MaW51eCBzeXN0ZW1zLCBzaGVsbCBleHRlbnNpb25z
IG9yIHNpbWlsYXIgaGVscGVycyBzdWNoIGFzCisiZGFzaC10by1kb2NrIiBtYXkgYmUgcmVxdWly
ZWQuICBTZWUKKzxodHRwczovL2V4dGVuc2lvbnMuZ25vbWUub3JnL2V4dGVuc2lvbi8zMDcvZGFz
aC10by1kb2NrLz4gYW5kCis8aHR0cHM6Ly93aWtpLnVidW50dS5jb20vVW5pdHkvTGF1bmNoZXJB
UEk+LgorCiAMCiAqIEluY29tcGF0aWJsZSBMaXNwIENoYW5nZXMgaW4gRW1hY3MgMzEuMQogCkBA
IC0zNTc5LDYgKzM1OTQsMTMgQEAgRW1hY3Mgd2hlbiBidWlsdCB3aXRoIHRoZSBwdXJlIEdUSyB0
b29sa2l0IG5vdyByZXNwZWN0cyBkZXNrdG9wCiBkYXJrIGFuZCBsaWdodCBtb2RlcyBmb3IgZHJh
d2luZyBhIEdUSyB0b29sYmFyIGFuZCB3aWRnZXRzLAogYXV0b21hdGljYWxseSB0b2dnbGluZyBi
ZXR3ZWVuIHRoZW0uCiAKKysrKworKiogUHJvZ3Jlc3MgcmVwb3J0ZXIgY2FsbGJhY2tzLgorJ21h
a2UtcHJvZ3Jlc3MtcmVwb3J0ZXInIG5vdyBhY2NlcHRzIG9wdGlvbmFsIGFyZ3VtZW50cyBVUERB
VEUtQ0FMTEJBQ0ssCitjYWxsZWQgb24gcHJvZ3Jlc3Mgc3RlcHMsIGFuZCBET05FLUNBTExCQUNL
LCBjYWxsZWQgd2hlbiB0aGUgcHJvZ3Jlc3MKK3JlcG9ydGVyIGlzIGRvbmUuICBTZWUgdGhlICdt
YWtlLXByb2dyZXNzLXJlcG9ydGVyJyBkb2NzdHJpbmcgZm9yIGEgZnVsbAorc3BlY2lmaWNhdGlv
biBvZiB0aGVzZSBuZXcgb3B0aW9uYWwgYXJndW1lbnRzLgorCiAMCiAqIENoYW5nZXMgaW4gRW1h
Y3MgMzEuMSBvbiBOb24tRnJlZSBPcGVyYXRpbmcgU3lzdGVtcwogCmRpZmYgLS1naXQgYS9saXNw
L3N1YnIuZWwgYi9saXNwL3N1YnIuZWwKaW5kZXggZmNmOTMxYjY0ZTkuLjU4ZGIzODExN2RjIDEw
MDY0NAotLS0gYS9saXNwL3N1YnIuZWwKKysrIGIvbGlzcC9zdWJyLmVsCkBAIC02OTc0LDIwICs2
OTc0LDMzIEBAIHNldC10cmFuc2llbnQtbWFwCiA7OyBkaWdpdHMgb2YgcHJlY2lzaW9uLCBpdCBk
b2Vzbid0IHJlYWxseSBtYXR0ZXIgaGVyZS4gIE9uIHRoZSBvdGhlcgogOzsgaGFuZCwgaXQgZ3Jl
YXRseSBzaW1wbGlmaWVzIHRoZSBjb2RlLgogCisoZGVmdmFyIHByb2dyZXNzLXJlcG9ydGVyLXVw
ZGF0ZS1mdW5jdGlvbnMgKGxpc3QgIydwcm9ncmVzcy1yZXBvcnRlci1lY2hvLWFyZWEpCisgICJT
cGVjaWFsIGhvb2sgcnVuIG9uIHByb2dyZXNzLXJlcG9ydGVyIHVwZGF0ZXMuCitFYWNoIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aXRoIHNpeCBhcmd1bWVudHM6CitSRVBPUlRFUiBpcyB0aGUgcmVzdWx0
IG9mIGEgY2FsbCB0byBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcicuCitTVEFURSBpcyB0aGUgc3lt
Ym9sIGB1cGRhdGUnIG9yIGBkb25lJy4KK1BFUkNFTlRBR0UgaXMgYSBudW1iZXIgaW4gdGhlIHJh
bmdlIDAtMTAwLCBvciBuaWwgZm9yIGEgcHVsc2luZyByZXBvcnRlci4KK0lOREVYIGlzIGEgbnVt
YmVyIGluIHRoZSByYW5nZSAwLTMsIG9yIG5pbCBmb3IgYSBudW1lcmljIHJlcG9ydGVyLgorVEVY
VCBpcyB0aGUgcHJvZ3Jlc3MgcmVwb3J0ZXIgbWVzc2FnZSB0ZXh0LgorU1VGRklYIGlzIGFuIG9w
dGlvbmFsIHN0cmluZyB0byBwcmludCBhdCB0aGUgZW5kIG9mIHRoZSB1cGRhdGUgbWVzc2FnZS4i
KQorCiAoZGVmc3Vic3QgcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlIChyZXBvcnRlciAmb3B0aW9u
YWwgdmFsdWUgc3VmZml4KQotICAiUmVwb3J0IHByb2dyZXNzIG9mIGFuIG9wZXJhdGlvbiBpbiB0
aGUgZWNobyBhcmVhLgorICAiUmVwb3J0IHByb2dyZXNzIG9mIGFuIG9wZXJhdGlvbiwgYnkgZGVm
YXVsdCwgaW4gdGhlIGVjaG8gYXJlYS4KIFJFUE9SVEVSIHNob3VsZCBiZSB0aGUgcmVzdWx0IG9m
IGEgY2FsbCB0byBgbWFrZS1wcm9ncmVzcy1yZXBvcnRlcicuCiAKIElmIFJFUE9SVEVSIGlzIGEg
bnVtZXJpY2FsIHByb2dyZXNzIHJlcG9ydGVyLS0taS5lLiBpZiBpdCB3YXMKLSBtYWRlIHVzaW5n
IG5vbi1uaWwgTUlOLVZBTFVFIGFuZCBNQVgtVkFMVUUgYXJndW1lbnRzIHRvCi0gYG1ha2UtcHJv
Z3Jlc3MtcmVwb3J0ZXInLS0tdGhlbiBWQUxVRSBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2Vlbgot
IE1JTi1WQUxVRSBhbmQgTUFYLVZBTFVFLgorbWFkZSB1c2luZyBub24tbmlsIE1JTi1WQUxVRSBh
bmQgTUFYLVZBTFVFIGFyZ3VtZW50cyB0bworYG1ha2UtcHJvZ3Jlc3MtcmVwb3J0ZXInLS0tdGhl
biBWQUxVRSBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbgorTUlOLVZBTFVFIGFuZCBNQVgtVkFM
VUUuCiAKIE9wdGlvbmFsIGFyZ3VtZW50IFNVRkZJWCBpcyBhIHN0cmluZyB0byBiZSBkaXNwbGF5
ZWQgYWZ0ZXIKIFJFUE9SVEVSJ3MgbWFpbiBtZXNzYWdlIGFuZCBwcm9ncmVzcyB0ZXh0LiAgSWYg
UkVQT1JURVIgaXMgYQogbm9uLW51bWVyaWNhbCByZXBvcnRlciwgdGhlbiBWQUxVRSBzaG91bGQg
YmUgbmlsLCBvciBhIHN0cmluZyB0bwogdXNlIGluc3RlYWQgb2YgU1VGRklYLgogCitTZWUgYHBy
b2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMnIGZvciB0aGUgbGlzdCBvZiBmdW5jdGlv
bnMKK2NhbGxlZCBvbiBlYWNoIHVwZGF0ZS4KKwogVGhpcyBmdW5jdGlvbiBpcyByZWxhdGl2ZWx5
IGluZXhwZW5zaXZlLiAgSWYgdGhlIGNoYW5nZSBzaW5jZQogbGFzdCB1cGRhdGUgaXMgdG9vIHNt
YWxsIG9yIGluc3VmZmljaWVudCB0aW1lIGhhcyBwYXNzZWQsIGl0IGRvZXMKIG5vdGhpbmcuIgpA
QCAtNzA0OCw4ICs3MDYxLDggQEAgJ3Byb2dyZXNzLXJlcG9ydGVyLW1ha2UKIChkZWZ1biBwcm9n
cmVzcy1yZXBvcnRlci1mb3JjZS11cGRhdGUgKHJlcG9ydGVyICZvcHRpb25hbCB2YWx1ZSBuZXct
bWVzc2FnZSBzdWZmaXgpCiAgICJSZXBvcnQgcHJvZ3Jlc3Mgb2YgYW4gb3BlcmF0aW9uIGluIHRo
ZSBlY2hvIGFyZWEgdW5jb25kaXRpb25hbGx5LgogCi1SRVBPUlRFUiwgVkFMVUUsIGFuZCBTVUZG
SVggYXJlIHRoZSBzYW1lIGFzIGluIGBwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUnLgotTkVXLU1F
U1NBR0UsIGlmIG5vbi1uaWwsIHNldHMgYSBuZXcgbWVzc2FnZSBmb3IgdGhlIHJlcG9ydGVyLiIK
KyAgUkVQT1JURVIsIFZBTFVFLCBhbmQgU1VGRklYIGFyZSB0aGUgc2FtZSBhcyBpbiBgcHJvZ3Jl
c3MtcmVwb3J0ZXItdXBkYXRlJy4KKyAgTkVXLU1FU1NBR0UsIGlmIG5vbi1uaWwsIHNldHMgYSBu
ZXcgbWVzc2FnZSBmb3IgdGhlIHJlcG9ydGVyLiIKICAgKGxldCAoKHBhcmFtZXRlcnMgKGNkciBy
ZXBvcnRlcikpKQogICAgICh3aGVuIG5ldy1tZXNzYWdlCiAgICAgICAoYXNldCBwYXJhbWV0ZXJz
IDMgbmV3LW1lc3NhZ2UpKQpAQCAtNzA2MCwxMiArNzA3MywzMCBAQCBwcm9ncmVzcy1yZXBvcnRl
ci1mb3JjZS11cGRhdGUKIChkZWZ2YXIgcHJvZ3Jlc3MtcmVwb3J0ZXItLXB1bHNlLWNoYXJhY3Rl
cnMgWyItIiAiXFwiICJ8IiAiLyJdCiAgICJDaGFyYWN0ZXJzIHRvIHVzZSBmb3IgcHVsc2luZyBw
cm9ncmVzcyByZXBvcnRlcnMuIikKIAorKGRlZnVuIHByb2dyZXNzLXJlcG9ydGVyLWVjaG8tYXJl
YSAoIF9yZXBvcnRlciBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBlcmNlbnRhZ2UgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0IHN1ZmZpeCkKKyAgIlByb2dyZXNzIHJlcG9ydGVyIGVjaG8gYXJlYSB1cGRhdGUgZnVuY3Rp
b24uIgorICAocGNhc2Ugc3RhdGUKKyAgICAoJ3VwZGF0ZQorICAgICAoY29uZCAocGVyY2VudGFn
ZQorICAgICAgICAgICAgKGlmIChwbHVzcCBwZXJjZW50YWdlKQorICAgICAgICAgICAgICAgICht
ZXNzYWdlICIlcyVkJSUgJXMiIHRleHQgcGVyY2VudGFnZSBzdWZmaXgpCisgICAgICAgICAgICAg
IChtZXNzYWdlICIlcyAlcyIgdGV4dCBzdWZmaXgpKSkKKyAgICAgICAgICAgKGluZGV4CisgICAg
ICAgICAgICAobGV0ICgobWVzc2FnZS1sb2ctbWF4IG5pbCkKKyAgICAgICAgICAgICAgICAgIChw
dWxzZS1jaGFyIChhcmVmIHByb2dyZXNzLXJlcG9ydGVyLS1wdWxzZS1jaGFyYWN0ZXJzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCkpKQorICAgICAgICAgICAgICAo
bWVzc2FnZSAiJXMgJXMgJXMiIHRleHQgcHVsc2UtY2hhciBzdWZmaXgpKSkpKQorICAgICgnZG9u
ZQorICAgICAobWVzc2FnZSAiJXNkb25lIiB0ZXh0KSkpKQorCiAoZGVmdW4gcHJvZ3Jlc3MtcmVw
b3J0ZXItZG8tdXBkYXRlIChyZXBvcnRlciB2YWx1ZSAmb3B0aW9uYWwgc3VmZml4KQotICAobGV0
KiAoKHBhcmFtZXRlcnMgICAoY2RyIHJlcG9ydGVyKSkKLQkgKHVwZGF0ZS10aW1lICAoYXJlZiBw
YXJhbWV0ZXJzIDApKQotCSAobWluLXZhbHVlICAgIChhcmVmIHBhcmFtZXRlcnMgMSkpCi0JICht
YXgtdmFsdWUgICAgKGFyZWYgcGFyYW1ldGVycyAyKSkKLQkgKHRleHQgICAgICAgICAoYXJlZiBw
YXJhbWV0ZXJzIDMpKQorICAobGV0KiAoKHBhcmFtZXRlcnMgICAgICAoY2RyIHJlcG9ydGVyKSkK
KwkgKHVwZGF0ZS10aW1lICAgICAoYXJlZiBwYXJhbWV0ZXJzIDApKQorCSAobWluLXZhbHVlICAg
ICAgIChhcmVmIHBhcmFtZXRlcnMgMSkpCisJIChtYXgtdmFsdWUgICAgICAgKGFyZWYgcGFyYW1l
dGVycyAyKSkKKwkgKHRleHQgICAgICAgICAgICAoYXJlZiBwYXJhbWV0ZXJzIDMpKQogCSAoZW5v
dWdoLXRpbWUtcGFzc2VkCiAJICA7OyBTZWUgaWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCBzaW5j
ZSB0aGUgbGFzdCB1cGRhdGUuCiAJICAob3IgKG5vdCB1cGRhdGUtdGltZSkKQEAgLTcwOTgsOSAr
NzEyOSwxMyBAQCBwcm9ncmVzcy1yZXBvcnRlci1kby11cGRhdGUKICAgICAgICAgICAgICAgIChp
ZiBzdWZmaXgKICAgICAgICAgICAgICAgICAgICAoYXNldCBwYXJhbWV0ZXJzIDYgc3VmZml4KQog
ICAgICAgICAgICAgICAgICAoc2V0cSBzdWZmaXggKG9yIChhcmVmIHBhcmFtZXRlcnMgNikgIiIp
KSkKLSAgICAgICAgICAgICAgIChpZiAocGx1c3AgcGVyY2VudGFnZSkKLSAgICAgICAgICAgICAg
ICAgICAobWVzc2FnZSAiJXMlZCUlICVzIiB0ZXh0IHBlcmNlbnRhZ2Ugc3VmZml4KQotICAgICAg
ICAgICAgICAgICAobWVzc2FnZSAiJXMgJXMiIHRleHQgc3VmZml4KSkpKSkKKyAgICAgICAgICAg
ICAgIChydW4taG9vay13aXRoLWFyZ3MgJ3Byb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlv
bnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VwZGF0ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwZXJjZW50YWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5pbCA7IGluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4KSkpKQogCSAgOzsgUHVs
c2luZyBpbmRpY2F0b3IKIAkgIChlbm91Z2gtdGltZS1wYXNzZWQKICAgICAgICAgICAgKHdoZW4g
KGFuZCB2YWx1ZSAobm90IHN1ZmZpeCkpCkBAIC03MTA4LDE2ICs3MTQzLDI3IEBAIHByb2dyZXNz
LXJlcG9ydGVyLWRvLXVwZGF0ZQogICAgICAgICAgICAoaWYgc3VmZml4CiAgICAgICAgICAgICAg
ICAoYXNldCBwYXJhbWV0ZXJzIDYgc3VmZml4KQogICAgICAgICAgICAgIChzZXRxIHN1ZmZpeCAo
b3IgKGFyZWYgcGFyYW1ldGVycyA2KSAiIikpKQotICAgICAgICAgICAobGV0KiAoKGluZGV4ICht
b2QgKDErIChjYXIgcmVwb3J0ZXIpKSA0KSkKLSAgICAgICAgICAgICAgICAgIChtZXNzYWdlLWxv
Zy1tYXggbmlsKQotICAgICAgICAgICAgICAgICAgKHB1bHNlLWNoYXIgKGFyZWYgcHJvZ3Jlc3Mt
cmVwb3J0ZXItLXB1bHNlLWNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4KSkpCisgICAgICAgICAgIChsZXQgKChpbmRleCAobW9kICgxKyAoY2FyIHJl
cG9ydGVyKSkgNCkpKQogCSAgICAgKHNldGNhciByZXBvcnRlciBpbmRleCkKLSAgICAgICAgICAg
ICAobWVzc2FnZSAiJXMgJXMgJXMiIHRleHQgcHVsc2UtY2hhciBzdWZmaXgpKSkpKSkKKyAgICAg
ICAgICAgICAocnVuLWhvb2std2l0aC1hcmdzICdwcm9ncmVzcy1yZXBvcnRlci11cGRhdGUtZnVu
Y3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlcgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VwZGF0ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmlsIDsgcGVyY2VudGFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCkpKSkpKQogCiAoZGVmdW4gcHJvZ3Jl
c3MtcmVwb3J0ZXItZG9uZSAocmVwb3J0ZXIpCi0gICJQcmludCByZXBvcnRlcidzIG1lc3NhZ2Ug
Zm9sbG93ZWQgYnkgd29yZCBcImRvbmVcIiBpbiBlY2hvIGFyZWEuIgotICAobWVzc2FnZSAiJXNk
b25lIiAoYXJlZiAoY2RyIHJlcG9ydGVyKSAzKSkpCisgICJQcmludCByZXBvcnRlcidzIG1lc3Nh
Z2UgZm9sbG93ZWQgYnkgd29yZCBcImRvbmVcIiBpbiBlY2hvIGFyZWEuCitDYWxsIHRoZSBmdW5j
dGlvbnMgb24gYHByb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnNgLiIKKyAgKHJ1bi1o
b29rLXdpdGgtYXJncyAncHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlLWZ1bmN0aW9ucworICAgICAg
ICAgICAgICAgICAgICAgIHJlcG9ydGVyCisgICAgICAgICAgICAgICAgICAgICAgJ2RvbmUKKyAg
ICAgICAgICAgICAgICAgICAgICBuaWwgOyBwZXJjZW50YWdlCisgICAgICAgICAgICAgICAgICAg
ICAgbmlsIDsgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAoYXJlZiAoY2RyIHJlcG9ydGVy
KSAzKSA7IHRleHQKKyAgICAgICAgICAgICAgICAgICAgICA7OyBzdWZmaXgKKyAgICAgICAgICAg
ICAgICAgICAgICBuaWwpKQogCiAoZGVmbWFjcm8gZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9y
dGVyIChzcGVjIHJlcG9ydGVyLW9yLW1lc3NhZ2UgJnJlc3QgYm9keSkKICAgIkxvb3AgYSBjZXJ0
YWluIG51bWJlciBvZiB0aW1lcyBhbmQgcmVwb3J0IHByb2dyZXNzIGluIHRoZSBlY2hvIGFyZWEu
CmRpZmYgLS1naXQgYS9saXNwL3N5c3RlbS10YXNrYmFyLmVsIGIvbGlzcC9zeXN0ZW0tdGFza2Jh
ci5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY3Yjk3ZTlmMTUK
LS0tIC9kZXYvbnVsbAorKysgYi9saXNwL3N5c3RlbS10YXNrYmFyLmVsCkBAIC0wLDAgKzEsNDgz
IEBACis7Ozsgc3lzdGVtLXRhc2tiYXIuZWwgLS0tIFN5c3RlbSBHVUkgdGFza2Jhci9kb2NrL2xh
dW5jaGVyIHN0YXR1cyBkaXNwbGF5IC0qLSBsZXhpY2FsLWJpbmRpbmc6IHQgLSotCisKKzs7IENv
cHlyaWdodCAoQykgMjAyNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgQXV0
aG9yOiBTdGVwaGFuZSBNYXJrcworOzsgTWFpbnRhaW5lcjogZW1hY3MtZGV2ZWxAZ251Lm9yZwor
OzsgS2V5d29yZHM6IGNvbnZlbmllbmNlCis7OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGVtYWNzICIz
MS4xIikpCisKKzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgR05VIEVt
YWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo
ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFs
b25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGlj
ZW5zZXMvPi4KKworOzs7IENvbW1lbnRhcnk6CisKKzs7IFVzZSB0aGlzIHBhY2thZ2UgdG8gZGlz
cGxheSBhIHRhc2tiYXIgaWNvbiAiYmFkZ2UiIG92ZXJsYXksIGEKKzs7IHByb2dyZXNzIGJhciBy
ZXBvcnQgb3ZlcmxheSwgb3IgYWxlcnQgdGhlIHVzZXIgdGhhdCBhbiBFbWFjcyBzZXNzaW9uCis7
OyBuZWVkcyBhdHRlbnRpb24sIG9mdGVuIGJ5IGZsYXNoaW5nIG9yIGJvdW5jaW5nIHRoZSBFbWFj
cyBhcHBsaWNhdGlvbgorOzsgaWNvbi4KKzs7Cis7OyBOb3RlOiBUaGUgdGVybSB0YXNrYmFyIGlz
IGluY2x1c2l2ZSBvZiBkb2NrIG9yIGxhdW5jaGVyIG9yIHNvbWUgb3RoZXIKKzs7IHRlcm1pbm9s
b2d5IGFzIG1heSBiZSB1c2VkIGZvciB5b3VyIHN5c3RlbS4KKzs7Cis7OyBPbiBHTlUvTGludXgs
IHRoZSB2aXNpYmxlIGVmZmVjdHMgd2lsbCBhcHBlYXIgb24gdGhlIGRlc3RpbmF0aW9ucworOzsg
ZGV0ZXJtaW5lZCBieSB5b3VyIHNoZWxsIGV4dGVuc2lvbiwgbW9zdCBvZnRlbiB0aGUgYXBwbGlj
YXRpb24KKzs7IGxhdW5jaGVyIG9yIGRvY2sgcGFuZWwsIG9yIHRoZSB0b3AgcGFuZWwuICBFZmZl
Y3RzIGFyZSBnbG9iYWwgZm9yIGFuCis7OyBFbWFjcyBpbnN0YW5jZS4KKzs7Cis7OyBPbiBtYWNP
Uy9HTlVzdGVwLCB0aGUgZWZmZWN0cyB3aWxsIGFwcGVhciBvbiB0aGUgRG9jayBhbmQgaW4gdGhl
IEFwcAorOzsgU3dpdGNoZXIuICBFZmZlY3RzIGFyZSBnbG9iYWwgZm9yIGFuIEVtYWNzIGluc3Rh
bmNlLgorOzsKKzs7IE9uIE1TLVdpbmRvd3MsIHRoZSBlZmZlY3RzIGFwcGVhciBvbiB0aGUgdGFz
a2Jhci4gIEVmZmVjdHMgYXJlCis7OyBhc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIGZyb20gd2hp
Y2ggdGhleSBhcmUgaW5pdGlhdGVkLgorCis7OzsgVXNhZ2U6CisKKzs7IFRoZSBnbG9iYWwgbWlu
b3IgbW9kZSBgc3lzdGVtLXRhc2tiYXItbW9kZScgaW5pdGlhbGl6ZXMgdGhlIEdVSQorOzsgcGxh
dGZvcm0gYmFjay1lbmQgYW5kIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdXNpbmcgdGhlIGZ1bmN0
aW9ucworOzsgYmVsb3cuCis7OworOzsgYHN5c3RlbS10YXNrYmFyLWJhZGdlJyBvdmVybGF5cyBh
IGNvdW50LCB3aGljaCBpcyBhbiBpbnRlZ2VyLCBvbiB0aGUKKzs7IEVtYWNzIHRhc2tiYXIgaWNv
bi4gIFlvdSBjYW4gdXNlIHRoaXMsIGZvciBleGFtcGxlLCB0byBpbmRpY2F0ZSB0aGUKKzs7IG51
bWJlciBvZiB1bnJlYWQgZW1haWwgbWVzc2FnZXMuICBPbiBHTlUvTGludXgsIHRoZSBjb3VudCBt
dXN0IGJlIGFuCis7OyBpbnRlZ2VyIG9yIG5pbC4gIE9uIG1hY09TL0dOVXN0ZXAsIHRoZSBjb3Vu
dCBtYXkgYmUgYW4gaW50ZWdlciBvciBhCis7OyBzdHJpbmcsIHdoaWNoIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHdpbGwgYWJicmV2aWF0ZSBpZiB0b28gbG9uZy4gIE9uCis7OyBNUy1XaW5kb3dzLCB0
aGUgdGFza2JhciBiYWRnZSB3aWxsIGJlIGFiYnJldmlhdGVkIHRvIHRocmVlCis7OyBjaGFyYWN0
ZXJzOyBpZiB0aGUgY291bnQgaXMgYW4gaW50ZWdlciBvdXRzaWRlIHRoZSByYW5nZSAtOTkgdG8g
OTksCis7OyBpdCBpcyBzaG93biBhcyAiLTk5IiBvciAiOTkrIiwgaWYgY291bnQgaXMgYSBzdHJp
bmcgbG9uZ2VyIHRoYW4gMworOzsgY2hhcmFjdGVycyBpdCBpcyB0cnVuY2F0ZWQuCis7OworOzsg
YHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbicgZmxhc2hlcyBvciBib3VuY2VzIHRoZSBFbWFjcyB0
YXNrYmFyIGljb24KKzs7IHRvIGluZGljYXRlIHRoYXQgeW91ciBFbWFjcyBzZXNzaW9uIHdhbnRz
IGF0dGVudGlvbi4gIEl0cyBiZWhhdmlvcnMKKzs7IGFyZSBiYWNrLWVuZCBzcGVjaWZpYy4KKzs7
Cis7OyBgc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MnIG92ZXJsYXlzIGEgZ3JhcGhpY2FsIHByb2dy
ZXNzIGJhciBvbiB0aGUKKzs7IEVtYWNzIHRhc2tiYXIgaWNvbiB0byBpbGx1c3RyYXRlIHByb2dy
ZXNzIG9mIGEgcG90ZW50aWFsbHkKKzs7IGxvbmctcnVubmluZyBvcGVyYXRpb24uCis7OworOzsg
V2hlbiBgc3lzdGVtLXRhc2tiYXItbW9kZWAgaXMgZW5hYmxlZCwgRW1hY3MgcHJvZ3Jlc3MgcmVw
b3J0ZXJzIHdpbGwKKzs7IGJlIGVuaGFuY2VkIHRvIGRpc3BsYXkgdGFza2JhciBHVUkgcHJvZ3Jl
c3MgYmFycy4gIEN1c3RvbWl6ZQorOzsgYHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1yZXBv
cnRlcmAgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzLgorOzsKKzs7IE9uIEdOVS9MaW51eCBz
eXN0ZW1zLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNvbnRyb2wgR1VJCis7
OyBzaGVsbHMgYW5kL29yIHNoZWxsIGV4dGVuc2lvbnMgc3VjaCBhcworOzsgaHR0cHM6Ly9leHRl
bnNpb25zLmdub21lLm9yZy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9jay8gdGhhdAorOzsgaW1w
bGVtZW50IFVidW50dSdzIFVuaXR5IGxhdW5jaGVyIHNwZWMKKzs7IGh0dHBzOi8vd2lraS51YnVu
dHUuY29tL1VuaXR5L0xhdW5jaGVyQVBJLgorOzsKKzs7IFlvdXIgTGludXggRW1hY3MgaW5zdGFu
Y2Ugc2hvdWxkIGJlIGxhdW5jaGVkIHZpYSBhbiBhcHByb3ByaWF0ZSBzaGVsbAorOzsgImRlc2t0
b3AiIGZpbGUgc3VjaCBhcyB0aG9zZSBkaXN0cmlidXRlZCB3aXRoIEVtYWNzOyBlLmcuLAorOzsg
ImV0Yy9lbWFjc2NsaWVudC5kZXNrdG9wIiBhcyBkb2N1bWVudGVkIGhlcmUKKzs7IGh0dHBzOi8v
c3BlY2lmaWNhdGlvbnMuZnJlZWRlc2t0b3Aub3JnL2Rlc2t0b3AtZW50cnkvbGF0ZXN0LyBhbmQK
Kzs7IHdoaWNoIHlvdXIgR1VJIHN5c3RlbSBzaG91bGQgaW1wbGVtZW50LgorOzsKKzs7IE9uIG1h
Y09TL0dOVXN0ZXAgc3lzdGVtcyAoYWthIE5TKSBhbmQgTVMtV2luZG93cywgbmF0aXZlIEFQSXMg
YXJlCis7OyB1c2VkIGFuZCBELUJ1cyBpcyBub3QsIGV2ZW4gaWYgRC1CdXMgaXMgY29uZmlndXJl
ZCBpbiB5b3VyIGJ1aWxkLgorOzsKKzs7IFRvIGFkZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHN5
c3RlbXMsIHByb3ZpZGUgYSBiYWNrIGVuZCB0aGF0IGltcGxlbWVudHMKKzs7IHRoZSBjbC1nZW5l
cmljIGZ1bmN0aW9ucyBiZWxvdy4KKworOzs7IENvZGU6CisKKyhyZXF1aXJlICdkYnVzKQorCiso
ZGVmZ3JvdXAgc3lzdGVtLXRhc2tiYXIgbmlsCisgICJTeXN0ZW0gR1VJIHRhc2tiYXIgaWNvbiBi
YWRnZSwgcHJvZ3Jlc3MgcmVwb3J0LCBhbGVydGluZy4iCisgIDpncm91cCAnY29udmVuaWVuY2UK
KyAgOnZlcnNpb24gIjMxLjEiKQorCisoZGVmdW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MtcmVw
b3J0ZXItaW5zdGFsbCAoKQorICAiSW5zdGFsbCBzeXN0ZW0tdGFza2JhciBwcm9ncmVzcyByZXBv
cnRlcnMuIgorICAoYWRkLWhvb2sgJ3Byb2dyZXNzLXJlcG9ydGVyLXVwZGF0ZS1mdW5jdGlvbnMg
IydzeXN0ZW0tdGFza2Jhci0tcHJvZ3Jlc3MtcmVwb3J0ZXItdXBkYXRlKSkKKworKGRlZnVuIHN5
c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyLXJlbW92ZSAoKQorICAiUmVtb3ZlIHN5c3Rl
bS10YXNrYmFyIHByb2dyZXNzIHJlcG9ydGVycy4iCisgIChyZW1vdmUtaG9vayAncHJvZ3Jlc3Mt
cmVwb3J0ZXItdXBkYXRlLWZ1bmN0aW9ucyAjJ3N5c3RlbS10YXNrYmFyLS1wcm9ncmVzcy1yZXBv
cnRlci11cGRhdGUpKQorCisoZGVmY3VzdG9tIHN5c3RlbS10YXNrYmFyLXVzZS1wcm9ncmVzcy1y
ZXBvcnRlciB0CisgICJTdXBwbGVtZW50IHByb2dyZXNzLXJlcG9ydGVycyB3aXRoIEdVSSB0YXNr
YmFyIGljb24gcHJvZ3Jlc3MgYmFycy4iCisgIDp0eXBlICdib29sZWFuCisgIDpzZXQgKGxhbWJk
YSAodmFyaWFibGUgdmFsdWUpCisgICAgICAgICAoc2V0LWRlZmF1bHQgdmFyaWFibGUgdmFsdWUp
CisgICAgICAgICAoaWYgdmFsdWUKKyAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItcHJvZ3Jl
c3MtcmVwb3J0ZXItaW5zdGFsbCkKKyAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNz
LXJlcG9ydGVyLXJlbW92ZSkpKQorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0b20gc3lz
dGVtLXRhc2tiYXItY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzIHQKKyAgIkNsZWFyIHRo
ZSBpY29uIGF0dGVudGlvbiBpbmRpY2F0b3Igd2hlbiBhbnkgR1VJIGZyYW1lIGlzIGZvY3VzZWQu
CitCYWNrIGVuZHMgdGhhdCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBhdHRlbnRpb24gaW5kaWNh
dG9yLCBzdWNoIGFzCittYWNPUy9HTlVzdGVwIGFuZCBNUy1XaW5kb3dzLCBpZ25vcmUgdGhpcyBv
cHRpb24uIgorICA6dHlwZSAnYm9vbGVhbgorICA6dmVyc2lvbiAiMzEuMSIpCisKKyhkZWZjdXN0
b20gc3lzdGVtLXRhc2tiYXItZGJ1cy1kZXNrdG9wLWZpbGUtbmFtZSAiZW1hY3NjbGllbnQiCisg
ICJELUJ1cyBkZXNrdG9wIGZpbGUgYmFzZSBuYW1lIGZvciB0aGUgc3lzdGVtIHRhc2tiYXIgZGVz
dGluYXRpb24uCitUaGlzIHNob3VsZCBiZSB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkZXNrdG9wIGZp
bGUgdXNlZCB0byBsYXVuY2ggYW4gRW1hY3MKK2luc3RhbmNlLiAgRm9yIGV4YW1wbGUsIGlmIHlv
dXIgbGF1bmNoZXIgZGVza3RvcCBmaWxlIGlzIGNhbGxlZAorXCJlbWFjcy5kZXNrdG9wXCIsIHRo
aXMgb3B0aW9uIHNob3VsZCBiZSBcImVtYWNzXCIuIgorICA6dHlwZSAnc3RyaW5nCisgIDp2ZXJz
aW9uICIzMS4xIikKKworKGRlZmN1c3RvbSBzeXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQgbmls
CisgICJOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIEQtQnVzIHJlc3BvbnNlcy4K
K0lmIG5pbCwgdXNlIHRoZSBgZGJ1c2AgZGVmYXVsdCB0aW1lb3V0IGluIGBkYnVzLWNhbGwtbWV0
aG9kYCB3aGljaCBpcworMjUwMDAgKGkuZS4sIDI1bXMpLgorCitJZiB5b3VyIEQtQnVzIGRlc2t0
b3AgZXh0ZW5zaW9uIG5lZWRzIGV4dHJhIHRpbWUgdG8gcmVzcG9uZCwgaW4gd2hpY2gKK2Nhc2Ug
YHN5c3RlbS10YXNrYmFyLW1vZGVgIG1pZ2h0IG5vdCBpbml0aWFsaXplIG9yIHJlbGF0ZWQgZnVu
Y3Rpb25zCittaWdodCBub3QgdGFrZSB2aXNpYmxlIGVmZmVjdCwgYmluZCB0aGlzIHRvIGEgdmFs
dWUgaGlnaGVyIHRoYW4gMjUwMDAgdG8KK2ZpbmQgd2hhdCB3b3JrcyBmb3IgeW91ciBzeXN0ZW0u
IgorICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRGVmYXVsdCIgbmlsKSBuYXRudW0pCisg
IDp2ZXJzaW9uICIzMS4xIikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgbmls
CisgICJHZW5lcmljIHRhc2tiYXIgbWV0aG9kIHN5c3RlbSBkaXNwYXRjaGVyLiIpCisKKyhkZWZ1
biBzeXN0ZW0tdGFza2Jhci0tc2V0LWJhY2stZW5kICgpCisgICJEZXRlcm1pbmUgdGFza2JhciBo
b3N0IHN5c3RlbSB0eXBlLiIKKyAgOzsgT3JkZXIgbWF0dGVycyB0byBhY2NvbW1vZGF0ZSB0aGUg
Y2FzZXMgd2hlcmUgYW4gTlMgb3IgTVMtV2luZG93cworICA7OyBidWlsZCBoYXZlIHRoZSBkYnVz
IGZlYXR1cmUuCisgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1iYWNrLWVuZAorICAgICAgICAoY29u
ZCAoKGJvdW5kcCAnbnMtdmVyc2lvbi1zdHJpbmcpICducykKKyAgICAgICAgICAgICAgKCh3MzIt
aW5pdGlhbGl6ZWQpICd3MzIpCisgICAgICAgICAgICAgICgoYW5kIChmZWF0dXJlcCAnZGJ1c2Jp
bmQpCisgICAgICAgICAgICAgICAgICAgIChtZW1iZXIgIm9yZy5mcmVlZGVza3RvcC5sb2dpbjEi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRidXMtbGlzdC1hY3RpdmF0YWJsZS1uYW1l
cyA6c3lzdGVtKSkpCisgICAgICAgICAgICAgICAnZGJ1cykKKyAgICAgICAgICAgICAgKHQgbmls
KSkpKQorCis7OzsjIyNhdXRvbG9hZAorKGRlZmluZS1taW5vci1tb2RlIHN5c3RlbS10YXNrYmFy
LW1vZGUKKyAgIlN5c3RlbSBHVUkgdGFza2JhciBpY29uIGJhZGdlLCBwcm9ncmVzcyByZXBvcnQs
IGFsZXJ0aW5nLiIKKyAgOmdsb2JhbCB0CisgICh3aGVuIG5vbmludGVyYWN0aXZlCisgICAgKHdh
cm4gIkJhdGNoIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBgc3lzdGVtLXRhc2tiYXInIikpCisgIChj
b25kIChzeXN0ZW0tdGFza2Jhci1tb2RlCisgICAgICAgICAoaWYgKHN5c3RlbS10YXNrYmFyLS1z
ZXQtYmFjay1lbmQpCisgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1lbmFibGUpCisgICAg
ICAgICAgICh3YXJuICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBgc3lzdGVtLXRhc2tiYXInIikp
CisgICAgICAgICAod2hlbiBzeXN0ZW0tdGFza2Jhci11c2UtcHJvZ3Jlc3MtcmVwb3J0ZXIKKyAg
ICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzLXJlcG9ydGVyLWluc3RhbGwpKSkKKyAg
ICAgICAgKHQKKyAgICAgICAgIChzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcy1yZXBvcnRlci1yZW1v
dmUpCisgICAgICAgICAod2hlbiBzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQKKyAgICAgICAgICAg
KHN5c3RlbS10YXNrYmFyLS1kaXNhYmxlKQorICAgICAgICAgICAoc2V0cSBzeXN0ZW0tdGFza2Jh
ci0tYmFjay1lbmQgbmlsKSkpKSkKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRhc2tiYXItLWVu
YWJsZSAoKQorICAiRW5hYmxlIHRoZSBzeXN0ZW0tdGFza2JhciBiYWNrIGVuZC4iKQorCisoY2wt
ZGVmZ2VuZXJpYyBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoKQorICAiRGlzYWJsZSB0aGUgc3lz
dGVtLXRhc2tiYXIgYmFjayBlbmQuIikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVtLXRhc2tiYXIt
YmFkZ2UgKCZvcHRpb25hbCBjb3VudCkKKyAgIkRpc3BsYXkgQ09VTlQgYXMgYW4gb3ZlcmxheSBv
biB0aGUgc3lzdGVtIHRhc2tiYXIgRW1hY3MgaWNvbi4KK0lmIENPVU5UIGlzIGFuIGludGVnZXIs
IGRpc3BsYXkgdGhhdC4KK0lmIENPVU5UIGlzIGEgc3RyaW5nIG9uIGJhY2sgZW5kcyB0aGF0IHN1
cHBvcnQgc3RyaW5ncywgZGlzcGxheSB0aGF0LgorVGhlIHN0cmluZyBzaG91bGQgYmUgc2hvcnQu
CitPbiBiYWNrIGVuZHMgd2hpY2ggZG8gbm90IHN1cHBvcnQgc3RyaW5ncywgY29udmVydCBDT1VO
VCB0byBhbiBpbnRlZ2VyCit1c2luZyBgc3RyaW5nLXRvLW51bWJlcicgYW5kIHRlc3RpbmcgYGlu
dGVnZXJwJywgb3IgbmlsIGlmIHRoYXQgZmFpbHMuCitJZiBDT1VOVCBpcyBuaWwgb3IgYW4gZW1w
dHkgc3RyaW5nLCByZW1vdmUgdGhlIGNvdW50ZXIuIikKKworKGNsLWRlZmdlbmVyaWMgc3lzdGVt
LXRhc2tiYXItYXR0ZW50aW9uICgmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiRmxhc2gg
dGhlIHN5c3RlbSB0YXNrYmFyIGljb24gYW5kL29yIGZyYW1lIHRvIGFsZXJ0IHRoZSB1c2VyLgor
VVJHRU5DWSBjYW4gYmUgb25lIG9mIHRoZSBzeW1ib2xzIGBpbmZvcm1hdGlvbmFsJywgb3IgYGNy
aXRpY2FsJy4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjbGVhciB0aGUgYXR0ZW50aW9uIGluZGljYXRv
ci4KKworVGhlIGF0dGVudGlvbiBpbmRpY2F0b3IgaXMgY2xlYXJlZCBieSB0aGUgZWFybGllc3Qg
b2YgYnJpbmdpbmcgdGhlIEVtYWNzCitHVUkgaW50byBmb2N1cywgb3IgYWZ0ZXIgVElNRU9VVCBz
ZWNvbmRzLiAgSWYgVElNRU9VVCBpcyBuaWwsIHRoZSBzeXN0ZW0KK0dVSSBiZWhhdmlvciBoYXMg
cHJpb3JpdHkuCisKK09uIHNvbWUgYmFjayBlbmRzLCBgY3JpdGljYWwnIGhhcyB0aGUgc2FtZSBl
ZmZlY3QgYXMgYGluZm9ybWF0aW9uYWwnLiIpCisKKyhjbC1kZWZnZW5lcmljIHN5c3RlbS10YXNr
YmFyLXByb2dyZXNzICgmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGEgcHJvZ3Jlc3Mg
aW5kaWNhdG9yIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIGljb24uCitQUk9HUkVTUyBp
cyBhIGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLgorSWYgUFJPR1JFU1MgaXMgbmlsLCBy
ZW1vdmUgdGhlIHByb2dyZXNzIGluZGljYXRvci4iKQorCisoZGVmdW4gc3lzdGVtLXRhc2tiYXIt
LXZhbGlkYXRlLXByb2dyZXNzIChwcm9ncmVzcykKKyAgIlJldHVybiBQUk9HUkVTUyBhcyBhIGZs
b2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLCBvciBuaWwuIgorICAod2hlbiAobmF0bnVtcCBw
cm9ncmVzcykKKyAgICAoc2V0cSBwcm9ncmVzcyAoZmxvYXQgcHJvZ3Jlc3MpKSkKKyAgKHdoZW4g
KGFuZCBwcm9ncmVzcyAoPj0gcHJvZ3Jlc3MgMC4wKSAoPD0gcHJvZ3Jlc3MgMS4wKSkKKyAgICBw
cm9ncmVzcykpCisKKwwKKzs7IGBwcm9ncmVzcy1yZXBvcnRlcicgc3VwcG9ydC4KKworKGRlZnVu
IHN5c3RlbS10YXNrYmFyLS1wcm9ncmVzcy1yZXBvcnRlci11cGRhdGUgKCBfcmVwb3J0ZXIgc3Rh
dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVy
Y2VudGFnZSBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfdGV4dCBfc3VmZml4KQorICAiYHByb2dyZXNzLXJlcG9ydGVyLWRvLXVwZGF0ZWAg
ZnVuY3Rpb24uIgorICAocGNhc2Ugc3RhdGUKKyAgICAoJ3VwZGF0ZQorICAgICAoY29uZCAocGVy
Y2VudGFnZQorICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLXByb2dyZXNzICgvIHBlcmNlbnRh
Z2UgMTAwLjApKSkKKyAgICAgICAgICAgKGluZGV4CisgICAgICAgICAgICAoc3lzdGVtLXRhc2ti
YXItcHJvZ3Jlc3MgKC8gKDErIGluZGV4KSA0LjApKSkpKQorICAgICgnZG9uZQorICAgICAoc3lz
dGVtLXRhc2tiYXItcHJvZ3Jlc3MgbmlsKSkpKQorCisMCis7OyBELUJ1cyBzdXBwb3J0LgorCiso
ZGVmY29uc3Qgc3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZSAiY29tLmNhbm9uaWNhbC5Vbml0
eSIpCisoZGVmY29uc3Qgc3lzdGVtLXRhc2tiYXItLWRidXMtaW50ZXJmYWNlICJjb20uY2Fub25p
Y2FsLlVuaXR5LkxhdW5jaGVyRW50cnkiKQorCisoZGVmdmFyIHN5c3RlbS10YXNrYmFyLS1kYnVz
LWF0dGVudGlvbiBuaWwKKyAgIk5vbi1uaWwgd2hlbiBhdHRlbnRpb24gaXMgcmVxdWVzdGVkLiIp
CisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZW5kLXNpZ25hbCAobWVzc2FnZSkKKyAg
IlNlbmQgTUVTU0FHRSB0byB0aGUgRC1CdXMgc3lzdGVtIHRhc2tiYXIgc2VydmljZS4iCisgIChs
ZXQgKChhcHAtdXJpCisgICAgICAgICAoZm9ybWF0ICJhcHBsaWNhdGlvbjovLyVzLmRlc2t0b3Ai
CisgICAgICAgICAgICAgICAgIHN5c3RlbS10YXNrYmFyLWRidXMtZGVza3RvcC1maWxlLW5hbWUp
KSkKKyAgICAoZGJ1cy1zZW5kLXNpZ25hbAorICAgICA6c2Vzc2lvbgorICAgICBzeXN0ZW0tdGFz
a2Jhci0tZGJ1cy1zZXJ2aWNlCisgICAgICIvIgorICAgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1p
bnRlcmZhY2UKKyAgICAgIlVwZGF0ZSIKKyAgICAgYXBwLXVyaQorICAgICBtZXNzYWdlKSkpCisK
KyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUtZm9j
dXMgKCkKKyAgIkNsZWFyIGFuIGFjdGl2ZSBELUJ1cyBhdHRlbnRpb24gcmVxdWVzdCBpZiBhbnkg
ZnJhbWUgaXMgZm9jdXNlZC4iCisgICh3aGVuIChhbmQgc3lzdGVtLXRhc2tiYXItLWRidXMtYXR0
ZW50aW9uCisgICAgICAgICAgICAgKGNhdGNoIDpjbGVhcgorICAgICAgICAgICAgICAgKGRvbGlz
dCAoZnJhbWUgKGZyYW1lLWxpc3QpKQorICAgICAgICAgICAgICAgICAod2hlbiAoZXEgKGZyYW1l
LWZvY3VzLXN0YXRlIGZyYW1lKSB0KQorICAgICAgICAgICAgICAgICAgICh0aHJvdyA6Y2xlYXIg
dCkpKSkpCisgICAgKHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBuaWwpKSkKKworKGRlZnVuIHN5
c3RlbS10YXNrYmFyLWRidXMtcGluZy1zZXJ2aWNlICgpCisgICJSZXR1cm4gbm9uLW5pbCBpZiBg
c3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZScgcmVzcG9uZHMuCitSZXR1cm4gbmlsIGlmIG5v
IHJlc3BvbnNlIHdpdGhpbiBgc3lzdGVtLXRhc2tiYXItZGJ1cy10aW1lb3V0Jy4iCisgIChkYnVz
LXBpbmcKKyAgIDpzZXNzaW9uCisgICBzeXN0ZW0tdGFza2Jhci0tZGJ1cy1zZXJ2aWNlCisgICBz
eXN0ZW0tdGFza2Jhci1kYnVzLXRpbWVvdXQpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNr
YmFyLS1lbmFibGUgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpKQorICAodW5sZXNzIChz
eXN0ZW0tdGFza2Jhci1kYnVzLXBpbmctc2VydmljZSkKKyAgICAoZXJyb3IgIkQtQnVzIHNlcnZp
Y2UgYCVzJyB1bmF2YWlsYWJsZSIgc3lzdGVtLXRhc2tiYXItLWRidXMtc2VydmljZSkpCisgICh3
aGVuIHN5c3RlbS10YXNrYmFyLWNsZWFyLWF0dGVudGlvbi1vbi1mcmFtZS1mb2N1cworICAgIChh
ZGQtZnVuY3Rpb24gOmFmdGVyIGFmdGVyLWZvY3VzLWNoYW5nZS1mdW5jdGlvbgorICAgICAgICAg
ICAgICAgICAgIydzeXN0ZW0tdGFza2Jhci0tZGJ1cy1jbGVhci1hdHRlbnRpb24tb24tZnJhbWUt
Zm9jdXMpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZGlzYWJsZSAoJmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jh
ci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpKQorICAocmVtb3ZlLWZ1bmN0aW9uIGFmdGVyLWZvY3Vz
LWNoYW5nZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLWRi
dXMtY2xlYXItYXR0ZW50aW9uLW9uLWZyYW1lLWZvY3VzKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0
ZW0tdGFza2Jhci1iYWRnZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnZGJ1cykpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgY291bnQpCisgICJEaXNwbGF5IENP
VU5UIGFzIGFuIG92ZXJsYXkgb24gdGhlIHN5c3RlbSB0YXNrYmFyIEVtYWNzIGljb24uCitJZiBD
T1VOVCBpcyBhbiBpbnRlZ2VyLCBkaXNwbGF5IHRoYXQuICBJZiBDT1VOVCBpcyBhIHN0cmluZywg
Y29udmVydCBpdAordG8gYW4gaW50ZWdlciwgb3IgbmlsIGlmIHRoYXQgZmFpbHMuICBJZiBDT1VO
VCBpcyBhbnkgb3RoZXIgdHlwZSwgdXNlCituaWwuICBJZiBDT1VOVCBpcyBuaWwgb3IgYW4gZW1w
dHkgc3RyaW5nLCByZW1vdmUgdGhlIGJhZGdlLgorTm90ZTogVGhlIFVuaXR5IEQtQnVzIHByb3Rv
Y29sIHN1cHBvcnRzIG9ubHkgaW50ZWdlciBiYWRnZXMuIgorICAoY29uZCAoKHN0cmluZ3AgY291
bnQpCisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAgIChz
ZXRxIGNvdW50IG5pbCkKKyAgICAgICAgICAgKGxldCAoKGNvdW50LTEgKHN0cmluZy10by1udW1i
ZXIgY291bnQpKSkKKyAgICAgICAgICAgICAoc2V0cSBjb3VudCAoaWYgKGludGVnZXJwIGNvdW50
LTEpIGNvdW50LTEgbmlsKSkpKSkKKyAgICAgICAgKChub3QgKGludGVnZXJwIGNvdW50KSkKKyAg
ICAgICAgIChzZXRxIGNvdW50IG5pbCkpKQorICAoc3lzdGVtLXRhc2tiYXItLWRidXMtc2VuZC1z
aWduYWwKKyAgIGAoKDpkaWN0LWVudHJ5ICJjb3VudC12aXNpYmxlIgorICAgICAgICAgICAgICAg
ICAgKDp2YXJpYW50IDpib29sZWFuICwobm90IChudWxsIGNvdW50KSkpKQorICAgICAoOmRpY3Qt
ZW50cnkgImNvdW50IgorICAgICAgICAgICAgICAgICAgKDp2YXJpYW50IDp1aW50MzIgLChpZiAo
bnVsbCBjb3VudCkgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnQpKSkpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1hdHRlbnRpb24gKCZjb250
ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNr
YmFyLS1iYWNrLWVuZCAoZXFsICdkYnVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZ
IHVzZXIgYXR0ZW50aW9uIG9uIHRoZSBzeXN0ZW0gdGFza2JhciBFbWFjcyBpY29uLgorVGhlIHJl
cXVlc3Qgd2lsbCB0aW1lIG91dCB3aXRoaW4gdGhlIFRJTUVPVVQgc2Vjb25kcyBpbnRlcnZhbC4K
K1RoZSBVbml0eSBELUJ1cyBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IGRpZmZlcmVudGlhdGVk
IHVyZ2VuY2llcy4iCisgIChzZXRxIHN5c3RlbS10YXNrYmFyLS1kYnVzLWF0dGVudGlvbiB1cmdl
bmN5KQorICAoc3lzdGVtLXRhc2tiYXItLWRidXMtc2VuZC1zaWduYWwKKyAgIGAoKDpkaWN0LWVu
dHJ5ICJ1cmdlbnQiCisgICAgICAgICAgICAgICAgICAoOnZhcmlhbnQgOmJvb2xlYW4gLChub3Qg
KG51bGwgdXJnZW5jeSkpKSkpKQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkKKyAgICAo
cnVuLXdpdGgtdGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydzeXN0ZW0tdGFz
a2Jhci1hdHRlbnRpb24gbmlsKSkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItcHJv
Z3Jlc3MgKCZjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ2RidXMpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByb2dyZXNzKQorICAiRGlzcGxheSBhIHBy
b2dyZXNzIGJhciBvdmVybGF5IG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorUFJPR1JFU1Mg
aXMgYSBmbG9hdCBpbiB0aGUgcmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwg
cmVtb3ZlIHRoZSBwcm9ncmVzcyBiYXIuIgorICAoc2V0cSBwcm9ncmVzcyAoc3lzdGVtLXRhc2ti
YXItLXZhbGlkYXRlLXByb2dyZXNzIHByb2dyZXNzKSkKKyAgKHN5c3RlbS10YXNrYmFyLS1kYnVz
LXNlbmQtc2lnbmFsCisgICBgKCg6ZGljdC1lbnRyeSAicHJvZ3Jlc3MtdmlzaWJsZSIKKyAgICAg
ICAgICAgICAgICAgICg6dmFyaWFudCA6Ym9vbGVhbiAsKG5vdCAobnVsbCBwcm9ncmVzcykpKSkK
KyAgICAgKDpkaWN0LWVudHJ5ICJwcm9ncmVzcyIKKyAgICAgICAgICAgICAgICAgICg6dmFyaWFu
dCA6ZG91YmxlICwoaWYgKG51bGwgcHJvZ3Jlc3MpIDAgcHJvZ3Jlc3MpKSkpKSkKKworDAorOzsg
bWFjT1MvR05Vc3RlcCBOUyBzdXBwb3J0LgorCisoZGVjbGFyZS1mdW5jdGlvbiBucy1iYWRnZSAi
bnNmbnMubSIpCisoZGVjbGFyZS1mdW5jdGlvbiBucy1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uICJu
c2Zucy5tIikKKyhkZWNsYXJlLWZ1bmN0aW9uIG5zLXByb2dyZXNzLWluZGljYXRvciAibnNmbnMu
bSIpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItLWVuYWJsZSAoJmNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5c3RlbS10YXNrYmFyLS1iYWNr
LWVuZCAoZXFsICducykpKQorICAoaWdub3JlKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFz
a2Jhci0tZGlzYWJsZSAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMpKSkKKyAgKGlnbm9yZSkp
CisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItYmFkZ2UgKCZjb250ZXh0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChl
cWwgJ25zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25hbCBj
b3VudCkKKyAgIkRpc3BsYXkgQ09VTlQgYXMgYW4gb3ZlcmxheSBvbiB0aGUgRG9jayBiYWRnZS4K
K0lmIENPVU5UIGlzIGFuIGludGVnZXIgb3IgYSBub24tZW1wdHkgc3RyaW5nLCBkaXNwbGF5IHRo
YXQuICBJZiBDT1VOVCBpcworbmlsIG9yIGFuIGVtcHR5IHN0cmluZywgY2xlYXIgdGhlIGJhZGdl
IG92ZXJsYXkuCitOb3RlOiBOUyB3aWxsIGFiYnJldmlhdGUgbG9uZyBzdHJpbmdzIHRvIGZpdCB0
aGUgYmFkZ2UncyBhbGxvY2F0ZWQKK3NwYWNlLiIKKyAgKGNvbmQgKChzdHJpbmdwIGNvdW50KQor
ICAgICAgICAgKHdoZW4gKHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAoc2V0cSBj
b3VudCBuaWwpKSkKKyAgICAgICAgKChpbnRlZ2VycCBjb3VudCkKKyAgICAgICAgIChzZXRxIGNv
dW50IChudW1iZXItdG8tc3RyaW5nIGNvdW50KSkpCisgICAgICAgICh0IChzZXRxIGNvdW50IG5p
bCkpKQorICAobnMtYmFkZ2UgY291bnQpKQorCisoY2wtZGVmbWV0aG9kIHN5c3RlbS10YXNrYmFy
LWF0dGVudGlvbiAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ25zKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAi
UmVxdWVzdCBVUkdFTkNZIHVzZXIgYXR0ZW50aW9uIG9uIHRoZSBEb2NrLgorVGhlIGF0dGVudGlv
biBpbmRpY2F0b3Igd2lsbCBiZSBjbGVhcmVkIGFmdGVyIFRJTUVPVVQgc2Vjb25kcy4iCisgIChu
cy1yZXF1ZXN0LXVzZXItYXR0ZW50aW9uIHVyZ2VuY3kpCisgICh3aGVuIChhbmQgdXJnZW5jeSB0
aW1lb3V0KQorICAgIChydW4td2l0aC10aW1lcgorICAgICB0aW1lb3V0CisgICAgIG5pbAorICAg
ICAjJ3N5c3RlbS10YXNrYmFyLWF0dGVudGlvbiBuaWwpKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0
ZW0tdGFza2Jhci1wcm9ncmVzcyAoJmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1lbmQgKGVxbCAnbnMpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdGlvbmFsIHByb2dyZXNzKQorICAi
RGlzcGxheSBhIHByb2dyZXNzIGJhciBvdmVybGF5IG9uIHRoZSBEb2NrIGFuZCBBcHAgU3dpdGNo
ZXIuCitQUk9HUkVTUyBpcyBhIGZsb2F0IGluIHRoZSByYW5nZSAwLjAgdG8gMS4wLgorSWYgUFJP
R1JFU1MgaXMgbmlsLCByZW1vdmUgdGhlIHByb2dyZXNzIGJhci4iCisgIChucy1wcm9ncmVzcy1p
bmRpY2F0b3IgKHN5c3RlbS10YXNrYmFyLS12YWxpZGF0ZS1wcm9ncmVzcyBwcm9ncmVzcykpKQor
CisMCis7OyBNUy1XaW5kb3dzIHN1cHBvcnQuCisKKyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1iYWRn
ZSAidzMyZm5zLmMiKQorKGRlY2xhcmUtZnVuY3Rpb24gdzMyLXJlcXVlc3QtdXNlci1hdHRlbnRp
b24gInczMmZucy5jIikKKyhkZWNsYXJlLWZ1bmN0aW9uIHczMi1wcm9ncmVzcy1pbmRpY2F0b3Ig
InczMmZucy5jIikKKworKGRlZnZhciBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtYmFja2dyb3Vu
ZCAiI2U3NTg1NyIgOyByZWRpc2gKKyAgInczMiBiYWRnZSBiYWNrZ3JvdW5kIFJHQiB0cmlwbGUg
c3RyaW5nLiIpCisKKyhkZWZ2YXIgc3lzdGVtLXRhc2tiYXItdzMyLWJhZGdlLWZvcmVncm91bmQg
IiNmZmZmZmYiIDsgd2hpdGUKKyAgInczMiBiYWRnZSBmb3JlZ3JvdW5kIFJHQiB0cmlwbGUgc3Ry
aW5nLiIpCisKKyhkZWZ1biBzeXN0ZW0tdGFza2Jhci0tdzMyLWNsZWFyLWZyYW1lLWluZGljYXRv
cnMgKGZyYW1lKQorICA7OyBOT1RFOiBVcGRhdGUgdGhlIGJlbG93IGlmIGFkZGluZyBuZXcgdzMy
IHN5c3RlbS10YXNrYmFyIGZ1bmN0aW9ucy4KKyAgKHdpdGgtc2VsZWN0ZWQtZnJhbWUgZnJhbWUK
KyAgICAoc3lzdGVtLXRhc2tiYXItYmFkZ2UgbmlsKQorICAgIChzeXN0ZW0tdGFza2Jhci1hdHRl
bnRpb24gbmlsKQorICAgIChzeXN0ZW0tdGFza2Jhci1wcm9ncmVzcyBuaWwpKSkKKworKGNsLWRl
Zm1ldGhvZCBzeXN0ZW0tdGFza2Jhci0tZW5hYmxlICgmY29udGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2stZW5kIChlcWwgJ3cz
MikpKQorICA7OyBDbGVhciBzeXN0ZW0tdGFza2JhciBpbmRpY2F0b3JzIGZvciBhIGZyYW1lIHdo
ZW4gaXQgaXMgZGVsZXRlZC4KKyAgKGFkZC1ob29rICdkZWxldGUtZnJhbWUtZnVuY3Rpb25zCisg
ICAgICAgICAgICAjJ3N5c3RlbS10YXNrYmFyLS13MzItY2xlYXItZnJhbWUtaW5kaWNhdG9ycykp
CisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItLWRpc2FibGUgKCZjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRhc2tiYXItLWJhY2st
ZW5kIChlcWwgJ3czMikpKQorICAocmVtb3ZlLWhvb2sgJ2RlbGV0ZS1mcmFtZS1mdW5jdGlvbnMK
KyAgICAgICAgICAgICAgICMnc3lzdGVtLXRhc2tiYXItLXczMi1jbGVhci1mcmFtZS1pbmRpY2F0
b3JzKSkKKworKGNsLWRlZm1ldGhvZCBzeXN0ZW0tdGFza2Jhci1iYWRnZSAoJmNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jhci0tYmFjay1l
bmQgKGVxbCAndzMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRp
b25hbCBjb3VudCkKKyAgIkRpc3BsYXkgYSBDT1VOVCBvdmVybGF5IG9uIHRoZSBzeXN0ZW0gdGFz
a2JhciBpY29uLgorVGhlIHRhc2tiYXIgaWNvbiB0YXJnZXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBzZWxlY3RlZCBmcmFtZS4KKworSWYgQ09VTlQgaXMgYW4gaW50ZWdlciBvciBhIG5vbi1lbXB0
eSBzdHJpbmcsIGRpc3BsYXkgdGhhdC4gIElmIENPVU5UIGlzCituaWwgb3IgYW4gZW1wdHkgc3Ry
aW5nLCBjbGVhciB0aGUgYmFkZ2UuCisKK0R1ZSB0byBNUy1XaW5kb3dzIGljb24gb3ZlcmxheSBz
aXplIGxpbWl0YXRpb25zLCBpZiBDT1VOVCBpcyBhbiBpbnRlZ2VyCithbmQgaXMgb3V0c2lkZSB0
aGUgcmFuZ2UgLTk5IHRvIDk5LCBkaXNwbGF5IFwiLTk5XCIgYW5kIFwiOTkrXCIsCityZXNwZWN0
aXZlbHksIGlmIENPVU5UIGlzIGEgc3RyaW5nIGxvbmdlciB0aGFuIDIgY2hhcmFjdGVycyB0cnVu
Y2F0ZSBpdAordXNpbmcgYHRydW5jYXRlLXN0cmluZy10by13aWR0aGAuCisKK0NvbnN1bHQgYHN5
c3RlbS10YXNrYmFyLXczMi1iYWRnZS1iYWNrZ3JvdW5kYCBhbmQKK2BzeXN0ZW0tdGFza2Jhci13
MzItYmFkZ2UtZm9yZWdyb3VuZGAgZm9yIHRoZSBiYWNrZ3JvdW5kIGFuZCBmb3JlZ3JvdW5kCitj
b2xvcnMgZm9yIHRoZSBwYWludGVkIG92ZXJsYXkuIgorICAoY29uZCAoKHN0cmluZ3AgY291bnQp
CisgICAgICAgICAoaWYgKHN0cmluZy1lbXB0eS1wIGNvdW50KQorICAgICAgICAgICAgIChzZXRx
IGNvdW50IG5pbCkKKyAgICAgICAgICAgKHdoZW4gKGxlbmd0aD4gY291bnQgMikKKyAgICAgICAg
ICAgICAoc2V0cSBjb3VudCAodHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRoIGNvdW50IDMgMCBuaWwg
dCkpKSkpCisgICAgICAgICgoaW50ZWdlcnAgY291bnQpCisgICAgICAgICAoaWYgKGFuZCAoPiBj
b3VudCAtMTAwKQorICAgICAgICAgICAgICAgICAgKDwgY291bnQgMTAwKSkKKyAgICAgICAgICAg
ICAoc2V0cSBjb3VudCAobnVtYmVyLXRvLXN0cmluZyBjb3VudCkpCisgICAgICAgICAgIChpZiAo
PCBjb3VudCAwKQorICAgICAgICAgICAgICAgKHNldHEgY291bnQgIi05OSIpCisgICAgICAgICAg
ICAgKHNldHEgY291bnQgIjk5KyIpKSkpCisgICAgICAgICh0IChzZXRxIGNvdW50IG5pbCkpKQor
ICAodzMyLWJhZGdlIGNvdW50CisgICAgICAgICAgICAgc3lzdGVtLXRhc2tiYXItdzMyLWJhZGdl
LWJhY2tncm91bmQKKyAgICAgICAgICAgICBzeXN0ZW0tdGFza2Jhci13MzItYmFkZ2UtZm9yZWdy
b3VuZCkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9uICgmY29udGV4
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXN0ZW0tdGFza2Jh
ci0tYmFjay1lbmQgKGVxbCAndzMyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmb3B0aW9uYWwgdXJnZW5jeSB0aW1lb3V0KQorICAiUmVxdWVzdCBVUkdFTkNZIHVz
ZXIgYXR0ZW50aW9uIG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorSW5kaWNhdGUgdGhlIGlj
b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBmcmFtZS4KK0lmIFVSR0VOQ1kgaXMgdGhl
IHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGZsYXNoIHRoZSB0YXNrYmFyIGljb24uCitJZiBVUkdF
TkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2FsJywgZmxhc2ggdGhlIHRhc2tiYXIgaWNvbiBhbmQg
dGhlCitNUy1XaW5kb3dzIHdpbmRvdyBmcmFtZS4KK0NsZWFyIGF0dGVudGlvbiBpbmRpY2F0b3Ig
YWZ0ZXIgVElNRU9VVCBzZWNvbmRzLiAgSWYgVElNRU9VVCBpcyBuaWwsCitkZWZhdWx0IHRvIE1T
LVdpbmRvd3MgZGVmYXVsdCBiZWhhdmlvci4iCisgICh3MzItcmVxdWVzdC11c2VyLWF0dGVudGlv
biB1cmdlbmN5KQorICAod2hlbiAoYW5kIHVyZ2VuY3kgdGltZW91dCkKKyAgICAocnVuLXdpdGgt
dGltZXIKKyAgICAgdGltZW91dAorICAgICBuaWwKKyAgICAgIydzeXN0ZW0tdGFza2Jhci1hdHRl
bnRpb24gbmlsKSkpCisKKyhjbC1kZWZtZXRob2Qgc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgKCZj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzdGVtLXRh
c2tiYXItLWJhY2stZW5kIChlcWwgJ3czMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmb3B0aW9uYWwgcHJvZ3Jlc3MpCisgICJEaXNwbGF5IGEgcHJvZ3Jlc3MgYmFy
IG9uIHRoZSBzeXN0ZW0gdGFza2JhciBpY29uLgorUFJPR1JFU1MgaXMgYSBmbG9hdCBpbiB0aGUg
cmFuZ2UgMC4wIHRvIDEuMC4KK0lmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVz
cyBiYXIuIgorICAodzMyLXByb2dyZXNzLWluZGljYXRvciAoc3lzdGVtLXRhc2tiYXItLXZhbGlk
YXRlLXByb2dyZXNzIHByb2dyZXNzKSkpCisKKwwKKworKHByb3ZpZGUgJ3N5c3RlbS10YXNrYmFy
KQorCis7Ozsgc3lzdGVtLXRhc2tiYXIuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9zcmMvbnNm
bnMubSBiL3NyYy9uc2Zucy5tCmluZGV4IDM1MjhjNGFjZDUwLi4xYThmOTVjMTRlZiAxMDA2NDQK
LS0tIGEvc3JjL25zZm5zLm0KKysrIGIvc3JjL25zZm5zLm0KQEAgLTM2NzQsNiArMzY3NCwxMjkg
QEAgVGhlIHBvc2l0aW9uIGlzIHJldHVybmVkIGFzIGEgY29ucyBjZWxsIChYIC4gWSkgb2YgdGhl
CiAgIHJldHVybiBRbmlsOwogfQogCitERUZVTiAoIm5zLWJhZGdlIiwgRm5zX2JhZGdlLCBTbnNf
YmFkZ2UsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBTZXQgdGhlIGFwcCBpY29uIGJhZGdlIHRv
IEJBREdFLgorQkFER0Ugc2hvdWxkIGJlIGEgc3RyaW5nIHNob3J0IGVub3VnaCB0byBkaXNwbGF5
IG5pY2VseSBpbiB0aGUgc2hvcnQKK3NwYWNlIGludGVuZGVkIGZvciBiYWRnZXMuCitJZiBCQURH
RSBpcyBuaWwsIGNsZWFyIHRoZSBhcHAgYmFkZ2UuICAqLykKKyAgKExpc3BfT2JqZWN0IGJhZGdl
KQoreworICBibG9ja19pbnB1dCAoKTsKKyAgaWYgKE5JTFAgKGJhZGdlKSkKKyAgICBbW05TQXBw
IGRvY2tUaWxlXSBzZXRCYWRnZUxhYmVsOiBuaWxdOworICBlbHNlCisgICAgeworICAgICAgQ0hF
Q0tfU1RSSU5HIChiYWRnZSk7CisgICAgICBbW05TQXBwIGRvY2tUaWxlXSBzZXRCYWRnZUxhYmVs
OgorCQkJICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6IFNTREFUQSAoYmFkZ2UpXV07
CisgICAgfQorICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1cm4gUW5pbDsKK30KKworLyogVXNl
IC0xIHRvIGluZGljYXRlIG5vIGFjdGl2ZSByZXF1ZXN0LiAgKi8KK3N0YXRpYyBOU0ludGVnZXIg
bnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworCitERUZVTiAoIm5zLXJlcXVlc3Qt
dXNlci1hdHRlbnRpb24iLAorICAgICAgIEZuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAg
ICAgIFNuc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uLAorICAgICAgIDEsIDEsIDAsCisgICAgICAg
ZG9jOiAvKiBCb3VuY2UgdGhlIGFwcCBkb2NrIGljb24gdG8gcmVxdWVzdCB1c2VyIGF0dGVudGlv
bi4KK0lmIFVSR0VOQ1kgbmlsLCBjYW5jZWwgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3QsIGlmIGFu
eS4KK0lmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbCBgaW5mb3JtYXRpb25hbCcsIGJvdW5jaW5nIGxh
c3RzIGEgZmV3IHNlY29uZHMuCitJZiBVUkdFTkNZIGlzIHRoZSBzeW1ib2wgYGNyaXRpY2FsJywg
Ym91bmNpbmcgbGFzdHMgdW50aWwgRW1hY3MgaXMKK2ZvY3VzZWQuICAqLykKKyAgKExpc3BfT2Jq
ZWN0IHVyZ2VuY3kpCit7CisgIGJsb2NrX2lucHV0ICgpOworICBpZiAobnNfcmVxdWVzdF91c2Vy
X2F0dGVudGlvbl9pZCAhPSAtMSkKKyAgICB7CisgICAgICBbTlNBcHAgY2FuY2VsVXNlckF0dGVu
dGlvblJlcXVlc3Q6IG5zX3JlcXVlc3RfdXNlcl9hdHRlbnRpb25faWRdOworICAgICAgbnNfcmVx
dWVzdF91c2VyX2F0dGVudGlvbl9pZCA9IC0xOworICAgIH0KKyAgaWYgKCFOSUxQICh1cmdlbmN5
KSAmJiBTWU1CT0xQICh1cmdlbmN5KSkKKyAgICB7CisgICAgICBpZiAoRVEgKHVyZ2VuY3ksIFFp
bmZvcm1hdGlvbmFsKSkKKwluc19yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uX2lkID0gW05TQXBwIHJl
cXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNJbmZvcm1hdGlvbmFsUmVxdWVzdF07CisgICAg
ICBlbHNlIGlmIChFUSAodXJnZW5jeSwgUWNyaXRpY2FsKSkKKwluc19yZXF1ZXN0X3VzZXJfYXR0
ZW50aW9uX2lkID0gW05TQXBwIHJlcXVlc3RVc2VyQXR0ZW50aW9uOgorCQkJCQkJTlNDcml0aWNh
bFJlcXVlc3RdOworICAgIH0KKyAgdW5ibG9ja19pbnB1dCAoKTsKKyAgcmV0dXJuIFFuaWw7Cit9
CisKK0RFRlVOICgibnMtcHJvZ3Jlc3MtaW5kaWNhdG9yIiwKKyAgICAgICBGbnNfcHJvZ3Jlc3Nf
aW5kaWNhdG9yLAorICAgICAgIFNuc19wcm9ncmVzc19pbmRpY2F0b3IsCisgICAgICAgMSwgMSwg
MCwKKyAgICAgICBkb2M6IC8qIEJvdW5jZSB0aGUgYXBwIGRvY2sgaWNvbiB0byByZXF1ZXN0IHVz
ZXIgYXR0ZW50aW9uLgorCSAgICAgICBQUk9HUkVTUyBpcyBhIGZsb2F0IGJldHdlZW4gMC4wIGFu
ZCAxLjAuCisJICAgICAgIElmIFBST0dSRVNTIGlzIG5pbCwgcmVtb3ZlIHRoZSBwcm9ncmVzcyBp
bmRpY2F0b3IuICAqLykKKyAgKExpc3BfT2JqZWN0IHByb2dyZXNzKQoreworICBibG9ja19pbnB1
dCAoKTsKKyAgTlNEb2NrVGlsZSAqZG9ja190aWxlID0gW05TQXBwIGRvY2tUaWxlXTsKKyAgLyog
VXNlIE5TTGV2ZWxJbmRpY2F0b3Igd2l0aCByZWxpYWJsZSByZWRyYXdzLCBub3QgTlNQcm9ncmVz
c0luZGljYXRvci4gICovCisgIE5TTGV2ZWxJbmRpY2F0b3IgKmxldmVsX2luZGljYXRvcjsKKyAg
LyogUmV1c2UgdGhlIGluZGljYXRvciBzdWJ2aWV3IG9yIGNyZWF0ZSBvbmUuICovCisgIGlmIChk
b2NrX3RpbGUuY29udGVudFZpZXcKKyAgICAgICYmIFtbZG9ja190aWxlLmNvbnRlbnRWaWV3IHN1
YnZpZXdzXSBjb3VudF0gPiAwCisgICAgICAmJiBbW1tkb2NrX3RpbGUuY29udGVudFZpZXcgc3Vi
dmlld3NdIGxhc3RPYmplY3RdCisgICAgICAgICAgICAgICAgICAgICAgICBpc0tpbmRPZkNsYXNz
OltOU0xldmVsSW5kaWNhdG9yIGNsYXNzXV0pCisgICAgbGV2ZWxfaW5kaWNhdG9yID0KKyAgICAg
IChOU0xldmVsSW5kaWNhdG9yICopW1tbZG9ja190aWxlIGNvbnRlbnRWaWV3XSBzdWJ2aWV3c10g
bGFzdE9iamVjdF07CisgICAgZWxzZQorICAgICAgeworCWlmICghZG9ja190aWxlLmNvbnRlbnRW
aWV3KQorCSAgeworCSAgICBOU0ltYWdlVmlldyogaW1hZ2VfdmlldyA9IFtbTlNJbWFnZVZpZXcg
YWxsb2NdIGluaXRdOworCSAgICBbaW1hZ2VfdmlldyBzZXRJbWFnZTogW05TQXBwIGFwcGxpY2F0
aW9uSWNvbkltYWdlXV07CisJICAgIFtkb2NrX3RpbGUgc2V0Q29udGVudFZpZXc6IGltYWdlX3Zp
ZXddOworCSAgfQorCS8qIFNldCB3aWR0aCB0byB0aGUgd2lkdGggb2YgdGhlIGFwcGxpY2F0aW9u
IGljb24sIGFuZCBoZWlnaHQgdG8KKwkgICAlIG9mIHRoZSBpY29uIGhlaWdodCB0byByZXNwZWN0
IHNjYWxlZCBpY29ucy4gICovCisJZmxvYXQgd2lkdGggPSBbW05TQXBwIGFwcGxpY2F0aW9uSWNv
bkltYWdlXSBzaXplXS53aWR0aDsKKwlmbG9hdCBoZWlnaHQgPSAwLjEwICogW1tOU0FwcCBhcHBs
aWNhdGlvbkljb25JbWFnZV0gc2l6ZV0uaGVpZ2h0OworCWxldmVsX2luZGljYXRvciA9CisJICBb
W05TTGV2ZWxJbmRpY2F0b3IgYWxsb2NdIGluaXRXaXRoRnJhbWU6CisJCQkJICAgICAgTlNNYWtl
UmVjdCAoMC4wLCAwLjAsCisJCQkJCQkgIHdpZHRoLCBoZWlnaHQpXTsKKwlbbGV2ZWxfaW5kaWNh
dG9yIHNldFdhbnRzTGF5ZXI6IFlFU107IC8qIFBlcmZvcm1hbmNlLiAgKi8KKwlbbGV2ZWxfaW5k
aWNhdG9yIHNldEVuYWJsZWQ6IE5PXTsgLyogSWdub3JlIG1vdXNlIGlucHV0LiAgKi8KKwlbbGV2
ZWxfaW5kaWNhdG9yIHNldExldmVsSW5kaWNhdG9yU3R5bGU6CisJCQkgICBOU0xldmVsSW5kaWNh
dG9yU3R5bGVDb250aW51b3VzQ2FwYWNpdHldOworCS8qIE1hdGNoIE5TUHJvZ3Jlc3NJbmRpY2F0
b3IgY29sb3IuICAqLworCVtsZXZlbF9pbmRpY2F0b3Igc2V0RmlsbENvbG9yOiBbTlNDb2xvciBj
b250cm9sQWNjZW50Q29sb3JdXTsKKwlbbGV2ZWxfaW5kaWNhdG9yIHNldE1pblZhbHVlOiAwLjBd
OworCVtsZXZlbF9pbmRpY2F0b3Igc2V0TWF4VmFsdWU6IDEuMF07CisJLyogVGhlIGNvbnRlbnRW
aWV3IHRha2VzIG93bmVyc2hpcC4gICovCisJW2RvY2tfdGlsZS5jb250ZW50VmlldyBhZGRTdWJ2
aWV3OiBsZXZlbF9pbmRpY2F0b3JdOworICAgICAgfQorICBkb3VibGUgcHJvZ3Jlc3NfdmFsdWU7
CisgIEJPT0wgaGlkZSA9IChOSUxQIChwcm9ncmVzcykKKwkgICAgICAgfHwgKCFOSUxQIChwcm9n
cmVzcykgJiYgIShGTE9BVFAgKHByb2dyZXNzKSkpKTsKKyAgaWYgKCFoaWRlKQorICAgIHsKKyAg
ICAgIHByb2dyZXNzX3ZhbHVlID0gWEZMT0FUX0RBVEEgKHByb2dyZXNzKTsKKyAgICAgIGhpZGUg
PSAocHJvZ3Jlc3NfdmFsdWUgPCAwLjAgfHwgcHJvZ3Jlc3NfdmFsdWUgPiAxLjApOworICAgIH0K
KyAgaWYgKGhpZGUpCisgICAgeworICAgICAgW2xldmVsX2luZGljYXRvciBzZXREb3VibGVWYWx1
ZTogMC4wXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBZRVNdOworICAgIH0K
KyAgZWxzZQorICAgIHsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0RG91YmxlVmFsdWU6IHBy
b2dyZXNzX3ZhbHVlXTsKKyAgICAgIFtsZXZlbF9pbmRpY2F0b3Igc2V0SGlkZGVuOiBOT107Cisg
ICAgfQorICBbZG9ja190aWxlIGRpc3BsYXldOworICB1bmJsb2NrX2lucHV0ICgpOworICByZXR1
cm4gUW5pbDsKK30KKwogI2lmZGVmIE5TX0lNUExfQ09DT0EKIAogREVGVU4gKCJucy1zZW5kLWl0
ZW1zIiwKQEAgLTM5NTcsNiArNDA4MCw5IEBAIC0gKExpc3BfT2JqZWN0KWxpc3BTdHJpbmcKICAg
ZGVmc3ViciAoJlNuc19zZXRfbW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9zaXRpb24pOwogICBkZWZz
dWJyICgmU25zX21vdXNlX2Fic29sdXRlX3BpeGVsX3Bvc2l0aW9uKTsKICAgZGVmc3ViciAoJlNu
c19zaG93X2NoYXJhY3Rlcl9wYWxldHRlKTsKKyAgZGVmc3ViciAoJlNuc19iYWRnZSk7CisgIGRl
ZnN1YnIgKCZTbnNfcmVxdWVzdF91c2VyX2F0dGVudGlvbik7CisgIGRlZnN1YnIgKCZTbnNfcHJv
Z3Jlc3NfaW5kaWNhdG9yKTsKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAgIGRlZnN1YnIgKCZTbnNf
c2VuZF9pdGVtcyk7CiAjZW5kaWYKQEAgLTQwMjMsNCArNDE0OSw2IEBAIC0gKExpc3BfT2JqZWN0
KWxpc3BTdHJpbmcKICAgREVGU1lNIChRYXNzcV9kZWxldGVfYWxsLCAiYXNzcS1kZWxldGUtYWxs
Iik7CiAgIERFRlNZTSAoUXJ1bl9hdF90aW1lLCAicnVuLWF0LXRpbWUiKTsKICAgREVGU1lNIChR
eF9oaWRlX3RpcCwgIngtaGlkZS10aXAiKTsKKyAgREVGU1lNIChRaW5mb3JtYXRpb25hbCwgImlu
Zm9ybWF0aW9uYWwiKTsKKyAgREVGU1lNIChRY3JpdGljYWwsICJjcml0aWNhbCIpOwogfQpkaWZm
IC0tZ2l0IGEvc3JjL3czMmZucy5jIGIvc3JjL3czMmZucy5jCmluZGV4IDY3OWU4MTk3ZmQ4Li4x
YTJmYzllODg0MiAxMDA2NDQKLS0tIGEvc3JjL3czMmZucy5jCisrKyBiL3NyYy93MzJmbnMuYwpA
QCAtMzUsNyArMzUsMTIgQEAgI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwCiAjaW5jbHVkZSA8
Yy1jdHlwZS5oPgogCiAjZGVmaW5lIENPQkpNQUNST1MgLyogQXNrIGZvciBDIGRlZmluaXRpb25z
IGZvciBDT00uICAqLworI2lmICFkZWZpbmVkIE1JTkdXX1c2NCAmJiAhZGVmaW5lZCBDWUdXSU4K
KyMgZGVmaW5lIElOSVRHVUlECisjZW5kaWYKKyNpbmNsdWRlIDxpbml0Z3VpZC5oPgogI2luY2x1
ZGUgPHNobG9iai5oPgorI2luY2x1ZGUgPHNob2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlaWRsLmg+
CiAjaW5jbHVkZSA8b2JqaWRsLmg+CiAjaW5jbHVkZSA8b2xlMi5oPgpAQCAtMjM3LDYgKzI0Miw4
IEBAIERFQ0xBUkVfSEFORExFKEhNT05JVE9SKTsKIHR5cGVkZWYgQk9PTCAoV0lOQVBJICogU2V0
R2VzdHVyZUNvbmZpZ19wcm9jKSAoSFdORCwgRFdPUkQsIFVJTlQsCiAJCQkJCSAgICAgICBFbWFj
c19QR0VTVFVSRUNPTkZJRywgVUlOVCk7CiAKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICogRmxhc2hX
aW5kb3dFeF9Qcm9jKSAoUEZMQVNIV0lORk8gcGZ3aSk7CisKIHN0YXRpYyBUcmFja01vdXNlRXZl
bnRfUHJvYyB0cmFja19tb3VzZV9ldmVudF9mbiA9IE5VTEw7CiBzdGF0aWMgSW1tR2V0Q29tcG9z
aXRpb25TdHJpbmdfUHJvYyBnZXRfY29tcG9zaXRpb25fc3RyaW5nX2ZuID0gTlVMTDsKIHN0YXRp
YyBJbW1HZXRDb250ZXh0X1Byb2MgZ2V0X2ltZV9jb250ZXh0X2ZuID0gTlVMTDsKQEAgLTI1OSw2
ICsyNjYsNyBAQCBERUNMQVJFX0hBTkRMRShITU9OSVRPUik7CiBzdGF0aWMgV1RTUmVnaXN0ZXJT
ZXNzaW9uTm90aWZpY2F0aW9uX1Byb2MgV1RTUmVnaXN0ZXJTZXNzaW9uTm90aWZpY2F0aW9uX2Zu
ID0gTlVMTDsKIHN0YXRpYyBSZWdpc3RlclRvdWNoV2luZG93X3Byb2MgUmVnaXN0ZXJUb3VjaFdp
bmRvd19mbiA9IE5VTEw7CiBzdGF0aWMgU2V0R2VzdHVyZUNvbmZpZ19wcm9jIFNldEdlc3R1cmVD
b25maWdfZm4gPSBOVUxMOworc3RhdGljIEZsYXNoV2luZG93RXhfUHJvYyBmbGFzaF93aW5kb3df
ZXhfZm4gPSBOVUxMOwogCiBleHRlcm4gQXBwZW5kTWVudVdfUHJvYyB1bmljb2RlX2FwcGVuZF9t
ZW51OwogCkBAIC0xMTAxMCw2ICsxMTAxOCwzMTMgQEAgREVGVU4gKCJ3MzItc3lzdGVtLWlkbGUt
dGltZSIsIEZ3MzJfc3lzdGVtX2lkbGVfdGltZSwgU3czMl9zeXN0ZW1faWRsZV90aW1lLAogCiAj
ZW5kaWYKIAorDAorI2lmZGVmIFdJTkRPV1NOVAorCisvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJICAgICBU
YXNrYmFyIEluZGljYXRvcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNSU5HV19XNjQK
KyAgLyogbWluZ3cub3JnJ3MgTWluR1cgZG9lc24ndCBoYXZlIHRoaXMgc3R1ZmYuICAqLworICBE
RUZJTkVfR1VJRChDTFNJRF9UYXNrYmFyTGlzdCwgMHg1NmZkZjM0NCwgMHhmZDZkLCAweDExZDAs
IDB4OTUsMHg4YSwgMHgwMCwweDYwLDB4OTcsMHhjOSwweGEwLDB4OTApOworICBERUZJTkVfR1VJ
RChJSURfSVRhc2tiYXJMaXN0MywgMHhlYTFhZmI5MSwgMHg5ZTI4LCAweDRiODYsIDB4OTAsMHhl
OSwgMHg5ZSwweDlmLDB4OGEsMHg1ZSwweGVmLDB4YWYpOworI2VuZGlmCisKK0RFRlVOICgidzMy
LWJhZGdlIiwKKyAgICAgICBGdzMyX2JhZGdlLAorICAgICAgIFN3MzJfYmFkZ2UsCisgICAgICAg
MywgMywgMCwKKyAgICAgICBkb2M6IC8qIERpc3BsYXkgYSB0YXNrYmFyIGljb24gb3ZlcmxheSBp
bWFnZSBvbiB0aGUgc2VsZWN0ZWQgZnJhbWUuCitCQURHRSBpcyBhIHN0cmluZy4gIElmIEJBREdF
IGlzIG5pbCwgcmVtb3ZlIHRoZSBvdmVybGF5LiAgRG8gbm90aGluZyBpZgorV2luZG93cyBkb2Vz
IG5vdCBzdXBwb3J0IHRoZSBJVGFza2Jhckxpc3QzIGludGVyZmFjZSBhbmQgcmV0dXJuIG5pbCwK
K290aGVyd2lzZSByZXR1cm4gdC4gIERvIG5vdGhpbmcgaWYgdGhlIHNlbGVjdGVkIGZyYW1lIGlz
IG5vdCAoeWV0KQorYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93IGhhbmRsZS4gIEJBQ0tHUk9VTkQg
YW5kIEZPUkVHUk9VTkQgYXJlIFJHQgordHJpcGxldCBzdHJpbmdzIG9mIHRoZSBmb3JtIFwiI1JS
R0dCQlwiLiAgKi8pCisgIChMaXNwX09iamVjdCBiYWRnZSwgTGlzcF9PYmplY3QgYmFja2dyb3Vu
ZCwgTGlzcF9PYmplY3QgZm9yZWdyb3VuZCkKK3sKKyAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVD
VEVEX0ZSQU1FICgpOworICBIV05EIGh3bmQgPSBOVUxMOworCisgIGlmIChGUkFNRV9XMzJfUCAo
c2YpICYmIEZSQU1FX0xJVkVfUCAoc2YpKQorICAgIGh3bmQgPSBGUkFNRV9XMzJfV0lORE9XIChz
Zik7CisKKyAgaWYgKGh3bmQgPT0gTlVMTCkKKyAgICByZXR1cm4gUW5pbDsKKworICBDb0luaXRp
YWxpemUgKE5VTEwpOworICBJVGFza2Jhckxpc3QzICp0YXNrX2Jhcl9saXN0ID0gTlVMTDsKKyAg
SFJFU1VMVCByID0gQ29DcmVhdGVJbnN0YW5jZSgmQ0xTSURfVGFza2Jhckxpc3QsCisJCQkgICAg
ICAgTlVMTCwKKwkJCSAgICAgICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwKKwkJCSAgICAgICAmSUlE
X0lUYXNrYmFyTGlzdDMsCisJCQkgICAgICAgKHZvaWQgKiopJnRhc2tfYmFyX2xpc3QpOworICBp
ZiAociAhPSBTX09LKQorICAgIHJldHVybiBRbmlsOworCisgIGlmICghTklMUCAoYmFkZ2UpICYm
IFNUUklOR1AgKGJhZGdlKQorICAgICAgJiYgU1RSSU5HUCAoYmFja2dyb3VuZCkgJiYgU1RSSU5H
UCAoZm9yZWdyb3VuZCkpCisgICAgeworICAgICAgQ09MT1JSRUYgYmdfcmdiOworICAgICAgQ09M
T1JSRUYgZmdfcmdiOworICAgICAgdW5zaWduZWQgc2hvcnQgciwgZywgYjsKKyAgICAgIGlmIChw
YXJzZV9jb2xvcl9zcGVjIChTU0RBVEEgKGJhY2tncm91bmQpLCAmciwgJmcsICZiKSkKKwliZ19y
Z2IgPSBSR0IgKHIsIGIsIGIpOworICAgICAgZWxzZQorCXJldHVybiBRbmlsOworICAgICAgaWYg
KHBhcnNlX2NvbG9yX3NwZWMgKFNTREFUQSAoZm9yZWdyb3VuZCksICZyLCAmZywgJmIpKQorCWZn
X3JnYiA9IFJHQiAociwgYiwgYik7CisgICAgICBlbHNlCisJcmV0dXJuIFFuaWw7CisKKyAgICAg
IC8qIFByZXBhcmUgYSBzdHJpbmcgZm9yIGRyYXdpbmcgYW5kIGFzIGFsdC10ZXh0LiAgKi8KKyAg
ICAgIExpc3BfT2JqZWN0IGJhZGdlX3V0ZjggPSBFTkNPREVfVVRGXzggKGJhZGdlKTsKKyAgICAg
IGludCB3aWRlX2xlbiA9IHBNdWx0aUJ5dGVUb1dpZGVDaGFyIChDUF9VVEY4LCAwLAorCQkJCQkg
ICBTU0RBVEEgKGJhZGdlX3V0ZjgpLAorCQkJCQkgICAtMSwgTlVMTCwgMCk7CisgICAgICB3Y2hh
cl90ICpiYWRnZV93ID0gYWxsb2NhICgod2lkZV9sZW4gKyAxKSAqIHNpemVvZiAod2NoYXJfdCkp
OworICAgICAgcE11bHRpQnl0ZVRvV2lkZUNoYXIgKENQX1VURjgsIDAsIFNTREFUQSAoYmFkZ2Vf
dXRmOCksIC0xLAorCQkJICAgIChMUFdTVFIpIGJhZGdlX3csCisJCQkgICAgd2lkZV9sZW4pOwor
CisgICAgICAvKiBVc2UgdGhlIHNtYWxsIGljb24gc2l6ZSBXaW5kb3dzIHN1Z2dlc3RzIHRvIG5v
dCBoYXJkIGNvZGUgMTZ4MTYuICAqLworICAgICAgaW50IGljb25fd2lkdGggPSBHZXRTeXN0ZW1N
ZXRyaWNzIChTTV9DWFNNSUNPTik7CisgICAgICBpbnQgaWNvbl9oZWlnaHQgPSBHZXRTeXN0ZW1N
ZXRyaWNzIChTTV9DWFNNSUNPTik7CisKKyAgICAgIEhEQyBod25kX2RjID0gR2V0REMgKGh3bmQp
OworICAgICAgSERDIGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDIChod25kX2RjKTsKKworICAgICAg
QklUTUFQVjVIRUFERVIgYmk7CisgICAgICBtZW1zZXQgKCZiaSwgMCwgc2l6ZW9mIChiaSkpOwor
ICAgICAgYmkuYlY1U2l6ZSA9IHNpemVvZiAoYmkpOworICAgICAgYmkuYlY1V2lkdGggPSBpY29u
X3dpZHRoOworICAgICAgYmkuYlY1SGVpZ2h0ID0gLWljb25faGVpZ2h0OyAvKiBOZWdhdGl2ZSBm
b3IgYSB0b3AtZG93biBESUIuICAqLworICAgICAgYmkuYlY1UGxhbmVzID0gMTsKKyAgICAgIGJp
LmJWNUJpdENvdW50ID0gMzI7CisgICAgICBiaS5iVjVDb21wcmVzc2lvbiA9IEJJX0JJVEZJRUxE
UzsgIC8qIEVuYWJsZSB0aGUgbWFza3MgYmVsb3cuICAqLworICAgICAgYmkuYlY1UmVkTWFzayAg
ID0gIDB4MDBGRjAwMDA7CisgICAgICBiaS5iVjVHcmVlbk1hc2sgPSAgMHgwMDAwRkYwMDsKKyAg
ICAgIGJpLmJWNUJsdWVNYXNrICA9ICAweDAwMDAwMEZGOworICAgICAgYmkuYlY1QWxwaGFNYXNr
ID0gIDB4RkYwMDAwMDA7CisKKyAgICAgIERXT1JEICpiaXRtYXBfcGl4ZWxzOworICAgICAgSEJJ
VE1BUCBiaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uIChkYywgKEJJVE1BUElORk8gKikgJmJpLAor
CQkJCQkgRElCX1JHQl9DT0xPUlMsCisJCQkJCSAodm9pZCAqKikgJmJpdG1hcF9waXhlbHMsCisJ
CQkJCSBOVUxMLCAwKTsKKyAgICAgIEhHRElPQkogb2xkX2JpdG1hcCA9IFNlbGVjdE9iamVjdChk
YywgYml0bWFwKTsKKworICAgICAgLyogRHJhdyBhIGNpcmNsZSBmaWxsZWQgd2l0aCBiZy4gICov
CisgICAgICBIQlJVU0ggYmdfYnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoIChiZ19yZ2IpOworICAg
ICAgSEdESU9CSiBvbGRfYnJ1c2ggPSBTZWxlY3RPYmplY3QgKGRjLCBiZ19icnVzaCk7CisgICAg
ICBFbGxpcHNlIChkYywgMCwgMCwgaWNvbl93aWR0aCwgaWNvbl9oZWlnaHQpOworICAgICAgU2Vs
ZWN0T2JqZWN0IChkYywgb2xkX2JydXNoKTsKKyAgICAgIERlbGV0ZU9iamVjdCAoYmdfYnJ1c2gp
OworCisgICAgICAvKiBEZXJpdmUgYSBmb250IHNjYWxlZCB0byBmaXQgdGhlIGljb24uICBGaXJz
dCBmaW5kIHRoZSBzeXN0ZW0ncworCSBiYXNlIGZvbnQuICBUaGVuIHNjYWxlIGl0IHRvIGZpdCBp
Y29uX2hlaWdodC4gICovCisgICAgICBIRk9OVCBiYXNlX2ZvbnQ7CisgICAgICBCT09MIGNsZWFu
X3VwX2Jhc2VfZm9udCA9IEZBTFNFOworICAgICAgaWYgKHN5c3RlbV9wYXJhbWV0ZXJzX2luZm9f
d19mbikKKwl7CisJICBOT05DTElFTlRNRVRSSUNTIG5jbTsKKwkgIG1lbXNldCAoJm5jbSwgMCwg
c2l6ZW9mIChuY20pKTsKKwkgIG5jbS5jYlNpemUgPSBzaXplb2YgKG5jbSk7CisJICBTeXN0ZW1Q
YXJhbWV0ZXJzSW5mbyAoU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZiAobmNtKSwgJm5j
bSwgMCk7CisJICBiYXNlX2ZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QgKCZuY20ubGZTbUNhcHRp
b25Gb250KTsKKwkgIGNsZWFuX3VwX2Jhc2VfZm9udCA9IFRSVUU7CisJfQorICAgICAgZWxzZQor
CWJhc2VfZm9udCA9IChIRk9OVCkgR2V0U3RvY2tPYmplY3QgKERFRkFVTFRfR1VJX0ZPTlQpOwor
ICAgICAgaWYgKGNsZWFuX3VwX2Jhc2VfZm9udCkKKwlEZWxldGVPYmplY3QgKGJhc2VfZm9udCk7
CisKKyAgICAgIExPR0ZPTlQgbGY7CisgICAgICBHZXRPYmplY3QgKGJhc2VfZm9udCwgc2l6ZW9m
IChsZiksICZsZik7CisgICAgICBsZi5sZldlaWdodCA9IEZXX0JPTEQ7CisgICAgICBsZi5sZk91
dFByZWNpc2lvbiA9IE9VVF9PVVRMSU5FX1BSRUNJUzsKKyAgICAgIC8qIENsZWFyVHlwZSBxdWFs
aXR5IG5lZWRzIG9wcWF1ZSwgYnV0IHdlIGRyYXcgdHJhbnNwYXJlbnQuICAqLworICAgICAgbGYu
bGZRdWFsaXR5ID0gQU5USUFMSUFTRURfUVVBTElUWTsKKyAgICAgIC8qIE5lZ2F0aXZlIGxmSGVp
Z2h0IGluZGljYXRlcyBwaXhlbCB1bml0cyB2cy4gcG9zaXRpdmUgaW4gcG9pbnRzLgorCSBVc2Ug
dGhlIExPR1BJWEVMU1kgcHgvaW4gb2YgdGhlIHByaW1hcnkgbW9uaXRvci4gICovCisgICAgICBs
Zi5sZkhlaWdodCA9IC1NdWxEaXYoaWNvbl9oZWlnaHQgLyAyLCAvKiBGaXQgfjMgY2hhcnMuICAq
LworCQkJICAgIDcyLAorCQkJICAgIEdldERldmljZUNhcHMgKEdldERDIChOVUxMKSwgTE9HUElY
RUxTWSkpOworICAgICAgLyogRW5zdXJlIGxmSGVpZ2h0IHBpeGVsIGludGVycHJldGF0aW9uLiAg
Ki8KKyAgICAgIGludCBvbGRfbWFwX21vZGUgPSBTZXRNYXBNb2RlIChkYywgTU1fVEVYVCk7Cisg
ICAgICBIRk9OVCBzY2FsZWRfZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCAoJmxmKTsKKyAgICAg
IEhHRElPQkogb2xkX2ZvbnQgPSBTZWxlY3RPYmplY3QgKGRjLCBzY2FsZWRfZm9udCk7CisgICAg
ICBTZXRNYXBNb2RlIChkYywgb2xkX21hcF9tb2RlKTsKKworICAgICAgLyogRHJhdyBiYWRnZSB0
ZXh0LiAgKi8KKyAgICAgIFNldEJrTW9kZSAoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICAgIFNldFRl
eHRDb2xvciAoZGMsIGZnX3JnYik7CisgICAgICBSRUNUIHJlY3Q7CisgICAgICByZWN0LmxlZnQg
PSByZWN0LnRvcCA9IDA7CisgICAgICByZWN0LnJpZ2h0ID0gaWNvbl93aWR0aDsKKyAgICAgIHJl
Y3QuYm90dG9tID0gaWNvbl9oZWlnaHQ7CisgICAgICBEcmF3VGV4dCAoZGMsIFNTREFUQSAoYmFk
Z2VfdXRmOCksCisJCS0xLCAvKiBJbmRpY2F0ZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLiAgKi8K
KwkJJnJlY3QsCisJCURUX0NFTlRFUiB8IERUX1ZDRU5URVIgfCBEVF9TSU5HTEVMSU5FIHwgRFRf
Tk9DTElQKTsKKyAgICAgIFNlbGVjdE9iamVjdCAoZGMsIG9sZF9mb250KTsKKyAgICAgIERlbGV0
ZU9iamVjdCAoc2NhbGVkX2ZvbnQpOworCisgICAgICAvKiBNYWtlIHRoZSBjaXJjbGUgYW5kIGl0
cyB0ZXh0IG9wYXF1ZSBieSBzZXR0aW5nIHRoZSBhbHBoYQorCSBjaGFubmVsIG9uIGVhY2ggcGl4
ZWwgZmFsbGluZyB3aXRoaW4gdGhlIGNpcmNsZS4gICovCisgICAgICBpbnQgY2lyY2xlX2NlbnRl
cl94ID0gaWNvbl93aWR0aCAvIDI7CisgICAgICBpbnQgY2lyY2xlX2NlbnRlcl95ID0gaWNvbl9o
ZWlnaHQgLyAyOworICAgICAgaW50IGNpcmNsZV9yYWRpdXMgPSAoaWNvbl93aWR0aCA8IGljb25f
aGVpZ2h0CisJCQkgICA/IGljb25fd2lkdGgKKwkJCSAgIDogaWNvbl9oZWlnaHQpIC8gMiAtIDI7
CisgICAgICBpbnQgY2lyY2xlX3JhZGl1c19zcSA9IGNpcmNsZV9yYWRpdXMgKiBjaXJjbGVfcmFk
aXVzOworICAgICAgRFdPUkQgKnBpeGVsOworICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpY29u
X2hlaWdodDsgKyt5KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGljb25fd2lkdGg7ICsr
eCkKKwkgIHsKKyAgICAgICAgICAgIGludCBkeCA9IHggLSBjaXJjbGVfY2VudGVyX3g7CisgICAg
ICAgICAgICBpbnQgZHkgPSB5IC0gY2lyY2xlX2NlbnRlcl95OworICAgICAgICAgICAgaWYgKGR4
ICogZHggKyBkeSAqIGR5IDw9IGNpcmNsZV9yYWRpdXNfc3EpCisJICAgICAgeworCQkgIHBpeGVs
ID0gYml0bWFwX3BpeGVscyArICh5ICogaWNvbl93aWR0aCArIHgpOworCQkgICpwaXhlbCB8PSAw
eGZmMDAwMDAwOyAvKiBGbGlwIHRoZSAweEFBUlJHR0JCIGFscGhhIGNoYW5uZWwuICAqLworCSAg
ICAgIH0KKwkgIH0KKworICAgICAgLyogRHVtbXkgbW9ub2Nocm9tZSBiaXRtYXAgbWFzaywgaWdu
b3JlZCB3aGVuIHRoZSBjb2xvciBiaXRtYXAgaGFzCisJIGFuIGFscGhhIGNoYW5uZWwsIGJ1dCBu
ZWVkZWQgdG8gc2F0aXNmeSBDcmVhdGVJY29uSW5kaXJlY3QuICAqLworICAgICAgSEJJVE1BUCBt
YXNrX2JpdG1hcCA9IENyZWF0ZUJpdG1hcCAoaWNvbl93aWR0aCwgaWNvbl9oZWlnaHQsIDEsIDEs
IE5VTEwpOworCisgICAgICAvKiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2lu
ZG93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWNyZWF0ZWljb25pbmRpcmVjdAorCSBo
Ym1NYXNrIGFuZCBoYm1Db2xvciBtZW1iZXJzIG9mIHRoZSBJQ09OSU5GTyBzdHJ1Y3R1cmUgc2hv
dWxkCisJIG5vdCBhbHJlYWR5IGJlIHNlbGVjdGVkIGludG8gYSBkZXZpY2UgY29udGV4dC4gICov
CisgICAgICBTZWxlY3RPYmplY3QgKGRjLCBvbGRfYml0bWFwKTsKKworICAgICAgSUNPTklORk8g
aWNvbl9pbmZvOworICAgICAgbWVtc2V0ICgmaWNvbl9pbmZvLCAwLCBzaXplb2YgKGljb25faW5m
bykpOworICAgICAgaWNvbl9pbmZvLmZJY29uID0gVFJVRTsKKyAgICAgIGljb25faW5mby5oYm1N
YXNrID0gbWFza19iaXRtYXA7CisgICAgICBpY29uX2luZm8uaGJtQ29sb3IgPSBiaXRtYXA7CisK
KyAgICAgIEhJQ09OIGljb24gPSBDcmVhdGVJY29uSW5kaXJlY3QgKCZpY29uX2luZm8pOworICAg
ICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRPdmVybGF5SWNvbiAodGFza19iYXJfbGlzdCwg
aHduZCwgaWNvbiwgYmFkZ2Vfdyk7CisKKyAgICAgIERlc3Ryb3lJY29uIChpY29uKTsKKyAgICAg
IERlbGV0ZU9iamVjdCAobWFza19iaXRtYXApOworICAgICAgRGVsZXRlT2JqZWN0IChiaXRtYXAp
OworICAgICAgRGVsZXRlREMgKGRjKTsKKyAgICAgIFJlbGVhc2VEQyAoaHduZCwgaHduZF9kYyk7
CisgICAgfQorICBlbHNlCisgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRPdmVybGF5SWNv
biAodGFza19iYXJfbGlzdCwgaHduZCwgTlVMTCwgTlVMTCk7CisKKyAgdGFza19iYXJfbGlzdC0+
bHBWdGJsLT5SZWxlYXNlKHRhc2tfYmFyX2xpc3QpOworICByZXR1cm4gUXQ7Cit9CisKK0RFRlVO
ICgidzMyLXJlcXVlc3QtdXNlci1hdHRlbnRpb24iLAorICAgICAgIEZ3MzJfcmVxdWVzdF91c2Vy
X2F0dGVudGlvbiwKKyAgICAgICBTdzMyX3JlcXVlc3RfdXNlcl9hdHRlbnRpb24sCisgICAgICAg
MSwgMSwgMCwKKyAgICAgICBkb2M6IC8qIEZsYXNoIHRoZSBzZWxlY3RlZCBmcmFtZSdzIHRhc2ti
YXIgaWNvbiBhbmQvb3IgaXRzIHdpbmRvdy4KK0lmIFVSR0VOQ1kgaXMgbmlsLCBjYW5jZWwgdGhl
IHJlcXVlc3QsIGlmIGFueS4gIElmIFVSR0VOQ1kgaXMgdGhlIHN5bWJvbAorYGluZm9ybWF0aW9u
YWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uLiAgSWYgVVJHRU5DWSBpcyB0aGUgc3ltYm9sCitg
Y3JpdGljYWwnLCBmbGFzaCB0aGUgdGFza2JhciBpY29uIGFuZCB0aGUgZnJhbWUuICBXaW5kb3dz
IHN0b3BzCitmbGFzaGluZyBpZiB0aGUgdXNlciBmb2N1c2VzIHRoZSBmcmFtZS4gIERvIG5vdGhp
bmcgaWYgV2luZG93cyBkb2VzIG5vdAorc3VwcG9ydCBGbGFzaFdpbmRvd0V4IGFuZCByZXR1cm4g
bmlsLCBvdGhlcndpc2UgcmV0dXJuIHQuICBEbyBub3RoaW5nIGlmCit0aGUgZnJhbWUgaXMgbm90
ICh5ZXQpIGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdyBoYW5kbGUuICAqLykKKyAgKExpc3BfT2Jq
ZWN0IHVyZ2VuY3kpCit7CisgIGlmIChmbGFzaF93aW5kb3dfZXhfZm4gPT0gTlVMTCkKKyAgICBy
ZXR1cm4gUW5pbDsKKworICBzdHJ1Y3QgZnJhbWUgKnNmID0gU0VMRUNURURfRlJBTUUgKCk7Cisg
IEhXTkQgaHduZCA9IE5VTEw7CisKKyAgaWYgKEZSQU1FX1czMl9QIChzZikgJiYgRlJBTUVfTElW
RV9QIChzZikpCisgICAgaHduZCA9IEZSQU1FX1czMl9XSU5ET1cgKHNmKTsKKworICBpZiAoaHdu
ZCA9PSBOVUxMKQorICAgIHJldHVybiBRbmlsOworCisgIEZMQVNIV0lORk8gZmxhc2hfaW5mbzsK
KyAgZmxhc2hfaW5mby5jYlNpemUgPSBzaXplb2YoZmxhc2hfaW5mbyk7CisgIGZsYXNoX2luZm8u
dUNvdW50ID0gMDsKKyAgZmxhc2hfaW5mby5kd1RpbWVvdXQgPSAwOworICBmbGFzaF9pbmZvLmh3
bmQgPSBod25kOworICBpZiAoIU5JTFAgKHVyZ2VuY3kpICYmIFNZTUJPTFAgKHVyZ2VuY3kpKQor
ICAgIHsKKyAgICAgIC8qIFRoZSBpbnRlbmRlZCBjYWxsZXIsICdzeXN0ZW0tdGFza2Jhci1hdHRl
bnRpb24nLCBoYXMgYW4KKwkgb3B0aW9uYWwgdGltZXIgdG8gY2xlYXIgdGhlIGF0dGVudGlvbiBp
bmRpY2F0b3Igc28gdGhpcyB3aWxsCisJIGZsYXNoIHVudGlsIGNsZWFyZWQgdmlhIHRoZSB0aW1l
ciwgb3IgdGhlIHdpbmRvdyBjb21lcyB0byB0aGUKKwkgZm9yZWdyb3VuZC4gIEZvciBpbmZvcm1h
dGlvbmFsIGF0dGVudGlvbiwgZmxhc2ggdGhlIHRyYXkgaWNvbi4KKwkgRm9yIGNyaXRpY2FsIGF0
dGVudGlvbiwgZmxhc2ggdGhlIHRyYXkgaWNvbiBhbmQgdGhlIHdpbmRvdy4gICovCisgICAgICBp
ZiAoRVEgKHVyZ2VuY3ksIFFpbmZvcm1hdGlvbmFsKSkKKwlmbGFzaF9pbmZvLmR3RmxhZ3MgPSBG
TEFTSFdfVFJBWSB8IEZMQVNIV19USU1FUk5PRkc7CisgICAgICBlbHNlIGlmIChFUSAodXJnZW5j
eSwgUWNyaXRpY2FsKSkKKwlmbGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFTSFdfQUxMIHwgRkxBU0hX
X1RJTUVSTk9GRzsKKyAgICB9CisgIGVsc2UKKyAgICBmbGFzaF9pbmZvLmR3RmxhZ3MgPSBGTEFT
SFdfU1RPUDsKKworICBmbGFzaF93aW5kb3dfZXhfZm4gKCZmbGFzaF9pbmZvKTsKKyAgcmV0dXJu
IFF0OworfQorCitERUZVTiAoInczMi1wcm9ncmVzcy1pbmRpY2F0b3IiLAorICAgICAgIEZ3MzJf
cHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAgICAgIFN3MzJfcHJvZ3Jlc3NfaW5kaWNhdG9yLAorICAg
ICAgIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBTaG93IGEgcHJvZ3Jlc3MgYmFyIG9uIHRoZSBz
ZWxlY3RlZCBmcmFtZSdzIHRhc2tiYXIgaWNvbi4KK1BST0dSRVNTIGlzIGEgZmxvYXQgaW4gdGhl
IHJhbmdlIDAuMCB0byAxLjAuICBJZiBQUk9HUkVTUyBpcyBuaWwsIHJlbW92ZQordGhlIHByb2dy
ZXNzIGluZGljYXRvci4gIERvIG5vdGhpbmcgaWYgV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHRo
ZQorSVRhc2tiYXJMaXN0MyBpbnRlcmZhY2UgYW5kIHJldHVybiBuaWwsIG90aGVyd2lzZSByZXR1
cm4gdC4gIERvIG5vdGhpbmcKK2lmIHRoZSBzZWxlY3RlZCBmcmFtZSBpcyBub3QgKHlldCkgYXNz
b2NpYXRlZCB3aXRoIGEgd2luZG93IGhhbmRsZSAgKi8pCisgIChMaXNwX09iamVjdCBwcm9ncmVz
cykKK3sKKyAgc3RydWN0IGZyYW1lICpzZiA9IFNFTEVDVEVEX0ZSQU1FICgpOworICBIV05EIGh3
bmQgPSBOVUxMOworCisgIGlmIChGUkFNRV9XMzJfUCAoc2YpICYmIEZSQU1FX0xJVkVfUCAoc2Yp
KQorICAgIGh3bmQgPSBGUkFNRV9XMzJfV0lORE9XIChzZik7CisKKyAgaWYgKGh3bmQgPT0gTlVM
TCkKKyAgICByZXR1cm4gUW5pbDsKKworICBDb0luaXRpYWxpemUgKE5VTEwpOworICBJVGFza2Jh
ckxpc3QzICp0YXNrX2Jhcl9saXN0ID0gTlVMTDsKKyAgSFJFU1VMVCByID0gQ29DcmVhdGVJbnN0
YW5jZSgmQ0xTSURfVGFza2Jhckxpc3QsCisJCQkgICAgICAgTlVMTCwKKwkJCSAgICAgICBDTFND
VFhfSU5QUk9DX1NFUlZFUiwKKwkJCSAgICAgICAmSUlEX0lUYXNrYmFyTGlzdDMsCisJCQkgICAg
ICAgKHZvaWQgKiopJnRhc2tfYmFyX2xpc3QpOworICBpZiAociAhPSBTX09LKQorICAgIHJldHVy
biBRbmlsOworCisgIC8qIFNjYWxlIHRhc2sgYmFyIHByb2dyZXNzIGZyb20gMC4wLTEuMCB0byAw
LTEwMC4gICovCisgIFVMT05HTE9ORyBhZGpfcHJvZ3Jlc3MgPSAwOworICBpZiAoIU5JTFAgKHBy
b2dyZXNzKSAmJiBGTE9BVFAgKHByb2dyZXNzKSkKKyAgICAgIGFkal9wcm9ncmVzcyA9IChVTE9O
R0xPTkcpICgxMDAuMCAqCisJCQkJICBYRkxPQVRfREFUQSAocHJvZ3Jlc3MpKTsKKyAgaWYgKGFk
al9wcm9ncmVzcyA+IDApCisgICAgeworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQ
cm9ncmVzc1N0YXRlICh0YXNrX2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgVEJQRl9OT1JN
QUwpOworICAgICAgdGFza19iYXJfbGlzdC0+bHBWdGJsLT5TZXRQcm9ncmVzc1ZhbHVlICh0YXNr
X2Jhcl9saXN0LAorCQkJCQkgICAgICAgaHduZCwgYWRqX3Byb2dyZXNzLCAxMDApOworICAgIH0K
KyAgZWxzZQorICAgIHsKKyAgICAgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+U2V0UHJvZ3Jlc3NT
dGF0ZSAodGFza19iYXJfbGlzdCwKKwkJCQkJICAgICAgIGh3bmQsIFRCUEZfTk9QUk9HUkVTUyk7
CisgICAgfQorCisgIHRhc2tfYmFyX2xpc3QtPmxwVnRibC0+UmVsZWFzZSh0YXNrX2Jhcl9saXN0
KTsKKyAgcmV0dXJuIFF0OworfQorCisjZW5kaWYgLyogV0lORE9XU05UICovCisKIC8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgogCQkJICAgIEluaXRpYWxpemF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTUx
MSw2ICsxMTgyNiwxNSBAQCBzeW1zX29mX3czMmZucyAodm9pZCkKICAgREVGU1lNIChRY2Fwc2xv
Y2ssICJjYXBzbG9jayIpOwogICBERUZTWU0gKFFrcF9udW1sb2NrLCAia3AtbnVtbG9jayIpOwog
ICBERUZTWU0gKFFzY3JvbGwsICJzY3JvbGwiKTsKKworICAjaWZkZWYgV0lORE9XU05UCisgIC8q
IFRhc2tiYXIgaW5kaWNhdG9ycyBzdXBwb3J0LiAgKi8KKyAgZGVmc3ViciAoJlN3MzJfYmFkZ2Up
OworICBkZWZzdWJyICgmU3czMl9wcm9ncmVzc19pbmRpY2F0b3IpOworICBkZWZzdWJyICgmU3cz
Ml9yZXF1ZXN0X3VzZXJfYXR0ZW50aW9uKTsKKyAgREVGU1lNIChRaW5mb3JtYXRpb25hbCwgImlu
Zm9ybWF0aW9uYWwiKTsKKyAgREVGU1lNIChRY3JpdGljYWwsICJjcml0aWNhbCIpOworICAjZW5k
aWYKIH0KIAogDApAQCAtMTE3OTksNiArMTIxMjMsOSBAQCBnbG9iYWxzX29mX3czMmZucyAodm9p
ZCkKICAgU2V0R2VzdHVyZUNvbmZpZ19mbgogICAgID0gKFNldEdlc3R1cmVDb25maWdfcHJvYykg
Z2V0X3Byb2NfYWRkciAodXNlcjMyX2xpYiwKIAkJCQkJICAgICAiU2V0R2VzdHVyZUNvbmZpZyIp
OworICBmbGFzaF93aW5kb3dfZXhfZm4KKyAgICA9IChGbGFzaFdpbmRvd0V4X1Byb2MpIGdldF9w
cm9jX2FkZHIgKHVzZXIzMl9saWIsCisJCQkJCSAgIkZsYXNoV2luZG93RXgiKTsKIAogICB7CiAg
ICAgSE1PRFVMRSBpbW0zMl9saWIgPSBHZXRNb2R1bGVIYW5kbGUgKCJpbW0zMi5kbGwiKTsKZGlm
ZiAtLWdpdCBhL3N5c3RlbS10YXNrYmFyLnRleGkgYi9zeXN0ZW0tdGFza2Jhci50ZXhpCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOWU5MjBkNjkxYwotLS0gL2Rldi9u
dWxsCisrKyBiL3N5c3RlbS10YXNrYmFyLnRleGkKQEAgLTAsMCArMSwyNTQgQEAKK1xpbnB1dCB0
ZXhpbmZvICAgIEBjIC0qLXRleGluZm8tKi0KKworQHNldGZpbGVuYW1lIC4uLy4uL2luZm8vZG9j
ay1tb2RlLmluZm8KK0BzZXR0aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIgRmVhdHVyZXMKK0BpbmNs
dWRlIGRvY3N0eWxlLnRleGkKKworQGNvcHlpbmcKK1RoaXMgZmlsZSBkZXNjcmliZXMgRW1hY3Mg
c3lzdGVtIEdVSSB0YXNrYmFyIGludGVncmF0aW9uLgorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9
IDIwMjUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK0BxdW90YXRpb24KK1Blcm1p
c3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBk
b2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExp
Y2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCBubworSW52YXJpYW50IFNlY3Rpb25zLCB3
aXRoIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBgYEEgR05VIE1hbnVhbCwnJworYW5kIHdp
dGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYXMgaW4gKGEpIGJlbG93LiAgQSBjb3B5IG9mIHRoZSBs
aWNlbnNlIGlzCitpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERv
Y3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBp
czogYGBZb3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBjb3B5IGFuZAorbW9kaWZ5IHRoaXMgR05VIG1h
bnVhbC4nJworQGVuZCBxdW90YXRpb24KK0BlbmQgY29weWluZworCitAZGlyY2F0ZWdvcnkgRW1h
Y3MgbWlzYyBmZWF0dXJlcworQGRpcmVudHJ5CisqIFN5c3RlbSBHVUkgVGFza2JhcjogKHRhc2ti
YXIpLiAgICAgICBTeXN0ZW0gR1VJIHRhc2tiYXIgaW50ZWdyYXRpb24uCitAZW5kIGRpcmVudHJ5
CisKK0B0aXRsZXBhZ2UKK0B0aXRsZSBTeXN0ZW0gR1VJIFRhc2tiYXIgSW50ZWdyYXRpb24KK0Bw
YWdlCitAdnNraXAgMHB0IHBsdXMgMWZpbGxsCitAaW5zZXJ0Y29weWluZworQGVuZCB0aXRsZXBh
Z2UKKworQGNvbnRlbnRzCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIEVtYWNzIFN5c3Rl
bSBHVUkgVGFza2JhciBJbnRlZ3JhdGlvbgorVGhpcyBtYW51YWwgZGVzY3JpYmVzIEVtYWNzIHN5
c3RlbSBHVUkgdGFza2JhciBpbnRlZ3JhdGlvbi4KKworVGhlIEBkZm57c3lzdGVtLXRhc2tiYXJ9
IHBhY2thZ2UgYWRkcyBFbWFjcyBpbnRlZ3JhdGlvbiB3aXRoIHN5c3RlbSBHVUkKK3Rhc2tiYXIg
KGFsc28gY2FsbGVkIGRvY2tzIG9yIGxhdW5jaGVycyBvciBzb21ldGhpbmcgc2ltaWxhcikgdG8g
ZGlzcGxheQorYSB0YXNrYmFyIGljb24gImJhZGdlIiBvdmVybGF5LCBhIHByb2dyZXNzIGJhciBy
ZXBvcnQgb3ZlcmxheSwgYWxlcnQgdGhlCit1c2VyIHRoYXQgYW4gRW1hY3Mgc2Vzc2lvbiBuZWVk
cyBhdHRlbnRpb24sIG9mdGVuIGJ5IGZsYXNoaW5nIG9yCitib3VuY2luZyB0aGUgRW1hY3MgYXBw
bGljYXRpb24gaWNvbi4gIFRhc2tiYXIgY2FwYWJsZSBzeXN0ZW1zIGFyZQorR05VL0xpbnV4IHZp
YSBELUJ1cywgbWFjT1MvR05Vc3RlcCAxMC41KywgTVMtV2luZG93cyA3Ky4KKworT24gR05VL0xp
bnV4LCB0aGUgdmlzaWJsZSBlZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRoZSBkZXN0aW5hdGlvbnMK
K2RldGVybWluZWQgYnkgeW91ciBzaGVsbCBleHRlbnNpb24sIG1vc3Qgb2Z0ZW4gdGhlIGFwcGxp
Y2F0aW9uIGxhdW5jaGVyCitvciBkb2NrIHBhbmVsLCBvciB0aGUgdG9wIHBhbmVsLiAgRWZmZWN0
cyBhcmUgZ2xvYmFsIGZvciBhbiBFbWFjcworaW5zdGFuY2UuCisKK09uIG1hY09TL0dOVXN0ZXAs
IHRoZSBlZmZlY3RzIHdpbGwgYXBwZWFyIG9uIHRoZSBEb2NrIGFuZCBpbiB0aGUgQXBwCitTd2l0
Y2hlci4gIEVmZmVjdHMgYXJlIGdsb2JhbCBmb3IgYW4gRW1hY3MgaW5zdGFuY2UuCisKK09uIE1T
LVdpbmRvd3MsIHRoZSBlZmZlY3RzIGFwcGVhciBvbiB0aGUgdGFza2Jhci4gIEVmZmVjdHMgYXJl
Cithc3NvY2lhdGVkIHdpdGggdGhlIGZyYW1lIGZyb20gd2hpY2ggdGhleSBhcmUgaW5pdGlhdGVk
LgorCitAaW5zZXJ0Y29weWluZworCitAbWVudQorKiBPdmVydmlldzo6ICAgICAgICAgICAgICAg
ICAgICBPdmVydmlldyBvZiBzeXN0ZW0gR1VJIHRhc2tiYXIgaW50ZWdyYXRpb24KKyogUHJlcmVx
dWlzaXRlczo6CisqIFVzZXIgT3B0aW9uczo6CisqIEZ1bmN0aW9uIFJlZmVyZW5jZTo6CisqIFN5
c3RlbSBUYXNrYmFyIFVzYWdlIEV4YW1wbGVzOjoKKyogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBM
aWNlbnNlOjogIFRoZSBsaWNlbnNlIGZvciB0aGlzIGRvY3VtZW50YXRpb24uCisqIEZ1bmN0aW9u
IEluZGV4OjoKKyogVmFyaWFibGUgSW5kZXg6OgorQGVuZCBtZW51CitAZW5kIGlmbm90dGV4CisK
K0Bub2RlIE92ZXJ2aWV3CitAY2hhcHRlciBPdmVydmlldworCitUaGUgU3lzdGVtIFRhc2tiYXIg
cGFja2FnZSBwcm92aWRlcyB0aGVzZSBzeXN0ZW0gR1VJIHRhc2tiYXIgZmVhdHVyZXM6CisKK0Bp
dGVtaXplIEBidWxsZXQKK0BpdGVtIEljb24gYmFkZ2UKK0BpdGVtIEljb24gcHJvZ3Jlc3MgaW5k
aWNhdG9yCitAaXRlbSBJY29uIGF0dGVudGlvbiBhbGVydAorQGVuZCBpdGVtaXplCisKK0Bub2Rl
IFByZXJlcXVpc2l0ZXMKK0BjaGFwdGVyIFByZXJlcXVpc2l0ZXMKKworbWFjT1MvR05Vc3RlcCwg
YW5kIE1TLVdpbmRvd3MgdXNlcnMgbmVlZCBubyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24uCisKK09u
IEdOVS9MaW51eCBzeXN0ZW1zLCB0aGUgaW1wbGVtZW50YXRpb24gaXMgdmlhIEQtQnVzIHRvIGNv
bnRyb2wgR1VJCitzaGVsbHMgYW5kL29yIHNoZWxsIGV4dGVuc2lvbnMgc3VjaCBhcworQGZpbGV7
aHR0cHM6Ly9leHRlbnNpb25zLmdub21lLm9yZy9leHRlbnNpb24vMzA3L2Rhc2gtdG8tZG9jay99
IHRoYXQKK2ltcGxlbWVudCBVYnVudHUncyBVbml0eSBsYXVuY2hlciBzcGVjIHdoaWNoIHlvdSBj
YW4gcmVhZCBtb3JlIGFib3V0CitoZXJlIEBmaWxle2h0dHBzOi8vd2lraS51YnVudHUuY29tL1Vu
aXR5L0xhdW5jaGVyQVBJfS4KKworQG5vZGUgVXNlciBPcHRpb25zCitAY2hhcHRlciBVc2VyIE9w
dGlvbnMKKworQGRlZm9wdCBzeXN0ZW0tdGFza2Jhci11c2UtcHJvZ3Jlc3MtcmVwb3J0ZXIKK1Ro
ZSB2YXJpYWJsZSBAY29kZXtzeXN0ZW0tdGFza2Jhci11c2UtcHJvZ3Jlc3MtcmVwb3J0ZXJ9IGlz
IHVzZWQgdG8KK3N1cHBsZW1lbnQgYnVpbHQtaW4gcHJvZ3Jlc3MgcmVwb3J0cyB3aXRoIEdVSSB0
YXNrYmFyIGljb24gcHJvZ3Jlc3MgYmFycworaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgZWNo
byBhcmVhIHJlcG9ydHMuICBJdCBkZWZhdWx0cyB0byBAY29kZXt0fS4KKysrKyBAeHJlZntQcm9n
cmVzcywsIERpc3BsYXksIGVsaXNwLCBUaGUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsfS4K
K0BlbmQgZGVmb3B0CisKK0BkZWZvcHQgc3lzdGVtLXRhc2tiYXItY2xlYXItYXR0ZW50aW9uLW9u
LWZyYW1lLWZvY3VzCitUaGUgdmFyaWFibGUgQGNvZGV7c3lzdGVtLXRhc2tiYXItY2xlYXItYXR0
ZW50aW9uLW9uLWZyYW1lLWZvY3VzfSBjYW4gYmUKK2N1c3RvbWl6ZWQgdG8gY2xlYXIgdGhlIHRh
c2tiYXIgaWNvbiBhdHRlbnRpb24gaW5kaWNhdG9yIHdoZW4gYW55IEVtYWNzCitHVUkgZnJhbWUg
aXMgZm9jdXNlZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgZm9yIEdOVS9MaW51eCwgYW5kIGlzIGln
bm9yZWQKK29uIE1TLVdpbmRvd3MgYW5kIG1hY09TL0dOVXN0ZXAgd2hpY2ggYXV0b21hdGljYWxs
eSBjbGVhciB0aGUgYXR0ZW50aW9uCitpbmRpY2F0b3IuICBJdCBkZWZhdWx0cyB0byBAY29kZXt0
fS4gIEN1c3RvbWl6ZSB0aGlzIGJlZm9yZSBlbmFibGluZworQGNvZGV7c3lzdGVtLXRhc2tiYXIt
bW9kZX0uCitAZW5kIGRlZm9wdAorCitAZGVmb3B0IHN5c3RlbS10YXNrYmFyLWRidXMtZGVza3Rv
cC1maWxlLW5hbWUKK1RoZSB2YXJpYWJsZSBAY29kZXtzeXN0ZW0tdGFza2Jhci1kYnVzLWRlc2t0
b3AtZmlsZS1uYW1lfSBpcyBjb25zdWx0ZWQKK29uIEdOVS9MaW51eCBELUJ1cyBzeXN0ZW1zLCBh
bmQgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gaW5kaWNhdGUgd2hpY2gKK2Rlc2t0b3AgZmlsZSBuYW1l
IGlkZW50aWZpZXMgeW91ciBFbWFjcyBpbnN0YW5jZS4gIEl0IGRlZmF1bHRzIHRvIHRoZQorZGVz
a3RvcCBmaWxlIGJhc2UgbmFtZSBAY29kZXsiZW1hY3NjbGllbnQifSBhbmQgbWlnaHQgbmVlZCB0
byBiZSBzZXQgdG8KK0Bjb2RleyJlbWFjcyJ9IG9uIHlvdXIgc3lzdGVtLiAgRW1hY3MgaW5zdGFs
bGVkIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMKK2NhbiB2YXJ5IG9uIHRoZWlyIG5hbWluZyBzY2hl
bWUgYW5kIG9mdGVuIGluY2x1ZGUgZGVza3RvcCBmaWxlcyBmb3IKK2JvdGguCitAZW5kIGRlZm9w
dAorCitAZGVmb3B0IHN5c3RlbS10YXNrYmFyLWRidXMtdGltZW91dAorVGhlIHZhcmlhYmxlIEBj
b2Rle3N5c3RlbS10YXNrYmFyLWRidXMtdGltZW91dH0gaXMgY29uc3VsdGVkIG9uCitHTlUvTGlu
dXggRC1CdXMgc3lzdGVtcywgYW5kIGNhbiBiZSBjdXN0b21pemVkIHRvIHNwZWNpZnkgdGhlIG51
bWJlciBvZgorbWlsbGlzZWNvbmRzIEVtYWNzIHdpbGwgd2FpdCBmb3IgRC1CdXMgcmVzcG9uc2Vz
IGJlZm9yZSB0aW1pbmcgb3V0IGFuZAorY29uc2lkZXJpbmcgbWVzc2FnZXMgdW5kZWxpdmVyYWJs
ZS4gIEl0IGRlZmF1bHRzIHRvIG5pbCB3aGljaCB3aWxsIHVzZQordGhlIEQtQnVzIHBhY2thZ2Ug
ZGVmYXVsdCBvZiAyNTAwMCBtaWxsaXNlY29uZHMsIHdoaWNoIHNlZSwKK0BweHJlZntUb3AsLCwg
ZGJ1cywgRC1CdXMgaW50ZWdyYXRpb24gaW4gRW1hY3N9LgorQGVuZCBkZWZvcHQKKworQG5vZGUg
RnVuY3Rpb24gUmVmZXJlbmNlCitAY2hhcHRlciBGdW5jdGlvbiBSZWZlcmVuY2UKKworQGRlZmZu
IHN5c3RlbS10YXNrYmFyLW1vZGUKK0Bjb2Rle3N5c3RlbS10YXNrYmFyLW1vZGV9IG11c3QgYmUg
ZW5hYmxlZCB0byBpbml0aWFsaXplIHRoZSBzeXN0ZW0gYmFjaworZW5kIGJlZm9yZSBjYWxsaW5n
IGFueSBvZiB0aGlzIHBhY2thZ2UncyBmdW5jdGlvbnMuICBPbiBhIEdOVS9MaW51eAorRC1CdXMg
c3lzdGVtLCB0aGUgcmVxdWlyZWQgRC1CdXMgcHJvdG9jb2wgaXMgcHJvYmVkIGFuZCBpZiBub3QK
K2F2YWlsYWJsZSwgYW4gZXJyb3IgaXMgc2lnbmFsZWQuCitAZW5kIGRlZmZuCisKK0BkZWZ1biBz
eXN0ZW0tdGFza2Jhci1iYWRnZSAmb3B0aW9uYWwgY291bnQKK0Rpc3BsYXkgdGhlIHRhc2tiYXIg
aWNvbiBiYWRnZSBzZXQgdG8gQHZhcntjb3VudH0uICBJZiBAdmFye2NvdW50fSBpcworQGNvZGV7
bmlsfSwgY2xlYXIgdGhlIGJhZGdlLiAgQHZhcntjb3VudH0gaXMgdHlwaWNhbGx5IGFuIGludGVn
ZXIuCisKK0lmIEB2YXJ7Y291bnR9IGlzIGEgc3RyaW5nLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4g
aW50ZWdlciBvbiBzeXN0ZW1zCit0aGF0IGRvIG5vdCBzdXBwb3J0IHN0cmluZyBiYWRnZXMsIHN1
Y2ggYXMgR05VL0xpbnV4IEQtQnVzLCBhbmQgdGhlCitiYWRnZSB3aWxsIGJlIGNsZWFyZWQgaWYg
dGhlIHN0cmluZyBpcyBhbiBpbnZhbGlkIGludGVnZXIKK3JlcHJlc2VudGF0aW9uLiAgT24gc3lz
dGVtcyB0aGF0IHN1cHBvcnQgc3RyaW5ncywgc3VjaCBhcyBtYWNPUy9HTlVzdGVwCithbmQgTVMt
V2luZG93cywgdGhlIGJhZGdlIGlzIHNldCB0byB0aGUgc3RyaW5nIGFuZCBkaXNwbGF5ZWQsIGFu
ZCBtYXkgYmUKK3RydW5jYXRlZCB0byBmaXQgdGhlIHZpc3VhbCBzcGFjZSBhbGxvY2F0ZWQgYnkg
dGhlIHN5c3RlbS4gIEluIGFueSBjYXNlLAoraWYgdGhlIHN0cmluZyBpcyBlbXB0eSwgY2xlYXIg
dGhlIGJhZGdlLgorQGVuZCBkZWZ1bgorCitAZGVmdW4gc3lzdGVtLXRhc2tiYXItYXR0ZW50aW9u
ICZvcHRpb25hbCB1cmdlbmN5IHRpbWVvdXQKK0Rpc3BsYXkgYSB0YXNrYmFyIGljb24gYWxlcnQu
ICBUaGlzIHdpbGwgcmVzdWx0IGluIGEgYm91bmNpbmcgb3IKK2ZsYXNoaW5nIHRhc2tiYXIgaWNv
bi4gIE9uIHNvbWUgYmFjayBlbmRzLCBhdHRlbnRpb24gd2lsbCBiZSBkaXNwbGF5ZWQKK29ubHkg
aWYgRW1hY3MgaXMgbm90IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBhcHBsaWNhdGlvbi4KKworSWYg
QHZhcnt1cmdlbmN5fSBpcyB0aGUgc3ltYm9sIEBjb2Rle2luZm9ybWF0aW9uYWx9LCBub3JtYWwg
YXR0ZW50aW9uIGlzCityZXF1ZXN0ZWQuICBJZiBAdmFye3VyZ2VuY3l9IGlzIHRoZSBzeW1ib2wg
QGNvZGV7Y3JpdGljYWx9LCB1cmdlbnQKK2F0dGVudGlvbiBpcyByZXF1ZXN0ZWQuICBJZiBAdmFy
e3VyZ2VudH0gaXMgQGNvZGV7bmlsfSwgY2xlYXIgdGhlCithdHRlbnRpb24gaW5kaWNhdG9yLgor
CitFbWFjcyB3YWl0cyBAdmFye3RpbWVvdXR9IHNlY29uZHMgYmVmb3JlIGF1dG9tYXRpY2FsbHkg
cmVtb3ZpbmcgdGhlCitpbmRpY2F0b3IuICBJZiBAdmFye3RpbWVvdXR9IGlzIEBjb2Rle25pbH0s
IHRoZSBhdHRlbnRpb24gaW5kaWNhdG9yIHdpbGwKK2JlIGNsZWFyZWQgYnkgdGhlIHN5c3RlbSBv
ciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYWdhaW4gcGFzc2luZyBhCitAY29kZXtuaWx9IHVy
Z2VuY3kuCisKK09uIHNvbWUgYmFjayBlbmRzLCBhbiBAY29kZXtpbmZvcm1hdGlvbmFsfSBhdHRl
bnRpb24gcmVxdWVzdCB3aWxsIHRpbWUKK291dCBhdXRvbWF0aWNhbGx5LiAgSW4gY29udHJhc3Qs
IGEgQGNvZGV7Y3JpdGljYWx9IHJlcXVlc3QgcmVxdWlyZXMgdGhhdAordGhlIHVzZXIgYnJpbmcg
RW1hY3MgaW50byBmb2N1cyBhbmQgd2lsbCBub3QgdGltZSBvdXQuICBPbiBzb21lIGJhY2sKK2Vu
ZHMsIEBjb2Rle2NyaXRpY2FsfSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIEBjb2Rle2luZm9ybWF0
aW9uYWx9LgorQGVuZCBkZWZ1bgorCitAZGVmdW4gc3lzdGVtLXRhc2tiYXItcHJvZ3Jlc3MgJm9w
dGlvbmFsIHByb2dyZXNzCitTZXQgdGhlIHRhc2tiYXIgaWNvbiB0byBpbmRpY2F0ZSBwcm9ncmVz
cyBvZiBhIGxvbmctcnVubmluZyBvcGVyYXRpb24uCitUYXNrYmFyIHByb2dyZXNzIGlzIHR5cGlj
YWxseSByZXByZXNlbnRlZCBhcyBhIGdyYXBoaWNhbCBiYXIgdGhhdAorZnJhY3Rpb25hbGx5IHNw
YW5zIHRoZSB0YXNrYmFyIGljb24uICBAdmFye3Byb2dyZXNzfSBpcyBhIGZsb2F0IGluIHRoZQor
cmFuZ2UgMC4wIHRvIDEuMC4gIElmIEB2YXJ7cHJvZ3Jlc3N9IGlzIG5pbCwgcmVtb3ZlIHRoZSBw
cm9ncmVzcworaW5kaWNhdG9yLiAgVGhlIGJ1aWx0LWluIHByb2dyZXNzIHJlcG9ydGVyIHNob3Vs
ZCBiZSBwcmVmZXJyZWQgb3ZlcgorbWFudWFsbHkgaW5kaWNhdGluZyBwcm9ncmVzcy4KKysrKwor
QHhyZWZ7UHJvZ3Jlc3MsLCBEaXNwbGF5LCBlbGlzcCwgVGhlIEVtYWNzIExpc3AgUmVmZXJlbmNl
IE1hbnVhbH0uCitAZW5kIGRlZnVuCisKK0Bub2RlIFN5c3RlbSBUYXNrYmFyIFVzYWdlIEV4YW1w
bGVzCitAY2hhcHRlciBTeXN0ZW0gVGFza2JhciBVc2FnZSBFeGFtcGxlcworCitAbGlzcAorQGdy
b3VwCis7OyBFbmFibGUgYW5kIGluaXRpYWxpemUgc3lzdGVtLXRhc2tiYXItbW9kZSBiZWZvcmUg
Y2FsbGluZyBpdHMKKzs7IGNvbXBhbmlvbiBmdW5jdGlvbnMuCisoc3lzdGVtLXRhc2tiYXItbW9k
ZSkKKworOzsgRGlzcGxheSBhIGJhZGdlIG9uIHRoZSB0YXNrYmFyIGljb24uCisoc3lzdGVtLXRh
c2tiYXItYmFkZ2UgZW1hY3MtbWFqb3ItdmVyc2lvbikKKyhzeXN0ZW0tdGFza2Jhci1iYWRnZSAi
MzEiKSA7IGNvbnZlcnRlZCB0byBpbnRlZ2VyIG9uIEdOVS9MaW51eAorKHN5c3RlbS10YXNrYmFy
LWJhZGdlICJUZXN0IikgOyB3b3JrcyBvbiBtYWNPUy9HTlVzdGVwIGFuZCBNUy1XaW5kb3dzCisK
Kzs7IENsZWFyIHRoZSBiYWRnZS4KKyhzeXN0ZW0tdGFza2Jhci1iYWRnZSBuaWwpCis7OyBPciBq
dXN0Cisoc3lzdGVtLXRhc2tiYXItYmFkZ2UpCitAZW5kIGdyb3VwCisKK0Bncm91cAorOzsgR2V0
IHRoZSB1c2VyJ3MgYXR0ZW50aW9uLgorKHN5c3RlbS10YXNrYmFyLWF0dGVudGlvbiAnaW5mb3Jt
YXRpb25hbCAzKSA7IGNsZWFyIHRoZSByZXF1ZXN0IGFmdGVyIDMgc2Vjb25kcworKHN5c3RlbS10
YXNrYmFyLWF0dGVudGlvbiAnY3JpdGljYWwpIDsgY2xlYXIgd2hlbiB0aGUgRW1hY3MgYXBwbGlj
YXRpb24gaXMgZm9jdXNlZAorCis7OyBDbGVhciB0aGUgYXR0ZW50aW9uIHJlcXVlc3QuCisoc3lz
dGVtLXRhc2tiYXItYXR0ZW50aW9uIG5pbCkKKzs7IE9yIGp1c3QKKyhzeXN0ZW0tdGFza2Jhci1h
dHRlbnRpb24pCitAZW5kIGdyb3VwCisKK0Bncm91cAorOzsgRW5hYmxlIHRhc2tiYXIgaWNvbiBw
cm9ncmVzcyBmZWVkYmFjay4KKyhzZXRvcHQgc3lzdGVtLXRhc2tiYXItdXNlLXByb2dyZXNzLXJl
cG9ydGVyIHQpIDsgdGhpcyBpcyB0aGUgZGVmYXVsdAorCis7OyBSZXBvcnQgYGRvdGltZXNgIHBy
b2dyZXNzIG9uIHRoZSB0YXNrYmFyIGljb24uCisoZG90aW1lcy13aXRoLXByb2dyZXNzLXJlcG9y
dGVyCisgICAgKGkgMTApCisgICAgIkNvdW50aW5nIGZyb20gMSB0byAxMC4uLiIKKyAgKHNsZWVw
LWZvciAxKSkKKworOzsgUmVwb3J0IGBkb2xpc3RgIHByb2dyZXNzIG9uIHRoZSB0YXNrYmFyIGlj
b24uCisoZG9saXN0LXdpdGgtcHJvZ3Jlc3MtcmVwb3J0ZXIKKyAgICAoaSAobWFrZS1saXN0IDEw
IHQpKQorICAgICJQcm9ncmVzcyBmcm9tIDEgdG8gMTAgZWxlbWVudHMuLi4iCisgIChzbGVlcC1m
b3IgMSkpCitAZW5kIGdyb3VwCitAZW5kIGxpc3AKKworQG5vZGUgR05VIEZyZWUgRG9jdW1lbnRh
dGlvbiBMaWNlbnNlCitAYXBwZW5kaXggR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCitA
aW5jbHVkZSBkb2NsaWNlbnNlLnRleGkKKworQG5vZGUgRnVuY3Rpb24gSW5kZXgKK0B1bm51bWJl
cmVkIEZ1bmN0aW9uIEluZGV4CitAcHJpbnRpbmRleCBmbgorCitAbm9kZSBWYXJpYWJsZSBJbmRl
eAorQHVubnVtYmVyZWQgVmFyaWFibGUgSW5kZXgKK0BwcmludGluZGV4IHZyCisKK0BieWUKKwor
QGMgRW5kOgotLSAKMi40Ny4xCgo=
--000000000000f945560645c1ac1d--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Michael Albinus <michael.albinus@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 15:19:02 +0000
Resent-Message-ID: <handler.79859.B79859.17655527299163 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, Stefan Monnier <monnier@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17655527299163
          (code B ref 79859); Fri, 12 Dec 2025 15:19:02 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 15:18:49 +0000
Received: from localhost ([127.0.0.1]:57924 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU4uu-0002Ni-UA
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:18:49 -0500
Received: from mout.gmx.net ([212.227.17.20]:51689)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>)
 id 1vU4ur-0002NR-RT
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:18:46 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1765552719; x=1766157519; i=michael.albinus@HIDDEN;
 bh=i0BXDmHF2VG3Za+aUwPSgrmjrKe2yuIN+JBshnbvbJ0=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:cc:
 content-transfer-encoding:content-type:date:from:message-id:
 mime-version:reply-to:subject:to;
 b=uEtAw7K6aJHwPsR9LAVX5lj9aANDDCEcjR5d6FFUTQC3B/YlcSZaZYIWVtPHsFeI
 5WgLT3ykQWRw53OE7aWeI2ntDpe7huIpHR24CVXFmlb8zptKeaPcYsjvAS57IinZz
 aPE+/oPeOeDX6+Q8CqDR18eC665tzgkbXjYKuGHMmxoZ0IkmXNFbZnO/qRuYeA6NL
 FMQJW2BYHYTgYQn4E8lItcV76koJERIdnJI8JcWua3WbpXDHhNx3LnwokGA4hFIXQ
 yPFQmHPlnChCJaD9KRjYeDpAzOs4lewZFAt/kxV2b4gHiG+3HbNr56nhAiiO+LOrz
 bBHTRwhE2oGWj2fJhw==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.37.61]) by mail.gmx.net (mrgmx104
 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MY6Cb-1vVU5C1KTl-00PmNj; Fri, 12
 Dec 2025 16:18:39 +0100
From: Michael Albinus <michael.albinus@HIDDEN>
In-Reply-To: <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
Date: Fri, 12 Dec 2025 16:18:37 +0100
Message-ID: <87ecozranm.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Provags-ID: V03:K1:m/4G7S+qJMJ+BxYc5W9jLrUsr0jhOBSuc0UWZrJE/dH7vzbRyIV
 SH9MsL8eXO2lW4u6qTuZwgXWWRrpS0+MAO9h5rRTTlIu11EGOGmK2frWA1icpEJDAsTY2aB
 q7EDbsh0/KHTL6w94x1ebFJNX5aR0A0nzF5suyXORzAC10PfWtT35//8JfXBmXvdVNeICja
 W77rMwoUuU+vzdsQYS9Jw==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:EnhgfTt8YK8=;R7ofK2z+ZuGhdZbfxexFVnvLRz2
 qVMqnK8HkROhqOn+5MJaZ5LFnSGY0JbJzUE85aQ2x24zsDUAfU3sRVimmL0LWQcJXFHeIOaws
 5OqldChdEF2jaya8ZPUBEY051aBz2pTn6XfI1hzmtDw5iDaAtEhxcDm98JA5UINtit74ZOEIK
 mf+tpWhmX6bPUje21v7bz5QPP0gHW/cx7Yc9tr2JBcCohLypIf1akvnRWvsH77Mlo1Hc9P/pL
 EqLOr42WG6LWqcnSVzTCWKlzXedjKDQKXKe2pMl4cYFs1qc91Ue7g/TiNR2uzYXi77ChlWvjI
 aNugD4DUgI69FxZzKRpCjQIzEoGIRctg81lvr9KLdEKRAd6ghHy+QaoWAkUOP4BH2aMuI2IL/
 oH8Husjj1sbf0bnSJqFeNssb4hEjOJY68htkPPXg3/pnxDGcP82UEQeZGnVxxBP3afpXaXgse
 Cvd8qvuIYwNQPQWVK8NkJWLjZfHQGnbqmZMtoy+czGmqOkozigIHEqOMJDe2VX76VL2IJxonL
 wNPaSI/KYKU4+i4t0lc+24QtNAo89SdK+aBbX2fYMJBqA4DpAx575IPnAi7LBQFLFPCNeibz5
 HogXdUJ7v1uOoPjm79EFvxk0EThEaT8WVtBLKm2jD9QeSqFWuD0UZzkt0XqNIlhpzdOH2tc7j
 s7QO3hUci+DP5j6lJ89MsrzQKAHcOxCsY5GQRWnN/FS0dwfpxgJCWkPfTPomZQbcYfGeULmKC
 ZR54TBi+Y+VVYvmzx/+5uv4W3bcKaoRI/UR9nRGGck/UpG/7TtQk3Mg7VuBs4Ct/HSnVIa0Yl
 jZVszQXdsvj9gvkaxgOIEIdL5omzKAn3EoTrA9cKiMvVu0167mQ/zPLQiadLmd1ycUxvvPfBZ
 BkKdcItPdnRToB1LEfLCHChm2C9zg+Bm25tDraEkMYRU12NkN1hd346h6MZrs/CS3KP5GVxwu
 H6G6zv9aqfVfDEE2YbfY+NUL6SsEYAFswZQNDQ1PBZ2YLT3sXcU3hoWzRItRwZLlC8N4+ImCE
 3Q121iBOss6vqHVz4tS80uetb2RUVuMTNRuNAW+X9o/prw7AuqaUyItA0HPaZSpgsHIXmIsAa
 A26p50JkK/vdEXx7vC3IWQUMsZzxZSBVn7JKeAJ3mOkewrm1n0PZ9XbpCFmnHxA8XRM7YKA9L
 1E207pV1+q9CC6jdOj2MkNzrd5cUpd8EAOoRsOFpe25kidjgx4zkyfGjJztmRFRl8TrMbnzvM
 u4ackBLmr618NHmDhcztuiteH8AqjDmeoIHn2ziFYi5JexK3VoSHqoJ9m7M9rpHkTWqw9+RKb
 WJRUl4IC2t1Kg6hSg49G2GY6b0tQeeuL2CfWwv6I8/u//9Q3dtXc4eAI9nw4v+L32ZOQhbm+j
 3iGsjd59OXibPfli4TCJZuF3C07ZTPEYtV4yWEMB6lKzM8gYwdj0qRlOR6/siK15wqWjQeDTb
 v4X5BG4cPJyto2G0465pPNNh3BdneFm+OqtoUJBazcaVsUM3/IxjfotxAwb1EdTnd074izHmD
 /yHx04Y62EC4yW3rdQf+okrPbhGpi/mm4n1qUwZbqhqupNhLvRA0ooGVO/LwOL3NfsUIkDEH+
 FM/b9Yyey5ucyDRqQBiBYpspZxSDEkvv3OsslmW5XniLzpNc1FY0q7yWqP3SmW757zl3nnJv6
 +wqc6N6Zn6VjbT4PcYGgNI8Ii7MAq5OmFFmZF8jh4TRqb/iJPG9n8hVZPHOCC9SlA57BUbD2W
 dnvSLnoFRWmo6e7TPhrFuaFCspMxj/vokB+M1d4O3/iE4PQyMz4OsSljXKxR3lZLm3KPbj0Vi
 ZFJVc9un5uMeLT/gjH+kjROUfA814qzjHZ5MXSHJHoEQMRLrhyFZl+z8L6Sxla7k4Fo6D7KpV
 +MU6CWyyEz0s9hy5jUL1bu4muoeFKDMUIZtBYUWRDK0E3Okoq5jfbZmDIybypEpW5VWglS8BM
 fRsJlGYDTR3X7+sxRwBsnQFddFr2P/Ep+46rAf6JIdhp2/HZUwQGs4HZp6R0Y6kLt2PQiMHzn
 E3GaendhJNt0zEybt7LbB6mMR7ktsdrBdqLv39DB9kwsYIW0MnW47blNYn1LazIzxIxbD5ssM
 /ofO7Zr6c1vhu6bskdyiOo4RELkd10mbCPix1zZHImZVAf2ddCLLWoAeC3Y3gLrm5UeWPxzI8
 OBfuNVWpjwLDrlrQkWTjhkdaH21PQ9fYRFl2Nr+Hx/qjEpUTUeeMiAMmRxKMgF0bstfc0Wraf
 ShN/TszXjNixzI5RduZePoHIxS8FhW172JqIuD5D1dEqSYhVvTFi6t1zKshmjbbB5Gqrkuf1X
 vughYT6hsSoP7wVtrqmgSYSdxJSG5LOzvAAf6YcReyTufD+bjiGAz9KZi172PaL/pxp3hSq83
 MT/bXLE1jh0Lx2rq3qNJzc5R7i5QYdngVmqwjbc2aHDdtc1aWLZjVrDYojT6Nt2phSNM34XLb
 KY/WjuC5fL79u6A+1LpNO48EreaJXAomrqn+UpGWOkeg8sMBI5CX9vXJIc9ToNx6cxEy4yeug
 hmyfZnAh3QW2PCXYxlTqku58fNMIqUu2qxgHry982yswzTGqDWW1F1w1MOOP7HTxHH2iO44QS
 tuprEGuOOW5k/MFlHperBHva5v9jENstxOFRK0cRxGuT5XrKOxh7s6hZVQQaxW+3MBXVpeXo2
 XvAR+sbe/s4Q/cOUMYdFzjx2lzEhHk6RIrWKehyGLb5dlvW3IwcsN6xYBeynHUEig0ZveDjRT
 A3CxI6hi0j7UBrmCmnEeFwBFPS9WmlSamRgLn9CT8rKsxm3SFiuBZiFhMpYGiywKp+D2X6eMV
 b1iPdc/CkF9JMy3R8s8LbmrKsSsdz0ihEyEtRg7gBsGERWECxmRiUnNwn3TA2G5oIZyUowkMH
 c6lbTQu0CHrVQNBOi/KMeYIn9jcUQkZwGSAe7+UY1g3XMRu674aTiGSSEmuFjWmgxBiiNKryA
 6vxUjL+MR2Ckv5k1DRdeUmBt1L96wiwiQ3EWCx+27M6GTtL/rVDn42xqf90iBzS/0l++AREcs
 gBooo8nAjiDr+XrZnDcPg8pbsJ8bEH0C/E4hH1fWqB2gVYvRoy+8c06t4SUUhzjpM8Vd2j183
 ZJcRo2eGjTh4bM3cg82V20PaWHyt80HyMZxPO98ilCj6S2rCxku1AZmLo+cjGDdVWGBr8kWIj
 1s8aL8aA4skpudpTRPPgcXe2GK3l/JJ7GGJqwU9mQ0JX+2f0tnlpKpsZ2gEWSJp17AaIRxIL+
 kjMZPhrcVJySYZzwyEoxZP+v9FiAGpXF0rPgqXAIuWrp0EddHmkFXuHWklJLG4mnGMECKi3HE
 6bPkPbE9bPjf9GubDbXAdcUTlOas79L9LccAWlUba3QdFj2ATpftFZoyU9FdH/z5vfB+z0G66
 ghqL/Ndkczp2ykC7qqfV0NDmC7ZtOTPAm+p+Ez1sgUEnvVGAQmPusoqU4gcj2CnRfBWE3vXQh
 6xPz0reR2ZpEmMKgl8GZUGwLMi5+poPucMQx0q8vK4tSnvELfixEWwkj8JTZfpUOjn6WpxUaN
 2kifXRunoVotJlo0eTlbHONKJr/hvLseggzjnkS5faf7vPyDr93h12nDR5s5ZhYdLuyueHcsn
 yvFICb48SzA3XQ59alN5FXx0yC+mSp2Z+NyvcOGNXfJGKLtmBDjbrew7NICWo3yuap4Hdmj4T
 WJjj9/P+NB6DLBS2TKf8wcVzYDGpr4ga0MMqIhUk4FW+2YXVK4J/T+rRrusFjZNSzoONPBZ8o
 pE3g8T84Sfq94J/14oYFDKtVK8g2/ElggS4FjK9pw31Swt09mWZzvOhR5n0TnlkKhkYkDjdRu
 ZRLyWgP0VJdF1MqN4bOxSHeKLo8FTR2rRZGA2E2ruTvvUiwiryGOaGVXqFVN/pExWL0R36ZiX
 0cicStPMZf+PfeI1jEoRN2zxv4T7GfaZzPUqD/lx5tHb6jrAoVc8wLNAzB8g2IHAWEivpIhi0
 NxqbRg5CqQaQ7aPpHGzoAC2esthFw4QtOUIP8HsXObnashrIm8mYyz+LVzmWCOm99J9iLwQ/n
 UYuG3fElV2Uq7CfPCqtyrp7lbR2IyhsbXkhNN+mN+oWqk5zgkTZ6a8TLCNXF1j6Dt+UWB8o0x
 0eeIRlo0EIotN3496BZxJtmek+2yLlTZ8hVAt0oBAXTIopROD70Ih3pPOAE11Tu1GVwqp92Pw
 GGtQfJ/8ADmm+HH8BNlCfBHj30wHv6Gn4JU1B0hsUD/Zr34xaVbJ/6budJxHiFN05JNxFkXtP
 V/H7sRHpfjwstIJyE/w9im9jldpAXXFkE/o9Qtfxnsqpesb/A1evWrd8oi9OTa75kJ9yx/QZh
 vvp5cmD7f6vMsuHB6A81fEWh3UTIS2Kvf7peOq/QpSDEx5I3jjmbLxGv9N4lVTW67Mp0/Pl7i
 Pju+7mImZ22cF1vZjxI10tHopid2hqUqY86baWKyArOtic+iVpvoIt0PBzf/q+Ej7kKY1itMT
 lpU/2YysZw2oCLTEoy8R3lXIk2pzyVYeOtZySUEZAlVzAC2qTJbGgT0NLSE4XFrohuQJXThQu
 Y42dOvqZwhij2ywJu1wK9nAlgLmEaZroBqZ8kUIyGKxA5ndTmLjrwBdiDCHJO1GdAHpW6f13p
 f4VklJ5DFTL1zoig+2Quc81P2BEsAwyOYyy1BSaSrFitc99o60Em0MzsccW/mrnBFokXsZw9C
 gxNAYvsrZDrU+vIMM6gjenC/R7e8eqg4fq8abBrdjDuT03L5N6oKgjqtQZwhOzfw2PKoPunj1
 xSMvbvcJeColdGAelx/mkDM9eycqbKVBEFA9+83RhZMlWN7ju/cqWRKRkMYfLpZpr5M/UMa8G
 fxpS5DM2D6W8tH+Dq+N11avBNldanf/X7YuekONZbbh2fHDUN2rTANEpd7UGf2ZFlyhTT0Rzf
 5Wq7in6yvA67hTqzgbHchq9GXBe8zoMqbPUH2z2vzquPXLzbNVSvbq3SB4hAWtb7dRZmIMPpr
 TUJkzmZjINdKt0lRQ7YLFeZcxJ1OPYkr5c/V2chGzy2Um8ZTYQNCDlQsw3MD/SkAYMuZ2GNjd
 y6gSpfinsgrYK1dN7glvcwHZRnygOSNqlvtkTfnWtU4pVjKj5Io5BbXikWNy8Tp5N/WT+mT3u
 j0/Xj+ErjS26jOxL2k9oh8O2Hf9zG6eP1UF1F5
X-Spam-Score: -0.7 (/)
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: -1.7 (-)

St=C3=A9phane Marks <shipmints@HIDDEN> writes:

Hi St=C3=A9phane,

> +(defcustom system-taskbar-dbus-timeout nil
> +  "Number of milliseconds to wait for D-Bus responses.
> +If nil, use the `dbus` default timeout in `dbus-call-method` which is
> +25000 (i.e., 25ms).

Nitpick: Neither dbusbind.c nor dbus.el define a timeout of 25,000
msec. It is rather the default timeout of D-Bus itself. Note also that
you mean "25s" instead of "25ms". So pls write

... use the D-Bus default timeout which is 25,000 (i.e., 25s).

> +If your D-Bus desktop extension needs extra time to respond, in which
> +case `system-taskbar-mode` might not initialize or related functions
> +might not take visible effect, bind this to a value higher than 25000 to
> +find what works for your system."

Same here. "25,000" for better readability.

Best regards, Michael.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 15:30:02 +0000
Resent-Message-ID: <handler.79859.B79859.176555337911797 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, Stefan Monnier <monnier@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176555337911797
          (code B ref 79859); Fri, 12 Dec 2025 15:30:02 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 15:29:39 +0000
Received: from localhost ([127.0.0.1]:58008 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU55P-00034A-5N
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:29:39 -0500
Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:58612)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vU55M-00033e-Hz
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 10:29:37 -0500
Received: by mail-vs1-xe2b.google.com with SMTP id
 ada2fe7eead31-5dde4444e0cso461270137.0
 for <79859 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 07:29:36 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765553371; x=1766158171; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=1J2FRsHVT0/NJ4G7epk2jZwJLWhr5mAo3L5dTZdUwjU=;
 b=YCtqFMOet1lyAyaEKQqujTuMOBuX1wcZ0fN4a7bFr4gQyzFn5peqMDucTxxjGYk9C2
 4iV/iUqL48ns2CatdxJRh2UWVwp4aou5zlXQrUOEhKbcMLmEDgxTziMX01JXSW/cTEXG
 Pvg/GFoYgW9sEmQbtnjtw4dpcExRVzRVdZgD0crbTUAejE9PSZZxAm10LnM3TOiAi1Dk
 dKE9PjL8XpVDzLG0oM1ykdbnPQlb+F0ZBxYD04QSj2IKve+m4UVhePju7I4HTKmymADv
 Ahb7GWVUYJFwoGdDe7XeLXc7d/jvsHFRiWXuNsv2HK/ty8gZ3z8J6FZH1VIHC/6+Rat2
 IjaQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765553371; x=1766158171;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=1J2FRsHVT0/NJ4G7epk2jZwJLWhr5mAo3L5dTZdUwjU=;
 b=ee9pkrz+iZ2Oo1EmK4T3V4NXmN2b51DoPNquUYOhOSakzTDLB6LNb5hExCYudLXU3A
 EhywJEgMqWL9VsmrtwbilF4V8wZVVxQHqrDOgPux30OwLUeEwR1rN9mBz/u1MWZ2v0zP
 kYvf2L+0k5AfFgZTRhko3hlGl1nr56UvnU+vndjtx7XDAZbzQnHgroeoSQwNc7CzPSuZ
 tO0EXce7C3j4cFz9gIjhknvXK70GC284U6QtvrU7XXbBO+ZKATee4DTw0LrVjOOomFmF
 bS5gM+oJXTH/xQpzO8S3Pfb+l4GvobRmZaGsg1aZDu1xLAM5c5Mg5t9UcsEW3Dle/XQP
 K5LA==
X-Forwarded-Encrypted: i=1;
 AJvYcCXo2Op2RKlm4+5h2KSBcA8OosIS30wiC5gsyWsY99G3UTGU5WsJ6/TbnhlT1Y4z0ad0tunykg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzUoeT5xFw2UwsUTVE9RMyAibnpV8za8q0AxqBFX+0KCLgGFYJj
 5w2SciT+IluxNK6WekK/RdUd3yDB9xc447I/dyNJA78y4SNtbR8o8k19InRVlGdVkHSPrQzctMJ
 WcRM6/MyBGGfds2v5tQHk7AdS6fEp3Y4=
X-Gm-Gg: AY/fxX6AxT8odrbylDtxKZD1vuZZoixCrHEaYhcU5QWPC7OPoKn+DMwNofDg/OS672q
 pWV/nvUCoNeWdAqIMRobw2E7QOBLX/jhjw4OV+rdG/VGEKbyJnjEGu9P9bCFNfzoKP44eVufNso
 IG3nBqHSt0lm+xKgJJaThsngVBE5JEDejyTLhxFtevr7HMflaKiR+FRD0xmyH9TX95Or9NcIiUr
 uPcdmUg11/1AFivk6+Jvh1q6Rd3Si5Lk5HDDa0KbbNbZTs/0mywg7PmFIT9hcRKjsPNkWmkPWgs
 u1+4IQ==
X-Google-Smtp-Source: AGHT+IHMmHUM2y08Sws8s3dEYrYTtHttbN5ZHW3oEUmW6FkiDIUqBpGmZ7h5ryWTUTrQOA/Sr35WjkblgmaE+IzSc6Y=
X-Received: by 2002:a05:6102:4a93:b0:5df:c390:ef53 with SMTP id
 ada2fe7eead31-5e8277e758fmr793401137.36.1765553370681; Fri, 12 Dec 2025
 07:29:30 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
 <87ecozranm.fsf@HIDDEN>
In-Reply-To: <87ecozranm.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Fri, 12 Dec 2025 10:29:17 -0500
X-Gm-Features: AQt7F2qiFxhlahlnO5SFTFckz0uWndrnxt06zUqcC31jg7x7ogIlFJSIXM5ixzQ
Message-ID: <CAN+1Hbqv2sc2ge0cMsU7zftawJ1Vpt==1tvEVWj7W3qi+eR_vw@HIDDEN>
Content-Type: multipart/alternative; boundary="0000000000007dd7520645c2edce"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--0000000000007dd7520645c2edce
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Fri, Dec 12, 2025 at 10:18=E2=80=AFAM Michael Albinus <michael.albinus@g=
mx.de>
wrote:

> St=C3=A9phane Marks <shipmints@HIDDEN> writes:
>
> Hi St=C3=A9phane,
>
> > +(defcustom system-taskbar-dbus-timeout nil
> > +  "Number of milliseconds to wait for D-Bus responses.
> > +If nil, use the `dbus` default timeout in `dbus-call-method` which is
> > +25000 (i.e., 25ms).
>
> Nitpick: Neither dbusbind.c nor dbus.el define a timeout of 25,000
> msec. It is rather the default timeout of D-Bus itself. Note also that
> you mean "25s" instead of "25ms". So pls write
>
> ... use the D-Bus default timeout which is 25,000 (i.e., 25s).
>
> > +If your D-Bus desktop extension needs extra time to respond, in which
> > +case `system-taskbar-mode` might not initialize or related functions
> > +might not take visible effect, bind this to a value higher than 25000 =
to
> > +find what works for your system."
>
> Same here. "25,000" for better readability.
>

Done.  Will be updated in the next patch revision.  Working on the
documentation now.

--0000000000007dd7520645c2edce
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Fri, Dec 12, 2025 at 10:18=E2=80=AFAM Michael Albinus &lt;<a href=3D"mai=
lto:michael.albinus@HIDDEN">michael.albinus@HIDDEN</a>&gt; wrote:</span></d=
iv></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">St=C3=A9phane Marks &lt;<a href=3D"mailto:=
shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt; writes:<=
br>
<br>
Hi St=C3=A9phane,<br>
<br>
&gt; +(defcustom system-taskbar-dbus-timeout nil<br>
&gt; +=C2=A0 &quot;Number of milliseconds to wait for D-Bus responses.<br>
&gt; +If nil, use the `dbus` default timeout in `dbus-call-method` which is=
<br>
&gt; +25000 (i.e., 25ms).<br>
<br>
Nitpick: Neither dbusbind.c nor dbus.el define a timeout of 25,000<br>
msec. It is rather the default timeout of D-Bus itself. Note also that<br>
you mean &quot;25s&quot; instead of &quot;25ms&quot;. So pls write<br>
<br>
... use the D-Bus default timeout which is 25,000 (i.e., 25s).<br>
<br>
&gt; +If your D-Bus desktop extension needs extra time to respond, in which=
<br>
&gt; +case `system-taskbar-mode` might not initialize or related functions<=
br>
&gt; +might not take visible effect, bind this to a value higher than 25000=
 to<br>
&gt; +find what works for your system.&quot;<br>
<br>
Same here. &quot;25,000&quot; for better readability.<br></blockquote><div>=
<br></div><div class=3D"gmail_default" style=3D"font-family:monospace">Done=
.=C2=A0 Will be updated in the next patch revision.=C2=A0 Working on the do=
cumentation now.</div></div></div>

--0000000000007dd7520645c2edce--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Stefan Monnier <monnier@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 16:05:02 +0000
Resent-Message-ID: <handler.79859.B79859.176555547320551 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, michael.albinus@HIDDEN, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176555547320551
          (code B ref 79859); Fri, 12 Dec 2025 16:05:02 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 16:04:33 +0000
Received: from localhost ([127.0.0.1]:58258 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU5dA-0005LO-Us
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 11:04:33 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:25947)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <monnier@HIDDEN>)
 id 1vU5d8-0005Kz-GU
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 11:04:31 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 581014419C5;
 Fri, 12 Dec 2025 11:04:23 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1765555461;
 bh=BV/ED09RmLfoe2OnY9nIvmya8TUSsB9A5U0eBpaG9Jc=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=c9qx4iDanZpW8/sx0wGDIGyEIEEid4FySPa0Wu+GxiAlnj1cCnYh7w88J1I/slryG
 U850zGdYfe0DQRHs97zo41L/9OLakC5YGNkj8H2bsahtk9nYSsaB/q//o9/z+j31ke
 L8l2tIuHuKD9s9HVO00g72Yb3AWwLubYesRhy4mrRzZSYwyta4jDjB98SWDeOz38ym
 BDmPYYooOCrHML6JGPhXu1+jv1wTValDoidN0okd3HHCSSvx5/Ns2qS7CDK3EeNxpc
 oge3XC1R7WF+PUNF7IlPqxcOXf+fGWCR57I0vRECXcOMst+VT0x/ugXk+nqMGkvnm6
 G48uZ9JlEbUZQ==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id AC0604412B4;
 Fri, 12 Dec 2025 11:04:21 -0500 (EST)
Received: from asado (unknown [181.28.45.30])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id C6183120A45;
 Fri, 12 Dec 2025 11:04:19 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
In-Reply-To: <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
Message-ID: <jwvwm2rpwpm.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
Date: Fri, 12 Dec 2025 11:04:15 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.109 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
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 (---)

>> >>     (defvar progress-reporter-update-functions nil
>> >>       "Special hook run on progress-reporter updates.
>> >>     These functions are called with two arguments (REPORTER STATE)
>> >>     and their return value is ignored.  STATE can be:
>> >>     - `done', when the job is, well, done.
>> >>     - An integer in the range 0-3 (for pulsing reporters).
>> >>     - A float between 0 and 1 (for numeric reporters).")
>> >
>> > Could do.  I'd prefer avoiding type-of conditionals and perhaps it could be
>> > reporter state value.  I'll take a stab at that.
>>
>> I think an `integerp` conditional is clean.  It's Lisp's way to mimic
>> algebraic data types.  When the data type is more complex, we use
>> a heavier encoding (typically a `cons` cell with a symbol in the `car`
>> that stands for the tag), but for simple cases it's the most idiomatic
>> way to design an API, taking advantage of Lisp's dynamic types.

FWIW, I'm still bothered by this "two args, only one of them used at
a time" design.  For me, such dependencies between arguments is a code smell.

>> AFAICT it will display the progress reporter in the taskbar even tho
>> `system-taskbar-use-progress-reporter` says not to.
> I'm guessing you haven't run the code.  I don't experience that condition.
> If you (setopt system-taskbar-use-progress-reporter nil) or set it nil in
> advance of enabling the mode, the hook will not have system-taskbar
> functions on it.

Indeed, you're right.  But then why touch the progress reporter at all
in `system-taskbar-mode`?

> +(defvar progress-reporter-update-functions (list #'progress-reporter-echo-area)
> +  "Special hook run on progress-reporter updates.
> +Each function is called with six arguments:
> +REPORTER is the result of a call to `make-progress-reporter'.
> +STATE is the symbol `update' or `done'.
> +PERCENTAGE is a number in the range 0-100, or nil for a pulsing reporter.
> +INDEX is a number in the range 0-3, or nil for a numeric reporter.
> +TEXT is the progress reporter message text.
> +SUFFIX is an optional string to print at the end of the update message.")

I think we can remove the TEXT argument and provide
a `progress-reporter-text` accessor instead.
[ `tramp-progress-reporter-update` could use it as well.  ]

Also, now we have 3 arguments for the "state" since neither PERCENTAGE
nor INDEX are used when STATE is `done`.

If we merge it all into a single argument, it'll simplify callers and callees.
E.g.:

    (pcase state
      ('done ...)
      ((pred floatp) ...)
      ((pred integerp) ...))

instead of your current

    (pcase state
      ('done ...)
      ('update
       (cond (percentage ...)
             (index ...))))

>  (defun progress-reporter-done (reporter)
> -  "Print reporter's message followed by word \"done\" in echo area."
> -  (message "%sdone" (aref (cdr reporter) 3)))
> +  "Print reporter's message followed by word \"done\" in echo area.
> +Call the functions on `progress-reporter-update-functions`."
> +  (run-hook-with-args 'progress-reporter-update-functions
> +                      reporter
> +                      'done
> +                      nil ; percentage
> +                      nil ; index
> +                      (aref (cdr reporter) 3) ; text
> +                      ;; suffix
> +                      nil))

About SUFFIX: grepping through Emacs' source code, I can't find a single
use of `process-reporter-update` which uses the SUFFIX argument.
So I think we should plan for the possible removal of that feature and
not pass SUFFIX here at all, so as to make sure the hook functions are
all prepared for a future where SUFFIX may not be provided by
`process-reporter-do-update` either.


        Stefan





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: Michael Albinus <michael.albinus@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 16:19:01 +0000
Resent-Message-ID: <handler.79859.B79859.176555628624753 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Stefan Monnier <monnier@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.176555628624753
          (code B ref 79859); Fri, 12 Dec 2025 16:19:01 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 16:18:06 +0000
Received: from localhost ([127.0.0.1]:58396 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU5qH-0006RB-KT
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 11:18:05 -0500
Received: from mout.gmx.net ([212.227.17.20]:52213)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>)
 id 1vU5qE-0006Qb-BA
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 11:18:03 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1765556274; x=1766161074; i=michael.albinus@HIDDEN;
 bh=HS8s7E4UGCSBHLkaU0iylLddZN7SFKa5hLsKfPttCuw=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:cc:content-transfer-encoding:
 content-type:date:from:message-id:mime-version:reply-to:subject:
 to;
 b=OAhhIzyaW4hXSMyEEsrIkLL3xWIiU2YRirFEocK5qWvnBdIHJVdaLJ5rgdm3HwFE
 r8573owMQPeVDa7XZFjAgdukV9bvzf8+fy9dJZ1fo9zWH1Jf0DPIT8pePzk8VfxhZ
 TATrDdGEzO6gx5A2I07Zy3Pn1BH0RtyASLLEJwtW9TP2jatfBKGTbrHmska8E0vJN
 1B2fDtW0Xvyr+Cr2Zz2IZRWOJPel/N4IeUZEYLsBE1D/yfcnPiIw6RUhBeGDfFt23
 R+3NkVlax8DzyjL2z8h402qp2/ExlF43rb7eJvFVp742sPplX2TT/8aYgyi8Dhsiw
 1FqkGbH9w79GXVdAeQ==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.37.61]) by mail.gmx.net (mrgmx104
 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N4QsY-1wBeP13vfi-00sUDS; Fri, 12
 Dec 2025 17:17:54 +0100
From: Michael Albinus <michael.albinus@HIDDEN>
In-Reply-To: <jwvwm2rpwpm.fsf-monnier+emacs@HIDDEN>
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
 <jwvwm2rpwpm.fsf-monnier+emacs@HIDDEN>
Date: Fri, 12 Dec 2025 17:17:53 +0100
Message-ID: <87y0n7ptce.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Provags-ID: V03:K1:cfKeW9aEGWV3ilZlbCrHLfa2A1LkLLqWDla+J4b7wYqXvw7Kozm
 BOZ2jnG/SI3JaFKjLz/UbVGAJn15rLWDO8jEC/faik9mD12F2HgeKYeEDY9ugU19f4x8C0H
 IgMFv1JZnugqVM72Iz77HijuIZSpbD/SaBce4dfZtv1D2otp16tAizmU1GVzw0SbOGyKx+a
 0fU3i3Fc+W+hVe3449kJg==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:YJje0KCCszI=;qAhf4Zi3jEqPuo2lezc5RADKisc
 GnhOPU2vhU4nJf4dqAhvcuxHXpsJ6gsGIHs/MoCkfFtSOz+Uv0SH9NGm9QdFPBbby40s9q7Np
 iAwxQ0RcalGPMTXAaJsZgBXHCgfUhEb8Sk/UwHZoNKy0AilJqXJlDde4HM+2CgL7je2DJ1sW7
 /drWY4DtG6taXJd1t1ALLkbBQB+tDQAbbVlexqlQ6QO0JfDmga1bzzwq+fz+RqwhsjZj53Mbh
 M0G1SxjklsBfWRmD6rOFg+igq/OwDPK08PGx9PT1tWcnq//1v4EfIilusuNW+S2r0I0B/f7M9
 P6sHE+wTddNFffnFvZD+Tn4l2lVyR+thltomFtYX7W872zISfYQABZAGmMsh0Qvuiy2ptu5Ja
 zhXA4TdbN2UFDxSO7ER4UAZgmn2+lquG03JQu1OUJeHFC9W+jta8AwKE5ZKvoWrRyM8R58/9b
 7VJAi4rdH4Mxfk5BY3c5yfzO9K7VgUk8O3ntXRkO3zFhdJdIgayN8upHCangX84Ahx6z1mzxj
 tDVGpfzwT5otsYHVoEIq0Ic4DZlkgn5ECFmwE35p6jyuhzY27w4nMIVRbMbh386ftiizyS1n9
 jngs9PWDuGJcWhgc5kp2Loc+PrQjyep7KsEzwj2apj4WXPb9i7C0e8IbPQPrqwH0pc/ZeytJ2
 q/XZ2Ycaus7D+K87y13QTxrLWo0VfsZZvOnG8lZttC4I+6FB2P8UvQD6ClvldlzRo6HIag7d1
 nO4dh3O23BvLFi9857t0cEecJ74prAEvxJqKzS4x9WOH+VjN+j83CeCMDKeZvH8MuwrMK0a/D
 RBy/xhl2zGwQefRs0fidU0Lsuq6q2bD9KlBRu/TMmc7SdXV2tSsYby1WMW9729sO+YhG2fwt7
 fHHDigJxaM58/qfdvUjWLzz/I8QhpNwWwuUD176h6NZ0S+v3AO1fxEOGT0OVd+9cZj019tawN
 4Lhhw69lbnDqMpSh+/kjB4ao9Z31Ydac7vWIbzzm48QngEH7733g7r5hxcSjmS0TEty2Dsg/5
 diRUB3eKBQ2pR8C0AkOqutK3LdHSCGfOVXoj0DLjTPPyiEwQljry/p8ShGSLGkcqeTVPwEpu3
 yoRKOhR9vYebiZIW1PZIgLSoTH3Ci1A+Q6PyqR1vqcHMe/+BDVbPJe1AEl9Lxb8ev+5Tl0Tp2
 by6UrEJGtCyrjxvSDaajSo7G2MieFsaAL3ef+f22PVouS9G2jFpmh/aYfyN50rKSsbq1S5U1K
 qAguyL4SCm+lLeaeadhSU67QCf6AMW98feAjA7gFCJhXS1n6wjpxAKJiWECJvQfl6r82jKijb
 vpGBSnjZ9Z8hRcwuDhPmzMWWN021YTOExF2UMHd9zdNvKtzLe/LM9POFr42mK6As2AXSZDup1
 57r7zylJSCEDurRKZtDHM2X5A1S599xzpHxi93c4ny8NcDNuRwVDUlJK9VdyBc8pf5YrTCNeT
 QMr6iEQFVXBCdfcErwsGoLWfw/I8d4XS7dX7RO/qJEGH9oM5Wi5GOGnVoGKlCY32QNTAcrwWR
 Ivq0onBWTqpTGGDhZsCBvKHNCYVl8NyHJRAgiw55Cs+UeTithdu/D/3bk4pKiPuHMH9lxVTfw
 CEtZWtEurtxIyE8fEcnMJK7U9TsidaHDwG7ND+0eczEBcvX39QkxC6Xcolx7WK7zqp1iqdrrt
 IMoZJdF44niJ/4gK0Bu6/H9OdZV6jKyGs+pcmjd07XDH12tt7UUGctvsx6gLDkFyF1AnKmh1H
 Tje7sQiqlAST6XhjMqTcJN9f0/3VaoRZH6MTiHz/AXrMLaUtsrc2RbEDs737nkwhXoMh6yMuz
 vcLByDaEeVL2haTPfNZCzoN2GJtGXKpY/eUNTQ0387OUl93ttoqwAoMi8/HaL5jIV+A5bSCgU
 UBxeyrrboHsKLEnX5BvQ7Lw91kYYHa0m3TDbSET9vIYJE8vC6bjCzpGwbCvK2BOU0JFeJkNZn
 5gUHXYlW4v426aRjIpL4XNgiZNypAmgAsr6FDLUhGFXi3HHVHf0/yCwBCxyZs0h+Hn+n14wqf
 k7vg0a9Bkyl8gaAiTmXex/G8+MTaWrt+gJwOxvfAtnOjpHOvIzdS8XbX1MtopixKxfaykQuxM
 h+y9mWMAekKwRYa9Eqz6Z/IwrdCtAI5nBgX9+puKyWLobWDWQe0fvj0wxeZvrdi2rdhbw/6Oi
 hPwl077jMOkwPxKP+Cdcz0mtoqtfegiTWJlq6OOVowY6L6nhQOs+ddgc9fHa+757dA6rjpnSh
 yKSSEf6JACMooi+2Udu0FmZapnUD6eKSARIaxoXQ9YuM/tkKQrHT8ZukEvskqC2vEkh2lrl/W
 DglVrOC+kIDAEKzwz64w8YsLfCeAfwHeC7x85s1Ta8XfiYUJLyX6Ja5AACV16iDBn+M8PLa2c
 NlARo+8eMaesIjftITnWOm0XwlYdmF1WmzKEGeDFIqEst5cKQKKXpbmvRsWMujoHaNDrqMtIb
 R9gb7DNc5yrXW2oZj5UFd+iJYuFqK1gfzdqk8ZskLvtxq61S9WJtkpfqDi8FAbWT+iJKjfMWw
 MkF/pD9UfPjsWw1dqp8lDsB8lko85EThoA4Gvr9D7kgFaSXvPn77Yw7IObuq91EpX3LITDj/Y
 8JpdcWsH0AJB6eLFgRO3WPCUG1jjLNNBnDqoK6MWk82+cJ+QFPDFzu0CI+GxYLBkCf8CmdHeY
 ZVZzzctkubLaWNfbM3HzpdcPGmEjf/9pJtIPsYBNKrz7NpyBNFuqljyHnsq/L4EwEtv1A3i1h
 0el5JVVyQ2Z08Hh4OkUxiygrQ67cDFAjaOLDvDk/I3t50WzIO90+XrnDtonayZVG9u9p3aIpf
 s8ND6TgbQkfL/0jKOQa1xF6qUSEYfhToge3hjWWCIrUN/Q+wIWU5Cjt9xvSSYUin52G+ZUfm9
 fhrNUgRvX8Dv0RjVD86Nq1xzSd5dymgGe0X1KtasxlPrOEN/3b74Da4HUXFVOoatIUOYYOCKS
 BL5N8kFpBh9stOdUsJy6pifF1hlTMmbE+BfKN3kzQV/NE+wZl1ShWC8UeJm9pk78UJe+sRruY
 x9NgmfknbfLXe9lU9fVvgdEMe78mk1tpg+KJhsEpS7rbH1OJ/iocIqlx8qzpfTWWseFyLIRPN
 sjoC7tp31mqV8ULFQdM9XRm5KGXwFDv5HeEbm4b3RfYVr9SQz4zQG8tEcIDJaDCz3UlJObygp
 WuqruvG8dZAhjjSiDez0wBdMMWQfBn9H1QUmCAKqKoAR3qChgOyAKtLAeIQNvqbNhF33E0asJ
 4fuT1yNHU53wXybY1/bJ+lP03YWR3H3b4KU70na5hLklGVW6n/fHIOB54x1P7pPU0bZCcBNvI
 rh2jcoWh3gkBOPq6WkRPKD0FHpMBwfmdVANsllSgfJkZzQPUF0g6S8amTUFKhHRfAQoZ3qzOR
 lHouNLPkTxhY11QIyshA+Tc5Q1rOYJp/H0E8CvY9+P681Fyweu57C9VOB2iw0nAhBFYRommrb
 bS1F1WzNlhxiLuBfW8A5AIubSAbkd3OX6+VTSMQKB613O0Bu4fUqzeF3hVVEP8/fmzPm8uOC9
 i9KhmUS+m6xaF205sBZ9PE1HSLgo471hrLMRgvjkPM28d2yLc1l+1cDGjE97bhRLUwcSTiTbU
 zUvtNNZ4FTnNBuFJwH17Zds/KtvAak4kzCAn9ZTyqL9BpReQT7akYMSvXLx23doHbl64zKCoC
 qWEFVOwcuCfbDYuFX750TNlgtNcsZ/kp0e/zgSPEwt22oyQVYAzfPCoMS29zGpriC0vQ6sqm9
 Fd5EMz3znUecCyia0XATTf9u3UEzSpr90zwjXtpVIvlH3N734KUUBzLDUqBwKurAxYhBTFrCQ
 d93fDs2eAipBMs1fCinxyNlf85MR65NnL6zmijlVwKvWcaXDRg5tdyLYYP3eGWl6+6HPK4fXO
 s0SWWNaDJQtBQ+qDhLMGCN66cR8z80sSVMPiRaH4Z0z6ekUi99K6k6N8EN5VowegHaTWmpphj
 KoRWNewHS2nkqlLz7l6Kmh7a1YkTYcVBXlyqGrKbJLDgAd/utsItj4i+J5gbMSAqfZ/oneFMP
 1ahL7/A52uYcqxUaeJSPj6iZsdxHHMN1xxRvEA+L4We2T888jn941un7jLsTgUtFGdj4IXOHq
 VhwjcYQfnQ62qbYFkFPbiX03X3eojCI/fEu2/VWnkE3eQ7p4TwfSwm1EAY3ZuyeuqBt6+iKtt
 Dxc6J6uT57qk4iVdj4lBp0Yk+JTFG/N56Qpq6+BeBppHRMNbts1ytheU8l76llkI//euEmyVe
 bPc+3WGvWbUx3Xw7DoJcxK1LF6SJUBoPxfKYxlCQnGIc2q4EpPiqXsyzgAxAnDw9bMup39Lsd
 6t4M2EC0j7XbrauYlmzKsob50BtnmC8Zz9k1etA3j6T2kUmnSvb/gi5yUVKWbDQkrUDXSlO6f
 H1oRorGsXYGE3A/PKqgvSoQrGASewsOxUVk4lrAhli/x8kohDCZGFoIWMWipv4FkBGUtijesf
 4YT20SoNtYWiMzDo5MKZ6mM4TbE21dEoth2rebiMM42IL5acl9dsEKcYDtm1XrSAHiiloQ48S
 RKdvyo42xftao8uNvnyJluk0cRLlOoTwB6wb0qGigbM8gmbTGrmPF05IFSG5vutQJxdKDnc39
 7Zw/hPgbfsXZlSFYxxDUZw9Z1r67bkIqmXXREjsYnUgfjnAawvVOjpzeEDA07o8dJuvtMA7rj
 KlRQ89VZsbOELOipAjBzHOhjR9poZi1P7E8Xp18Q8bIQUUYDWUxE9VDgNOw4GPFjaGXXRJXxv
 WWU/d4DZw5+CFr0k5w/FnwNmHtkGRgHhoKWV54xcVDu7SywXsZwSMiB7S6/8xMMqM/y4AZCvl
 +RbQ8hvofIds7DbjVXYK/kFlnip6LDwZIJQh9yNE2x7h2ONmMli9ziPlHve3Y3EA1MvRDECpr
 M+LJk0+K26OXoEmkX3t8ngt9h7dqgwvlRE6RxzgxQMkK95pkwiImGTwJ7iIz9sUaH3aqnHIAs
 dbClTCuL4KyWYghFhFwpPU6ek7NrqXTs7kHWvf+h5iG8Ae2XnSftJrMe4QdXruGA0cev5T1d8
 X3Eq+bJAnXIMVMa/qU/IqGYOmBziwWHJv5Jylj+bKjghxeYrEu68Ps3zMPRp4/pFbD88jnT07
 ENSh/kHpBfjbS1ByBsrDoJXraDxXrc67mODR20
X-Spam-Score: -0.7 (/)
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: -1.7 (-)

Stefan Monnier <monnier@HIDDEN> writes:

> I think we can remove the TEXT argument and provide
> a `progress-reporter-text` accessor instead.
> [ `tramp-progress-reporter-update` could use it as well.  ]

Modulo backward compatibility.

>         Stefan

Best regards, Michael.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#79859: Add dock-mode for system GUI dock icon support
Resent-From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Fri, 12 Dec 2025 19:42:01 +0000
Resent-Message-ID: <handler.79859.B79859.17655684795905 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 79859
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: 
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: bjorn.bidar@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, Stefan Monnier <monnier@HIDDEN>, 79859 <at> debbugs.gnu.org
Received: via spool by 79859-submit <at> debbugs.gnu.org id=B79859.17655684795905
          (code B ref 79859); Fri, 12 Dec 2025 19:42:01 +0000
Received: (at 79859) by debbugs.gnu.org; 12 Dec 2025 19:41:19 +0000
Received: from localhost ([127.0.0.1]:59595 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1vU90w-0001XB-KB
	for submit <at> debbugs.gnu.org; Fri, 12 Dec 2025 14:41:18 -0500
Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]:48335)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1vU90u-0001Wx-6e
 for 79859 <at> debbugs.gnu.org; Fri, 12 Dec 2025 14:41:16 -0500
Received: by mail-vs1-xe2d.google.com with SMTP id
 ada2fe7eead31-5dbd150efe8so591487137.0
 for <79859 <at> debbugs.gnu.org>; Fri, 12 Dec 2025 11:41:16 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1765568470; x=1766173270; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=AE3KmXFRCMYch6C1D+aJwPKWGGaKpNpz14xSyUk9LD8=;
 b=O5hXUs772WitNRRiWWwT0VpJ4mNDlnLIAkPQXnr+Nn777MJCSAkQDvIYKbHjVGJ24H
 HqMUPqRVhJ8HDoMcczvd8AFII2jMUydeb5Bz8aeJyK4ohsJKtLrbE4hSqoai7mQd6SLv
 E1Dsjdcvdi45oE8/NBI7k/PWnQmAtgtP1Vm2vbrPSf+r2+3cwcgYTg6jVhAr3MZLtyI/
 yf2BAVfY+RDpG0PtMJxi6JxE5VcQPECvRbi9GE9LijcttQFI8jgpuUtn/EZfP4oqXckE
 iTVZOeX7WBp6eO2ghzLppE35x8DX/7BFD5zkRqEzU8tUb5YwHkOy9XZ0PAVqCoXg4tAQ
 dDOw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1765568470; x=1766173270;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=AE3KmXFRCMYch6C1D+aJwPKWGGaKpNpz14xSyUk9LD8=;
 b=dVTYh57m0rjWemR2d59TEOuYxBgyKvD3l5YvU+2ejGUjDpQpV/dfohXKU96g3o1gme
 83O58rDpvZXxqsPEvLUp333/tjc0jlHD6PuICg8oLX3rO0xtN1QsHnVXbCSqZMJUJtI+
 37KvEb7Xh+hqkpnfLOIJMNB9a/T41K8kRkFbQ/tMuyZvii7MAfbuK40shjJmWqTaNgAU
 eYGBTp3EF7vngjR3GgVHJpb+8aDiNbirkY7E5Ui620GJYaMPOb4LpRSWbEyuviaXLtFx
 7ZaRsCYGDGjBz3xygLbGF8sdWtXtSdpRmK2XJzVtC0EdBra1pp+90makSiOvD7zUe+5v
 Z6bQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCXfUxaGVw6V5JebfV2OulU8y+nwnEiDiK2dIJaeYvFldDb3Pzd46SPcK0TxJ2Is0Z0dQx7Maw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yw1xzyrp7BiDEWwzNM2EPmdl7XD7M3cmyHiG7DPVS5oS+RWJDC5
 ku2yMDAvhkb3Be0GxWiNy9ryV6EXdEffm52ChOHd5DsspeuUCRTLmxCGXPYwH0Z+/nyBiwdVOlw
 OyrodOv5SSua048GyWPvS8FOVWTK8M6c=
X-Gm-Gg: AY/fxX7RCHJSHbTi5t+6oPr9SeOaCyPGV7LspK3Xyz+fkcg4RhsOMD5HWUa91zYep7H
 Zn7NcCbcFiX+1GP8qjEvQ0+/0sOqClIli/TASzj8UP7jG7zhMGjV+E0jwTks6nrP0ANOUIIy3tb
 LrJdwrA0Wiy9+K6kT0e+j2Ex8UnPEQVFtICXKuVEyyCnmJYAGDqvz86sNya6cnmNsgdGuEcX0cs
 vMp3hVsYUbF+cwGanaNndC9z/xtoJX4sQ1mwPA3jZaK9RILvdH/wmgK4pgj9tEbvGChQ5QS
X-Google-Smtp-Source: AGHT+IHn7M+BfcwH7NA/5U17X/nQXDFpwhXoEitwyhJ4DzJysDVrtgi+jN2cmuX3iPV2cRi3SETmgqpwLqTtjv7WNCs=
X-Received: by 2002:a05:6102:5a89:b0:5d7:de24:5b3e with SMTP id
 ada2fe7eead31-5e82748ab60mr1122170137.6.1765568470342; Fri, 12 Dec 2025
 11:41:10 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1Hbp9e+6Ra-NP=XA7pPFYVEPaxiv=fzvT9UnRv_V51tM7xg@HIDDEN>
 <86bjkxhuca.fsf@HIDDEN>
 <CAN+1HbqXr9krMs2BuGyQQ4R2BqoeC_r0u7gfM8=Z0ehqsqJ6xg@HIDDEN>
 <87pl932wqd.fsf@HIDDEN>
 <CAN+1Hbrh4g3i5P_yUzNnDR2Z-NuDdyy=e1iB=s6zTZD-KTu6HQ@HIDDEN>
 <86o6o5ba41.fsf@HIDDEN> <jwvfr9hw4ga.fsf-monnier+emacs@HIDDEN>
 <86ikedavlh.fsf@HIDDEN>
 <CAN+1HbrVSDUbGv6k-ca7zKYGZuxRSBW+PUYqb7yVfnYsCv=VoA@HIDDEN>
 <jwvfr9gu2jw.fsf-monnier+emacs@HIDDEN>
 <CAN+1Hbq8zw0fK2uyoTbFE0YrSgbYbC4Nz+-SU5-mNWXhmjNR6w@HIDDEN>
 <jwv7buss9jh.fsf-monnier+emacs@HIDDEN>
 <CAN+1HbrmnmBJv9NbNnZH8FLkd-OOExgFXqHrtXvBbVugU0B9GA@HIDDEN>
 <jwvwm2rpwpm.fsf-monnier+emacs@HIDDEN> <87y0n7ptce.fsf@HIDDEN>
In-Reply-To: <87y0n7ptce.fsf@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN>
Date: Fri, 12 Dec 2025 14:40:59 -0500
X-Gm-Features: AQt7F2pXYolI2uoM94DSwMXjGJEDuxJi8nAdS7keRCYUidY5jrUqL0Cfru8yiIk
Message-ID: <CAN+1Hbq7aKgByHjWkw9Rb-B=AzakhxtVvnvbdH2hg_ryKfmg=A@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000805ef30645c6710a"
X-Spam-Score: 0.0 (/)
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: -1.0 (-)

--000000000000805ef30645c6710a
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Fri, Dec 12, 2025 at 11:18=E2=80=AFAM Michael Albinus <michael.albinus@g=
mx.de>
wrote:

> Stefan Monnier <monnier@HIDDEN> writes:
>
> > I think we can remove the TEXT argument and provide
> > a `progress-reporter-text` accessor instead.
> > [ `tramp-progress-reporter-update` could use it as well.  ]
>
> Modulo backward compatibility.
>

I just read took a quick look at the tramp code and it uses the
progress-reporter infrastructure.  Using the updated progress reporter, if
one adds the system taskbar progress update function to the new
hook progress-reporter-update-functions, it will work for tramp with no
changes.

--000000000000805ef30645c6710a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Fri, Dec 12, 2025 at 11:18=E2=80=AFAM Michael Albinus &lt;<a href=3D"mai=
lto:michael.albinus@HIDDEN">michael.albinus@HIDDEN</a>&gt; wrote:</span></d=
iv></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex">Stefan Monnier &lt;<a href=3D"mailto:monni=
er@HIDDEN" target=3D"_blank">monnier@HIDDEN</a>&gt; wri=
tes:<br>
<br>
&gt; I think we can remove the TEXT argument and provide<br>
&gt; a `progress-reporter-text` accessor instead.<br>
&gt; [ `tramp-progress-reporter-update` could use it as well.=C2=A0 ]<br>
<br>
Modulo backward compatibility.<br></blockquote><div><br></div><div class=3D=
"gmail_default" style=3D""><font face=3D"monospace">I just read took a quic=
k look at the tramp code and it uses the progress-reporter infrastructure.=
=C2=A0=C2=A0Using the updated progress reporter, if one adds the system tas=
kbar progress update function to the new hook=C2=A0progress-reporter-update=
-functions, it will work for tramp with no changes.=C2=A0 </font></div></di=
v></div>

--000000000000805ef30645c6710a--





Last modified: Fri, 12 Dec 2025 19:45:01 UTC

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