From mboxrd@z Thu Jan  1 00:00:00 1970
Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail
From: Jim Porter <jporterbugs@gmail.com>
Newsgroups: gmane.emacs.bugs
Subject: bug#66756: 30.0.50;
 [PATCH] Improve discussion of 'let' in Elisp Introduction manual
Date: Sun, 3 Dec 2023 20:34:49 -0800
Message-ID: <8cea0f24-e868-2236-2697-bd4af1c863d3@gmail.com>
References: <a9812c1d-71e4-5f3f-83a4-a2923e649f3a@gmail.com>
 <a5120e2f-b008-1b74-1ad9-3fe7d861b13c@gmail.com>
 <E1qx8nq-0007DY-HV@fencepost.gnu.org>
 <3ade119d-0f0d-e60e-1bdc-9c7e02c1559c@gmail.com>
 <E1r4YeF-0001fe-Ex@fencepost.gnu.org>
 <381836df-c16f-b3e7-d0c4-473290e165de@gmail.com>
 <f44cca7f-13bb-a41a-c9ce-55f1b736c52b@gmail.com>
 <E1r5zuY-00041H-Bl@fencepost.gnu.org>
 <9239b6bd-b476-b6c1-aef9-245e439aee42@gmail.com> <83jzq7fx5o.fsf@gnu.org>
 <64d90b0b-e003-7bc3-5312-6c7ab4c4591f@gmail.com> <838r6nfkfj.fsf@gnu.org>
 <fb691578-f89f-d0d1-aab0-7e9e4236bab1@gmail.com> <83jzq6e0dn.fsf@gnu.org>
 <0fe9fc29-11d5-2983-8970-3f4b7969df2d@gmail.com>
 <E1r9zK1-0003MB-PT@fencepost.gnu.org>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="------------PqrLK7WcJY5KW0Q0vbC1M0wq"
Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214";
	logging-data="6321"; mail-complaints-to="usenet@ciao.gmane.io"
Cc: eliz@gnu.org, 66756@debbugs.gnu.org
To: rms@gnu.org
Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Dec 04 05:36:16 2023
Return-path: <bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org>
Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org
Original-Received: from lists.gnu.org ([209.51.188.17])
	by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
	(Exim 4.92)
	(envelope-from <bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org>)
	id 1rA0gp-0001Tu-SA
	for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 04 Dec 2023 05:36:16 +0100
Original-Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <bug-gnu-emacs-bounces@gnu.org>)
	id 1rA0gb-0002tt-I6; Sun, 03 Dec 2023 23:36:04 -0500
Original-Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>)
 id 1rA0gT-0002t1-05
 for bug-gnu-emacs@gnu.org; Sun, 03 Dec 2023 23:35:53 -0500
Original-Received: from debbugs.gnu.org ([2001:470:142:5::43])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <Debian-debbugs@debbugs.gnu.org>)
 id 1rA0gS-0004OY-5K
 for bug-gnu-emacs@gnu.org; Sun, 03 Dec 2023 23:35:52 -0500
Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2)
 (envelope-from <Debian-debbugs@debbugs.gnu.org>) id 1rA0gc-0005qh-Ee
 for bug-gnu-emacs@gnu.org; Sun, 03 Dec 2023 23:36:02 -0500
X-Loop: help-debbugs@gnu.org
Resent-From: Jim Porter <jporterbugs@gmail.com>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces@debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@gnu.org
Resent-Date: Mon, 04 Dec 2023 04:36:02 +0000
Resent-Message-ID: <handler.66756.B66756.170166450922417@debbugs.gnu.org>
Resent-Sender: help-debbugs@gnu.org
X-GNU-PR-Message: followup 66756
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
Original-Received: via spool by 66756-submit@debbugs.gnu.org id=B66756.170166450922417
 (code B ref 66756); Mon, 04 Dec 2023 04:36:02 +0000
Original-Received: (at 66756) by debbugs.gnu.org; 4 Dec 2023 04:35:09 +0000
Original-Received: from localhost ([127.0.0.1]:33274 helo=debbugs.gnu.org)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <debbugs-submit-bounces@debbugs.gnu.org>)
 id 1rA0fk-0005pU-K6
 for submit@debbugs.gnu.org; Sun, 03 Dec 2023 23:35:09 -0500
Original-Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:51207)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jporterbugs@gmail.com>) id 1rA0fi-0005ox-Lf
 for 66756@debbugs.gnu.org; Sun, 03 Dec 2023 23:35:08 -0500
Original-Received: by mail-pg1-x535.google.com with SMTP id
 41be03b00d2f7-5c1a75a4b6cso913239a12.2
 for <66756@debbugs.gnu.org>; Sun, 03 Dec 2023 20:34:56 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1701664490; x=1702269290; darn=debbugs.gnu.org;
 h=in-reply-to:from:content-language:references:cc:to:subject
 :mime-version:date:message-id:from:to:cc:subject:date:message-id
 :reply-to; bh=bSBV2/8h3rrfZ/eTGCxJirKjHjA9z606ACu1NU8RfCo=;
 b=QWK+ULKe7DAUEYTZNBpK6AMim8/b0ZGFLsCV8bnKIzmIrlskqCXRZeNmuqdF2dTLQ6
 gNh5CyMFARCoOA0IY8RprAnPustsZ2c3AWl3qIvdWRARSdkUgwkeKYJI5rorOz2kJktH
 hWSVjOY5mKTbjv8pSRNYKXlkpqVnddcLKmZEfhozBoPMVdFUC7V334LSvaQCkdiMWYXE
 xHZvXZAagi45I60sxuWgUhHlC8bVpOwvu0HnPRbrdwOh4wvsk/1GjcBfPGJ5plEDQLFH
 frwkBm7Eve4lwQQz1F2vbYA0LFs0eN75sF83fSLp4LQAwjDag59QBkicpDNeJ8Az+lYc
 sRzw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1701664490; x=1702269290;
 h=in-reply-to:from:content-language:references:cc:to:subject
 :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject
 :date:message-id:reply-to;
 bh=bSBV2/8h3rrfZ/eTGCxJirKjHjA9z606ACu1NU8RfCo=;
 b=aDUNodHMzY1hTd5on7nmGeSG+BH6g1ozUMsrqbiq9KlxOTmIvVRgA9bUEE35vwt9Bv
 wAhzgyjsaX3aliHpwZxKa3F4QTAXUvvXXRKxtvpnlJxDnzDuVP8YZW7HLk+6/aGaegXl
 grZqagtyLwfGyJQ4DjZ9YBBPXdsNFtpHRWQ/HnAOw/a2tQZPh7vnQ+RccP7fu7hYFF3X
 3FHYmc9lgHHoHutNw/rDgx9r7YdD4cjeGEKl87z0YggsDyxyS70XVFZ8RTfA82BfSvwu
 euLVaOOmpedZMhBcpHH5zUk+SdIiNUICGGcFfFDn/TWxk++9c+7u+keHSpKM415arRPP
 xjOA==
X-Gm-Message-State: AOJu0YwhQ0ksPCOXChxAN/Yg3F1Sy5pp3sINwfCq1DOP35p4Whvdb3XJ
 PBZzFl5vvz/624mUteGkjtY=
X-Google-Smtp-Source: AGHT+IH0cTGSZWlTuEgJySRgVpbk2U3ClvC99os5fJpAD09id9RCBHEBkZZNsyg8N6yaAAlaoOFhNw==
X-Received: by 2002:a17:90b:1983:b0:286:6cc1:291 with SMTP id
 mv3-20020a17090b198300b002866cc10291mr842270pjb.92.1701664490068; 
 Sun, 03 Dec 2023 20:34:50 -0800 (PST)
Original-Received: from [192.168.1.2] (076-168-148-233.res.spectrum.com.
 [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id
 b6-20020a17090a7ac600b002868635df0asm2236103pjl.37.2023.12.03.20.34.49
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 03 Dec 2023 20:34:49 -0800 (PST)
Content-Language: en-US
In-Reply-To: <E1r9zK1-0003MB-PT@fencepost.gnu.org>
X-BeenThere: debbugs-submit@debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
X-BeenThere: bug-gnu-emacs@gnu.org
List-Id: "Bug reports for GNU Emacs,
 the Swiss army knife of text editors" <bug-gnu-emacs.gnu.org>
List-Unsubscribe: <https://lists.gnu.org/mailman/options/bug-gnu-emacs>,
 <mailto:bug-gnu-emacs-request@gnu.org?subject=unsubscribe>
List-Archive: <https://lists.gnu.org/archive/html/bug-gnu-emacs>
List-Post: <mailto:bug-gnu-emacs@gnu.org>
List-Help: <mailto:bug-gnu-emacs-request@gnu.org?subject=help>
List-Subscribe: <https://lists.gnu.org/mailman/listinfo/bug-gnu-emacs>,
 <mailto:bug-gnu-emacs-request@gnu.org?subject=subscribe>
Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org
Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org
Xref: news.gmane.io gmane.emacs.bugs:275474
Archived-At: <http://permalink.gmane.org/gmane.emacs.bugs/275474>

This is a multi-part message in MIME format.
--------------PqrLK7WcJY5KW0Q0vbC1M0wq
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 12/3/2023 7:08 PM, Richard Stallman wrote:
> [[[ To any NSA and FBI agents reading my email: please consider    ]]]
> [[[ whether defending the US Constitution against all enemies,     ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
> 
>    > +means his house, not yours.  (Symbols used in argument lists work the
>    > +same way.
> 
> Maybe that sentence should be more explicit about which symbols it
> refers to and which aspect of "working".  Perhaps like this:
> 
>     (The symbols used to name function arguments are bound as local variables
>     in exactly the same way.)

Makes sense to me. Done.

> This statement
> 
>        However, outside
>      +of the @code{let} body (such as when calling a function that was
>      +defined elsewhere), calling @code{setq} for a variable named by the
>      +@code{let} expression will @emph{not} affect that local variable.
> 
> is true only in lexical binding.  With dynamic binding, such a setq
> _will_ set the let's local variable (in the simplest cases).

Correct. Based on Eli's suggestions, I've worded this initial section to 
assume that lexical binding is in effect. I put a footnote here to 
mention this, but otherwise I'm trying my hardest to avoid front-loading 
the 'let' documentation with an explanation of lexical binding.

>      +Emacs Lisp supports two different ways of binding variable names to
>      +their values.  These ways affect the parts of your program where a
>      +particular binding is validscop.
> 
> Typo there.

Thanks. I think that was a mistake from when I was searching for "scope" 
to ensure I didn't inadvertently use the term in this section. (I wanted 
to avoid mentioning another CS term here, and I think "binding" is 
enough for what we want to say.)

>      +As we discussed before, when you create local variables with
>      +@code{let} under lexical binding, those variables are valid only
>      +within the body of the @code{let} expression.
> 
> Where is this previous discussion?  I don't see it.  The distinction
> of dynamic vs lexical was first introduced two paragraphs above,
> and its effects on binding have not been discussed yet.
> 
> Is this a reference to the following?
> 
>        However, outside
>      +of the @code{let} body (such as when calling a function that was
>      +defined elsewhere), calling @code{setq} for a variable named by the
>      +@code{let} expression will @emph{not} affect that local variable.
> 
> That may be meant as a discussion of local binding with lexical scoping,
> but it isn't one, since it doesn't say "lexical scoping."

Correct. I added a cross-reference back to that section. With that and 
the footnote in the "let Prevents Confusion" section, hopefully this is 
clearer now.

>        (On the other hand, if
>      +you call a function defined within a @code{let} body,
> 
> I recommend "that was defined within"; it is more clear.

Done.

>      +Under dynamic binding, the rules are different: instead, when you use
>      +@code{let}, the local variables you've created are valid during
>      +execution of the let expression.
> 
> @code needed here.

Fixed.

>        When you bind a variable
>      +with @code{let}, it puts the new binding you've specified on the top
>      +of the stack,
> 
> For clarity, I suggest "bind a variable dynamically" or something to reiterate
> that this sentence is only about dynamic binding.  Without that, the reader
> could take it to be independent of which mode is currently selected.

Done.

On 12/3/2023 7:08 PM, Richard Stallman wrote:
> The new node How let Binds Variables is 110 lines long.  Such a long
> node is cumbersome, especially for cross-references to it.
> 
> Can you find a way to subdivide it into smaller nodes?
> 
> It could have some text at the beginning, then a few subnodes.

I've split this into a main section and two subnodes: one describing how 
lexical and dynamic binding work, and one showing an example of how they 
behave differently in practice. Maybe the titles could be improved, but 
they're the best I could come up with at the time...
--------------PqrLK7WcJY5KW0Q0vbC1M0wq
Content-Type: text/plain; charset=UTF-8;
 name="0001-Introduce-let-using-lexical-binding-in-the-Lisp-Intr.patch"
Content-Disposition: attachment;
 filename*0="0001-Introduce-let-using-lexical-binding-in-the-Lisp-Intr.pa";
 filename*1="tch"
Content-Transfer-Encoding: base64

RnJvbSAwMzdhMzU3ODgxNWRiYWVkNzFlYTkwZWJjOTU5ODY4MmZiMTU5ZTIzIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j
b20+CkRhdGU6IFdlZCwgMjUgT2N0IDIwMjMgMjA6NDM6NTcgLTA3MDAKU3ViamVjdDogW1BB
VENIXSBJbnRyb2R1Y2UgJ2xldCcgdXNpbmcgbGV4aWNhbCBiaW5kaW5nIGluIHRoZSBMaXNw
CiBJbnRyb2R1Y3Rpb24KCiogZG9jL2xpc3BpbnRyby9lbWFjcy1saXNwLWludHJvLnRleGkg
KFByZXZlbnQgY29uZnVzaW9uKTogUmV3b3JrIHRoZQpleHBsYW5hdGlvbiB0byBkaXNjdXNz
IGhvdyB0aGluZ3Mgd29yayB1bmRlciBsZXhpY2FsIGJpbmRpbmcuCihIb3cgbGV0IEJpbmRz
IFZhcmlhYmxlcyk6IERlc2NyaWJlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxleGljYWwK
YW5kIGR5bmFtaWMgYmluZGluZyAoaW5jbHVkaW5nIGhvdyB0byBjb25maWd1cmUgaXQpLgoo
ZGVmdmFyKTogTWVudGlvbiB0aGF0ICdkZWZ2YXInIGRlY2xhcmVzIHZhcmlhYmxlcyBhcyBh
bHdheXMKZHluYW1pY2FsbHktYm91bmQgKGJ1ZyM2Njc1NikuCi0tLQogZG9jL2xpc3BpbnRy
by9lbWFjcy1saXNwLWludHJvLnRleGkgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLQogMSBmaWxlIGNoYW5nZWQsIDE0OSBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9kb2MvbGlzcGludHJvL2VtYWNzLWxpc3AtaW50cm8udGV4aSBi
L2RvYy9saXNwaW50cm8vZW1hY3MtbGlzcC1pbnRyby50ZXhpCmluZGV4IGM1YjMzYWM1ZWFh
Li40NTY1YjZjMGZmMCAxMDA2NDQKLS0tIGEvZG9jL2xpc3BpbnRyby9lbWFjcy1saXNwLWlu
dHJvLnRleGkKKysrIGIvZG9jL2xpc3BpbnRyby9lbWFjcy1saXNwLWludHJvLnRleGkKQEAg
LTM1OTEsNiArMzU5MSw3IEBAIGxldAogKiBQYXJ0cyBvZiBsZXQgRXhwcmVzc2lvbjo6CiAq
IFNhbXBsZSBsZXQgRXhwcmVzc2lvbjo6CiAqIFVuaW5pdGlhbGl6ZWQgbGV0IFZhcmlhYmxl
czo6CisqIEhvdyBsZXQgQmluZHMgVmFyaWFibGVzOjoKIEBlbmQgbWVudQogCiBAaWZub3R0
ZXgKQEAgLTM2MDIsMjQgKzM2MDMsMjYgQEAgUHJldmVudCBjb25mdXNpb24KIEBjaW5kZXgg
QHNhbXB7dmFyaWFibGUsIGxvY2FsfSwgZGVmaW5lZAogVGhlIEBjb2Rle2xldH0gc3BlY2lh
bCBmb3JtIHByZXZlbnRzIGNvbmZ1c2lvbi4gIEBjb2Rle2xldH0gY3JlYXRlcyBhCiBuYW1l
IGZvciBhIEBkZm57bG9jYWwgdmFyaWFibGV9IHRoYXQgb3ZlcnNoYWRvd3MgYW55IHVzZSBv
ZiB0aGUgc2FtZQotbmFtZSBvdXRzaWRlIHRoZSBAY29kZXtsZXR9IGV4cHJlc3Npb24uICBU
aGlzIGlzIGxpa2UgdW5kZXJzdGFuZGluZwotdGhhdCB3aGVuZXZlciB5b3VyIGhvc3QgcmVm
ZXJzIHRvIGBgdGhlIGhvdXNlJycsIGhlIG1lYW5zIGhpcyBob3VzZSwgbm90Ci15b3Vycy4g
IChTeW1ib2xzIHVzZWQgaW4gYXJndW1lbnQgbGlzdHMgd29yayB0aGUgc2FtZSB3YXkuCitu
YW1lIG91dHNpZGUgdGhlIEBjb2Rle2xldH0gZXhwcmVzc2lvbiAoaW4gY29tcHV0ZXIgc2Np
ZW5jZSBqYXJnb24sIHdlCitjYWxsIHRoaXMgQGRmbntiaW5kaW5nfSB0aGUgdmFyaWFibGUp
LiAgVGhpcyBpcyBsaWtlIHVuZGVyc3RhbmRpbmcKK3RoYXQgaW4geW91ciBob3N0J3MgaG9t
ZSwgd2hlbmV2ZXIgaGUgcmVmZXJzIHRvIGBgdGhlIGhvdXNlJycsIGhlCittZWFucyBoaXMg
aG91c2UsIG5vdCB5b3Vycy4gIChUaGUgc3ltYm9scyB1c2VkIHRvIG5hbWUgZnVuY3Rpb24K
K2FyZ3VtZW50cyBhcmUgYm91bmQgYXMgbG9jYWwgdmFyaWFibGVzIGluIGV4YWN0bHkgdGhl
IHNhbWUgd2F5LgogQHhyZWZ7ZGVmdW4sICwgVGhlIEBjb2Rle2RlZnVufSBNYWNyb30uKQog
Ci1Mb2NhbCB2YXJpYWJsZXMgY3JlYXRlZCBieSBhIEBjb2Rle2xldH0gZXhwcmVzc2lvbiBy
ZXRhaW4gdGhlaXIgdmFsdWUKLUBlbXBoe29ubHl9IHdpdGhpbiB0aGUgQGNvZGV7bGV0fSBl
eHByZXNzaW9uIGl0c2VsZiAoYW5kIHdpdGhpbgotZXhwcmVzc2lvbnMgY2FsbGVkIHdpdGhp
biB0aGUgQGNvZGV7bGV0fSBleHByZXNzaW9uKTsgdGhlIGxvY2FsCi12YXJpYWJsZXMgaGF2
ZSBubyBlZmZlY3Qgb3V0c2lkZSB0aGUgQGNvZGV7bGV0fSBleHByZXNzaW9uLgotCi1Bbm90
aGVyIHdheSB0byB0aGluayBhYm91dCBAY29kZXtsZXR9IGlzIHRoYXQgaXQgaXMgbGlrZSBh
IEBjb2Rle3NldHF9Ci10aGF0IGlzIHRlbXBvcmFyeSBhbmQgbG9jYWwuICBUaGUgdmFsdWVz
IHNldCBieSBAY29kZXtsZXR9IGFyZQotYXV0b21hdGljYWxseSB1bmRvbmUgd2hlbiB0aGUg
QGNvZGV7bGV0fSBpcyBmaW5pc2hlZC4gIFRoZSBzZXR0aW5nCi1vbmx5IGFmZmVjdHMgZXhw
cmVzc2lvbnMgdGhhdCBhcmUgaW5zaWRlIHRoZSBib3VuZHMgb2YgdGhlIEBjb2Rle2xldH0K
LWV4cHJlc3Npb24uICBJbiBjb21wdXRlciBzY2llbmNlIGphcmdvbiwgd2Ugd291bGQgc2F5
IHRoZSBiaW5kaW5nIG9mCi1hIHN5bWJvbCBpcyB2aXNpYmxlIG9ubHkgaW4gZnVuY3Rpb25z
IGNhbGxlZCBpbiB0aGUgQGNvZGV7bGV0fSBmb3JtOwotaW4gRW1hY3MgTGlzcCwgdGhlIGRl
ZmF1bHQgc2NvcGluZyBpcyBkeW5hbWljLCBub3QgbGV4aWNhbC4gIChUaGUKLW5vbi1kZWZh
dWx0IGxleGljYWwgYmluZGluZyBpcyBub3QgZGlzY3Vzc2VkIGluIHRoaXMgbWFudWFsLikK
K0Fub3RoZXIgd2F5IHRvIHRoaW5rIGFib3V0IEBjb2Rle2xldH0gaXMgdGhhdCBpdCBkZWZp
bmVzIGEgc3BlY2lhbAorcmVnaW9uIGluIHlvdXIgY29kZTogd2l0aGluIHRoZSBib2R5IG9m
IHRoZSBAY29kZXtsZXR9IGV4cHJlc3Npb24sIHRoZQordmFyaWFibGVzIHlvdSd2ZSBuYW1l
ZCBoYXZlIHRoZWlyIG93biBsb2NhbCBtZWFuaW5nLiAgT3V0c2lkZSBvZiB0aGUKK0Bjb2Rl
e2xldH0gYm9keSwgdGhleSBoYXZlIG90aGVyIG1lYW5pbmdzIChvciB0aGV5IG1heSBub3Qg
YmUgZGVmaW5lZAorYXQgYWxsKS4gIFRoaXMgbWVhbnMgdGhhdCBpbnNpZGUgdGhlIEBjb2Rl
e2xldH0gYm9keSwgY2FsbGluZworQGNvZGV7c2V0cX0gZm9yIGEgdmFyaWFibGUgbmFtZWQg
YnkgdGhlIEBjb2Rle2xldH0gZXhwcmVzc2lvbiB3aWxsIHNldAordGhlIHZhbHVlIG9mIHRo
ZSBAZW1waHtsb2NhbH0gdmFyaWFibGUgb2YgdGhhdCBuYW1lLiAgSG93ZXZlciwgb3V0c2lk
ZQorb2YgdGhlIEBjb2Rle2xldH0gYm9keSAoc3VjaCBhcyB3aGVuIGNhbGxpbmcgYSBmdW5j
dGlvbiB0aGF0IHdhcworZGVmaW5lZCBlbHNld2hlcmUpLCBjYWxsaW5nIEBjb2Rle3NldHF9
IGZvciBhIHZhcmlhYmxlIG5hbWVkIGJ5IHRoZQorQGNvZGV7bGV0fSBleHByZXNzaW9uIHdp
bGwgQGVtcGh7bm90fSBhZmZlY3QgdGhhdCBsb2NhbAordmFyaWFibGUuQGZvb3Rub3Rle1Ro
aXMgZGVzY3JpYmVzIHRoZSBiZWhhdmlvciBvZiBAY29kZXtsZXR9IHdoZW4KK3VzaW5nIGEg
c3R5bGUgY2FsbGVkIGBgbGV4aWNhbCBiaW5kaW5nJycgKEBweHJlZntIb3cgbGV0IEJpbmRz
CitWYXJpYWJsZXN9KS59CiAKIEBjb2Rle2xldH0gY2FuIGNyZWF0ZSBtb3JlIHRoYW4gb25l
IHZhcmlhYmxlIGF0IG9uY2UuICBBbHNvLAogQGNvZGV7bGV0fSBnaXZlcyBlYWNoIHZhcmlh
YmxlIGl0IGNyZWF0ZXMgYW4gaW5pdGlhbCB2YWx1ZSwgZWl0aGVyIGEKQEAgLTM3NzksNiAr
Mzc4MiwxMjggQEAgVW5pbml0aWFsaXplZCBsZXQgVmFyaWFibGVzCiBAc2FtcHslc30uKSAg
VGhlIGZvdXIgdmFyaWFibGVzIGFzIGEgZ3JvdXAgYXJlIHB1dCBpbnRvIGEgbGlzdCB0bwog
ZGVsaW1pdCB0aGVtIGZyb20gdGhlIGJvZHkgb2YgdGhlIEBjb2Rle2xldH0uCiAKK0Bub2Rl
IEhvdyBsZXQgQmluZHMgVmFyaWFibGVzCitAc3Vic2VjdGlvbiBIb3cgQGNvZGV7bGV0fSBC
aW5kcyBWYXJpYWJsZXMKKworRW1hY3MgTGlzcCBzdXBwb3J0cyB0d28gZGlmZmVyZW50IHdh
eXMgb2YgYmluZGluZyB2YXJpYWJsZSBuYW1lcyB0bwordGhlaXIgdmFsdWVzLiAgVGhlc2Ug
d2F5cyBhZmZlY3QgdGhlIHBhcnRzIG9mIHlvdXIgcHJvZ3JhbSB3aGVyZSBhCitwYXJ0aWN1
bGFyIGJpbmRpbmcgaXMgdmFsaWQuICBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBFbWFjcyBM
aXNwIHVzZXMKK2EgZm9ybSBvZiB2YXJpYWJsZSBiaW5kaW5nIGNhbGxlZCBAZGZue2R5bmFt
aWMgYmluZGluZ30gYnkgZGVmYXVsdC4KK0hvd2V2ZXIsIGluIHRoaXMgbWFudWFsIHdlIGRp
c2N1c3MgdGhlIHByZWZlcnJlZCBmb3JtIG9mIGJpbmRpbmcsCitjYWxsZWQgQGRmbntsZXhp
Y2FsIGJpbmRpbmd9LCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIChpbiB0aGUgZnV0dXJlLAor
dGhlIEVtYWNzIG1haW50YWluZXJzIHBsYW4gdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRvIGxl
eGljYWwgYmluZGluZykuCitJZiB5b3UgaGF2ZSBwcm9ncmFtbWVkIGluIG90aGVyIGxhbmd1
YWdlcyBiZWZvcmUsIHlvdSdyZSBsaWtlbHkKK2FscmVhZHkgZmFtaWxpYXIgd2l0aCBob3cg
bGV4aWNhbCBiaW5kaW5nIGJlaGF2ZXMuCisKK0luIG9yZGVyIHRvIHVzZSBsZXhpY2FsIGJp
bmRpbmcgaW4gYSBwcm9ncmFtLCB5b3Ugc2hvdWxkIGFkZCB0aGlzIHRvCit0aGUgZmlyc3Qg
bGluZSBvZiB5b3VyIEVtYWNzIExpc3AgZmlsZToKKworQGV4YW1wbGUKKzs7OyAtKi0gbGV4
aWNhbC1iaW5kaW5nOiB0IC0qLQorQGVuZCBleGFtcGxlCisKK0ZvciBtb3JlIGluZm9ybWF0
aW9uIGFib3V0IHRoaXMsIEBweHJlZntTZWxlY3RpbmcgTGlzcCBEaWFsZWN0LCAsICwKK2Vs
aXNwLCBUaGUgRW1hY3MgTGlzcCBSZWZlcmVuY2UgTWFudWFsfS4KKworQG1lbnUKKyogTGV4
aWNhbCAmIER5bmFtaWMgQmluZGluZyBEaWZmZXJlbmNlczo6CisqIExleGljYWwgdnMuIER5
bmFtaWMgQmluZGluZyBFeGFtcGxlOjoKK0BlbmQgbWVudQorCitAbm9kZSBMZXhpY2FsICYg
RHluYW1pYyBCaW5kaW5nIERpZmZlcmVuY2VzCitAdW5udW1iZXJlZHN1YnN1YnNlYyBEaWZm
ZXJlbmNlcyBCZXR3ZWVuIExleGljYWwgYW5kIER5bmFtaWMgQmluZGluZworCitAY2luZGV4
IExleGljYWwgYmluZGluZworQGNpbmRleCBCaW5kaW5nLCBsZXhpY2FsCitBcyB3ZSBkaXNj
dXNzZWQgYmVmb3JlIChAcHhyZWZ7UHJldmVudCBjb25mdXNpb259KSwgd2hlbiB5b3UgY3Jl
YXRlCitsb2NhbCB2YXJpYWJsZXMgd2l0aCBAY29kZXtsZXR9IHVuZGVyIGxleGljYWwgYmlu
ZGluZywgdGhvc2UgdmFyaWFibGVzCithcmUgdmFsaWQgb25seSB3aXRoaW4gdGhlIGJvZHkg
b2YgdGhlIEBjb2Rle2xldH0gZXhwcmVzc2lvbi4gIEluIG90aGVyCitwYXJ0cyBvZiB5b3Vy
IGNvZGUsIHRoZXkgaGF2ZSBvdGhlciBtZWFuaW5ncywgc28gaWYgeW91IGNhbGwgYQorZnVu
Y3Rpb24gZGVmaW5lZCBlbHNld2hlcmUgd2l0aGluIHRoZSBAY29kZXtsZXR9IGJvZHksIHRo
YXQgZnVuY3Rpb24KK3dvdWxkIGJlIHVuYWJsZSB0byBgYHNlZScnIHRoZSBsb2NhbCB2YXJp
YWJsZXMgeW91J3ZlIGNyZWF0ZWQuICAoT24KK3RoZSBvdGhlciBoYW5kLCBpZiB5b3UgY2Fs
bCBhIGZ1bmN0aW9uIHRoYXQgd2FzIGRlZmluZWQgd2l0aGluIGEKK0Bjb2Rle2xldH0gYm9k
eSwgdGhhdCBmdW5jdGlvbiBAZW1waHt3b3VsZH0gYmUgYWJsZSB0byBzZWUtLS1hbmQKK21v
ZGlmeS0tLXRoZSBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGF0IEBjb2Rle2xldH0gZXhwcmVz
c2lvbi4pCisKK0BjaW5kZXggRHluYW1pYyBiaW5kaW5nCitAY2luZGV4IEJpbmRpbmcsIGR5
bmFtaWMKK1VuZGVyIGR5bmFtaWMgYmluZGluZywgdGhlIHJ1bGVzIGFyZSBkaWZmZXJlbnQ6
IGluc3RlYWQsIHdoZW4geW91IHVzZQorQGNvZGV7bGV0fSwgdGhlIGxvY2FsIHZhcmlhYmxl
cyB5b3UndmUgY3JlYXRlZCBhcmUgdmFsaWQgZHVyaW5nCitleGVjdXRpb24gb2YgdGhlIEBj
b2Rle2xldH0gZXhwcmVzc2lvbi4gIFRoaXMgbWVhbnMgdGhhdCwgaWYgeW91cgorQGNvZGV7
bGV0fSBleHByZXNzaW9uIGNhbGxzIGEgZnVuY3Rpb24sIHRoYXQgZnVuY3Rpb24gY2FuIHNl
ZSB0aGVzZQorbG9jYWwgdmFyaWFibGVzLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBmdW5j
dGlvbiBpcyBkZWZpbmVkCisoaW5jbHVkaW5nIGluIGFub3RoZXIgZmlsZSBlbnRpcmVseSku
CisKK0Fub3RoZXIgd2F5IHRvIHRoaW5rIGFib3V0IEBjb2Rle2xldH0gd2hlbiB1c2luZyBk
eW5hbWljIGJpbmRpbmcgaXMKK3RoYXQgZXZlcnkgdmFyaWFibGUgbmFtZSBoYXMgYSBnbG9i
YWwgYGBzdGFjaycnIG9mIGJpbmRpbmdzLCBhbmQKK3doZW5ldmVyIHlvdSB1c2UgdGhhdCB2
YXJpYWJsZSdzIG5hbWUsIGl0IHJlZmVycyB0byB0aGUgYmluZGluZyBvbiB0aGUKK3RvcCBv
ZiB0aGUgc3RhY2suICAoWW91IGNhbiBpbWFnaW5lIHRoaXMgbGlrZSBhIHN0YWNrIG9mIHBh
cGVycyBvbgoreW91ciBkZXNrIHdpdGggdGhlIHZhbHVlcyB3cml0dGVuIG9uIHRoZW0uKSAg
V2hlbiB5b3UgYmluZCBhIHZhcmlhYmxlCitkeW5hbWljYWxseSB3aXRoIEBjb2Rle2xldH0s
IGl0IHB1dHMgdGhlIG5ldyBiaW5kaW5nIHlvdSd2ZSBzcGVjaWZpZWQKK29uIHRoZSB0b3Ag
b2YgdGhlIHN0YWNrLCBhbmQgdGhlbiBleGVjdXRlcyB0aGUgQGNvZGV7bGV0fSBib2R5LiAg
T25jZQordGhlIEBjb2Rle2xldH0gYm9keSBmaW5pc2hlcywgaXQgdGFrZXMgdGhhdCBiaW5k
aW5nIG9mZiBvZiB0aGUgc3RhY2ssCityZXZlYWxpbmcgdGhlIG9uZSBpdCBoYWQgKGlmIGFu
eSkgYmVmb3JlIHRoZSBAY29kZXtsZXR9IGV4cHJlc3Npb24uCisKK0Bub2RlIExleGljYWwg
dnMuIER5bmFtaWMgQmluZGluZyBFeGFtcGxlCitAdW5udW1iZXJlZHN1YnN1YnNlYyBFeGFt
cGxlIG9mIExleGljYWwgdnMuIER5bmFtaWMgQmluZGluZworSW4gc29tZSBjYXNlcywgYm90
aCBsZXhpY2FsIGFuZCBkeW5hbWljIGJpbmRpbmcgYmVoYXZlIGlkZW50aWNhbGx5LgorSG93
ZXZlciwgaW4gb3RoZXIgY2FzZXMsIHRoZXkgY2FuIGNoYW5nZSB0aGUgbWVhbmluZyBvZiB5
b3VyIHByb2dyYW0uCitGb3IgZXhhbXBsZSwgc2VlIHdoYXQgaGFwcGVucyBpbiB0aGlzIGNv
ZGUgdW5kZXIgbGV4aWNhbCBiaW5kaW5nOgorCitAZXhhbXBsZQorOzs7IC0qLSBsZXhpY2Fs
LWJpbmRpbmc6IHQgLSotCisKKyhzZXRxIHggMCkKKworKGRlZnVuIGdldHggKCkKKyAgeCkK
KworKHNldHEgeCAxKQorCisobGV0ICgoeCAyKSkKKyAgKGdldHgpKQorICAgICBAcmVzdWx0
e30gMQorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorSGVyZSwgdGhlIHJlc3VsdCBvZiBA
Y29kZXsoZ2V0eCl9IGlzIEBjb2RlezF9LiAgVW5kZXIgbGV4aWNhbCBiaW5kaW5nLAorQGNv
ZGV7Z2V0eH0gZG9lc24ndCBzZWUgdGhlIHZhbHVlIGZyb20gb3VyIEBjb2Rle2xldH0gZXhw
cmVzc2lvbi4KK1RoYXQncyBiZWNhdXNlIHRoZSBib2R5IG9mIEBjb2Rle2dldHh9IGlzIG91
dHNpZGUgb2YgdGhlIGJvZHkgb2Ygb3VyCitAY29kZXtsZXR9IGV4cHJlc3Npb24uICBTaW5j
ZSBAY29kZXtnZXR4fSBpcyBkZWZpbmVkIGF0IHRoZSB0b3AsCitnbG9iYWwgbGV2ZWwgb2Yg
b3VyIGNvZGUgKGkuZS5AOiBub3QgaW5zaWRlIHRoZSBib2R5IG9mIGFueSBAY29kZXtsZXR9
CitleHByZXNzaW9uKSwgaXQgbG9va3MgZm9yIGFuZCBmaW5kcyBAY29kZXt4fSBhdCB0aGUg
Z2xvYmFsIGxldmVsIGFzCit3ZWxsLiAgV2hlbiBleGVjdXRpbmcgQGNvZGV7Z2V0eH0sIHRo
ZSBjdXJyZW50IGdsb2JhbCB2YWx1ZSBvZgorQGNvZGV7eH0gaXMgQGNvZGV7MX0sIHNvIHRo
YXQncyB3aGF0IEBjb2Rle2dldHh9IHJldHVybnMuCisKK0lmIHdlIHVzZSBkeW5hbWljIGJp
bmRpbmcgaW5zdGVhZCwgdGhlIGJlaGF2aW9yIGlzIGRpZmZlcmVudDoKKworQGV4YW1wbGUK
Kzs7OyAtKi0gbGV4aWNhbC1iaW5kaW5nOiBuaWwgLSotCisKKyhzZXRxIHggMCkKKworKGRl
ZnVuIGdldHggKCkKKyAgeCkKKworKHNldHEgeCAxKQorCisobGV0ICgoeCAyKSkKKyAgKGdl
dHgpKQorICAgICBAcmVzdWx0e30gMgorQGVuZCBleGFtcGxlCisKK0Bub2luZGVudAorTm93
LCB0aGUgcmVzdWx0IG9mIEBjb2RleyhnZXR4KX0gaXMgQGNvZGV7Mn0hICBUaGF0J3MgYmVj
YXVzZSB1bmRlcgorZHluYW1pYyBiaW5kaW5nLCB3aGVuIGV4ZWN1dGluZyBAY29kZXtnZXR4
fSwgdGhlIGN1cnJlbnQgYmluZGluZyBmb3IKK0Bjb2Rle3h9IGF0IHRoZSB0b3Agb2Ygb3Vy
IHN0YWNrIGlzIHRoZSBvbmUgZnJvbSBvdXIgQGNvZGV7bGV0fQorYmluZGluZy4gIFRoaXMg
dGltZSwgQGNvZGV7Z2V0eH0gZG9lc24ndCBzZWUgdGhlIGdsb2JhbCB2YWx1ZSBmb3IKK0Bj
b2Rle3h9LCBzaW5jZSBpdHMgYmluZGluZyBpcyBiZWxvdyB0aGUgb25lIGZyb20gb3VyIEBj
b2Rle2xldH0KK2V4cHJlc3Npb24gaW4gdGhlIHN0YWNrIG9mIGJpbmRpbmdzLgorCisoU29t
ZSB2YXJpYWJsZXMgYXJlIGFsc28gYGBzcGVjaWFsJycsIGFuZCB0aGV5IGFyZSBhbHdheXMg
ZHluYW1pY2FsbHkKK2JvdW5kIGV2ZW4gd2hlbiBAY29kZXtsZXhpY2FsLWJpbmRpbmd9IGlz
IEBjb2Rle3R9LiAgQHhyZWZ7ZGVmdmFyLCAsCitJbml0aWFsaXppbmcgYSBWYXJpYWJsZSB3
aXRoIEBjb2Rle2RlZnZhcn19LikKKwogQG5vZGUgaWYKIEBzZWN0aW9uIFRoZSBAY29kZXtp
Zn0gU3BlY2lhbCBGb3JtCiBAZmluZGV4IGlmCkBAIC05MTMwLDEyICs5MjU1LDE0IEBAIGRl
ZnZhcgogZ2l2ZW4gYW4gaW5pdGlhbCB2YWx1ZSBieSB1c2luZyB0aGUgQGNvZGV7ZGVmdmFy
fSBzcGVjaWFsIGZvcm0uICBUaGUKIG5hbWUgY29tZXMgZnJvbSBgYGRlZmluZSB2YXJpYWJs
ZScnLgogCi1UaGUgQGNvZGV7ZGVmdmFyfSBzcGVjaWFsIGZvcm0gaXMgc2ltaWxhciB0byBA
Y29kZXtzZXRxfSBpbiB0aGF0IGl0IHNldHMKLXRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLiAg
SXQgaXMgdW5saWtlIEBjb2Rle3NldHF9IGluIHR3byB3YXlzOiBmaXJzdCwKLWl0IG9ubHkg
c2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5v
dCBhbHJlYWR5Ci1oYXZlIGEgdmFsdWUuICBJZiB0aGUgdmFyaWFibGUgYWxyZWFkeSBoYXMg
YSB2YWx1ZSwgQGNvZGV7ZGVmdmFyfSBkb2VzCi1ub3Qgb3ZlcnJpZGUgdGhlIGV4aXN0aW5n
IHZhbHVlLiAgU2Vjb25kLCBAY29kZXtkZWZ2YXJ9IGhhcyBhCi1kb2N1bWVudGF0aW9uIHN0
cmluZy4KK1RoZSBAY29kZXtkZWZ2YXJ9IHNwZWNpYWwgZm9ybSBpcyBzaW1pbGFyIHRvIEBj
b2Rle3NldHF9IGluIHRoYXQgaXQKK3NldHMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuICBJ
dCBpcyB1bmxpa2UgQGNvZGV7c2V0cX0gaW4gdGhyZWUgd2F5czoKK2ZpcnN0LCBpdCBtYXJr
cyB0aGUgdmFyaWFibGUgYXMgYGBzcGVjaWFsJycgc28gdGhhdCBpdCBpcyBhbHdheXMKK2R5
bmFtaWNhbGx5IGJvdW5kLCBldmVuIHdoZW4gQGNvZGV7bGV4aWNhbC1iaW5kaW5nfSBpcyBA
Y29kZXt0fQorKEBweHJlZntIb3cgbGV0IEJpbmRzIFZhcmlhYmxlc30pLiAgU2Vjb25kLCBp
dCBvbmx5IHNldHMgdGhlIHZhbHVlIG9mCit0aGUgdmFyaWFibGUgaWYgdGhlIHZhcmlhYmxl
IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHZhbHVlLiAgSWYgdGhlCit2YXJpYWJsZSBhbHJl
YWR5IGhhcyBhIHZhbHVlLCBAY29kZXtkZWZ2YXJ9IGRvZXMgbm90IG92ZXJyaWRlIHRoZQor
ZXhpc3RpbmcgdmFsdWUuICBUaGlyZCwgQGNvZGV7ZGVmdmFyfSBoYXMgYSBkb2N1bWVudGF0
aW9uIHN0cmluZy4KIAogKFRoZXJlIGlzIGEgcmVsYXRlZCBtYWNybywgQGNvZGV7ZGVmY3Vz
dG9tfSwgZGVzaWduZWQgZm9yIHZhcmlhYmxlcwogdGhhdCBwZW9wbGUgY3VzdG9taXplLiAg
SXQgaGFzIG1vcmUgZmVhdHVyZXMgdGhhbiBAY29kZXtkZWZ2YXJ9LgotLSAKMi4yNS4xCgo=


--------------PqrLK7WcJY5KW0Q0vbC1M0wq--