From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id wK4LMKeYomUkSAAA62LTzQ:P1 (envelope-from ) for ; Sat, 13 Jan 2024 15:05:27 +0100 Received: from aspmx1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id wK4LMKeYomUkSAAA62LTzQ (envelope-from ) for ; Sat, 13 Jan 2024 15:05:27 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=posteo.net header.s=2017 header.b=RzCFj+3F; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=posteo.net ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1705154727; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=dOSDfnS1nOt5mlYqr7tAVy0W97sd8xjPXWLCr5ON/S8=; b=gvF4ZbFIpyMlvZ3icIk7/8xM727bq0egYiTFcF4y3q4LDmJV2ZEvFhnFnxxTTCNvIzP6Ai OQBzylMOkw2HdVDPD4ltzbyc5GH2CNuLXiiIJpifOvGpyFQ3eAk1GrSfpv9ZohnKqeD3N/ 7G7Ze5On3MXpP2+TxxXhl22EATK1c38XUnRb9V77hvDd3Old+KM7Iu7Ra5Gf/QIhesXlVF NPjwhUsAa3fcMDmClTYd+E+cGc3Mx2pU2LGB6/JvNKS1QbXrAEvzajIMMhYOhpsbyaOimw TWJ/l2WI/JgNJ/SA+8kAtxietsubVCZjupYMirRjKk9hMnwcaAY5438hBjYzqQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=posteo.net header.s=2017 header.b=RzCFj+3F; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=posteo.net ARC-Seal: i=1; s=key1; d=yhetil.org; t=1705154727; a=rsa-sha256; cv=none; b=lPRp1U16wtbihf2uIRdNJxaUh3KW9pECvnHQPvoBJg63nqxlwsH0C4FxeEJM5q2gV49a1B DCaKNe7Sskt+t8io6o75ymdxKaw0WMMcV8aUY+5FFz7QXQ3S5aN2qKL2cjh0cZr/r4YN8v t4UQYexDe+AKpK7XBtC+l4ioomGyKizKY5stS8BkkiYSmG/QB8YxHcaXmCL4obJdFjnFRt UR6n1F/1RpWZ7ODWdg+dvIpR63kjAHdnMbAz19T0S+Uh4M+e8NP+zB6tpAh3K6AS3XRtGv xRpY3pARmgtxNxiLMDHGWFsE/jKyY6jNQQujXBj+kv6V4zePoicAjg0yofX3LA== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 48C8C452CC for ; Sat, 13 Jan 2024 15:05:27 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rOecq-0004Xs-JM; Sat, 13 Jan 2024 09:04:40 -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 ) id 1rOeco-0004Vx-PZ for emacs-orgmode@gnu.org; Sat, 13 Jan 2024 09:04:38 -0500 Received: from mout01.posteo.de ([185.67.36.65]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rOecl-0004IW-Tr for emacs-orgmode@gnu.org; Sat, 13 Jan 2024 09:04:38 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 763B8240027 for ; Sat, 13 Jan 2024 15:04:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1705154672; bh=4wA7R+nUeN3QuC1mkMNakDxuaFMQ00ZrzpYcjADJseI=; h=MIME-Version:Date:From:To:Cc:Subject:Message-ID:From; b=RzCFj+3FGq32TIwCMM0hxYxouyUY+IaEAQ9ZYUhkhPol7hRffZcn4oCC1FYv67pg1 5XQYc5dm85oKKH7NWYbgb8q+eyMP1loc5p4CCUCF//KkRvd7OLzvbdQWroKXbGRiE4 +eICgpM3GJ9XFoG8IIsWY9eyeI2D+V1tlaxWcdD+U0mNcbvkYWe/WEdMM7Y+5e6W23 gGfcqtIX/CbPBgvFkBYSKRh32yQuqV+QiB6GnwBLY325tLmJTEiMxq0OdnP21YPJMh BDfdXZJ4fV/H3BK8lUpVHc4Q/SKNWB7PJqwuZdYG9+z8aYHDY1lCWhSvZ218Z3ivwA DKp09ge9sLS0Q== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4TC0Wz3X32z9rxN; Sat, 13 Jan 2024 15:04:31 +0100 (CET) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_6960ba22b7f20ee8727dcae482379b88" Date: Sat, 13 Jan 2024 14:04:31 +0000 From: gerard.vermeulen@posteo.net To: Ihor Radchenko Cc: Emacs orgmode , emacs-orgmode-bounces+gerard.vermeulen=posteo.net@gnu.org Subject: Re: [PATCH] org-babel-demarcate-block: split using element API In-Reply-To: <87bk9uy31w.fsf@localhost> References: <7e41f9b6e9026a404e256f33371e974c@posteo.net> <87zfxq78ff.fsf@localhost> <87zfxo3taa.fsf@localhost> <87v88a78qd.fsf@localhost> <7f23ea966f0f0aad3fad29b0b96864f3@posteo.net> <87y1d55fc6.fsf@localhost> <37fdcc4bfcf734c2e5ec439d40b4f7d8@posteo.net> <878r50yqmo.fsf@localhost> <442006329cfba666710c989aece5191a@posteo.net> <261356c53e857e0bc4b04f884366edfa@posteo.net> <87bk9uy31w.fsf@localhost> Message-ID: <680e4a4fccf4f3c5c8f51d8215257eff@posteo.net> Received-SPF: pass client-ip=185.67.36.65; envelope-from=gerard.vermeulen@posteo.net; helo=mout01.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 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, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Spam-Score: -10.40 X-Migadu-Queue-Id: 48C8C452CC X-Spam-Score: -10.40 X-Migadu-Scanner: mx11.migadu.com X-TUID: at4OI65nwW/G --=_6960ba22b7f20ee8727dcae482379b88 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Attached you'll find a new patch addressing all you issues. I have integrated our discussion leading to https://list.orgmode.org/87ply6nyue.fsf@localhost/ Please feel free to add the line Co-authored-by: Ihor Radchenko to the commit message. I think you should. On 09.01.2024 15:49, Ihor Radchenko wrote: > gerard.vermeulen@posteo.net writes: > >> Attached you'll find a new patch fixing the three wrong lines in the >> previous >> and now the ERT test checks also for `user-error's. > > Thanks! > >>> 2. Your patch does not create space between the src blocks, unlike >>> what >>> we have on main. >>> I think that you need to (1) create a single blank lines between >>> blocks (set :post-blank property to 1); (2) keep the number blank >>> lines after the last block the same as in the initial block (copy >>> the >>> :post-blank property and assign it to the last inserted src >>> block). >>> >>> For C-u argument, do not do anything special - just keep the >>> original >>> :post-blank as is. It is the closest to what we have on main. >>> >> >> The previous version of the patch had >> + (insert (if arg (concat stars "\n") "")) >> and now it has >> + (insert (if arg (concat stars "\n") "\n")) >> I prefer this over setting the :post-blank property because it is >> simpler. > > Yet, it will lead to large spacing between src blocks in the following > scenario: > > -------------------- > #+begin_src emacs-lisp > "This is test" > "This is test2" > "This is test3" > #+end_src > > > > > > > Paragraph. > -------------------- > I have used the :post-blank property to fix it. The result is now: -------------------- #+begin_src emacs-lisp "This is test" #+end_src #+begin_src emacs-lisp "This is test2" "This is test3" #+end_src Paragraph. -------------------- Here is also a redone comparison between main and patch: ------- begin comparison main and patch #+begin_src emacs-lisp :results silent (setopt org-adapt-indentation t org-edit-src-content-indentation 2 org-src-preserve-indentation nil)) #+end_src * main **** C-u C-x C-v C-d #+CAPTION: caption. #+NAME: name. #+BEGIN_SRC emacs-lisp above ;; region below #+END_SRC becomes **** C-u C-x C-v C-d #+CAPTION: caption. #+NAME: name. #+BEGIN_SRC emacs-lisp above #+END_SRC **** #+BEGIN_SRC emacs-lisp ;; region #+END_SRC **** #+BEGIN_SRC emacs-lisp below #+END_SRC pitfall * patch **** C-u C-x C-v C-d #+CAPTION: caption. #+NAME: name. #+BEGIN_SRC emacs-lisp above ;; region below #+END_SRC becomes **** C-u C-x C-v C-d #+caption: caption. #+name: name. #+begin_src emacs-lisp above #+end_src **** #+begin_src emacs-lisp ;; region #+end_src **** #+begin_src emacs-lisp below #+end_src pitfall ------- end comparison main and patch > > Also, your new version of the patch will completely misbehave because > of > setting mark. Please, use `region-beginning' and `region-end' instead. > Setting and checking mark is not to be done in Elisp - it only make > sense when transient-mark-mode is enabled. > Done. See below. > >> * Adding a user option for properties to set to nil in >> org-element-copy. >> >> This may be overkill, but something like: >> >> #+begin_src emacs-lisp :results nil :tangle no >> (defcustom org-babel-demarcate-block-delete '(:caption :name) >> "List of things to delete from blocks below the upper block when >> splitting blocks by demarcation. Possible things are `:caption' to >> delete \"#+CAPTION:\" keywords, `:header' to delete \"#+HEADER:\" >> keywords, `:name' to delete \"#+NAME:\" keywords, and `switches' >> to delete e.g. \"-i +n 10\" from the \"#+BEGIN_SRC\" line." >> :group 'org-babel >> :package-version '(Org . "9.7") >> :type '(set :tag "Things to delete when splitting blocks by >> demarcation" >> (const :caption) >> (const :header) >> (const :name) >> (const :switches)) >> :initialize #'custom-initialize-default >> :set (lambda (sym val) >> (set-default sym val))) >> #+end_src > > That would make sense. Although, we do not have to limit the possible > options to just what you listed. Arbitrary affiliated keywords might > also be excluded. For example, #+ATTR_HTML keyword is stored in src > block object as :attr_html. > I prefer to postpone work on this idea. > >> + ;; To simplify the (unless ... (user-error ...)). >> + (unless (org-region-active-p) (set-mark (point))) > > Setting mark causes issue in my above example. > >> + ;; Test mark to be more specific than "Not at a block". >> + (unless (and (>= (point) body-beg) (<= (mark) body-end)) >> + (user-error "Select within the source block body to split >> it")) > > Here, it is better to use `region-beginning', `point', and > `region-end'. > `region-beginning', unlike mark and point, is guaranteed to be _before_ > `region-end'. Mark may be before point, in contrast. > > You can write something like > > (unless > (if (org-region-active-p) > (<= body-beg (region-beginning) (region-end) body-end) > (>= body-beg (point))) > (user-error ...)) Done, using a better initialization of parts, the test simplifies to: ;; Point or region are within body when parts is in increasing order. (unless (apply #'<= parts) (user-error "Select within the source block body to split it")) Regards -- Gerard --=_6960ba22b7f20ee8727dcae482379b88 Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name=0001-org-babel-demarcate-block-split-using-element-API.patch Content-Disposition: attachment; filename=0001-org-babel-demarcate-block-split-using-element-API.patch; size=18105 RnJvbSA1NmQ2YmYyYjgxMDI3ZWUxYzVlZTBjYzA1YjMzMDFmZTU4YTNkOWRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZXJhcmQgVmVybWV1bGVuIDxnZXJhcmQudmVybWV1bGVuQHBv c3Rlby5uZXQ+CkRhdGU6IFRodSwgMTEgSmFuIDIwMjQgMjA6MjA6MDEgKzAxMDAKU3ViamVjdDog W1BBVENIXSBvcmctYmFiZWwtZGVtYXJjYXRlLWJsb2NrOiBzcGxpdCB1c2luZyBlbGVtZW50IEFQ SQoKKiBsaXNwL29iLWJhYmVsLmVsIChvcmctYmFiZWwtZGVtYXJjYXRlLWJsb2NrKTogTW9kaWZ5 IGEgY29weQpvZiAob3JnLWVsZW1lbnQtYXQtcG9pbnQpIHRvIHJlcGxhY2UgdGhlIG9sZCBzb3Vy Y2UgYmxvY2sgd2l0aCAyIG9yIDMKbmV3IG1vZGlmaWVkIGNvcGllcyBieSBtZWFucyBvZiBgb3Jn LWVsZW1lbnQtaW50ZXJwcmV0LWRhdGEnLiAgVGhlIDFzdApzb3VyY2UgYmxvY2sgY29udGFpbnMg dGhlIHRleHQgZnJvbSB0aGUgYm9keSBvZiB0aGUgb2xkIGJsb2NrIGJlZm9yZQpwb2ludCBvciBy ZWdpb24sIHRoZSAybmQgYmxvY2sgY29udGFpbnMgdGhlIGJvZHkgdGV4dCBhZnRlciBwb2ludCBv cgpib2R5IHRleHQgd2l0aGluIHJlZ2lvbiwgYW5kIGluIGNhc2Ugb2YgcmVnaW9uLCB0aGUgM3Jk IGJsb2NrIGNvbnRhaW5zCnRoZSB0ZXh0IGFmdGVyIHJlZ2lvbi4gIFRoZSBjYXB0aW9uIGFuZCB0 aGUgbmFtZSBhcmUgZGVsZXRlZCBmcm9tIHRoZQoxIG9yIDIgYmxvY2tzIGJlbG93IHRoZSB1cHBl ciBzb3VyY2UgYmxvY2suICBJbmRlbnQgYWxsIGJsb2NrcwppbW1lZGlhdGVseSBhZnRlciBpbnNl cnRpb24gKHBpdGZhbGwsIHNlZSBsaW5rKS4gIFVzZSA6cG9zdC1ibGFuayB0bwpjb250cm9sIHdo aXRlIGxpbmVzIGJldHdlZW4gaW5zZXJ0ZWQgYmxvY2tzLiAgTGVhdmUgcG9pbnQgYXQgdGhlIGxh c3QKaW5zZXJ0ZWQgYmxvY2suICBUcnlpbmcgdG8gc3BsaXQgd2hlbiBwb2ludCBvciByZWdpb24g aXMgbm90IHdpdGhpbgp0aGUgYm9keSBvZiB0aGUgb2xkIHNvdXJjZSBibG9jayByYWlzZXMgYW4g dXNlci1lcnJvci4KKiBsaXNwL29iLWJhYmVsIChvcmctZ2V0LXNyYy1ibG9jay1pbmZvKTogYWRk IHRoZSAid2l0aGluIGJsYW5rIGxpbmVzCmFmdGVyIGEgc291cmNlIGJsb2NrIiBjb25kaXRpb24g dG8gdGhlIGRvYy1zdHJpbmcgdG8gbWF0Y2ggaXQgd2l0aCB0aGUKZG9jLXN0cmluZyBvZiBhbmQg YSBjb21tZW50IGluIGBvcmctYmFiZWwtZGVtYXJjYXRlLWJsb2NrJy4KKiB0ZXN0aW5nL2xpc3Av dGVzdC1vYi5lbCAodGVzdC1vYi9kZW1hcmNhdGUtYmxvY2spOiBOZXcgdGVzdC4gIEl0CmNoZWNr cyB0ZXN0IGNhc2VzIHRoYXQgYnJva2UgZWFybGllciB2ZXJzaW9ucyBvZiB0aGlzIHBhdGNoLgoK TGluazogaHR0cHM6Ly9saXN0Lm9yZ21vZGUub3JnLzg3cGx5Nm55dWUuZnNmQGxvY2FsaG9zdC8K LS0tCiBsaXNwL29iLWNvcmUuZWwgICAgICAgICB8ICA4MCArKysrKysrKystLS0tLQogdGVzdGlu Zy9saXNwL3Rlc3Qtb2IuZWwgfCAyMjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyNzUgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9vYi1jb3JlLmVsIGIvbGlzcC9vYi1jb3JlLmVsCmluZGV4 IDFkZTNhZjZhZC4uNTVmNzQ3ZWUxIDEwMDY0NAotLS0gYS9saXNwL29iLWNvcmUuZWwKKysrIGIv bGlzcC9vYi1jb3JlLmVsCkBAIC03MywxMCArNzMsMTIgQEAKIChkZWNsYXJlLWZ1bmN0aW9uIG9y Zy1lbGVtZW50LXBhcmVudCAib3JnLWVsZW1lbnQtYXN0IiAobm9kZSkpCiAoZGVjbGFyZS1mdW5j dGlvbiBvcmctZWxlbWVudC10eXBlICJvcmctZWxlbWVudC1hc3QiIChub2RlICZvcHRpb25hbCBh bm9ueW1vdXMpKQogKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWVsZW1lbnQtdHlwZS1wICJvcmctZWxl bWVudC1hc3QiIChub2RlICZvcHRpb25hbCB0eXBlcykpCisoZGVjbGFyZS1mdW5jdGlvbiBvcmct ZWxlbWVudC1pbnRlcnByZXQtZGF0YSAib3JnLWVsZW1lbnQiIChkYXRhKSkKIChkZWNsYXJlLWZ1 bmN0aW9uIG9yZy1lbnRyeS1nZXQgIm9yZyIgKHBvbSBwcm9wZXJ0eSAmb3B0aW9uYWwgaW5oZXJp dCBsaXRlcmFsLW5pbCkpCiAoZGVjbGFyZS1mdW5jdGlvbiBvcmctZXNjYXBlLWNvZGUtaW4tcmVn aW9uICJvcmctc3JjIiAoYmVnIGVuZCkpCiAoZGVjbGFyZS1mdW5jdGlvbiBvcmctZm9yd2FyZC1o ZWFkaW5nLXNhbWUtbGV2ZWwgIm9yZyIgKGFyZyAmb3B0aW9uYWwgaW52aXNpYmxlLW9rKSkKIChk ZWNsYXJlLWZ1bmN0aW9uIG9yZy1pbi1jb21tZW50ZWQtaGVhZGluZy1wICJvcmciICgmb3B0aW9u YWwgbm8taW5oZXJpdGFuY2UpKQorKGRlY2xhcmUtZnVuY3Rpb24gb3JnLWluZGVudC1ibG9jayAi b3JnIiAoKSkKIChkZWNsYXJlLWZ1bmN0aW9uIG9yZy1pbmRlbnQtbGluZSAib3JnIiAoKSkKIChk ZWNsYXJlLWZ1bmN0aW9uIG9yZy1saXN0LWdldC1saXN0LWVuZCAib3JnLWxpc3QiIChpdGVtIHN0 cnVjdCBwcmV2cykpCiAoZGVjbGFyZS1mdW5jdGlvbiBvcmctbGlzdC1wcmV2cy1hbGlzdCAib3Jn LWxpc3QiIChzdHJ1Y3QpKQpAQCAtNzAwLDggKzcwMiw5IEBAIEJ5IGRlZmF1bHQsIGNvbnNpZGVy IHRoZSBibG9jayBhdCBwb2ludC4gIEhvd2V2ZXIsIHdoZW4gb3B0aW9uYWwKIGFyZ3VtZW50IERB VFVNIGlzIHByb3ZpZGVkLCBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20gdGhhdCBwYXJzZWQKIG9i amVjdCBpbnN0ZWFkLgogCi1SZXR1cm4gbmlsIGlmIHBvaW50IGlzIG5vdCBvbiBhIHNvdXJjZSBi bG9jay4gIE90aGVyd2lzZSwgcmV0dXJuCi1hIGxpc3Qgd2l0aCB0aGUgZm9sbG93aW5nIHBhdHRl cm46CitSZXR1cm4gbmlsIGlmIHBvaW50IGlzIG5vdCBvbiBhIHNvdXJjZSBibG9jayAoYmxhbmsg bGluZXMgYWZ0ZXIgYQorc291cmNlIGJsb2NrIGFyZSBjb25zaWRlcmVkIGEgcGFydCBvZiB0aGF0 IHNvdXJjZSBibG9jaykuCitPdGhlcndpc2UsIHJldHVybiBhIGxpc3Qgd2l0aCB0aGUgZm9sbG93 aW5nIHBhdHRlcm46CiAKICAgKGxhbmd1YWdlIGJvZHkgYXJndW1lbnRzIHN3aXRjaGVzIG5hbWUg c3RhcnQgY29kZXJlZikiCiAgIChsZXQqICgoZGF0dW0gKG9yIGRhdHVtIChvcmctZWxlbWVudC1j b250ZXh0KSkpCkBAIC0yMDUxLDcgKzIwNTQsNyBAQCBXaXRoIG9wdGlvbmFsIHByZWZpeCBhcmd1 bWVudCBBUkcsIGp1bXAgYmFja3dhcmQgQVJHIG1hbnkgc291cmNlIGJsb2Nrcy4iCiAgICAgICAo Z290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgNSkpKSkpCiAKIChkZWZ1biBvcmctYmFiZWwtZGVt YXJjYXRlLWJsb2NrICgmb3B0aW9uYWwgYXJnKQotICAiV3JhcCBvciBzcGxpdCB0aGUgY29kZSBp biB0aGUgcmVnaW9uIG9yIG9uIHRoZSBwb2ludC4KKyAgIldyYXAgb3Igc3BsaXQgdGhlIGNvZGUg aW4gYW4gYWN0aXZlIHJlZ2lvbiBvciBhdCBwb2ludC4KIAogV2l0aCBwcmVmaXggYXJndW1lbnQg QVJHLCBhbHNvIGNyZWF0ZSBhIG5ldyBoZWFkaW5nIGF0IHBvaW50LgogCkBAIC0yMDYxLDQxICsy MDY0LDYyIEBAIGlzIGNyZWF0ZWQuICBJbiBib3RoIGNhc2VzIGlmIHRoZSByZWdpb24gaXMgZGVt YXJjYXRlZCBhbmQgaWYgdGhlCiByZWdpb24gaXMgbm90IGFjdGl2ZSB0aGVuIHRoZSBwb2ludCBp cyBkZW1hcmNhdGVkLgogCiBXaGVuIGNhbGxlZCB3aXRoaW4gYmxhbmsgbGluZXMgYWZ0ZXIgYSBj b2RlIGJsb2NrLCBjcmVhdGUgYSBuZXcgY29kZQotYmxvY2sgb2YgdGhlIHNhbWUgbGFuZ3VhZ2Ug d2l0aCB0aGUgcHJldmlvdXMuIgorYmxvY2sgb2YgdGhlIHNhbWUgbGFuZ3VhZ2UgYXMgdGhlIHBy ZXZpb3VzLiIKICAgKGludGVyYWN0aXZlICJQIikKICAgKGxldCogKChpbmZvIChvcmctYmFiZWwt Z2V0LXNyYy1ibG9jay1pbmZvICduby1ldmFsKSkKIAkgKHN0YXJ0IChvcmctYmFiZWwtd2hlcmUt aXMtc3JjLWJsb2NrLWhlYWQpKQogICAgICAgICAgOzsgYHN0YXJ0JyB3aWxsIGJlIG5pbCB3aGVu IHdpdGhpbiBzcGFjZSBsaW5lcyBhZnRlciBzcmMgYmxvY2suCiAJIChibG9jayAoYW5kIHN0YXJ0 IChtYXRjaC1zdHJpbmcgMCkpKQotCSAoaGVhZGVycyAoYW5kIHN0YXJ0IChtYXRjaC1zdHJpbmcg NCkpKQorICAgICAgICAgKGJvZHktYmVnIChhbmQgc3RhcnQgKG1hdGNoLWJlZ2lubmluZyA1KSkp CisgICAgICAgICAoYm9keS1lbmQgKGFuZCBzdGFydCAobWF0Y2gtZW5kIDUpKSkKIAkgKHN0YXJz IChjb25jYXQgKG1ha2Utc3RyaW5nIChvciAob3JnLWN1cnJlbnQtbGV2ZWwpIDEpID8qKSAiICIp KQogCSAodXBwZXItY2FzZS1wIChhbmQgYmxvY2sKIAkJCSAgICAobGV0IChjYXNlLWZvbGQtc2Vh cmNoKQogCQkJICAgICAgKHN0cmluZy1tYXRjaC1wICIjXFwrQkVHSU5fU1JDIiBibG9jaykpKSkp CiAgICAgKGlmIChhbmQgaW5mbyBzdGFydCkgOzsgQXQgc3JjIGJsb2NrLCBidXQgbm90IHdpdGhp biBibGFuayBsaW5lcyBhZnRlciBpdC4KLSAgICAgICAgKG1hcGMKLSAgICAgICAgIChsYW1iZGEg KHBsYWNlKQotICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICAoZ290by1j aGFyIHBsYWNlKQotICAgICAgICAgICAgIChsZXQgKChsYW5nIChudGggMCBpbmZvKSkKLSAgICAg ICAgICAgICAgICAgICAoaW5kZW50IChtYWtlLXN0cmluZyAob3JnLWN1cnJlbnQtdGV4dC1pbmRl bnRhdGlvbikgP1xzKSkpCi0JICAgICAgICh3aGVuIChzdHJpbmctbWF0Y2ggIl5bWzpzcGFjZTpd XSokIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu ZyAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lLWVuZC1wb3NpdGlvbikpKQotICAgICAgICAg ICAgICAgICAoZGVsZXRlLXJlZ2lvbiAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChsaW5lLWVu ZC1wb3NpdGlvbikpKQotICAgICAgICAgICAgICAgKGluc2VydCAoY29uY2F0Ci0JCSAgICAgICAg KGlmIChsb29raW5nLWF0ICJeIikgIiIgIlxuIikKLQkJICAgICAgICBpbmRlbnQgKGlmIHVwcGVy LWNhc2UtcCAiIytFTkRfU1JDXG4iICIjK2VuZF9zcmNcbiIpCi0JCSAgICAgICAgKGlmIGFyZyBz dGFycyBpbmRlbnQpICJcbiIKLQkJICAgICAgICBpbmRlbnQgKGlmIHVwcGVyLWNhc2UtcCAiIytC RUdJTl9TUkMgIiAiIytiZWdpbl9zcmMgIikKLQkJICAgICAgICBsYW5nCi0JCSAgICAgICAgKGlm ICg+IChsZW5ndGggaGVhZGVycykgMSkKLQkJCSAgICAoY29uY2F0ICIgIiBoZWFkZXJzKSBoZWFk ZXJzKQotCQkgICAgICAgIChpZiAobG9va2luZy1hdCAiW1xuXHJdIikKLQkJCSAgICAiIgotCQkJ ICAoY29uY2F0ICJcbiIgKG1ha2Utc3RyaW5nIChjdXJyZW50LWNvbHVtbikgPyApKSkpKSkpCi0J ICAgKG1vdmUtZW5kLW9mLWxpbmUgMikpCi0gICAgICAgICAoc29ydCAoaWYgKG9yZy1yZWdpb24t YWN0aXZlLXApIChsaXN0IChtYXJrKSAocG9pbnQpKSAobGlzdCAocG9pbnQpKSkgIyc+KSkKKyAg ICAgICAgKGxldCogKChjb3B5IChvcmctZWxlbWVudC1jb3B5IChvcmctZWxlbWVudC1hdC1wb2lu dCkpKQorICAgICAgICAgICAgICAgKGJlZm9yZSAob3JnLWVsZW1lbnQtYmVnaW4gY29weSkpCisg ICAgICAgICAgICAgICAoYmV5b25kIChvcmctZWxlbWVudC1lbmQgY29weSkpCisgICAgICAgICAg ICAgICAocGFydHMKKyAgICAgICAgICAgICAgICAoaWYgKG9yZy1yZWdpb24tYWN0aXZlLXApCisg ICAgICAgICAgICAgICAgICAgIChsaXN0IGJvZHktYmVnIChyZWdpb24tYmVnaW5uaW5nKSAocmVn aW9uLWVuZCkgYm9keS1lbmQpCisgICAgICAgICAgICAgICAgICAobGlzdCBib2R5LWJlZyAocG9p bnQpIGJvZHktZW5kKSkpCisgICAgICAgICAgICAgICAobiAoLSAobGVuZ3RoIHBhcnRzKSAyKSkg OzsgMSBvciAyIHBhcnRzIGluIGBkb2xpc3QnIGJlbG93LgorICAgICAgICAgICAgICAgOzsgYHBv c3QtYmxhbmsnIGNhY2hlcyB0aGUgcHJvcGVydHkgYmVmb3JlIHNldHRpbmcgaXQgdG8gMC4KKyAg ICAgICAgICAgICAgIChwb3N0LWJsYW5rIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cG9zdC1ibGFu ayBjb3B5KSkpCisgICAgICAgICAgOzsgUG9pbnQgb3IgcmVnaW9uIGFyZSB3aXRoaW4gYm9keSB3 aGVuIHBhcnRzIGlzIGluIGluY3JlYXNpbmcgb3JkZXIuCisgICAgICAgICAgKHVubGVzcyAoYXBw bHkgIyc8PSBwYXJ0cykKKyAgICAgICAgICAgICh1c2VyLWVycm9yICJTZWxlY3Qgd2l0aGluIHRo ZSBzb3VyY2UgYmxvY2sgYm9keSB0byBzcGxpdCBpdCIpKQorICAgICAgICAgIChzZXRxIHBhcnRz IChtYXBjYXIgKGxhbWJkYSAocCkgKGJ1ZmZlci1zdWJzdHJpbmcgKGNhciBwKSAoY2RyIHApKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXEtbWFwbiAjJ2NvbnMgcGFydHMgKGNk ciBwYXJ0cykpKSkKKyAgICAgICAgICAoZGVsZXRlLXJlZ2lvbiBiZWZvcmUgYmV5b25kKQorICAg ICAgICAgIDs7IFNldCBgOnBvc3QtYmxhbmsnIHRvIDAuICBXZSB0YWtlIGNhcmUgb2Ygc3BhY2lu ZyBiZXR3ZWVuIGJsb2Nrcy4KKyAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGNv cHkgOnBvc3QtYmxhbmsgMCkKKyAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGNv cHkgOnZhbHVlIChjYXIgcGFydHMpKQorICAgICAgICAgIChpbnNlcnQgKG9yZy1lbGVtZW50LWlu dGVycHJldC1kYXRhIGNvcHkpKQorICAgICAgICAgIDs7IGBvcmctaW5kZW50LWJsb2NrJyBtYXkg c2VlIGFub3RoZXIgYG9yZy1lbGVtZW50JyAoZS5nLiBwYXJhZ3JhcGgpCisgICAgICAgICAgOzsg aW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGJsb2NrLiAgRW5zdXJlIHRvIGluZGVudCB0aGUgaW5zZXJ0 ZWQgYmxvY2sKKyAgICAgICAgICA7OyBhbmQgbW92ZSBwb2ludCB0byBpdHMgZW5kLgorICAgICAg ICAgIChvcmctYmFiZWwtcHJldmlvdXMtc3JjLWJsb2NrIDEpCisgICAgICAgICAgKG9yZy1pbmRl bnQtYmxvY2spCisgICAgICAgICAgKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtZW5kIChvcmctZWxl bWVudC1hdC1wb2ludCkpKQorICAgICAgICAgIChvcmctZWxlbWVudC1wdXQtcHJvcGVydHkgY29w eSA6Y2FwdGlvbiBuaWwpCisgICAgICAgICAgKG9yZy1lbGVtZW50LXB1dC1wcm9wZXJ0eSBjb3B5 IDpuYW1lIG5pbCkKKyAgICAgICAgICA7OyBJbnNlcnQgdGhlIDJuZCBibG9jaywgYW5kIHRoZSAz cmQgYmxvY2sgd2hlbiByZWdpb24gaXMgYWN0aXZlLgorICAgICAgICAgIChkb2xpc3QgKHBhcnQg KGNkciBwYXJ0cykpCisgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0LXByb3BlcnR5IGNvcHkg OnZhbHVlIHBhcnQpCisgICAgICAgICAgICAoaW5zZXJ0IChpZiBhcmcgKGNvbmNhdCBzdGFycyAi XG4iKSAiXG4iKSkKKyAgICAgICAgICAgIChjbC1kZWNmIG4pCisgICAgICAgICAgICAod2hlbiAo PSBuIDApCisgICAgICAgICAgICAgIDs7IFVzZSBgcG9zdC1ibGFuaycgdG8gcmVzZXQgdGhlIHBy b3BlcnR5IG9mIHRoZSBsYXN0IGJsb2NrLgorICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHV0 LXByb3BlcnR5IGNvcHkgOnBvc3QtYmxhbmsgcG9zdC1ibGFuaykpCisgICAgICAgICAgICAoaW5z ZXJ0IChvcmctZWxlbWVudC1pbnRlcnByZXQtZGF0YSBjb3B5KSkKKyAgICAgICAgICAgIDs7IEVu c3VyZSB0byBpbmRlbnQgdGhlIGluc2VydGVkIGJsb2NrIGFuZCBtb3ZlIHBvaW50IHRvIGl0cyBl bmQuCisgICAgICAgICAgICAob3JnLWJhYmVsLXByZXZpb3VzLXNyYy1ibG9jayAxKQorICAgICAg ICAgICAgKG9yZy1pbmRlbnQtYmxvY2spCisgICAgICAgICAgICAoZ290by1jaGFyIChvcmctZWxl bWVudC1lbmQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpKQorICAgICAgICAgIDs7IExlYXZlIHBv aW50IGF0IHRoZSBsYXN0IGluc2VydGVkIGJsb2NrLgorICAgICAgICAgIChnb3RvLWNoYXIgKG9y Zy1iYWJlbC1wcmV2aW91cy1zcmMtYmxvY2sgMSkpKQogICAgICAgKGxldCAoKHN0YXJ0IChwb2lu dCkpCiAJICAgIChsYW5nIChvciAoY2FyIGluZm8pIDsgUmV1c2UgbGFuZ3VhZ2UgZnJvbSBwcmV2 aW91cyBibG9jay4KICAgICAgICAgICAgICAgICAgICAgICAoY29tcGxldGluZy1yZWFkCmRpZmYg LS1naXQgYS90ZXN0aW5nL2xpc3AvdGVzdC1vYi5lbCBiL3Rlc3RpbmcvbGlzcC90ZXN0LW9iLmVs CmluZGV4IDQyYzc3Y2E1Ni4uMWQ4NWQxMjA2IDEwMDY0NAotLS0gYS90ZXN0aW5nL2xpc3AvdGVz dC1vYi5lbAorKysgYi90ZXN0aW5nL2xpc3AvdGVzdC1vYi5lbApAQCAtMjYsNiArMjYsMjI5IEBA CiAocmVxdWlyZSAnb3JnLXRhYmxlKQogKGV2YWwtYW5kLWNvbXBpbGUgKHJlcXVpcmUgJ2NsLWxp YikpCiAKKyhlcnQtZGVmdGVzdCB0ZXN0LW9iL2RlbWFyY2F0ZS1ibG9jayAoKQorICAiVGVzdCBz cGxpdHRpbmcgYW5kIHdyYXBwaW5nIGJ5IGRlbWFyY2F0aW9uLiIKKyAgOzsgVGVzdCBzcGxpdHRp bmcgd2l0aCBkdXBsaWNhdGlvbiBvZiBsYW5ndWFnZSwgYm9keSwgc3dpdGNoZXMsIGFuZCBoZWFk ZXJzLgorICAobGV0ICgoY2FwdGlvbiAiIytjYXB0aW9uOiBjYXB0aW9uLiIpCisgICAgICAgIChy ZWdleHAgKHJ4ICIjK2NhcHRpb246IGNhcHRpb24uIikpCisgICAgICAgIChvcmctYWRhcHQtaW5k ZW50YXRpb24gbmlsKSkKKyAgICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQgKGZvcm1hdCAiCisl cworIytoZWFkZXI6IDp2YXIgZWRnZT1cImFsc28gZHVwbGljYXRlZFwiCisjK2hlYWRlcjogOndy YXAgXCJzcmMgYW55LXNwYW5pc2ggLW5cIgorIytuYW1lOiBOb2JvZHkKKyMrYmVnaW5fc3JjIGFu eS1lbmdsaXNoIC1pIC1uIDp2YXIgaGVyZT1cImR1cGxpY2F0ZWRcIiA6d3JhcCBcInNyYyBhbnkt ZW5nbGlzaCAtblwiCisKK2Fib3ZlIHNwbGl0Cis8cG9pbnQ+CitiZWxvdyBzcGxpdAorCisjK2Vu ZF9zcmMKK2RvIG5vdCBvcmctaW5kZW50LWJsb2NrIHRleHQgaGVyZQorIiBjYXB0aW9uKQorICAg ICAgKGxldCAoKHdyYXAtdmFsICJzcmMgYW55LXNwYW5pc2ggLW4iKSBhYm92ZSBiZWxvdyBhdmFy cyBidmFycykKKyAgICAgICAgKG9yZy1iYWJlbC1kZW1hcmNhdGUtYmxvY2spCisgICAgICAgIChn b3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgIChvcmctYmFiZWwtbmV4dC1zcmMtYmxvY2sp IDs7IHVwcGVyIHNvdXJjZSBibG9jaworICAgICAgICAoc2V0cSBhYm92ZSAob3JnLWJhYmVsLWdl dC1zcmMtYmxvY2staW5mbykpCisgICAgICAgIChzZXRxIGF2YXJzIChvcmctYmFiZWwtLWdldC12 YXJzIChudGggMiBhYm92ZSkpKQorICAgICAgICAob3JnLWJhYmVsLW5leHQtc3JjLWJsb2NrKSA7 OyBsb3dlciBzb3VyY2UgYmxvY2sKKyAgICAgICAgKHNldHEgYmVsb3cgKG9yZy1iYWJlbC1nZXQt c3JjLWJsb2NrLWluZm8pKQorICAgICAgICAoc2V0cSBidmFycyAob3JnLWJhYmVsLS1nZXQtdmFy cyAobnRoIDIgYmVsb3cpKSkKKyAgICAgICAgOzsgZHVwbGljYXRlZCBtdWx0aS1saW5lIGhlYWRl ciBhcmd1bWVudHM6CisgICAgICAgIChzaG91bGQgKHN0cmluZz0gImFsc28gZHVwbGljYXRlZCIg KGNkciAoYXNzcSAnZWRnZSBhdmFycykpKSkKKyAgICAgICAgKHNob3VsZCAoc3RyaW5nPSAiYWxz byBkdXBsaWNhdGVkIiAoY2RyIChhc3NxICdlZGdlIGJ2YXJzKSkpKQorICAgICAgICAoc2hvdWxk IChzdHJpbmc9IHdyYXAtdmFsIChjZHIgKGFzc3EgOndyYXAgKG50aCAyIGFib3ZlKSkpKSkKKyAg ICAgICAgKHNob3VsZCAoc3RyaW5nPSB3cmFwLXZhbCAoY2RyIChhc3NxIDp3cmFwIChudGggMiBi ZWxvdykpKSkpCisgICAgICAgIDs7IGR1cGxpY2F0ZWQgbGFuZ3VhZ2UsIG90aGVyIGhlYWRlciBh cmd1bWVudHMsIGFuZCBzd2l0Y2hlczoKKyAgICAgICAgKHNob3VsZCAoc3RyaW5nPSAiYW55LWVu Z2xpc2giIChudGggMCBhYm92ZSkpKQorICAgICAgICAoc2hvdWxkIChzdHJpbmc9ICJhbnktZW5n bGlzaCIgKG50aCAwIGJlbG93KSkpCisgICAgICAgIChzaG91bGQgKHN0cmluZz0gImFib3ZlIHNw bGl0IiAob3JnLXRyaW0gKG50aCAxIGFib3ZlKSkpKQorICAgICAgICAoc2hvdWxkIChzdHJpbmc9 ICJiZWxvdyBzcGxpdCIgKG9yZy10cmltIChudGggMSBiZWxvdykpKSkKKyAgICAgICAgKHNob3Vs ZCAoc3RyaW5nPSAiZHVwbGljYXRlZCIgKGNkciAoYXNzcSAnaGVyZSBhdmFycykpKSkKKyAgICAg ICAgKHNob3VsZCAoc3RyaW5nPSAiZHVwbGljYXRlZCIgKGNkciAoYXNzcSAnaGVyZSBidmFycykp KSkKKyAgICAgICAgKHNob3VsZCAoc3RyaW5nPSAiLWkgLW4iIChudGggMyBhYm92ZSkpKQorICAg ICAgICAoc2hvdWxkIChzdHJpbmc9ICItaSAtbiIgKG50aCAzIGJlbG93KSkpCisgICAgICAgIDs7 IG5vbi1kdXBsaWNhdGlvbiBvZiBuYW1lIGFuZCBjYXB0aW9uLCB3aGljaCBpcyBub3QgaW4gYWJv dmUvYmVsb3cuCisgICAgICAgIChzaG91bGQgKHN0cmluZz0gIk5vYm9keSIgKG50aCA0IGFib3Zl KSkpCisgICAgICAgIChzaG91bGQtbm90IChzdHJpbmc9ICIiIChudGggNCBiZWxvdykpKQorICAg ICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAoc2hvdWxkIChyZS1zZWFyY2gt Zm9yd2FyZCByZWdleHApKQorICAgICAgICAoc2hvdWxkLW5vdCAocmUtc2VhcmNoLWZvcndhcmQg cmVnZXhwIG5pbCAnbm9lcnJvcikpKSkpCisgIDs7IFRlc3Qgd3JhcHBpbmcgcG9pbnQgaW4gYmxh bmsgbGluZXMgYmVsb3cgc291cmNlIGJsb2NrCisgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dCAi CisjK2JlZ2luX3NyYyBhbnktbGFuZ3VhZ2UgLWkgLW4gOnZhciBoZXJlPVwibm90IGR1cGxpY2F0 ZWRcIgordG8gdXBwZXIgYmxvY2sKKyMrZW5kX3NyYworPHBvaW50PgorIgorICAgIChsZXQgKGlu Zm8gdmFycykKKyAgICAgIChvcmctYmFiZWwtZGVtYXJjYXRlLWJsb2NrKQorICAgICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkKKyAgICAgIChvcmctYmFiZWwtbmV4dC1zcmMtYmxvY2spCisgICAg ICAoc2V0cSBpbmZvIChvcmctYmFiZWwtZ2V0LXNyYy1ibG9jay1pbmZvKSkgIDs7IHVwcGVyIHNv dXJjZSBibG9jayBpbmZvCisgICAgICAoc2V0cSB2YXJzIChvcmctYmFiZWwtLWdldC12YXJzIChu dGggMiBpbmZvKSkpCisgICAgICAoc2hvdWxkIChzdHJpbmc9ICJhbnktbGFuZ3VhZ2UiIChudGgg MCBpbmZvKSkpCisgICAgICAoc2hvdWxkIChzdHJpbmc9ICJ0byB1cHBlciBibG9jayIgKG9yZy10 cmltIChudGggMSBpbmZvKSkpKQorICAgICAgKHNob3VsZCAoc3RyaW5nPSAibm90IGR1cGxpY2F0 ZWQiIChjZHIgKGFzc3EgJ2hlcmUgdmFycykpKSkKKyAgICAgIChzaG91bGQgKHN0cmluZz0gIi1p IC1uIiAobnRoIDMgaW5mbykpKQorICAgICAgKG9yZy1iYWJlbC1uZXh0LXNyYy1ibG9jaykKKyAg ICAgIChzZXRxIGluZm8gKG9yZy1iYWJlbC1nZXQtc3JjLWJsb2NrLWluZm8pKSA7OyBsb3dlciBz b3VyY2UgYmxvY2sgaW5mbworICAgICAgKHNldHEgdmFycyAob3JnLWJhYmVsLS1nZXQtdmFycyAo bnRoIDIgaW5mbykpKQorICAgICAgKHNob3VsZCAoc3RyaW5nPSAiYW55LWxhbmd1YWdlIiAobnRo IDAgaW5mbykpKQorICAgICAgKHNob3VsZCAoc3RyaW5nPSAiIiAob3JnLXRyaW0gKG50aCAxIGlu Zm8pKSkpCisgICAgICAoc2hvdWxkLW5vdCB2YXJzKQorICAgICAgKHNob3VsZCAoc3RyaW5nPSAi IiAobnRoIDMgaW5mbykpKSkpCisgIDs7IFRlc3Qgd3JhcHBpbmcgcmVnaW9uIGluIGJsYW5rIGxp bmVzIGJlbG93IHNvdXJjZSBibG9jaworICAobGV0ICgocmVnaW9uLXRleHQgIm1hcmsgdGhpcyBs aW5lIGFzIHJlZ2lvbiIpKQorICAgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dCAoZm9ybWF0ICIK KyMrYmVnaW5fc3JjIGFueS1sYW5ndWFnZSAtaSAtbiA6dmFyIGhlcmU9XCJub3QgZHVwbGljYXRl ZFwiCit0byB1cHBlciBibG9jaworIytlbmRfc3JjCisKKyVzCisiIHJlZ2lvbi10ZXh0KQorICAg ICAgKGxldCAoaW5mbyB2YXJzKQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAg ICAgICAocmUtc2VhcmNoLWZvcndhcmQgcmVnaW9uLXRleHQpCisgICAgICAgIChzZXQtbWFyayAo cG9pbnQpKQorICAgICAgICAocHJldmlvdXMtbGluZSkgOzsgZW5zdXJlIHRoYXQgcG9pbnQgaXMg b24gYW4gZW1wdHkgbGluZS4KKyAgICAgICAgKG9yZy1iYWJlbC1kZW1hcmNhdGUtYmxvY2spCisg ICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgIChvcmctYmFiZWwtbmV4dC1z cmMtYmxvY2spCisgICAgICAgIChzZXRxIGluZm8gKG9yZy1iYWJlbC1nZXQtc3JjLWJsb2NrLWlu Zm8pKSAgOzsgdXBwZXIgc291cmNlIGJsb2NrIGluZm8KKyAgICAgICAgKHNldHEgdmFycyAob3Jn LWJhYmVsLS1nZXQtdmFycyAobnRoIDIgaW5mbykpKQorICAgICAgICAoc2hvdWxkIChzdHJpbmc9 ICJhbnktbGFuZ3VhZ2UiIChudGggMCBpbmZvKSkpCisgICAgICAgIChzaG91bGQgKHN0cmluZz0g InRvIHVwcGVyIGJsb2NrIiAob3JnLXRyaW0gKG50aCAxIGluZm8pKSkpCisgICAgICAgIChzaG91 bGQgKHN0cmluZz0gIm5vdCBkdXBsaWNhdGVkIiAoY2RyIChhc3NxICdoZXJlIHZhcnMpKSkpCisg ICAgICAgIChzaG91bGQgKHN0cmluZz0gIi1pIC1uIiAobnRoIDMgaW5mbykpKQorICAgICAgICAo b3JnLWJhYmVsLW5leHQtc3JjLWJsb2NrKQorICAgICAgICAoc2V0cSBpbmZvIChvcmctYmFiZWwt Z2V0LXNyYy1ibG9jay1pbmZvKSkgOzsgbG93ZXIgc291cmNlIGJsb2NrIGluZm8KKyAgICAgICAg KHNldHEgdmFycyAob3JnLWJhYmVsLS1nZXQtdmFycyAobnRoIDIgaW5mbykpKQorICAgICAgICAo c2hvdWxkIChzdHJpbmc9ICJhbnktbGFuZ3VhZ2UiIChudGggMCBpbmZvKSkpCisgICAgICAgIChz aG91bGQgKHN0cmluZz0gcmVnaW9uLXRleHQgKG9yZy10cmltIChudGggMSBpbmZvKSkpKQorICAg ICAgICAoc2hvdWxkLW5vdCB2YXJzKQorICAgICAgICAoc2hvdWxkIChzdHJpbmc9ICIiIChudGgg MyBpbmZvKSkpKSkpCisgIDs7IFRlc3QgcHJlZml4IGFyZ3VtZW50IHBvaW50IHNwbGl0dGluZy4K KyAgKGxldCAoKG9yZy1hZGFwdC1pbmRlbnRhdGlvbiB0KQorICAgICAgICAob3JnLWVkaXQtc3Jj LWNvbnRlbnQtaW5kZW50YXRpb24gMikKKyAgICAgICAgKG9yZy1zcmMtcHJlc2VydmUtaW5kZW50 YXRpb24gbmlsKQorICAgICAgICAob2stY29sIDExKQorICAgICAgICAoc3RhcnMgIl5cXCpcXCpc XCpcXCpcXCpcXCpcXCpcXCpcXCpcXCoiKSkKKyAgICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQg IgorKioqKioqKioqKiAxMCBzdGFycyB3aXRoIHBvaW50IGJldHdlZW4gdHdvIGxpbmVzCisgICAg ICAgICAgICMrYmVnaW5fc3JjIGVtYWNzLWxpc3AKKyAgICAgICAgICAgICA7OyB0byB1cHBlciBi bG9jaworICAgICAgICAgICAgIDxwb2ludD4KKyAgICAgICAgICAgICA7OyB0byBsb3dlciBibG9j aworICAgICAgICAgICAjK2VuZF9zcmMKKyIKKyAgICAgIChvcmctYmFiZWwtZGVtYXJjYXRlLWJs b2NrICdhLXByZWZpeC1hcmcpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAg KGRvbGlzdCAocmVnZXhwIGAoLHN0YXJzCisgICAgICAgICAgICAgICAgICAgICAgICAiI1xcK2Jl ZyIgIjs7IHRvIHVwcGVyIGJsb2NrIiAiI1xcK2VuZCIKKyAgICAgICAgICAgICAgICAgICAgICAg ICxzdGFycworICAgICAgICAgICAgICAgICAgICAgICAgIiNcXCtiZWciICI7OyB0byBsb3dlciBi bG9jayIgIiNcXCtlbmQiKSkKKyAgICAgICAgKHNob3VsZCAocmUtc2VhcmNoLWZvcndhcmQgcmVn ZXhwKSkKKyAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQorICAgICAgICAo Y29uZCAoKHN0cmluZz0gcmVnZXhwIHN0YXJzKQorICAgICAgICAgICAgICAgKHNob3VsZCAoPSAw IChjdXJyZW50LWNvbHVtbikpKSkKKyAgICAgICAgICAgICAgKChzdHJpbmctcHJlZml4LXAgIjs7 IiByZWdleHApCisgICAgICAgICAgICAgICAoc2hvdWxkICg9ICgrIG9rLWNvbCBvcmctZWRpdC1z cmMtY29udGVudC1pbmRlbnRhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJl bnQtY29sdW1uKSkpKQorICAgICAgICAgICAgICAodCAoc2hvdWxkICg9IG9rLWNvbCAoY3VycmVu dC1jb2x1bW4pKSkpKSkpKQorICA7OyBUZXN0IHByZWZpeCBhcmd1bWVudCByZWdpb24gc3BsaXR0 aW5nLgorICAobGV0ICgob3JnLWFkYXB0LWluZGVudGF0aW9uIHQpCisgICAgICAgIChvcmctZWRp dC1zcmMtY29udGVudC1pbmRlbnRhdGlvbiAyKQorICAgICAgICAob3JnLXNyYy1wcmVzZXJ2ZS1p bmRlbnRhdGlvbiBuaWwpCisgICAgICAgIChvay1jb2wgMTEpCisgICAgICAgIChzdGFycyAiXlxc KlxcKlxcKlxcKlxcKlxcKlxcKlxcKlxcKlxcKiIpCisgICAgICAgIChwYXJ0cyAnKCJ0byB1cHBl ciBibG9jayIgIm1hcmsgdGhpcyBsaW5lIGFzIHJlZ2lvbiIgInRvIGxvd2VyIGJsb2NrIikpKQor ICAgIChvcmctdGVzdC13aXRoLXRlbXAtdGV4dCAoZm9ybWF0ICIKKyoqKioqKioqKiogMTAgc3Rh cnMgd2l0aCByZWdpb24gYmV0d2VlbiB0d28gbGluZXMKKyAgICAgICAgICAgIytoZWFkZXI6IDp2 YXIgYj1cImFsc28gc2VlblwiCisgICAgICAgICAgICMrYmVnaW5fc3JjIGFueS1sYW5ndWFnZSAt aSAtbiA6dmFyIGE9XCJzZWVuXCIKKyAgICAgICAgICAgICAlcworICAgICAgICAgICAgICVzCisg ICAgICAgICAgICAgJXMKKyAgICAgICAgICAgIytlbmRfc3JjCisiIChudGggMCBwYXJ0cykgKG50 aCAxIHBhcnRzKSAobnRoIDIgcGFydHMpKQorICAgICAgKGxldCAoKG4gMCkgaW5mbyB2YXJzKQor ICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAocmUtc2VhcmNoLWZvcndh cmQgKG50aCAxIHBhcnRzKSkKKyAgICAgICAgKHNldC1tYXJrIChwb2ludCkpCisgICAgICAgIDs7 IG1hcmsgdGhlIHJlZ2lvbiBieSBtb3ZpbmcgcG9pbnQgbWFrZXMgdGhlIHRlc3QgcGFzcy4KKyAg ICAgICAgKGJlZ2lubmluZy1vZi1saW5lKSA7OyAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcg MCkpIGZhaWxzLgorICAgICAgICAob3JnLWJhYmVsLWRlbWFyY2F0ZS1ibG9jayAnYS1wcmVmaXgt YXJndW1lbnQpCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICh3aGls ZSAoPCBuIChsZW5ndGggcGFydHMpKQorICAgICAgICAgIChvcmctYmFiZWwtbmV4dC1zcmMtYmxv Y2spCisgICAgICAgICAgKHNldHEgaW5mbyAob3JnLWJhYmVsLWdldC1zcmMtYmxvY2staW5mbykp CisgICAgICAgICAgKHNldHEgdmFycyAob3JnLWJhYmVsLS1nZXQtdmFycyAobnRoIDIgaW5mbykp KQorICAgICAgICAgIChzaG91bGQgKHN0cmluZz0gImFueS1sYW5ndWFnZSIgKG50aCAwIGluZm8p KSkKKyAgICAgICAgICAoc2hvdWxkIChzdHJpbmc9IChudGggbiBwYXJ0cykgKG9yZy10cmltIChu dGggMSBpbmZvKSkpKQorICAgICAgICAgIChzaG91bGQgKHN0cmluZz0gInNlZW4iIChjZHIgKGFz c3EgJ2EgdmFycykpKSkKKyAgICAgICAgICAoc2hvdWxkIChzdHJpbmc9ICJhbHNvIHNlZW4iIChj ZHIgKGFzc3EgJ2IgdmFycykpKSkKKyAgICAgICAgICAoc2hvdWxkIChzdHJpbmc9ICItaSAtbiIg KG50aCAzIGluZm8pKSkKKyAgICAgICAgICAoY2wtaW5jZiBuKSkpCisgICAgICAoZ290by1jaGFy IChwb2ludC1taW4pKQorICAgICAgKGRvbGlzdCAocmVnZXhwIGAoLHN0YXJzCisgICAgICAgICAg ICAgICAgICAgICAgICAiI1xcK2JlZyIgLChudGggMCBwYXJ0cykgIiNcXCtlbmQiCisgICAgICAg ICAgICAgICAgICAgICAgICAsc3RhcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICIjXFwrYmVn IiAsKG50aCAxIHBhcnRzKSAiI1xcK2VuZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICxzdGFy cworICAgICAgICAgICAgICAgICAgICAgICAgIiNcXCtiZWciICwobnRoIDIgcGFydHMpICIjXFwr ZW5kIikpCisgICAgICAgIChzaG91bGQgKHJlLXNlYXJjaC1mb3J3YXJkIHJlZ2V4cCkpCisgICAg ICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkKKyAgICAgICAgKGNvbmQgKChzdHJp bmc9IHJlZ2V4cCBzdGFycykKKyAgICAgICAgICAgICAgIChzaG91bGQgKD0gMCAoY3VycmVudC1j b2x1bW4pKSkpCisgICAgICAgICAgICAgICgobWVtcSByZWdleHAgcGFydHMpCisgICAgICAgICAg ICAgICAoc2hvdWxkICg9ICgrIG9rLWNvbCBvcmctZWRpdC1zcmMtY29udGVudC1pbmRlbnRhdGlv bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtY29sdW1uKSkpKQorICAgICAg ICAgICAgICAodCAoc2hvdWxkICg9IG9rLWNvbCAoY3VycmVudC1jb2x1bW4pKSkpKSkpCisgICAg OzsgVGVzdCBmb3IgYHVzZXItZXJyb3JzJ3MuCisgICAgKGxldCogKChjYXB0aW9uICIjK2NhcHRp b246IGNhcHRpb24uIikKKyAgICAgICAgICAgKHJlZ2V4cCAocnggIiMrY2FwdGlvbjogY2FwdGlv bi4iKSkKKyAgICAgICAgICAgKHdpdGhpbi1ib2R5ICI7OyB3aXRoaW4tYm9keSIpCisgICAgICAg ICAgIChiZWxvdy1ibG9jayAiIyBiZWxvdyBibG9jayIpCisgICAgICAgICAgICh0ZW1wLXRleHQg KGZvcm1hdCAiCislcworIytiZWdpbl9zcmMgZW1hY3MtbGlzcAorCisgICVzCisKKyMrZW5kX3Ny YworCislcworIiBjYXB0aW9uIHdpdGhpbi1ib2R5IGJlbG93LWJsb2NrKSkpCisgICAgICA7OyBU ZXN0IHBvaW50IGF0IGNhcHRpb24uCisgICAgICAob3JnLXRlc3Qtd2l0aC10ZW1wLXRleHQgdGVt cC10ZXh0CisgICAgICAgIDs7IFNldCBwb2ludC4KKyAgICAgICAgKHNob3VsZCAocmUtc2VhcmNo LWZvcndhcmQgcmVnZXhwIG5pbCAnbm9lcnJvcikpCisgICAgICAgIChnb3RvLWNoYXIgKG1hdGNo LWJlZ2lubmluZyAwKSkKKyAgICAgICAgOzsgQ2hlY2sgKHBvaW50KS4KKyAgICAgICAgKHNob3Vs ZCAoc3RyaW5nPSBjYXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJz dHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50KSAoKyAocG9pbnQpIChsZW5n dGggY2FwdGlvbikpKSkpCisgICAgICAgIChzaG91bGQtZXJyb3IgKG9yZy1iYWJlbC1kZW1hcmNh dGUtYmxvY2spIDp0eXBlICd1c2VyLWVycm9yKSkKKyAgICAgIDs7IFRlc3QgcmVnaW9uIGZyb20g YmVsb3cgdGhlIGJsb2NrIChtYXJrKSB0byB3aXRoaW4gdGhlIGJvZHkgKHBvaW50KS4KKyAgICAg IChvcmctdGVzdC13aXRoLXRlbXAtdGV4dCB0ZW1wLXRleHQKKyAgICAgICAgOzsgU2V0IG1hcmsu CisgICAgICAgIChzaG91bGQgKHJlLXNlYXJjaC1mb3J3YXJkIGJlbG93LWJsb2NrIG5pbCAnbm9l cnJvcikpCisgICAgICAgIChzZXQtbWFyayAobWF0Y2gtYmVnaW5uaW5nIDApKQorICAgICAgICA7 OyBDaGVjayAobWFyaykuCisgICAgICAgIChzaG91bGQgKHN0cmluZz0gYmVsb3ctYmxvY2sKKyAg ICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZworICAgICAgICAgICAgICAg ICAgICAgICAgICAobWFyaykgKCsgKG1hcmspIChsZW5ndGggYmVsb3ctYmxvY2spKSkpKQorICAg ICAgICA7OyBTZXQgcG9pbnQuCisgICAgICAgIChzaG91bGQgKHJlLXNlYXJjaC1iYWNrd2FyZCB3 aXRoaW4tYm9keSBuaWwgJ25vZXJyb3IpKQorICAgICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdp bm5pbmcgMCkpCisgICAgICAgIDs7IENoZWNrIChwb2ludCkuCisgICAgICAgIChzaG91bGQgKHN0 cmluZz0gd2l0aGluLWJvZHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0 cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQpICgrIChwb2ludCkgKGxlbmd0 aCB3aXRoaW4tYm9keSkpKSkpCisgICAgICAgIChzaG91bGQtZXJyb3IgKG9yZy1iYWJlbC1kZW1h cmNhdGUtYmxvY2spIDp0eXBlICd1c2VyLWVycm9yKSkpKSkKKwogKGVydC1kZWZ0ZXN0IHRlc3Qt b2IvaW5kZW50ZWQtY2FjaGVkLW9yZy1icmFja2V0LWxpbmsgKCkKICAgIldoZW4gdGhlIHJlc3Vs dCBvZiBhIHNvdXJjZSBibG9jayBpcyBhIGNhY2hlZCBpbmRlbnRlZCBsaW5rIGl0CiBzaG91bGQg c3RpbGwgcmV0dXJuIHRoZSBsaW5rLiIKLS0gCjIuNDIuMAoK --=_6960ba22b7f20ee8727dcae482379b88--