From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: arthur miller Newsgroups: gmane.emacs.devel Subject: Suggestion: two new commands: beginning-of-list and end-of-list Date: Mon, 9 Sep 2024 18:32:33 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_004_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="31466"; mail-complaints-to="usenet@ciao.gmane.io" To: "emacs-devel@gnu.org" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Sep 09 21:00:09 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1snjcP-000861-09 for ged-emacs-devel@m.gmane-mx.org; Mon, 09 Sep 2024 21:00:09 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1snjbe-0004gc-Sy; Mon, 09 Sep 2024 14:59:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1snjGe-0003zY-8c for emacs-devel@gnu.org; Mon, 09 Sep 2024 14:37:40 -0400 Original-Received: from mail-northeuropeazolkn19013070.outbound.protection.outlook.com ([52.103.32.70] helo=DUZPR83CU001.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1snjGc-0004vl-61 for emacs-devel@gnu.org; Mon, 09 Sep 2024 14:37:40 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gZmco1izt7dfR6Yb/uK62feQuIJPShxostZzFRMA5+x+1ApRXZ1/+fuw5ccfY/qmrUdmgN3q+gu39eiVpj1xq8wT78aMbFWKMgTrPYPz29/UEw78OtfuhyuXbwhPQ8DB4xKNlH26WMnRcNovIr6nx8qA1aED1QhOfg2IRPnWFjf51WRs18VX2KqmJpQElBrAfFXh7nhRDSsVIKoL0VgV/7DRsrrdIjQTQAZB7DzHAaqHSpYc4Tcg+gD0N7uHYt4Ir29McprmTRlYG57ogV6k7HLUlgrgHvv3uSNmfX/FSpJ7c/nX044jmyTs7lUVga3tt1mEoLKmKmHDdaRFvrofaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hPab6uPuhNGAI/mqmckdpKMHF8ixWd4d7U9WFwSWPpY=; b=LxURMcTxkXDd+FYEGHvgCtYjoQ4EA+ya7XQBRUzP8fuho8I5gj4JITi6xSTPXI5JmmgB2lJ2s6WXQBfor4l8E1ABLNdk6qy8VJReIFKcK4ZMozbSj0uXDHzoId6xAKKf37OMwY8W/LKn/mY8WtocdK9gJpHzhR2GK+ELeroY8WN1dbg6PSlpRjtMz/1aUnP4HZnE7myAvJp1M2/kN/fnrgUxtvEUtWDHugrdeqqnOpUk8PZgW8Y/kdScBio790rRy+peXNHWicD2okQ0gnlv44nirmoiaTB+lAfDwpiuge1ClB4jhW78YXHg03wiAdhCu9U9bhsD/kcalQbpykKAOQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hPab6uPuhNGAI/mqmckdpKMHF8ixWd4d7U9WFwSWPpY=; b=ZUXnf9kL63WgHLRp4mo9oE1Cv8tBTcYjozNr//NkhKF0v+zl2O7GQqG/qrAIgwr9GCslt9Kjhi65xWk83setLyurDX9XWEvKNfcxIdlyaJeb+pt6D99AWALhymsn82qMAozdXmt0gRMt9TkcqjIgXgdIFJRKgQO4a+MUcNlwk0f9ibSZFfR1DPo//LL/WJqnjoNbjH+C+JgImu5FaUSCbhcOyrQsUvS2+7CWkvXYp19Jl33xyKmn4pGB8hqEvs+SpRVdUIdK5/0nCsSZu9Zsov7tdzJ2lOqqto2Ac/pCKUJ7I4DeCHerQUzE/nLt91T6+9mO78TUT9rvnXwvgqezYw== Original-Received: from AS8PR02MB10107.eurprd02.prod.outlook.com (2603:10a6:20b:633::7) by PAWPR02MB9759.eurprd02.prod.outlook.com (2603:10a6:102:2f1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.28; Mon, 9 Sep 2024 18:32:33 +0000 Original-Received: from AS8PR02MB10107.eurprd02.prod.outlook.com ([fe80::80fe:77a2:35b:dfc]) by AS8PR02MB10107.eurprd02.prod.outlook.com ([fe80::80fe:77a2:35b:dfc%6]) with mapi id 15.20.7918.024; Mon, 9 Sep 2024 18:32:33 +0000 Thread-Topic: Suggestion: two new commands: beginning-of-list and end-of-list Thread-Index: AQHbAuVbbKZnfmVNp0+ByPzyKH0mAg== Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [UWdIzvP5viZLKqDNDlKL8r6ZovQ+bW7K] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS8PR02MB10107:EE_|PAWPR02MB9759:EE_ x-ms-office365-filtering-correlation-id: 6625f414-e88c-4eba-851b-08dcd0fdc560 x-microsoft-antispam: BCL:0; ARA:14566002|19110799003|15030799003|8060799006|15080799006|461199028|6092099012|3412199025|102099032|440099028; x-microsoft-antispam-message-info: 4xo1OGb3g8j6tLZ/6lRQKDuNkvkZCc+6Yb5sY+Ew38SQ+xrLSp0AeaKScNqesLJ+xtsg15/wKrvO6Vd48NSIAlAdj0eNN9FpGi5HVcEhjYGVGuf/hOQVCpgRydvddMUV03ES5jH5LmMSP/YT2JFk8vctZiglfodlxT4jYoW4azPLhgYivmKncCofZEyLNvriMydVI0WTEd3c6TBAB/mD5AMrT902p89TGga7LD8uM1U2Bjz088sDN+7SRUaeM140cHCscCTz+ZKAJ5Ut5e+Un4TA5d/snh7hYwrxUpqX1bGVTb6MhMsIyIfFAPr90sNNWzhQPIz4LSv1qJX/PvX+AadZj4WebWd5a4/wXPrwLadjP+Hpma4pGbEoNg4WJuQFMAa9CBQRjINijlCjPZedlmOLzbzSWI6lAkYGAjPy3kssA9mAWzNydJ/xClRy2vJLnMlDmTG3qrP5T+RTCQL+tDR6WFtQzr2HCDbm2H3lGCwaSw7RVFpAx9MroKm1jjZnJox+RvAMClIGj39BiOoXXysgnXQn3nYYdb9BOtheUVNKY0T/HwdZ6PGLWZK71otyCybz1rPBeRZTWeIT8SWopNuSwkkS6a6WW/CbFK5cd+hvxRlO6o5443+TLyFzmt1aIYsdvyi6ihPTC8Flv7goDYi6/XiSFupdcB+fXLrTxlL9PSkPjyiqhYvpBEvYv6FyYNUaY6eELoRN5tqbROIuQjEG5CcjMC5f6YiJrYo+/AgvIy81mqE3KUcFfIz58 WPM x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?u6zP+SUCY+A0c4PMDN4JGmUzZ/sfAkmGLnImJh0GPrs1NyoHsesoitRAuq?= =?iso-8859-1?Q?nj2hcn8BGC5CaMPnZuDEo5X+3Zlt1VNAzqgGVpjo/tFJ//NLHzgZlyXUPn?= =?iso-8859-1?Q?DxJ2sw53BdaAQK7UZB3InACukVDU4JL0DXGtNZ52wFIMZ/SHaxpqCamcl2?= =?iso-8859-1?Q?fhljqoBhpYIKRXwv0aVWwJFGuv1e7nyEBvMssH1SIJ2Pykelct4W0HQ9FS?= =?iso-8859-1?Q?w61uXVbyAzvWEZaLBrfpjPfgfVPDWzdkoT32WQRh6yGcO56ZurqCXEfSpF?= =?iso-8859-1?Q?F6QTw9MDkR32Zuarg1Qm/dBNvw3KXhGfKh0HkLAr1l5Dd0Kxnd3O/zS+0F?= =?iso-8859-1?Q?AmZvNAifveG6V7qwNvPusxikEdM6JFCGcj4Z85+iraO+VxnE18b8Iv7mXM?= =?iso-8859-1?Q?zkkGqenDF7Lx2u5eD0fXAmkull7cBsc1vpIYRIQXDydC+DJSmj4fJr+Uws?= =?iso-8859-1?Q?nyPempzOi1L4LeFVu/C4QwwiP4UKhWJkget9wSvOrDMzVt2vZwuPpvD9IT?= =?iso-8859-1?Q?lGuU21k/hLTDj4RQr7iHtEABh/Eq/A6urpXPocBbWm76j940af0lw08emf?= =?iso-8859-1?Q?qx7De5rcfZpD8/uZmdJA/AVtj/K190UVGhtO+bzzEtzWh8Nb+E9FilZCcK?= =?iso-8859-1?Q? X-OriginatorOrg: sct-15-20-7828-19-msonline-outlook-12d23.templateTenant X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS8PR02MB10107.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 6625f414-e88c-4eba-851b-08dcd0fdc560 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2024 18:32:33.6106 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR02MB9759 Received-SPF: pass client-ip=52.103.32.70; envelope-from=arthur.miller@live.com; helo=DUZPR83CU001.outbound.protection.outlook.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, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 09 Sep 2024 14:59:15 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:323521 Archived-At: --_004_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_ Content-Type: multipart/alternative; boundary="_000_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_" --_000_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable In elisp-mode.el, there is a function, IMO somewhat unfortunately named "elisp--beginning-of-sexp". What this function does is to place cursor at = the beginning of the innermost list, which we can perhaps call more convenientl= y, "current list". The function does so always, and is relatively well written, minor the case= when the cursor is placed in a literal string or outside a symbolic expression, = say between two top-level forms. In those cases, it jumps into the first string before the current string, which might be anywhere in the file prior to the current string, or to the beginning of the file. I took me a liberty to rename this function and update the doc to a more appropriate wording, and turn it into a command. I have also patched the above mentioned cases when it is invoked in a literal string or outside of an expression. As another consideration, I have moved this function into lisp.el (in lisp/emacs-lisp/) in the sources. It does not look like it has nothing particularly specific to EmacsLisp per se, seems like it should work on any "parenthesis"-language. I have tested it successfully in both CommonLisp an= d EmacsLisp files. I found only one user of elisp--beginning-of-sexp in the entire Emacs, and = that is the function directly above: elisp--fnsym-in-current-sexp. Emacs already has few functions for motion over lists and symbolic expressi= ons, but actually not the one that places the cursor at the beginning of a list.= I think people use "lispy" to move several sexps at a time or cook their own = via paredit to move to the end of a list or beginning of a list. At least what = I have seen in some SX posts when looking around after I made the patch. I do= n't even have one myself, I use either C-f/b to move by words or paredit-forwa= rd to move one expression at a time. IMO it is a pitty to leave "elisp--beginning-of-sexp" underused, when it ca= n perhaps be more useful to someone, so I suggest this little "re-furntituri= ng" as a small quality-of-life improvement for Lisp programmers. Of course, if there is a beginning-of-list, there should be end-of-list too= ? I have prototyped one hastly, which just inverts the condition (works), but t= he proper way would be to refactor out the common code and do the argument handling similar as in forward-sexp, or something like that. TBH I am not sure how generally useful this is (it is to me), but if it is = an acceptable change, I can refactor out the common code, and format the patch according to Emacs style, with NEWS entry and perhaps some tests (I tested interactively only). As extra chatter: a symbolic expression is either atom (non consp such as literals or symbols) or a list: > 1. Atomic symbols are S-expressions. > 2. If e1 and e2 are S-expressions, so is (e1 . e2). >From the "Recursive Functions of Symbolic Expressions" by J. McCarthy (the = paper freely available online). Thus elisp--beginning-of-sexp, is really a misnomer considering what it does. Also, Emacs already has a function that actually does move cursor to = the beginning of a sexp, (forward-sexp -1) does it, and it does it correctly. --_000_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
In elisp-mode.el, there is a function, IMO somewhat unfortunately named
"elisp--beginning-of-sexp".  What this function does is to p= lace cursor at the
beginning of the innermost list, which we can perhaps call more convenientl= y,
"current list".

The function does so always, and is relatively well written, minor the case= when
the cursor is placed in a literal string or outside a symbolic expression, = say
between two top-level forms. In those cases, it jumps into the first string=
before the current string, which might be anywhere in the file prior to the=
current string, or to the beginning of the file.

I took me a liberty to rename this function and update the doc to a more
appropriate wording, and turn it into a command. I have also patched the&nb= sp;
above mentioned cases when it is invoked in a literal string or outside of<= /div>
 an expression.

As another consideration, I have moved this function into lisp.el (in
lisp/emacs-lisp/) in the sources.  It does not look like it has nothin= g
particularly specific to EmacsLisp per se, seems like it should work on any=
"parenthesis"-language. I have tested it successfully in both Com= monLisp and
EmacsLisp files.

I found only one user of elisp--beginning-of-sexp in the entire Emacs, and = that
is the function directly above: elisp--fnsym-in-current-sexp.

Emacs already has few functions for motion over lists and symbolic expressi= ons,
but actually not the one that places the cursor at the beginning of a list.= I
think people use "lispy" to move several sexps at a time or cook = their own via
paredit to move to the end of a list or beginning of a list. At least what = I
have seen in some SX posts when looking around after I made the patch. I do= n't
 even have one myself, I use either C-f/b to move by words or paredit-= forward to
move one expression at a time. 

IMO it is a pitty to leave "elisp--beginning-of-sexp" underused, = when it can
 perhaps be more useful to someone, so I suggest this little "re-= furntituring" as a
 small quality-of-life improvement for Lisp programmers.

Of course, if there is a beginning-of-list, there should be end-of-list too= ? I
have prototyped one hastly, which just inverts the condition (works), but t= he
 proper  way would be to refactor out the common code and do the = argument
 handling similar as in forward-sexp, or something like that.

TBH I am not sure how generally useful this is (it is to me), but if it is = an
acceptable change, I can refactor out the common code, and format the patch=
according to Emacs style, with NEWS entry and perhaps some tests (I tested<= /div>
interactively only).

As extra chatter: a symbolic expression is either atom (non consp such as
literals or symbols) or a list:

> 1. Atomic symbols are S-expressions.
> 2. If e1 and e2 are S-expressions, so is (e1 . e2).

>From the "Recursive Functions of Symbolic Expressions" by J. McCa= rthy (the paper
freely available online).

Thus elisp--beginning-of-sexp, is really a misnomer considering what it
does. Also, Emacs already has a function that actually does move cursor to = the
beginning of a sexp, (forward-sexp -1) does it, and it does it correctly. --_000_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_-- --_004_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_ Content-Type: application/octet-stream; name="0001-beginning-end-of-list.patch" Content-Description: 0001-beginning-end-of-list.patch Content-Disposition: attachment; filename="0001-beginning-end-of-list.patch"; size=4065; creation-date="Mon, 09 Sep 2024 18:24:32 GMT"; modification-date="Mon, 09 Sep 2024 18:24:54 GMT" Content-Transfer-Encoding: base64 RnJvbSA5MjAxNzRiNDdmMTlhMzYwNGU0OTc4YTgyMzJkMDcwM2Q0YzUzYjc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhcnRodXIgPGFydGh1ci5taWxsZXJAbGl2ZS5jb20+CkRhdGU6 IE1vbiwgOSBTZXAgMjAyNCAyMDoxNzo0NyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIGJlZ2lubmlu Zy9lbmQtb2YtbGlzdAoKLS0tCiBsaXNwL2VtYWNzLWxpc3AvbGlzcC5lbCAgICAgIHwgNjAgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaXNwL3Byb2dtb2Rlcy9lbGlzcC1t b2RlLmVsIHwgMjYgKy0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRp b25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvbGlz cC5lbCBiL2xpc3AvZW1hY3MtbGlzcC9saXNwLmVsCmluZGV4IGU2NWVlYzUwOGQ5Li44OWM0Y2Rk ZTQ5NCAxMDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL2xpc3AuZWwKKysrIGIvbGlzcC9lbWFj cy1saXNwL2xpc3AuZWwKQEAgLTI5Niw2ICsyOTYsNjYgQEAgdXAtbGlzdAogICAgICAgICAgICAg ICAoc2lnbmFsIChjYXIgZXJyKSAoY2RyIGVycikpKSkpKSkKICAgICAgIChzZXRxIGFyZyAoLSBh cmcgaW5jKSkpKSkKIAorKGRlZnVuIGJlZ2lubmluZy1vZi1saXN0ICgpCisgICJNb3ZlIGN1cnNv ciB0byB0aGUgYmVnaW5uaW5nIG9mIGN1cnJlbnQgbGlzdC4KKworUmV0dXJuIHRoZSBudW1iZXIg b2YgbmVzdGVkIGV4cHJlc3Npb25zIHRoZSBwb2ludCB3YXMgb3ZlciBvciBhZnRlci4iCisgIChp bnRlcmFjdGl2ZSkKKyAgKGxldCAoKHBhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzIHQpCisJKG51 bS1za2lwcGVkLXNleHBzIDApCisgICAgICAgIChzeW50YXggKHN5bnRheC1wcHNzKSkpCisgICAg KHVubGVzcyAoPSAwIChudGggMCBzeW50YXgpKSA7OyBub3QgaW4gYSBsaXN0CisgICAgICAod2hl biAobnRoIDMgc3ludGF4KSA7OyBpbiBhIHN0cmluZworICAgICAgICAoZ290by1jaGFyIChudGgg OCBzeW50YXgpKSkKKyAgICAgIChjb25kaXRpb24tY2FzZSBfCisJICAocHJvZ24KKwkgICAgOzsg Rmlyc3QgYWNjb3VudCBmb3IgdGhlIGNhc2UgdGhlIHBvaW50IGlzIGRpcmVjdGx5IG92ZXIgYQor CSAgICA7OyBiZWdpbm5pbmcgb2YgYSBuZXN0ZWQgc2V4cC4KKwkgICAgKGNvbmRpdGlvbi1jYXNl IF8KKwkgICAgICAgIChsZXQgKChwIChwb2ludCkpKQorCQkgIChmb3J3YXJkLXNleHAgLTEpCisJ CSAgKGZvcndhcmQtc2V4cCAxKQorCQkgICh3aGVuICg8IChwb2ludCkgcCkKKwkJICAgIChzZXRx IG51bS1za2lwcGVkLXNleHBzIDEpKSkKKwkgICAgICAoZXJyb3IpKQorCSAgICAod2hpbGUKKwkg ICAgICAgIChsZXQgKChwIChwb2ludCkpKQorCQkgIChmb3J3YXJkLXNleHAgLTEpCisJCSAgKHdo ZW4gKDwgKHBvaW50KSBwKQorCQkgICAgKHNldHEgbnVtLXNraXBwZWQtc2V4cHMgKDErIG51bS1z a2lwcGVkLXNleHBzKSkpKSkpCisgICAgICAgIChlcnJvcikpKQorICAgIG51bS1za2lwcGVkLXNl eHBzKSkKKworKGRlZnVuIGVuZC1vZi1saXN0ICgpCisgICJNb3ZlIGN1cnNvciB0byB0aGUgZW5k IG9mIGN1cnJlbnQgbGlzdC4KKworUmV0dXJuIHRoZSBudW1iZXIgb2YgbmVzdGVkIGV4cHJlc3Np b25zIHRoZSBwb2ludCB3YXMgb3ZlciBvciBhZnRlci4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxl dCAoKHBhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzIHQpCisJKG51bS1za2lwcGVkLXNleHBzIDAp CisgICAgICAgIChzeW50YXggKHN5bnRheC1wcHNzKSkpCisgICAgKHVubGVzcyAoPSAwIChudGgg MCBzeW50YXgpKSA7OyBub3QgaW4gYSBsaXN0CisgICAgICAod2hlbiAobnRoIDMgc3ludGF4KSA7 OyBpbiBhIHN0cmluZworICAgICAgICAoZ290by1jaGFyIChudGggOCBzeW50YXgpKSkKKyAgICAg IChjb25kaXRpb24tY2FzZSBfCisJICAocHJvZ24KKwkgICAgOzsgRmlyc3QgYWNjb3VudCBmb3Ig dGhlIGNhc2UgdGhlIHBvaW50IGlzIGRpcmVjdGx5IG92ZXIgYQorCSAgICA7OyBiZWdpbm5pbmcg b2YgYSBuZXN0ZWQgc2V4cC4KKwkgICAgKGNvbmRpdGlvbi1jYXNlIF8KKwkgICAgICAgIChsZXQg KChwIChwb2ludCkpKQorCQkgIChmb3J3YXJkLXNleHAgMSkKKwkJICAoZm9yd2FyZC1zZXhwIC0x KQorCQkgICh3aGVuICg+IChwb2ludCkgcCkKKwkJICAgIChzZXRxIG51bS1za2lwcGVkLXNleHBz IDEpKSkKKwkgICAgICAoZXJyb3IpKQorCSAgICAod2hpbGUKKwkgICAgICAgIChsZXQgKChwIChw b2ludCkpKQorCQkgIChmb3J3YXJkLXNleHAgMSkKKwkJICAod2hlbiAoPiAocG9pbnQpIHApCisJ CSAgICAoc2V0cSBudW0tc2tpcHBlZC1zZXhwcyAoMSsgbnVtLXNraXBwZWQtc2V4cHMpKSkpKSkK KyAgICAgICAgKGVycm9yKSkpCisgICAgbnVtLXNraXBwZWQtc2V4cHMpKQorCiAoZGVmdW4ga2ls bC1zZXhwICgmb3B0aW9uYWwgYXJnIGludGVyYWN0aXZlKQogICAiS2lsbCB0aGUgc2V4cCAoYmFs YW5jZWQgZXhwcmVzc2lvbikgZm9sbG93aW5nIHBvaW50LgogV2l0aCBBUkcsIGtpbGwgdGhhdCBt YW55IHNleHBzIGFmdGVyIHBvaW50LgpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvZWxpc3At bW9kZS5lbCBiL2xpc3AvcHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwKaW5kZXggOWJmNmY5MjE3Yzgu LjczNDUzMDFkMmU1IDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9lbGlzcC1tb2RlLmVsCisr KyBiL2xpc3AvcHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwKQEAgLTIwNDIsMzYgKzIwNDIsMTIgQEAg ZWxpc3AtLWRvY3N0cmluZy1maXJzdC1saW5lCiAoZGVmdW4gZWxpc3AtLWZuc3ltLWluLWN1cnJl bnQtc2V4cCAoKQogICAoc2F2ZS1leGN1cnNpb24KICAgICAodW5sZXNzIChudGggOCAoc3ludGF4 LXBwc3MpKQotICAgICAgKGxldCAoKGFyZ3VtZW50LWluZGV4ICgxLSAoZWxpc3AtLWJlZ2lubmlu Zy1vZi1zZXhwKSkpKQorICAgICAgKGxldCAoKGFyZ3VtZW50LWluZGV4ICgxLSAoYmVnaW5uaW5n LW9mLWxpc3QpKSkpCiAgICAgICAgIDs7IElmIHdlIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGZ1 bmN0aW9uIG5hbWUsIHRoaXMgd2lsbCBiZSAtMS4KICAgICAgICAgKHdoZW4gKDwgYXJndW1lbnQt aW5kZXggMCkKICAgICAgICAgICAoc2V0cSBhcmd1bWVudC1pbmRleCAwKSkKICAgICAgICAgKGxp c3QgKGVsaXNwLS1jdXJyZW50LXN5bWJvbCkgYXJndW1lbnQtaW5kZXgpKSkpKQogCi07OyBNb3Zl IHRvIHRoZSBiZWdpbm5pbmcgb2YgY3VycmVudCBzZXhwLiAgUmV0dXJuIHRoZSBudW1iZXIgb2Yg bmVzdGVkCi07OyBzZXhwIHRoZSBwb2ludCB3YXMgb3ZlciBvciBhZnRlci4KLShkZWZ1biBlbGlz cC0tYmVnaW5uaW5nLW9mLXNleHAgKCkKLSAgKGxldCAoKHBhcnNlLXNleHAtaWdub3JlLWNvbW1l bnRzIHQpCi0JKG51bS1za2lwcGVkLXNleHBzIDApKQotICAgIChjb25kaXRpb24tY2FzZSBfCi0J KHByb2duCi0JICA7OyBGaXJzdCBhY2NvdW50IGZvciB0aGUgY2FzZSB0aGUgcG9pbnQgaXMgZGly ZWN0bHkgb3ZlciBhCi0JICA7OyBiZWdpbm5pbmcgb2YgYSBuZXN0ZWQgc2V4cC4KLQkgIChjb25k aXRpb24tY2FzZSBfCi0JICAgICAgKGxldCAoKHAgKHBvaW50KSkpCi0JCShmb3J3YXJkLXNleHAg LTEpCi0JCShmb3J3YXJkLXNleHAgMSkKLQkJKHdoZW4gKDwgKHBvaW50KSBwKQotCQkgIChzZXRx IG51bS1za2lwcGVkLXNleHBzIDEpKSkKLQkgICAgKGVycm9yKSkKLQkgICh3aGlsZQotCSAgICAg IChsZXQgKChwIChwb2ludCkpKQotCQkoZm9yd2FyZC1zZXhwIC0xKQotCQkod2hlbiAoPCAocG9p bnQpIHApCi0JCSAgKHNldHEgbnVtLXNraXBwZWQtc2V4cHMgKDErIG51bS1za2lwcGVkLXNleHBz KSkpKSkpCi0gICAgICAoZXJyb3IpKQotICAgIG51bS1za2lwcGVkLXNleHBzKSkKLQogOzsgcmV0 dXJucyBuaWwgdW5sZXNzIGN1cnJlbnQgd29yZCBpcyBhbiBpbnRlcm5lZCBzeW1ib2wuCiAoZGVm dW4gZWxpc3AtLWN1cnJlbnQtc3ltYm9sICgpCiAgIChsZXQgKChjIChjaGFyLWFmdGVyIChwb2lu dCkpKSkKLS0gCjIuNDYuMAoK --_004_AS8PR02MB1010719914E39AC2151D8225D96992AS8PR02MB10107eu_--