From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id YIsWOjgWSmSZGAAASxT56A (envelope-from ) for ; Thu, 27 Apr 2023 08:29:13 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id dFApOjgWSmSZYwEAauVa8A (envelope-from ) for ; Thu, 27 Apr 2023 08:29:12 +0200 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 9BC40660F for ; Thu, 27 Apr 2023 08:29:12 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1prv6w-0001R3-FI; Thu, 27 Apr 2023 02:28:10 -0400 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 1prv6t-0001Qe-84 for emacs-orgmode@gnu.org; Thu, 27 Apr 2023 02:28:09 -0400 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1prv6o-0006P4-E5 for emacs-orgmode@gnu.org; Thu, 27 Apr 2023 02:28:04 -0400 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4edc7cc6f46so8673148e87.1 for ; Wed, 26 Apr 2023 23:28:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682576880; x=1685168880; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=/geHj2CEc6XUedK+PwaK0NHfOjKW6nNnbT9qX+0NbuU=; b=eDSDmpwSTd2gpEUkTAuE4Z9VVCE81dgML6LGcfaWdi7wZqL/3oSw916WhXct/fqt6J uRVT4TLpHR6Wetx98+1iWNl/eVkXZg8JFcAuf+D/D3es9Dry/37vqKBWZqDgpHqpEJvD 200HsUQeDkZK3X7zOUZXQZHhjeUzU/IWP0yXnazuexq9qWTIknusBdWvH/HRnxOuRkQ0 WytjmJyHRv4mZWjAgVJCBTPJzaNabKMIyj8+pCUAG7d4XTWWnKr7jq0flC0p1T60gxr2 UQtb6hG4EeBhizt/F2WhMu6EmQZZNg6/phLSWLS41b1ckg1HYaiH/0FQXQAe+GEPCR6g tXQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682576880; x=1685168880; h=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=/geHj2CEc6XUedK+PwaK0NHfOjKW6nNnbT9qX+0NbuU=; b=Niv3pRj9L/l+oVsJInlviAhcmNdzT8ndace/86vKEerfRpkeWL36KlN0/WiZKKohKh 7qYBd4K1hcvM5y0iLWAr1+1G0+dW2yo0Ibb2gDv6ZOphAaTMf8nvQyD8BJlGdwGZoHR1 eh+Seyi/nqs+G2HgNc3z5Dd10Q5UT46thk5kKpvNKqVoqTzqTV9hjks0EXMr9PesAhzi Ljh6kxJ5ZoibHZflytnP5Wnnia0cRjDWKjoEUl0FbLDvhUZl19cYq/0JScXnegxaln8t IWxT5HeDmHnpMNI7GIWsqYKgux6qkB4t6KZJR8z2G2lsPdS6TjMceTnCRPfQS0jBelt2 IAmA== X-Gm-Message-State: AC+VfDyY0zTyx04lSajiISSPNY//RwI7C/jmyXXaiLl5qici7Wc9ickC 2nIAcOYCotDStKdlUG15aQmffpHaBrTsdpxh/XM8Ogo8xuU= X-Google-Smtp-Source: ACHHUZ7zevnFSXtCqLucseUuGR+bsnPiipg7HS9T6PCuKrdLBL5yra11+0/QTLZTEjlBNP1hs7agJqDK5tTYk8byOBQ= X-Received: by 2002:ac2:47f3:0:b0:4dc:84dd:eb91 with SMTP id b19-20020ac247f3000000b004dc84ddeb91mr248492lfp.22.1682576880085; Wed, 26 Apr 2023 23:28:00 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mehmet Tekman Date: Thu, 27 Apr 2023 08:27:23 +0200 Message-ID: Subject: Re: [ANN] lisp/ob-tangle-sync.el To: emacs-orgmode@gnu.org Content-Type: multipart/mixed; boundary="0000000000003ed5e805fa4b751e" Received-SPF: pass client-ip=2a00:1450:4864:20::12d; envelope-from=mtekman89@gmail.com; helo=mail-lf1-x12d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, 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 ARC-Seal: i=1; s=key1; d=yhetil.org; t=1682576952; a=rsa-sha256; cv=none; b=aNQNEZWAIC7rdqXuZfwzWeXlfNVtSm658SpAaOA30InEsGPCmMUoBy10hlVbJyyt7fkbZ5 J364OZu/WVTrsT+6Wkgx3QlwBt1zcwBgyv43L+WWTEm9TLiJnHcBsuuJ/rraL/CT2npn22 3F00FrGtSMBCp+AjbeFxjQYHT71JDxi+CDSpVdPqMuZEmp0ZQIB94ACVSk3HuZKzpX47jC gn4GGorYz+fI/j7uJFegMS62rbF63MBt0BoxXBzXb8UbWua5Kub1kaR6yY17LLF7lkcsKG OzFkJTvyC61/5nPxgA5ztIB13D8YDO96khnLy/mWOrycaHPwfbIr9zPl0IhXMQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=eDSDmpwS; dmarc=pass (policy=none) header.from=gmail.com; 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" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1682576952; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=/geHj2CEc6XUedK+PwaK0NHfOjKW6nNnbT9qX+0NbuU=; b=WRxTIeAf9QK295ntz2Kq0eUP0rlceDunuwV7BQc5mX1/dCUVPdnBClZmQoN/yIHstHxR6o imeymMlaNLd0A5J39eeOhLdaIm4PH7jyPYjz4WihlQCwWiADaxHSGOrSpxoixU26yLxuJx 3NRBDmHeec54DK8ueQV0jCRYWevvz8Jau5f5qaKxzR2Gu9+Vpo2yrEN3yZ1MEJBTsa7fPP qImh0o5bxFk8ngyDbMsgmMZ7LXibe7QcskMSYcB1M7ICDEoHF0aumghH3GpGRVR1T2ubQz 0V/pP51sFSnRq8mdFD8+RmUMl75FX/dLejGQgFsDRuNS6KLWxTR69peC5VwHyA== X-Migadu-Scanner: scn1.migadu.com Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=eDSDmpwS; dmarc=pass (policy=none) header.from=gmail.com; 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" X-Migadu-Spam-Score: -3.82 X-Spam-Score: -3.82 X-Migadu-Queue-Id: 9BC40660F X-TUID: rmQYsk575e6y --0000000000003ed5e805fa4b751e Content-Type: text/plain; charset="UTF-8" Ruijie Yu writes: > Great idea! Some inline comments below. > > You only need to say #'expand-file-name instead of the quoted lambda. > Also, you need to set the variable, otherwise the variable > `org-babel-tangle-sync-files' is undefined. > > What I have in mind is this: > :set (lambda (var val) (set var (mapcar #'expand-file-name val))) > > Here you don't have to use `progn' because it is implied from `save-excursion'. > Thanks! I've made your changes, and I've also incorporated John Wiegley's comments about using "import" instead of "pull" as a tangle-sync action word (small diff attached). I've also written up my changes in the ~etc/ORG-NEWS~ and targeted my custom variable for the 9.7 release (diff attached). > Is there possibility to have a local minor mode (without introducing too > much code changes)? I initially tried it this way, but the problem is that an org source block buffer might be in sync-mode, but it's corresponding tangle file might not be, making any changes asymmetric. Another issue is in order to see the changes in the tangled file, the tangle buffer needs to be reverted (with user prompt) which then switches off the sync-mode for that buffer on reload. One way around this (and it's something I implemented 3 years ago in my messy org-tanglesync[0] MELPA code) is to set an explicit list of "sync files", and then for Emacs to parse every =:tangle= header in a given file when loaded (via =org-src-mode-hook=) to create an alist of config files and their associated tangled files[1], such as =((file1.conf . (tanglefile1.txt tanglefile2.txt etc)))=. Then, for example, when ~tanglefile1.txt~ is loaded, Emacs knows that it should load the sync-mode too. This approach works reasonably well when the "sync files" list is mandatory, but it's also prone to errors if a sync file is edited and the alist of config files isn't updated, and the user would also lose the flexibility of having ~ob-tangle-sync~ function everywhere. I think a global minor mode is really elegant in this regard and I wish I knew about it 3 years ago! Best, Mehmet 0: https://gitlab.com/mtekman/org-tanglesync.el 1: https://gitlab.com/mtekman/org-tanglesync.el/-/blob/master/org-tanglesync.el#L400-L410 --0000000000003ed5e805fa4b751e Content-Type: text/x-patch; charset="US-ASCII"; name="etc_ORG-NEWS.diff" Content-Disposition: attachment; filename="etc_ORG-NEWS.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lgyqsxke0 ZGlmZiAtLWdpdCBhL2V0Yy9PUkctTkVXUyBiL2V0Yy9PUkctTkVXUwppbmRleCAwMzg5NGYxMjgu LjI5ZjYwYzc1NSAxMDA2NDQKLS0tIGEvZXRjL09SRy1ORVdTCisrKyBiL2V0Yy9PUkctTkVXUwpA QCAtMjA3LDEyICsyMDcsMzUgQEAgc2VsZWN0aW9uLgogVE9ETyBzdGF0ZSwgcHJpb3JpdHksIHRh Z3MsIHN0YXRpc3RpY3MgY29va2llcywgYW5kIENPTU1FTlQga2V5d29yZHMKIGFyZSBhbGxvd2Vk IGluIHRoZSB0cmVlIHN0cnVjdHVyZS4KIAotKioqIEFzeW5jaHJvbm91cyBjb2RlIGV2YWx1YXRh dGlvbiBpbiB+b2Itc2hlbGx+CisqKiogQXN5bmNocm9ub3VzIGNvZGUgZXZhbHVhdGlvbiBpbiB+ b2Itc2hlbGx+CiAKIFJ1bm5pbmcgc2hlbGwgYmxvY2tzIHdpdGggdGhlIH46c2Vzc2lvbn4gaGVh ZGVyIGZyZWV6ZXMgRW1hY3MgdW50aWwKIGV4ZWN1dGlvbiBjb21wbGV0ZXMuICBUaGUgbmV3IH46 YXN5bmN+IGhlYWRlciBhbGxvd3MgdXNlcnMgdG8gY29udGludWUKIGVkaXRpbmcgd2l0aCBFbWFj cyB3aGlsZSBhIH46c2Vzc2lvbn4gYmxvY2sgZXhlY3V0ZXMuCiAKKyoqKiBBdXRvbWF0aWMgc3lu YyBvZiBzb3VyY2UgYmxvY2tzIGFuZCB0YW5nbGVkIGJsb2NrcyBpbiB+b2ItdGFuZ2xlLXN5bmN+ CisKK0ludm9raW5nIG1pbm9yIG1vZGUgPW9yZy1iYWJlbC10YW5nbGUtc3luYy1tb2RlPSBzeW5j aHJvbml6ZXMgY29udGVudHMKK2JldHdlZW4gYSBjdXJyZW50bHkgdmlzaXRlZCB0YW5nbGVkIGZp bGUgaXRzIG9yZy1tb2RlIHNvdXJjZSBibG9jaworKGFuZCB2aWNlIHZlcnNhKSB2aWEgdGhlID1h ZnRlci1zYXZlLWhvb2s9LgorCitEZXNpcmVkIHRhbmdsaW5nIGFjdGlvbnMgY2FuIGJlIGFzc3lt ZXRyaWMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCitvcmctbW9kZSBzb3VyY2UgYmxvY2sgaGVh ZGVyIGFyZ3VtZW50ID06dGFuZ2xlLXN5bmMgPGFjdGlvbj49IGhhcyBhbgorYWN0aW9uIG9mOgor CistID1za2lwPSA6OiBkbyBub3RoaW5nLCBqdXN0IHNhdmUgdGhlIGJ1ZmZlciwgZXZlbiBpZiB0 aGUgc3luYyBtb2RlIGlzCisgICAgICAgICAgICBhY3RpdmUKKworLSA9aW1wb3J0PSA6OiBvbmx5 IHB1bGwgY2hhbmdlcyBmcm9tIHRoZSB0YW5nbGVkIGJsb2NrIGludG8gdGhlCisgICAgICAgICAg ICAgIG9yZy1tb2RlIHNvdXJjZSBibG9jayAoZXZlbiB3aGVuIHZpc2l0ZWQgZnJvbSBlaXRoZXIp CisKKy0gPWV4cG9ydD0gOjogb25seSBwdWxsIGNoYW5nZXMgZnJvbSB0aGUgb3JnLW1vZGUgc291 cmNlIGJsb2NrIGludG8KKyAgICAgICAgICAgICAgdGhlIHRhbmdsZWQgYmxvY2sgKGV2ZW4gd2hl biB2aXNpdGVkIGZyb20gZWl0aGVyKQorCistID1ib3RoPSAob3IgbmlsKSA6OiBmcmVlbHkgc3lu YyBjaGFuZ2VzIG9mIGN1cnJlbnQgYnVmZmVyIHRvCisgICAgICAgICAgICAgICAgICAgICBhc3Nv Y2lhdGVkIHNvdXJjZSBvciB0YXJnZXQKKworCiAqKiBNaXNjZWxsYW5lb3VzCiAqKiogQmxhbmsg bGluZXMgYWZ0ZXIgcmVtb3ZlZCBvYmplY3RzIGFyZSBub3QgcmV0YWluZWQgZHVyaW5nIGV4cG9y dAogCg== --0000000000003ed5e805fa4b751e Content-Type: text/x-patch; charset="UTF-8"; name="lisp_ob-tangle-sync.el.diff" Content-Disposition: attachment; filename="lisp_ob-tangle-sync.el.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lgyqsxl91 ZGlmZiAtLWdpdCBhL2xpc3Avb2ItdGFuZ2xlLXN5bmMuZWwgYi9saXNwL29iLXRhbmdsZS1zeW5j LmVsCmluZGV4IDYxYzIzZjY0Ny4uY2ZhNmFiZGQyIDEwMDY0NAotLS0gYS9saXNwL29iLXRhbmds ZS1zeW5jLmVsCisrKyBiL2xpc3Avb2ItdGFuZ2xlLXN5bmMuZWwKQEAgLTQ0LDcgKzQ0LDYgQEAK IChkZWZpbmUtbWlub3ItbW9kZSBvcmctYmFiZWwtdGFuZ2xlLXN5bmMtbW9kZQogICAiR2xvYmFs IG1pbm9yIG1vZGUgdGhhdCBzeW5jaHJvbml6ZXMgdGFuZ2xlZCBmaWxlcyBhZnRlciBldmVyeSBz YXZlLiIKICAgOmdsb2JhbCB0Ci0gIDppbnRlcmFjdGl2ZSB0CiAgIDpsaWdodGVyICIgby10cyIK ICAgKGlmIG9yZy1iYWJlbC10YW5nbGUtc3luYy1tb2RlCiAgICAgICAoYWRkLWhvb2sgJ2FmdGVy LXNhdmUtaG9vayAnb3JnLWJhYmVsLXRhbmdsZS1zeW5jLXN5bmNocm9uaXplIG5pbCB0KQpAQCAt NTcsOCArNTYsOCBAQCBoZXJlIGFyZSBzdWJqZWN0IHRvIHRoZSBvcmctYmFiZWwtdGFuZ2xlLXN5 bmMgdHJlYXRtZW50LiAgSWYgbmlsLAogdGhlbiBhbGwgb3JnIGZpbGVzIHdpdGggdGFuZ2xlIGhl YWRlcnMgYXJlIGNvbnNpZGVyZWQuIgogICA6Z3JvdXAgJ29yZy1iYWJlbC10YW5nbGUtc3luYwog ICA6dHlwZSAnbGlzdAotICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjkuNi41IikKLSAgOnNl dCAobGFtYmRhIChfdmFyIHZhbCkgKG1hcGNhciAjJyhsYW1iZGEgKHgpIChleHBhbmQtZmlsZS1u YW1lIHgpKSB2YWwpKSkKKyAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI5LjciKQorICA6c2V0 IChsYW1iZGEgKHZhciB2YWwpIChzZXQgdmFyIChtYXBjYXIgIydleHBhbmQtZmlsZS1uYW1lIHZh bCkpKSkKIAogCiAoZGVmdW4gb3JnLWJhYmVsLXRhbmdsZS1zeW5jLS1iYWJlbC10YW5nbGUtanVt cCAobGluayBibG9jay1uYW1lKQpAQCAtOTUsMTUgKzk0LDE1IEBAIElmIHRoZSBjdXJzb3IgaXMg ZWl0aGVyIHdpdGhpbiB0aGUgc291cmNlIGZpbGUgb3IgaW4gZGVzdGluYXRpb24KIHRhbmdsZWQg ZmlsZSwgcGVyZm9ybSBhIGRlc2lyZWQgdGFuZ2xpbmcgYWN0aW9uLiAgVGhlIHRhbmdsaW5nCiBh Y3Rpb24gYnkgZGVmYXVsdCBpcyB0byBkZXRhbmdsZSB0aGUgdGFuZ2xlZCBmaWxlcycgY2hhbmdl cyBiYWNrCiB0byBpdHMgc291cmNlIGJsb2NrLCBvciB0byB0YW5nbGUgdGhlIHNvdXJjZSBibG9j ayB0byBpdHMgdGFuZ2xlZAotZmlsZS4gIEFjdGlvbnMgYXJlIG9uZSBvZiBgc2tpcCcgKG5vIGFj dGlvbiksIGBwdWxsJyAoZGV0YW5nbGUKK2ZpbGUuICBBY3Rpb25zIGFyZSBvbmUgb2YgYHNraXAn IChubyBhY3Rpb24pLCBgaW1wb3J0JyAoZGV0YW5nbGUKIG9ubHkpLCBgZXhwb3J0JyAodGFuZ2xl IG9ubHkpLCBhbmQgYGJvdGgnIChkZWZhdWx0LCBzeW5jaHJvbml6ZQogaW4gYm90aCBkaXJlY3Rp b25zKS4gIEFsbCBgb3JnLW1vZGUnIHNvdXJjZSBibG9ja3MgYW5kIGFsbCB0YW5nbGVkCiBmaWxl cyB3aXRoIGNvbW1lbnRzIGFyZSBjb25zaWRlcmVkIHZhbGlkIHRhcmdldHMsIHVubGVzcwogc3Bl Y2lmaWVkIG90aGVyd2lzZSBieSBgb3JnLWJhYmVsLXRhbmdsZS1zeW5jLWZpbGVzJy4iCiAgIChp bnRlcmFjdGl2ZSkKICAgKGxldCogKChsaW5rIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgICAgICAg ICAgICAocHJvZ24gKHJlLXNlYXJjaC1iYWNrd2FyZCBvcmctbGluay1icmFja2V0LXJlIG5pbCB0 KQotCQkgICAgICAgIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpKQorICAgICAgICAg ICAgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkIG9yZy1saW5rLWJyYWNrZXQtcmUgbmlsIHQpCisJ CSAgICAgICAgIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpCiAgICAgICAgICAoYmxv Y2stbmFtZSAobWF0Y2gtc3RyaW5nIDIpKQogICAgICAgICAgKG9yZ2ZpbGUtcCAoc3RyaW5nPSBt YWpvci1tb2RlICJvcmctbW9kZSIpKQogICAgICAgICAgKHRhbmdsZWQtZmlsZS1wIChhbmQgbGlu ayAobm90IG9yZ2ZpbGUtcCkpKSkKQEAgLTE0MiwxMiArMTQxLDEyIEBAIHNwZWNpZmllZCBvdGhl cndpc2UgYnkgYG9yZy1iYWJlbC10YW5nbGUtc3luYy1maWxlcycuIgogICAgICAgICAgICAgICAg ICAgICAgICAob3JnLWJhYmVsLWRldGFuZ2xlKQogICAgICAgICAgICAgICAgICAgICAgICAobWVz c2FnZSAiU3luY2VkIHRvICVzIiBzb3VyY2UtZmlsZSkpKSkpKQogCi0gICAgICA7OyBTb3VyY2Ug QmxvY2sg4oaSIFRhbmdsZWQgRmlsZSAob3IgU291cmNlIEJsb2NrIOKGkCBUYW5nbGVkIEZpbGUg KHZpYSAicHVsbCIpKQorICAgICAgOzsgU291cmNlIEJsb2NrIOKGkiBUYW5nbGVkIEZpbGUgKG9y IFNvdXJjZSBCbG9jayDihpAgVGFuZ2xlZCBGaWxlICh2aWEgImltcG9ydCIpKQogICAgICAgKHdo ZW4gb3JnZmlsZS1wCiAgICAgICAgIDs7IFRhbmdsZSBhY3Rpb24gb2YgU291cmNlIGZpbGUgb24g QmxvY2sgaWY6CiAgICAgICAgIDs7IC0gbWVtYmVyIG9mIHN5bmMgZmlsZSBsaXN0IChvciBsaXN0 IGlzIGVtcHR5KQogICAgICAgICA7OyBBY3Rpb25zCi0gICAgICAgIDs7IC0gcHVsbCAoU291cmNl IEJsb2NrIOKGkCBGaWxlKQorICAgICAgICA7OyAtIGltcG9ydCAoU291cmNlIEJsb2NrIOKGkCBG aWxlKQogICAgICAgICA7OyAtIHNraXAgKG5vdGhpbmcpCiAgICAgICAgIDs7IC0gZXhwb3J0LCBi b3RoLCBuaWwgKFNvdXJjZSBCbG9jayDihpIgRmlsZSkKICAgICAgICAgKGlmIChvciAobnVsbCBv cmctYmFiZWwtdGFuZ2xlLXN5bmMtZmlsZXMpCkBAIC0xNTcsNyArMTU2LDcgQEAgc3BlY2lmaWVk IG90aGVyd2lzZSBieSBgb3JnLWJhYmVsLXRhbmdsZS1zeW5jLWZpbGVzJy4iCiAgICAgICAgICAg ICAgICAgICAgKHRhbmdsZS1maWxlIChjZHIgKGFzc3EgOnRhbmdsZSBzcmMtaGVhZGVycykpKQog ICAgICAgICAgICAgICAgICAgICh0YW5nbGUtYWN0aW9uIChhbGlzdC1nZXQgOnRhbmdsZS1zeW5j IHNyYy1oZWFkZXJzKSkpCiAgICAgICAgICAgICAgICh3aGVuIHRhbmdsZS1maWxlCi0gICAgICAg ICAgICAgICAgKGNvbmQgKChzdHJpbmc9IHRhbmdsZS1hY3Rpb24gInB1bGwiKSAoc2F2ZS1leGN1 cnNpb24KKyAgICAgICAgICAgICAgICAoY29uZCAoKHN0cmluZz0gdGFuZ2xlLWFjdGlvbiAiaW1w b3J0IikgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChvcmctYmFiZWwtZGV0YW5nbGUgdGFuZ2xlLWZpbGUpKSkK ICAgICAgICAgICAgICAgICAgICAgICAoKHN0cmluZz0gdGFuZ2xlLWFjdGlvbiAic2tpcCIpIG5p bCkKICAgICAgICAgICAgICAgICAgICAgICAodCAobGV0ICgoY3VycmVudC1wcmVmaXgtYXJnICco MTYpKSkK --0000000000003ed5e805fa4b751e--