From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id QCPrM9P5NGfuFQAA62LTzQ:P1 (envelope-from ) for ; Wed, 13 Nov 2024 19:11:15 +0000 Received: from aspmx1.migadu.com ([2001:41d0:303:e16b::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id QCPrM9P5NGfuFQAA62LTzQ (envelope-from ) for ; Wed, 13 Nov 2024 20:11:15 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KwVQosbt; 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=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1731525075; 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=wgOvyJH5qoKgHkqsHhodmp44btpdf1wYq9CK9ovhG2M=; b=owOhjLv8SQmh/0ZW5YTlu+mgwpWEk24PJV7VYvejriG9aniviUKivMhAYRxFge2Ciq32Ku uXdrTZkGMwx3VP76cwZ7+ZuchO8VFtSvQCPMTQcDeeQUCp4t7wO8ouFgyuEIiSrv3nvWuD AiAWFRAl9dMjpTz7+gYB1dVlXDvAjx7OT4CaWrJCTRAn2yXS4PjAGXRDTyuC5NGdDo9PPX 7+7QKESF9QH/siGwSrlLar20uvTaYZBQiNWMkOrIuTrasZoaM0MATwy5RWs+tNdNIDWLc/ d6TFY402Isw0St46gyrwvB+ZKok4jCLvUGFHEptqM6+TxpeMTSAmmBj7n80BDw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1731525075; a=rsa-sha256; cv=none; b=sD9T9ZO+9jLxX41rtS9tF8Vqsh0/13zH8CD7WFce0YFbY8vHxr1gIOLMaE2eLV2gxEtmI8 ewMYca1VH2vS7mp5yJMymWU4DXPJOTV8HRUtN2twrM+rTga2QraJfhyJ5dnoUbTb3rKd0w ZQ4mHI0+HAhvNUBUwReAXs9duKObCQ7GhCXPM4J9ggaKvctvTYGam0oTtO7nzwkPE7cjRj +/Uq+sOzXYWIMyfQI68abXsW0GF5sBZ9EfRmqXxR7UoD6RZfiUj3RtdDcvhj73B6Pz8Xyx 3eHJUXEwXKe1ZtOavGpF/fJVqR/S9zCEmRycCDKTxEE38rkAp5v70yo2m4l19g== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=KwVQosbt; 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=gmail.com 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 464727701 for ; Wed, 13 Nov 2024 20:11:15 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tBIl2-0000Qd-OK; Wed, 13 Nov 2024 14:10:28 -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 1tBIl1-0000QU-IZ for emacs-orgmode@gnu.org; Wed, 13 Nov 2024 14:10:27 -0500 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tBIky-0007iz-H7 for emacs-orgmode@gnu.org; Wed, 13 Nov 2024 14:10:27 -0500 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2feeb1e8edfso96294591fa.1 for ; Wed, 13 Nov 2024 11:10:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731525022; x=1732129822; darn=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=wgOvyJH5qoKgHkqsHhodmp44btpdf1wYq9CK9ovhG2M=; b=KwVQosbtjnLQndt9bjtb/wJmxmPTokFAurEE+v57TRIGHjEIjC2jVTkzszpxR3OoJ9 AGAQAO5AycIOz1B0uEzC+rl3f30uxm3ZcQxr43v5kNRnRvEyHVh2xUJ3IGbVFWcqOVoj BI762sq+Zp1BdvBGw+jn4P26HY40M8nBgDPrWSiTAs0B1JLzhuEhjH5qPdOuTJuDndoZ Wx1ah0UDm1oPVGjj5b+DT4P2fW/Yl5ELLjMWntfpAyQDctil/5w4dgCHVSLi2G2C9aeS 6bUvimF/A4L+7t+LCgArjK4rz331OeOPPRIDN5y35YPHGPlEb+YTFgDl5QN1bTlJ4SpN /NBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731525022; x=1732129822; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wgOvyJH5qoKgHkqsHhodmp44btpdf1wYq9CK9ovhG2M=; b=wu3E/1Zr/9JIJTs6vlSWBMQiyyf5hUTXVkTlYeK8zzHNy9xh49EveV4QtjjmHumi4J 6z3Dx3QjsaffFNSgTaCFTqOC5WGGtB5jQfag7ynYUU/e7ubsbZXkmqcSIU7Kh0/A/ohn xUGWg4L4+0hc95j/BrEcamnch0cvDW6I6D/IuGZbRzHxT/HoaQ+4zBpxuamTuduR1LeT GGYSCo4Zwzo/TO0RHpPHKcP1x3OgQGG8q0lOtndWnoP9/8Zo799V0GHpPe7ox1TvooI0 2R6Ek51INP09Ddgh0KHwLM1VAWh0wmmCmofju8oB4Igj22P72xCdjL4JmNBhlX9bPL8R LIKg== X-Gm-Message-State: AOJu0YwGIq7ybcXiC8UHKzmMsSxp8jkOAg4npmpbLWVE3dZyxeL/VcCn WZTcl0KJJjJjtcP2LrYVS/SeyfSoHW0b4aKxUibdbfgR5XZ/eGauo7drttarDMAiDga1QfGKDGo 9Ecwz3HtyH+FEcf0qtwdVlsj9/GE= X-Google-Smtp-Source: AGHT+IEi4XQfBDXizx8Mqkbkg+xqHsPv5ttfEz6keSASs8rkyMGI3++MsiaLnkF+CX58VccBEUQGDrTIsTLPQymZRbM= X-Received: by 2002:a05:651c:b2b:b0:2fb:3960:9667 with SMTP id 38308e7fff4ca-2ff2018a7e6mr159168421fa.14.1731525021823; Wed, 13 Nov 2024 11:10:21 -0800 (PST) MIME-Version: 1.0 References: <87pln4g3b2.fsf@localhost> In-Reply-To: <87pln4g3b2.fsf@localhost> From: John C Date: Wed, 13 Nov 2024 14:10:10 -0500 Message-ID: Subject: Re: ob-octave: improve MATLAB support To: Ihor Radchenko Cc: emacs-orgmode@gnu.org Content-Type: multipart/mixed; boundary="000000000000d922bd0626d0152f" Received-SPF: pass client-ip=2a00:1450:4864:20::233; envelope-from=john.ciolfi.32@gmail.com; helo=mail-lj1-x233.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-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: -3.55 X-Spam-Score: -3.55 X-Migadu-Queue-Id: 464727701 X-Migadu-Scanner: mx13.migadu.com X-TUID: SH/ftt3spakC --000000000000d922bd0626d0152f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Thanks for the feedback. I incorporated some of your suggestions for org-mode. I'll add the examples to https://git.sr.ht/~bzg/worg once the changes become part of org-mode. Regarding (defvar org-babel-default-header-args:matlab '((:session . "*MATLAB*")), this was done on purpose. We've been using this setting for a while. Without it, org matlab evaluation is not good. I added a comment as to why it's there. I looked into the use of REMOVE-ECHO which ob-octave.el already sets to t and don't believe this will help us. I think low-level comit requires the input which is captured by org. Any guidance on adding a test? To test properly we'll need MATLAB and https://github.com/mathworks/Emacs-MATLAB-Mode. Note, in https://github.com/mathworks/Emacs-MATLAB-Mode, I have a test for all this. Currently Emacs-MATLAB-Mode is advising org to get things working. When org is updated, Emacs-MATLAB-Mode will automatically not advise org. See updated attach patch. I have yet to hear back from FSF on the copyright assignment. I'm happy to sign this, so if you can help, that would be good. Thanks John On Sat, Nov 9, 2024 at 4:31=E2=80=AFAM Ihor Radchenko = wrote: > > John C writes: > > > Please see the attached patch which makes MATLAB work with org babel > > eval. Here's the commit message: > > Thanks a lot for the patch! > > The patch introduces major changes. Would it be possible to add some > tests as well? > > > Note, I have sent in the paper work for the FSF copyright assignment. > > Let us know when it is done. Also, if there are any problems or delays > in the process, we can try helping. > > > My initial comments on the patch are below. > > > +*** ob-octave: improved MATLAB support > > "fixed" maybe :) > > > +Improved ob-octave MATLAB (https://www.mathworks.com) code blocks proc= essing. > > +The prior version of ob-octave didn't correctly support MATLAB. To us= e MATLAB > > +with org, you need https://github.com/MathWorks/Emacs-MATLAB-Mode. > > + > > +Example ~verbatim~ code block: > > + > > +#+begin_src org > > +,#+begin_src matlab :results verbatim > > I am not sure if examples are necessary in the NEWS. Maybe we can simply > mention that :results verbatim, output, and latex are supported now. > > As for examples, please put them into > https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-octave-matlab= .html > The source code for that page is at https://git.sr.ht/~bzg/worg > > > -;; Matlab > > - > > -;; matlab.el required for interactive emacs sessions and matlab-mode > > -;; major mode for source code editing buffer > > -;; https://matlab-emacs.sourceforge.net/ > > +;; 1) MATLAB from https://www.mathworks.com > > Please remove all the links to mathworks.com - it is FSF policy to not > link to proprietary software pages. We cannot have these links in Org > code. > > > +;; 2) https://github.com/mathworks/Emacs-MATLAB-Mode > > This one is GPL-licensed and hence fine. > > > -(defvar org-babel-default-header-args:matlab '()) > > +;; Use the session "*MATLAB*" buffer created by `matlab-shell` for cod= e evaluation. > > +(defvar org-babel-default-header-args:matlab '((:session . "*MATLAB*")= )) > > The new default implies that sessions will be enabled by default. I am > not sure if it is what you intended to do. > > > -(defvar org-babel-matlab-with-emacs-link nil > > - "If non-nil use matlab-shell-run-region for session evaluation. > > -This will use EmacsLink if (matlab-with-emacs-link) evaluates > > -to a non-nil value.") > > - > > -(defvar org-babel-matlab-emacs-link-wrapper-method > > - "%s > > -if ischar(ans), fid =3D fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans);= fclose(fid); > > -else, save -ascii %s ans > > -end > > -delete('%s') > > I understand that these variable no longer make sense after we remove > support of MATLAB Emacs Link. However, I'd prefer to not remove > variables without warning. Instead, please deprecate them. > > > + (when matlabp > > + ;; When we send multi-line input to `matlab-shell', we'll see the = "body" > > + ;; code lines echoed in the output which is not what one would exp= ect. To > > Maybe you can somehow make use of REMOVE-ECHO in `org-babel-comint-with-o= utput'? > > -- > Ihor Radchenko // yantar92, > Org mode contributor, > Learn more about Org mode at . > Support Org development at , > or support my work at --000000000000d922bd0626d0152f Content-Type: text/x-patch; charset="US-ASCII"; name="ob-octave.el.patch" Content-Disposition: attachment; filename="ob-octave.el.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3g97sh00 ZGlmZiAtLWdpdCBhL2V0Yy9PUkctTkVXUyBiL2V0Yy9PUkctTkVXUwppbmRleCA1ZDQyMTE3MmYu LjU1MTNjMTcyZCAxMDA2NDQKLS0tIGEvZXRjL09SRy1ORVdTCisrKyBiL2V0Yy9PUkctTkVXUwpA QCAtMTYyLDYgKzE2MiwxMyBAQCBiaWJsaW9ncmFwaHkgZm9ybWF0IHJlcXVpcmVzIHRoZW0gdG8g YmUgd3JpdHRlbiBpbiB0aXRsZS1jYXNlLgogCiAjIFRoaXMgYWxzbyBpbmNsdWRlcyBjaGFuZ2Vz IGluIGZ1bmN0aW9uIGJlaGF2aW9yIGZyb20gRWxpc3AgcGVyc3BlY3RpdmUuCiAKKyoqKiBvYi1v Y3RhdmU6IGZpeGVkIE1BVExBQiBzdXBwb3J0CisKK0ZpeGVkIG9iLW9jdGF2ZSBNQVRMQUIgKGh0 dHBzOi8vd3d3Lm1hdGh3b3Jrcy5jb20pIGNvZGUgYmxvY2tzIHByb2Nlc3NpbmcuICBUaGUgcHJp b3IgdmVyc2lvbiBvZgorb2Itb2N0YXZlIGRpZG4ndCBjb3JyZWN0bHkgc3VwcG9ydCBNQVRMQUIu ICBUbyB1c2UgTUFUTEFCIHdpdGggb3JnLCB5b3UgbmVlZAoraHR0cHM6Ly9naXRodWIuY29tL01h dGhXb3Jrcy9FbWFjcy1NQVRMQUItTW9kZS4gTm93IH4jK2JlZ2luX3NyYyBtYXRsYWJ+IGNvZGUg YmxvY2tzIHdpdGggfjpyZXN1bHRzCit2ZXJiYXRpbX4sIH46cmVzdWx0cyBvdXRwdXR+LCB+OnJl c3VsdHMgb3V0cHV0IGxhdGV4fiwgb3IgfjpyZXN1bHRzIGZpbGUgZ3JhcGhpY3N+IGFyZSBzdXBw b3J0ZWQuCisKICoqKiBvYi1zcWxpdGU6IEFkZGVkIGFiaWxpdHkgdG8gb3BlbiBhIGRhdGFiYXNl IGluIHJlYWRvbmx5IG1vZGUKIAogQWRkZWQgb3B0aW9uIDpyZWFkb25seSB0byBvYi1zcWxpdGUu CmRpZmYgLS1naXQgYS9saXNwL29iLW1hdGxhYi5lbCBiL2xpc3Avb2ItbWF0bGFiLmVsCmluZGV4 IGRlOGRlYWRiZS4uMDgzZGNkZWMzIDEwMDY0NAotLS0gYS9saXNwL29iLW1hdGxhYi5lbAorKysg Yi9saXNwL29iLW1hdGxhYi5lbApAQCAtMjgsMTEgKzI4LDEwIEBACiAKIDs7OyBSZXF1aXJlbWVu dHM6CiAKLTs7IE1hdGxhYgotCi07OyBtYXRsYWIuZWwgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZl IGVtYWNzIHNlc3Npb25zIGFuZCBtYXRsYWItbW9kZQotOzsgbWFqb3IgbW9kZSBmb3Igc291cmNl IGNvZGUgZWRpdGluZyBidWZmZXIKLTs7IGh0dHBzOi8vbWF0bGFiLWVtYWNzLnNvdXJjZWZvcmdl Lm5ldC8KKzs7IDEpIE1BVExBQgorOzsgMikgaHR0cHM6Ly9naXRodWIuY29tL21hdGh3b3Jrcy9F bWFjcy1NQVRMQUItTW9kZQorOzsgICAgRm9yIG1hdGxhYi1zaGVsbCB0byBydW4gTUFUTEFCIHdp dGhpbiBFbWFjcyBhbmQgbWF0bGFiLW1vZGUKKzs7ICAgIG1ham9yIG1vZGUgZm9yIHNvdXJjZSBj b2RlIGVkaXRpbmcgYnVmZmVyCiAKIDs7OyBDb2RlOgogCmRpZmYgLS1naXQgYS9saXNwL29iLW9j dGF2ZS5lbCBiL2xpc3Avb2Itb2N0YXZlLmVsCmluZGV4IDAwNTk5MGYyMC4uNWFjMWRlMWU0IDEw MDY0NAotLS0gYS9saXNwL29iLW9jdGF2ZS5lbAorKysgYi9saXNwL29iLW9jdGF2ZS5lbApAQCAt MSw0ICsxLDQgQEAKLTs7OyBvYi1vY3RhdmUuZWwgLS0tIEJhYmVsIEZ1bmN0aW9ucyBmb3IgT2N0 YXZlIGFuZCBNYXRsYWIgLSotIGxleGljYWwtYmluZGluZzogdDsgLSotCis7Ozsgb2Itb2N0YXZl LmVsIC0tLSBCYWJlbCBGdW5jdGlvbnMgZm9yIE9jdGF2ZSBhbmQgTUFUTEFCIC0qLSBsZXhpY2Fs LWJpbmRpbmc6IHQ7IC0qLQogCiA7OyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyNCBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KIApAQCAtMzAsNiArMzAsOCBAQAogCiA7OzsgQ29kZToKIAor KHJlcXVpcmUgJ2NsLXNlcSkKKwogKHJlcXVpcmUgJ29yZy1tYWNzKQogKG9yZy1hc3NlcnQtdmVy c2lvbikKIApAQCAtMzksNyArNDEsNTIgQEAKIChkZWNsYXJlLWZ1bmN0aW9uIG1hdGxhYi1zaGVs bCAiZXh0Om1hdGxhYi1tb2RlIikKIChkZWNsYXJlLWZ1bmN0aW9uIG1hdGxhYi1zaGVsbC1ydW4t cmVnaW9uICJleHQ6bWF0bGFiLW1vZGUiKQogCi0oZGVmdmFyIG9yZy1iYWJlbC1kZWZhdWx0LWhl YWRlci1hcmdzOm1hdGxhYiAnKCkpCis7OyBXaXRoIGBvcmctYmFiZWwtZGVmYXVsdC1oZWFkZXIt YXJnczptYXRsYWInIHNldCB0bworOzsgICcoKDpzZXNzaW9uIC4gIipNQVRMQUIqIikpKQorOzsg ZWFjaCBtYXRsYWIgY29kZSBibG9jayBldmFsdWF0aW9uIHdpbGwgcmV1c2UgdGhlICIqTUFUTEFC KiIgYnVmZmVyCis7OyBjcmVhdGVkIGJ5IGBtYXRsYWItc2hlbGwnIGZvciBjb2RlIGV2YWx1YXRp b24uICBUaGUgYmVuZWZpdCBvZiB0aGlzCis7OyBpcyB0aGF0IGV2YWx1YXRpb24gaXMgdmVyeSBm YXN0IGZvciBldmFsdWF0aW9ucyBhZnRlciB0aGUgZmlyc3QKKzs7IGV2YWx1YXRpb24uIFRoZSBm aXJzdCBldmFsdWF0aW9uIG1heSBiZSBzbG93ZXIgYmVjYXVzZSBpdCBjYW4gdGFrZQorOzsgYSBs b25nIHRpbWUgdG8gc3RhcnQgTUFUTEFCLiAgUmV1c2luZyB0aGUgc2Vzc2lvbiBidWZmZXIgbWVh bnMKKzs7IHN0YXRlIGlzIG1haW50YWluZWQgYmV0d2VlbiBldmFsdWF0aW9ucy4gIFRvIGF2b2lk IHJldXNlIG9mIHN0YXRlLAorOzsgeW91IGNhbiBjbGVhciB0aGUgTUFUTEFCIHdvcmtzcGFjZS4g IFRoaXMgc2V0dGluZyBhbGlnbnMgd2l0aAorOzsgdHlwaWNhbCBNQVRMQUIgdXNlLCB3aGVyZSBN QVRMQUIgaXMgc3RhcnRlZCBhbmQgdXNlZCBmb3IgYSBsb25nCis7OyBwZXJpb2Qgb2YgcGVyaW9k IG9mIHRpbWUuICBBbm90aGVyIGJlbmVmaXQgb2YgdGhpcyBzZXR0aW5nIGlzIHRoYXQKKzs7IHlv dSBjYW4gc2VlIHRoZSBoaXN0b3J5IG9mIHRoZSBldmFsdWF0aW9ucyBpbiB0aGUgIipNQVRMQUIq IgorOzsgY29tbWFuZCB3aW5kb3cgYnVmZmVyLiAgRm9yIGV4YW1wbGU6Cis7OworOzsgICMrYmVn aW5fc3JjIG1hdGxhYiA6cmVzdWx0cyBvdXRwdXQKKzs7ICAgIGEgPSAxMjMKKzs7ICAjK2VuZF9z cmMKKzs7Cis7OyAgIytSRVNVTFRTOgorOzsgIDogYSA9Cis7OyAgOgorOzsgIDogICAgMTIzCis7 OworOzsgICMrYmVnaW5fc3JjIG1hdGxhYiA6cmVzdWx0cyBvdXRwdXQKKzs7ICAgIGIgPSBhICog MgorOzsgICMrZW5kX3NyYworOzsKKzs7ICAjK1JFU1VMVFM6Cis7OyAgOiBiID0KKzs7ICA6Cis7 OyAgOiAgICAyNDYKKzs7Cis7OyAgIytiZWdpbl9zcmMgbWF0bGFiIDpyZXN1bHRzIG91dHB1dAor OzsgICAgY2xlYXIKKzs7ICAgIGMgPSBiICogMgorOzsgICMrZW5kX3NyYworOzsKKzs7ICAjK1JF U1VMVFM6Cis7OyAgOiBVbnJlY29nbml6ZWQgZnVuY3Rpb24gb3IgdmFyaWFibGUgJ2InLgorOzsK Kzs7IElmIHlvdSB3YW50IGEgbmV3IHNlc3Npb24gZWFjaCB0aW1lIHlvdSBldmFsdWF0ZSBhIE1B VExBQiBjb2RlIGJsb2NrLAorOzsgICAoc2V0cSAnb3JnLWJhYmVsLWRlZmF1bHQtaGVhZGVyLWFy Z3M6bWF0bGFiICcoKSkKKzs7IEhvd2V2ZXIsIHRoaXMgd2lsbCBtYWtlIGV2YWx1YXRpb25zIHNs b3dlciBhbmQgaXMgbm90IHR5cGljYWxseSBob3cKKzs7IHBlb3BsZSB1c2UgTUFUTEFCLgorKGRl ZnZhciBvcmctYmFiZWwtZGVmYXVsdC1oZWFkZXItYXJnczptYXRsYWIgJygoOnNlc3Npb24gLiAi Kk1BVExBQioiKSkpCisKIChkZWZ2YXIgb3JnLWJhYmVsLWRlZmF1bHQtaGVhZGVyLWFyZ3M6b2N0 YXZlICcoKSkKIAogKGRlZnZhciBvcmctYmFiZWwtbWF0bGFiLXNoZWxsLWNvbW1hbmQgIm1hdGxh YiAtbm9zcGxhc2giCkBAIC00NywxOCArOTQsNDIgQEAKIChkZWZ2YXIgb3JnLWJhYmVsLW9jdGF2 ZS1zaGVsbC1jb21tYW5kICJvY3RhdmUgLXEiCiAgICJTaGVsbCBjb21tYW5kIHRvIHJ1biBvY3Rh dmUgYXMgYW4gZXh0ZXJuYWwgcHJvY2Vzcy4iKQogCi0oZGVmdmFyIG9yZy1iYWJlbC1tYXRsYWIt d2l0aC1lbWFjcy1saW5rIG5pbAotICAiSWYgbm9uLW5pbCB1c2UgbWF0bGFiLXNoZWxsLXJ1bi1y ZWdpb24gZm9yIHNlc3Npb24gZXZhbHVhdGlvbi4KLVRoaXMgd2lsbCB1c2UgRW1hY3NMaW5rIGlm IChtYXRsYWItd2l0aC1lbWFjcy1saW5rKSBldmFsdWF0ZXMKLXRvIGEgbm9uLW5pbCB2YWx1ZS4i KQotCi0oZGVmdmFyIG9yZy1iYWJlbC1tYXRsYWItZW1hY3MtbGluay13cmFwcGVyLW1ldGhvZAot ICAiJXMKLWlmIGlzY2hhcihhbnMpLCBmaWQgPSBmb3BlbignJXMnLCAndycpOyBmcHJpbnRmKGZp ZCwgJyUlc1xcbicsIGFucyk7IGZjbG9zZShmaWQpOwotZWxzZSwgc2F2ZSAtYXNjaWkgJXMgYW5z Ci1lbmQKLWRlbGV0ZSgnJXMnKQorKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ29yZy1iYWJlbC1t YXRsYWItd2l0aC1lbWFjcy1saW5rCisgICAgICAgICAgICAgICAgICAgICAgICAiTUFUTEFCIHJl bW92ZWQgRW1hY3NMaW5rIGluIFIyMDA5YS4iICIyMDA5IikKKworKG1ha2Utb2Jzb2xldGUtdmFy aWFibGUgJ29yZy1iYWJlbC1tYXRsYWItZW1hY3MtbGluay13cmFwcGVyLW1ldGhvZAorICAgICAg ICAgICAgICAgICAgICAgICAgIk1BVExBQiByZW1vdmVkIEVtYWNzTGluayBpbiBSMjAwOWEuIiAi MjAwOSIpCisKKyhkZWZ2YXIgb3JnLWJhYmVsLW1hdGxhYi1wcmludCAicHJpbnQoXCItZHBuZ1wi LCAlUyk7XG5hbnM9JVM7IgorICA7OyBNQVRMQUIgY29tbWFuZC1mdW5jdGlvbiBkdWFsaXR5IHJl cXVpcmVzIHRoYXQgdGhlIGZpbGUgbmFtZSBiZSBzcGVjaWZpZWQKKyAgOzsgd2l0aG91dCBxdW90 ZXMuIFVzaW5nOiBwcmludCAtZHBuZyAiZmlsZS5wbmciLCB3b3VsZCBwcm9kdWNlIGEgZmlsZSB3 aXRoCisgIDs7IHRoZSBxdW90ZXMgaW4gdGhlIGZpbGUgbmFtZSBvbiBkaXNrLiBUaGVyZWZvcmUs IHVzZSB0aGUgZnVuY3Rpb25hbCBmb3JtCisgIDs7IHRvIGhhbmRsZSBmaWxlcyB3aXRoIHNwYWNl cywgcHJpbnQoIi1kcG5nIiwgImZpbGUucG5nIikuCisgIDs7IEV4YW1wbGU6CisgIDs7ICAgICMr YmVnaW5fc3JjIG1hdGxhYiA6ZmlsZSAic2luZSB3YXZlLnBuZyIgOnJlc3VsdHMgZmlsZSBncmFw aGljcworICA7OyAgICAgIHQgPSBbMCA6IDAuMSA6IDIqcGldOworICA7OyAgICAgIHkgPSBzaW4o dCk7CisgIDs7ICAgICAgcGxvdCh0LCB5KTsKKyAgOzsgICAgICBzZXQoZ2NmLCAnUGFwZXJVbml0 cycsICdpbmNoZXMnLCAnUGFwZXJQb3NpdGlvbicsIFswIDAgNCAzXSkgJSBTZXQgdGhlIHNpemUg dG8gNCIgeCAzIgorICA7OyAgICAjK2VuZF9zcmMKKyAgOzsKKyAgOzsgICAgIytSRVNVTFRTOgor ICA7OyAgICBbW2ZpbGU6c2luZSB3YXZlLnBuZ11dCisgICJNQVRMQUIgZm9ybWF0IHNwZWNpZmll ciB0byBwcmludCBjdXJyZW50IGZpZ3VyZSB0byBhIGZpbGUuIikKKworKGRlZnZhciBvcmctYmFi ZWwtb2N0YXZlLXByaW50ICJwcmludCAtZHBuZyAlU1xuYW5zPSVTIgorICAiT2N0YXZlIGZvcm1h dCBzcGVjaWZpZXIgdG8gcHJpbnQgY3VycmVudCBmaWd1cmUgdG8gYSBmaWxlLiIpCisKKyhkZWZ2 YXIgb3JnLWJhYmVsLW1hdGxhYi13cmFwcGVyLW1ldGhvZAorICAoY29uY2F0ICJcCitjZCgnJXMn KTsKKyVzCitpZiB+ZXhpc3QoJ2FucycsICd2YXInKSBhbnMgPSAnJzsgZW5kOyBcCit3cml0ZW1h dHJpeChhbnMsICclcycsICdEZWxpbWl0ZXInLCAndGFiJyk7CiAiKQorICAiRm9ybWF0IHNwZWNp ZmllciB1c2VkIHdoZW4gZXZhbHVhdGluZyBNQVRMQUIgY29kZSBibG9ja3MuCitBcmd1bWVudHMg YXJlIHRoZSBgZGVmYXVsdC1kaXJlY3RvcnknLCB0aGUgTUFUTEFCIGNvZGUsIGFuZCBhIHJlc3Vs dCBmaWxlLnR4dC4iKQorCiAoZGVmdmFyIG9yZy1iYWJlbC1vY3RhdmUtd3JhcHBlci1tZXRob2QK ICAgIiVzCiBpZiBpc2NoYXIoYW5zKSwgZmlkID0gZm9wZW4oJyVzJywgJ3cnKTsgZmRpc3AoZmlk LCBhbnMpOyBmY2xvc2UoZmlkKTsKQEAgLTkyLDcgKzE2MywxMCBAQCBXaGVuIE1BVExBQlAgaXMg bm9uLW5pbCwgZXhlY3V0ZSBNYXRsYWIuICBPdGhlcndpc2UsIGV4ZWN1dGUgT2N0YXZlLiIKIAkJ CQkgKGxpc3QKIAkJCQkgICJzZXQgKDAsIFwiZGVmYXVsdGZpZ3VyZXZpc2libGVcIiwgXCJvZmZc Iik7IgogCQkJCSAgZnVsbC1ib2R5Ci0JCQkJICAoZm9ybWF0ICJwcmludCAtZHBuZyAlU1xuYW5z PSVTIiBnZngtZmlsZSBnZngtZmlsZSkpCisJCQkJICAoZm9ybWF0IChpZiBtYXRsYWJwCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLWJhYmVsLW1hdGxh Yi1wcmludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmct YmFiZWwtb2N0YXZlLXByaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2Z4LWZpbGUgZ2Z4LWZpbGUpKQogCQkJCSAiXG4iKQogCQkgICAgZnVsbC1ib2R5KQog CQkgIHJlc3VsdC10eXBlIG1hdGxhYnApKSkKQEAgLTE1Myw2ICsyMjcsMjMgQEAgSWYgdGhlcmUg aXMgbm90IGEgY3VycmVudCBpbmZlcmlvci1wcm9jZXNzLWJ1ZmZlciBpbiBTRVNTSU9OIHRoZW4K IGNyZWF0ZS4gIFJldHVybiB0aGUgaW5pdGlhbGl6ZWQgc2Vzc2lvbi4gIFBBUkFNUyBhcmUgc3Jj IGJsb2NrIHBhcmFtZXRlcnMuIgogICAob3JnLWJhYmVsLW9jdGF2ZS1pbml0aWF0ZS1zZXNzaW9u IHNlc3Npb24gcGFyYW1zICdtYXRsYWIpKQogCisoZGVmdW4gb3JnLWJhYmVsLW1hdGxhYi1zaGVs bCAoKQorICAiU3RhcnQgYW5kL29yIHdhaXQgZm9yIE1BVExBQiBzaGVsbC4iCisgIChyZXF1aXJl ICdtYXRsYWItc2hlbGwpIDs7IG1ha2UgYG1hdGxhYi1zaGVsbC1idXN5LWNoZWNrZXInIGF2YWls YWJsZQorICAoY29uZAorICAgKChmYm91bmRwICdtYXRsYWItc2hlbGwtYnVzeS1jaGVja2VyKQor ICAgIDs7IFN0YXJ0IHRoZSBzaGVsbCBpZiBuZWVkZWQuICBgbWF0bGFiLXNoZWxsJyB3aWxsIHJl dXNlIGV4aXN0aW5nIGlmIGFscmVhZHkgcnVubmluZy4KKyAgICAobWF0bGFiLXNoZWxsKQorICAg IDs7IElmIHdlIGp1c3Qgc3RhcnRlZCB0aGUgbWF0bGFiLXNoZWxsLCB3YWl0IGZvciB0aGUgcHJv bXB0LiAgSWYgd2UgZG8gbm90CisgICAgOzsgd2FpdCwgdGhlbiB0aGUgc3RhcnR1cCBtZXNzYWdl cyB3aWxsIHNob3cgdXAgaW4gdGhlIGV2YWx1YXRpb24gcmVzdWx0cy4KKyAgICAobWF0bGFiLXNo ZWxsLWJ1c3ktY2hlY2tlciAnd2FpdC1mb3ItcHJvbXB0KSkKKyAgICh0CisgICAgKG1lc3NhZ2Ug KGNvbmNhdCAiWW91IHZlcnNpb24gb2YgbWF0bGFiLW1vZGUgaXMgb2xkLlxuIgorICAgICAgICAg ICAgICAgICAgICAgIlBsZWFzZSB1cGRhdGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0aHdv cmtzL0VtYWNzLU1BVExBQi1Nb2RlXG4iCisgICAgICAgICAgICAgICAgICAgICAiVXBkYXRpbmcg d2lsbCBlbGltaW5hdGUgdW5leHBlY3RlZCBvdXRwdXQgaW4geW91ciByZXN1bHRzXG4iKSkKKyAg ICAoc2l0LWZvciAzKQorICAgIChtYXRsYWItc2hlbGwpKSkpCisKIChkZWZ1biBvcmctYmFiZWwt b2N0YXZlLWluaXRpYXRlLXNlc3Npb24gKCZvcHRpb25hbCBzZXNzaW9uIF9wYXJhbXMgbWF0bGFi cCkKICAgIkNyZWF0ZSBhbiBvY3RhdmUgaW5mZXJpb3IgcHJvY2VzcyBidWZmZXIuCiBJZiB0aGVy ZSBpcyBub3QgYSBjdXJyZW50IGluZmVyaW9yLXByb2Nlc3MtYnVmZmVyIGluIFNFU1NJT04gdGhl bgpAQCAtMTY1LDkgKzI1NiwxNSBAQCBPY3RhdmUgc2Vzc2lvbiwgdW5sZXNzIE1BVExBQlAgaXMg bm9uLW5pbC4iCiAgICh1bmxlc3MgKHN0cmluZz0gc2Vzc2lvbiAibm9uZSIpCiAgICAgKGxldCAo KHNlc3Npb24gKG9yIHNlc3Npb24KIAkJICAgICAgIChpZiBtYXRsYWJwICIqSW5mZXJpb3IgTWF0 bGFiKiIgIipJbmZlcmlvciBPY3RhdmUqIikpKSkKLSAgICAgIChpZiAob3JnLWJhYmVsLWNvbWlu dC1idWZmZXItbGl2ZXAgc2Vzc2lvbikgc2Vzc2lvbgorICAgICAgKGlmIChvcmctYmFiZWwtY29t aW50LWJ1ZmZlci1saXZlcCBzZXNzaW9uKQorICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAg KHdoZW4gKGFuZCBtYXRsYWJwIChmYm91bmRwICdtYXRsYWItc2hlbGwtYnVzeS1jaGVja2VyKSkK KyAgICAgICAgICAgICAgOzsgQ2FuJ3QgZXZhbHVhdGUgaWYgdGhlIG1hdGxhYi1zaGVsbCBpcyBj dXJyZW50bHkgcnVubmluZyBjb2RlCisgICAgICAgICAgICAgIChtYXRsYWItc2hlbGwtYnVzeS1j aGVja2VyICdlcnJvci1pZi1idXN5KSkKKyAgICAgICAgICAgIHNlc3Npb24pCiAJKHNhdmUtd2lu ZG93LWV4Y3Vyc2lvbgotCSAgKGlmIG1hdGxhYnAgKHVubGVzcyBvcmctYmFiZWwtbWF0bGFiLXdp dGgtZW1hY3MtbGluayAobWF0bGFiLXNoZWxsKSkKKwkgIChpZiBtYXRsYWJwCisgICAgICAgICAg ICAgIChvcmctYmFiZWwtbWF0bGFiLXNoZWxsKQogCSAgICAocnVuLW9jdGF2ZSkpCiAJICAocmVu YW1lLWJ1ZmZlciAoaWYgKGJ1ZmZlcnAgc2Vzc2lvbikgKGJ1ZmZlci1uYW1lIHNlc3Npb24pCiAJ CQkgICAoaWYgKHN0cmluZ3Agc2Vzc2lvbikgc2Vzc2lvbiAoYnVmZmVyLW5hbWUpKSkpCkBAIC0x ODMsNjYgKzI4MCwxMTEgQEAgdmFsdWUgb2YgdGhlIGxhc3Qgc3RhdGVtZW50IGluIEJPRFksIGFz IGVsaXNwLiIKICAgICAgIChvcmctYmFiZWwtb2N0YXZlLWV2YWx1YXRlLXNlc3Npb24gc2Vzc2lv biBib2R5IHJlc3VsdC10eXBlIG1hdGxhYnApCiAgICAgKG9yZy1iYWJlbC1vY3RhdmUtZXZhbHVh dGUtZXh0ZXJuYWwtcHJvY2VzcyBib2R5IHJlc3VsdC10eXBlIG1hdGxhYnApKSkKIAorKGRlZnVu IG9yZy1iYWJlbC1vY3RhdmUtd3JhcHBlci10bXAtZmlsZSAobWF0bGFicCkKKyAgIlJldHVybiBh IGxvY2FsIHRtcCBmaWxlIHdpdGggbmFtZSBhZGp1c3RlZCBmb3IgTUFUTEFCUC4iCisgIChpZiBt YXRsYWJwCisgICAgICA7OyB3cml0ZW1hdHJpeCByZXF1aXJlcyBhIGZpbGUgZW5kaW5nIHdpdGgg Jy50eHQnCisgICAgICAob3JnLWJhYmVsLXRlbXAtZmlsZSAibWF0bGFiLSIgIi50eHQiKQorICAg IChvcmctYmFiZWwtdGVtcC1maWxlICJvY3RhdmUtIikpKQorCisoZGVmdW4gb3JnLWJhYmVsLW9j dGF2ZS1nZXQtY29kZS10by1ldmFsIChib2R5IHRtcC1maWxlIG1hdGxhYnApCisgICJGb3JtYXQg Qk9EWSBvZiB0aGUgY29kZSBibG9jayBmb3IgZXZhbHVhdGlvbiBzYXZpbmcgcmVzdWx0cyB0byBU TVAtRklMRS4KK0lmIE1BVExBQlAsIGZvcm1hdCBmb3IgTUFUTEFCLCBlbHNlIGZvcm1hdCBmb3Ig T2N0YXZlLiIKKyAgICAoaWYgbWF0bGFicAorICAgICAgICAoZm9ybWF0IG9yZy1iYWJlbC1tYXRs YWItd3JhcHBlci1tZXRob2QgZGVmYXVsdC1kaXJlY3RvcnkgYm9keSB0bXAtZmlsZSkKKyAgICAg IChmb3JtYXQgb3JnLWJhYmVsLW9jdGF2ZS13cmFwcGVyLW1ldGhvZCBib2R5IHRtcC1maWxlIHRt cC1maWxlKSkpCisKIChkZWZ1biBvcmctYmFiZWwtb2N0YXZlLWV2YWx1YXRlLWV4dGVybmFsLXBy b2Nlc3MgKGJvZHkgcmVzdWx0LXR5cGUgbWF0bGFicCkKLSAgIkV2YWx1YXRlIEJPRFkgaW4gYW4g ZXh0ZXJuYWwgT2N0YXZlIG9yIE1hdGFsYWIgcHJvY2Vzcy4KKyAgIkV2YWx1YXRlIEJPRFkgaW4g YW4gZXh0ZXJuYWwgT2N0YXZlIG9yIE1BVExBQiBwcm9jZXNzLgogUHJvY2VzcyB0aGUgcmVzdWx0 IGFzIFJFU1VMVC1UWVBFLiAgVXNlIE9jdGF2ZSwgdW5sZXNzIE1BVExBQlAgaXMgbm9uLW5pbC4i CiAgIChsZXQgKChjbWQgKGlmIG1hdGxhYnAKIAkJIG9yZy1iYWJlbC1tYXRsYWItc2hlbGwtY29t bWFuZAogCSAgICAgICBvcmctYmFiZWwtb2N0YXZlLXNoZWxsLWNvbW1hbmQpKSkKICAgICAocGNh c2UgcmVzdWx0LXR5cGUKICAgICAgIChgb3V0cHV0IChvcmctYmFiZWwtZXZhbCBjbWQgYm9keSkp Ci0gICAgICAoYHZhbHVlIChsZXQgKCh0bXAtZmlsZSAob3JnLWJhYmVsLXRlbXAtZmlsZSAib2N0 YXZlLSIpKSkKKyAgICAgIChgdmFsdWUgKGxldCAoKHRtcC1maWxlIChvcmctYmFiZWwtcHJvY2Vz cy1maWxlLW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JnLWJhYmVsLW9j dGF2ZS13cmFwcGVyLXRtcC1maWxlIG1hdGxhYnApCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ25vcXVvdGUpKSkKIAkgICAgICAgIChvcmctYmFiZWwtZXZhbAogCQkgY21kCi0JCSAo Zm9ybWF0IG9yZy1iYWJlbC1vY3RhdmUtd3JhcHBlci1tZXRob2QgYm9keQotCQkJIChvcmctYmFi ZWwtcHJvY2Vzcy1maWxlLW5hbWUgdG1wLWZpbGUgJ25vcXVvdGUpCi0JCQkgKG9yZy1iYWJlbC1w cm9jZXNzLWZpbGUtbmFtZSB0bXAtZmlsZSAnbm9xdW90ZSkpKQorICAgICAgICAgICAgICAgICAo b3JnLWJhYmVsLW9jdGF2ZS1nZXQtY29kZS10by1ldmFsIGJvZHkgdG1wLWZpbGUgbWF0bGFicCkp CiAJICAgICAgICAob3JnLWJhYmVsLW9jdGF2ZS1pbXBvcnQtZWxpc3AtZnJvbS1maWxlIHRtcC1m aWxlKSkpKSkpCiAKKyhkZWZ1biBvcmctYmFiZWwtYm9keS1mb3Itb3V0cHV0IChib2R5IG1hdGxh YnApCisgICJJZiBNQVRMQUJQLCBmaXh1cCBCT0RZIGZvciBNQVRMQUIgb3V0cHV0IHJlc3VsdC10 eXBlLiIKKyAgKHdoZW4gbWF0bGFicAorICAgIDs7IFdoZW4gd2Ugc2VuZCBtdWx0aS1saW5lIGlu cHV0IHRvIGBtYXRsYWItc2hlbGwnLCB3ZSdsbCBzZWUgdGhlICJib2R5IgorICAgIDs7IGNvZGUg bGluZXMgZWNob2VkIGluIHRoZSBvdXRwdXQgd2hpY2ggaXMgbm90IHdoYXQgb25lIHdvdWxkIGV4 cGVjdC4gIFRvCisgICAgOzsgcmVtb3ZlIHRoZXNlIHVud2FudGVkIGxpbmVzLCB3ZSBhcHBlbmQg YSBjb21tZW50ICIlLTxvcmctZXZhbD4iIHRvIGVhY2gKKyAgICA7OyBsaW5lIGluIHRoZSBib2R5 IE1BVExBQiBjb2RlLiAgQWZ0ZXIgd2UgY29sbGVjdCB0aGUgcmVzdWx0cyBmcm9tCisgICAgOzsg ZXZhbHVhdGlvbiwgd2UgbGV2ZXJhZ2UgdGhlICIlLTxvcmctZXZhbD4iIHRvIHJlbW92ZSB0aGUg dW53YW50ZWQgbGluZXMuCisgICAgOzsgRXhhbXBsZSBvZiBkZXNpcmVkIGJlaGF2aW9yOgorICAg IDs7ICAgICAjK2JlZ2luX3NyYyBtYXRsYWIgOnJlc3VsdHMgb3V0cHV0CisgICAgOzsgICAgICAg ZGlzcCgnVGhlIHJlc3VsdHMgYXJlOicpCisgICAgOzsgICAgICAgYSA9IFsxLCAyOyAzLCA0XQor ICAgIDs7ICAgICAgIGIgPSBhICogMgorICAgIDs7ICAgICAjK2VuZF9zcmMKKyAgICA7OworICAg IDs7ICAgICAjK1JFU1VMVFM6CisgICAgOzsgICAgICMrYmVnaW5fZXhhbXBsZQorICAgIDs7ICAg ICBUaGUgcmVzdWx0cyBhcmU6CisgICAgOzsKKyAgICA7OyAgICAgYSA9CisgICAgOzsKKyAgICA7 OyAgICAgICAgICAxICAgICAyCisgICAgOzsgICAgICAgICAgMyAgICAgNAorICAgIDs7CisgICAg OzsgICAgIGIgPQorICAgIDs7CisgICAgOzsgICAgICAgICAgMiAgICAgNAorICAgIDs7ICAgICAg ICAgIDYgICAgIDgKKyAgICA7OyAgICAgIytlbmRfZXhhbXBsZQorCisgICAgKHNldHEgYm9keSAo cmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJcbiIgIiAlLTxvcmctZXZhbD4tXG4iIGJvZHkpKQor ICAgICh3aGVuIChub3QgKHN0cmluZy1tYXRjaCAiXG5cXCciIGJvZHkpKQorICAgICAgKHNldHEg Ym9keSAoY29uY2F0IGJvZHkgIiAlLTxvcmctZXZhbD4tIikpKSkKKyAgYm9keSkKKworKGRlZnVu IG9yZy1iYWJlbC1maXgtdXAtb3V0cHV0IChyZXN1bHRzIG1hdGxhYnApCisgICJGaXggdXAgUkVT VUxUUyBmb3Igb3V0cHV0IHJlc3VsdC10eXBlIHdoZW4gTUFUTEFCUC4iCisgIDs7IFdoZW4gd2Ug c2VuZCBtdWx0aS1saW5lIGlucHV0IHRvIGBtYXRsYWItc2hlbGwnLCB3ZSdsbCBzZWUgdGhlICJi b2R5IiBjb2RlCisgIDs7IGxpbmVzIGVjaG9lZCBpbiB0aGUgb3V0cHV0LiAgVGhlcmVmb3JlLCBs ZXZlcmFnZSB0aGUgIiUtPG9yZy1ldmFsPiIgdG8KKyAgOzsgcmVtb3ZlIHRoZSB1bm5lY2Vzc2Fy eSBsaW5lcy4KKyAgKGlmIG1hdGxhYnAKKyAgICAgIChsZXQgKChmaXhlZC1yZXN1bHRzIChyZXBs YWNlLXJlZ2V4cC1pbi1zdHJpbmcgIl5bXlxuXSolLTxvcmctZXZhbD4tXG4iICIiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMpKSkK KyAgICAgICAgOzsgUmVtb3ZlIHVubmVjZXNzYXJ5IHN0YXJ0aW5nIGJsYW5rIGxpbmUgY2F1c2Vk IGJ5IHN0cmlwcGluZyAlLTxvcmctZXZhbD4KKyAgICAgICAgKHNldHEgZml4ZWQtcmVzdWx0cyAo cmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nICJcXGBbWzpzcGFjZTpdXHJcbl0rIiAiIiBmaXhlZC1y ZXN1bHRzKSkKKyAgICAgICAgOzsgbWF0bGFiLXNoZWxsIHdyYXBzIGVycm9ycyBpbiA8RVJST1JU WFQ+IGFuZCA8L0VSUk9SVFhUPiBzbyByZW1vdmUgdGhvc2UKKyAgICAgICAgKHJlcGxhY2UtcmVn ZXhwLWluLXN0cmluZyAiPC8/RVJST1JUWFQ+W1xyXG5dIiAiIiBmaXhlZC1yZXN1bHRzKSkKKyAg ICByZXN1bHRzKSkKKwogKGRlZnVuIG9yZy1iYWJlbC1vY3RhdmUtZXZhbHVhdGUtc2Vzc2lvbgog ICAgIChzZXNzaW9uIGJvZHkgcmVzdWx0LXR5cGUgJm9wdGlvbmFsIG1hdGxhYnApCiAgICJFdmFs dWF0ZSBCT0RZIGluIFNFU1NJT04uIgotICAobGV0KiAoKHRtcC1maWxlIChvcmctYmFiZWwtdGVt cC1maWxlIChpZiBtYXRsYWJwICJtYXRsYWItIiAib2N0YXZlLSIpKSkKLQkgKHdhaXQtZmlsZSAo b3JnLWJhYmVsLXRlbXAtZmlsZSAibWF0bGFiLWVtYWNzLWxpbmstd2FpdC1zaWduYWwtIikpCisg IChsZXQqICgodG1wLWZpbGUgKG9yZy1iYWJlbC1vY3RhdmUtd3JhcHBlci10bXAtZmlsZSBtYXRs YWJwKSkKIAkgKGZ1bGwtYm9keQogCSAgKHBjYXNlIHJlc3VsdC10eXBlCiAJICAgIChgb3V0cHV0 CiAJICAgICAobWFwY29uY2F0CiAJICAgICAgIydvcmctYmFiZWwtY2hvbXAKLQkgICAgICAobGlz dCBib2R5IG9yZy1iYWJlbC1vY3RhdmUtZW9lLWluZGljYXRvcikgIlxuIikpCisJICAgICAgKGxp c3QgKG9yZy1iYWJlbC1ib2R5LWZvci1vdXRwdXQgYm9keSBtYXRsYWJwKQorICAgICAgICAgICAg ICAgICAgICBvcmctYmFiZWwtb2N0YXZlLWVvZS1pbmRpY2F0b3IpCisgICAgICAgICAgICAgICJc biIpKQogCSAgICAoYHZhbHVlCi0JICAgICAoaWYgKGFuZCBtYXRsYWJwIG9yZy1iYWJlbC1tYXRs YWItd2l0aC1lbWFjcy1saW5rKQotCQkgKGNvbmNhdAotCQkgIChmb3JtYXQgb3JnLWJhYmVsLW1h dGxhYi1lbWFjcy1saW5rLXdyYXBwZXItbWV0aG9kCi0JCQkgIGJvZHkKLQkJCSAgKG9yZy1iYWJl bC1wcm9jZXNzLWZpbGUtbmFtZSB0bXAtZmlsZSAnbm9xdW90ZSkKLQkJCSAgKG9yZy1iYWJlbC1w cm9jZXNzLWZpbGUtbmFtZSB0bXAtZmlsZSAnbm9xdW90ZSkgd2FpdC1maWxlKSAiXG4iKQotCSAg ICAgICAobWFwY29uY2F0Ci0JCSMnb3JnLWJhYmVsLWNob21wCi0JCShsaXN0IChmb3JtYXQgb3Jn LWJhYmVsLW9jdGF2ZS13cmFwcGVyLW1ldGhvZAotCQkJICAgICAgYm9keQotCQkJICAgICAgKG9y Zy1iYWJlbC1wcm9jZXNzLWZpbGUtbmFtZSB0bXAtZmlsZSAnbm9xdW90ZSkKLQkJCSAgICAgIChv cmctYmFiZWwtcHJvY2Vzcy1maWxlLW5hbWUgdG1wLWZpbGUgJ25vcXVvdGUpKQotCQkgICAgICBv cmctYmFiZWwtb2N0YXZlLWVvZS1pbmRpY2F0b3IpICJcbiIpKSkpKQotCSAocmF3IChpZiAoYW5k IG1hdGxhYnAgb3JnLWJhYmVsLW1hdGxhYi13aXRoLWVtYWNzLWxpbmspCi0JCSAgKHNhdmUtd2lu ZG93LWV4Y3Vyc2lvbgotCQkgICAgKHdpdGgtdGVtcC1idWZmZXIKLQkJICAgICAgKGluc2VydCBm dWxsLWJvZHkpCi0JCSAgICAgICh3cml0ZS1yZWdpb24gIiIgJ2lnbm9yZWQgd2FpdC1maWxlIG5p bCBuaWwgbmlsICdleGNsKQotCQkgICAgICAobWF0bGFiLXNoZWxsLXJ1bi1yZWdpb24gKHBvaW50 LW1pbikgKHBvaW50LW1heCkpCi0JCSAgICAgIChtZXNzYWdlICJXYWl0aW5nIGZvciBNYXRsYWIg RW1hY3MgTGluayIpCi0JCSAgICAgICh3aGlsZSAoZmlsZS1leGlzdHMtcCB3YWl0LWZpbGUpIChz aXQtZm9yIDAuMDEpKQotCQkgICAgICAiIikpIDs7IG1hdGxhYi1zaGVsbC1ydW4tcmVnaW9uIGRv ZXNuJ3Qgc2VlbSB0bwotCQk7OyBtYWtlICptYXRsYWIqIGJ1ZmZlciBjb250ZW50cyBlYXNpbHkK LQkJOzsgYXZhaWxhYmxlLCBzbyA6cmVzdWx0cyBvdXRwdXQgY3VycmVudGx5Ci0JCTs7IHdvbid0 IHdvcmsKLQkJKG9yZy1iYWJlbC1jb21pbnQtd2l0aC1vdXRwdXQKLQkJICAgIChzZXNzaW9uCi0J CSAgICAgKGlmIG1hdGxhYnAKLQkJCSBvcmctYmFiZWwtb2N0YXZlLWVvZS1pbmRpY2F0b3IKLQkJ ICAgICAgIG9yZy1iYWJlbC1vY3RhdmUtZW9lLW91dHB1dCkKLQkJICAgICB0IGZ1bGwtYm9keSkK LQkJICAoaW5zZXJ0IGZ1bGwtYm9keSkgKGNvbWludC1zZW5kLWlucHV0IG5pbCB0KSkpKQorCSAg ICAgKG1hcGNvbmNhdAorCSAgICAgICMnb3JnLWJhYmVsLWNob21wCisJICAgICAgKGxpc3QgKG9y Zy1iYWJlbC1vY3RhdmUtZ2V0LWNvZGUtdG8tZXZhbCBib2R5IHRtcC1maWxlIG1hdGxhYnApCisJ CSAgICBvcmctYmFiZWwtb2N0YXZlLWVvZS1pbmRpY2F0b3IpCisgICAgICAgICAgICAgICJcbiIp KSkpCisJIChyYXctcmVzdWx0cworCSAgKG9yZy1iYWJlbC1jb21pbnQtd2l0aC1vdXRwdXQKKwkg ICAgICAoc2Vzc2lvbgorCSAgICAgICAoaWYgbWF0bGFicAorCQkgICBvcmctYmFiZWwtb2N0YXZl LWVvZS1pbmRpY2F0b3IKKwkJIG9yZy1iYWJlbC1vY3RhdmUtZW9lLW91dHB1dCkKKwkgICAgICAg dCBmdWxsLWJvZHkpCisJICAgIChpbnNlcnQgZnVsbC1ib2R5KSAoY29taW50LXNlbmQtaW5wdXQg bmlsIHQpKSkKIAkgcmVzdWx0cykKICAgICAocGNhc2UgcmVzdWx0LXR5cGUKICAgICAgIChgdmFs dWUKQEAgLTI1MCwxMiArMzkyLDEzIEBAIFByb2Nlc3MgdGhlIHJlc3VsdCBhcyBSRVNVTFQtVFlQ RS4gIFVzZSBPY3RhdmUsIHVubGVzcyBNQVRMQUJQIGlzIG5vbi1uaWwuIgogICAgICAgKGBvdXRw dXQKICAgICAgICAoc2V0cSByZXN1bHRzCiAJICAgICAoaWYgbWF0bGFicAotCQkgKGNkciAocmV2 ZXJzZSAoZGVsZXRlICIiIChtYXBjYXIgIydvcmctc3RyaXAtcXVvdGVzCi0JCQkJCSAgICAgICAg ICAobWFwY2FyICMnb3JnLXRyaW0gcmF3KSkpKSkKKyAgICAgICAgICAgICAgICAgKGNkciAocmV2 ZXJzZSAoZGVsZXRlICIiIChtYXBjYXIgIydvcmctc3RyaXAtcXVvdGVzCisJCQkJCSAgICAgICAg ICAobWFwY2FyICMnb3JnLXRyaW0gcmF3LXJlc3VsdHMpKSkpKQogCSAgICAgICAoY2RyIChtZW1i ZXIgb3JnLWJhYmVsLW9jdGF2ZS1lb2Utb3V0cHV0CiAJCQkgICAgKHJldmVyc2UgKG1hcGNhciAj J29yZy1zdHJpcC1xdW90ZXMKLQkJCQkJICAgICAobWFwY2FyICMnb3JnLXRyaW0gcmF3KSkpKSkp KQotICAgICAgIChtYXBjb25jYXQgIydpZGVudGl0eSAocmV2ZXJzZSByZXN1bHRzKSAiXG4iKSkp KSkKKwkJCQkJICAgICAobWFwY2FyICMnb3JnLXRyaW0gcmF3LXJlc3VsdHMpKSkpKSkpCisgICAg ICAgKG9yZy1iYWJlbC1maXgtdXAtb3V0cHV0CisgICAgICAgIChtYXBjb25jYXQgIydpZGVudGl0 eSAocmV2ZXJzZSByZXN1bHRzKSAiXG4iKSBtYXRsYWJwKSkpKSkKIAogKGRlZnVuIG9yZy1iYWJl bC1vY3RhdmUtaW1wb3J0LWVsaXNwLWZyb20tZmlsZSAoZmlsZS1uYW1lKQogICAiSW1wb3J0IGRh dGEgZnJvbSBGSUxFLU5BTUUuCg== --000000000000d922bd0626d0152f--