From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Taylan Kammer Newsgroups: gmane.lisp.guile.devel Subject: [PATCH] Improve support for R6/R7 SRFI module name formats. Date: Mon, 10 May 2021 18:58:42 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E72F15A76233D4ED802B4C1C" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22368"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 To: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Mon May 10 19:01:28 2021 Return-path: Envelope-to: guile-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 1lg9Hc-0005fi-4f for guile-devel@m.gmane-mx.org; Mon, 10 May 2021 19:01:28 +0200 Original-Received: from localhost ([::1]:49110 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lg9Hb-0007hU-7P for guile-devel@m.gmane-mx.org; Mon, 10 May 2021 13:01:27 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40382) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lg9F3-0005mC-SE for guile-devel@gnu.org; Mon, 10 May 2021 12:58:49 -0400 Original-Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]:34623) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lg9Ez-00030f-OJ for guile-devel@gnu.org; Mon, 10 May 2021 12:58:49 -0400 Original-Received: by mail-ed1-x52b.google.com with SMTP id l7so19565656edb.1 for ; Mon, 10 May 2021 09:58:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=6nk8XLRtfjA90lSHo1oQbDb25D0+eR4V5mzxK2C9m1o=; b=MTYzPpENtkKlBwRFuM98K/l6G1r4nJHALSb7asoWVwZhkRIaS0pN8rhxhKzT6LL7dA HAcdSU6iXJR3CPpg46G2wrfPYSi/8OXXH333Y2Dcl1FX5kqQISwoYUSak7fN7Wkup3LM Zpp4/VYDs1nED9vyrxWM43d3NPmC+E8Czh9G34+ivJCSLXoNAhphWkhe/gCZ+IwOJaqW 3KyfHOOS6kK9b8Zj9VXG80w9ITJYlDiYJS0R0Kwyt0cEIuD5NN8mEQii/ePvgenZzS4V YwxeDTV6QYXMVQ9FLfYJodHVbS51Vq/JITsUYQtO9vVzxgelWIsuckh3lkotLlvWDgK6 smHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=6nk8XLRtfjA90lSHo1oQbDb25D0+eR4V5mzxK2C9m1o=; b=TiJ31C2jYCGIja5q8gSxOq8Ow8ZWArCrZ3UOOwbeSWBgORya/fUuipGCtN/V7yzqg0 x1VGsIGe1q+sKr4nKFtfSZvAxcdArK1Z4perWy+YvYbD4o9PwrE4intdraYtoXOJzfK+ VhrVKPfJFV548JkmvbdAzmOI2r1t+RRKfD2YXX0v2o/6tP2m28nXlDZMQGAKEEmZvjdU 55aHzyjcJI6vo0k04t7QbrEEorhblqD1da2y6ARBj3XVXqAO3b1s5zcChMbliB23M6Qm 9/EWm+2E2mDRQkW28qOybt2kR01ZvO3kzPvtrc4MiU8y0pSe1dTh/0NeEDD7tUYl5ail q4tg== X-Gm-Message-State: AOAM532ttvRHmQ6FydWs+6k393XfNYD5w/bnkA2gZJDurcL29ERlS4GY sRmrd9n2UP1qI1N8LaSj4BfcFMtfNQ8= X-Google-Smtp-Source: ABdhPJxofp+yW7GMno5gV1A2Fk/ALIqrAG9ggfwX7r9AdJH8UCTc6N05nXw/U0EKNbbOOKVBzBlS0w== X-Received: by 2002:aa7:d41a:: with SMTP id z26mr31754291edq.54.1620665923318; Mon, 10 May 2021 09:58:43 -0700 (PDT) Original-Received: from [192.168.178.20] (b2b-109-90-125-150.unitymedia.biz. [109.90.125.150]) by smtp.gmail.com with ESMTPSA id t22sm11838752edw.29.2021.05.10.09.58.42 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 May 2021 09:58:42 -0700 (PDT) Content-Language: en-US Received-SPF: pass client-ip=2a00:1450:4864:20::52b; envelope-from=taylan.kammer@gmail.com; helo=mail-ed1-x52b.google.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, 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: guile-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: "guile-devel" Xref: news.gmane.io gmane.lisp.guile.devel:20762 Archived-At: This is a multi-part message in MIME format. --------------E72F15A76233D4ED802B4C1C Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Guile devs, This patch improves Guile's support for SRFI module names in the R6RS and R7RS formats, i.e. (srfi :n) and (srfi n). Copying from the commit message: It was already possible to import an SRFI module by referencing it as (srfi :n) which is automatically translated to (srfi srfi-n), but this conversion was only done during import. After this change, it's also possible to define a library as (srfi :n) which is automatically translated to (srfi srfi-n) during definition. It was not possible at all to define or import SRFI module names in the R7RS format, (srfi n), where n is a non-negative exact integer. It is now possible both to define and import them as such, realized through the same kind of conversion to a canonical (srfi srfi-n) name. The patch is attached as a MIME attachment in git format-patch format. Note, by the way, that there was already a little bit of code in module/ice-9/r6rs-libraries.scm to support module names like (srfi n), but it didn't work in practice because syntax-case guards in all the "entry points" barred the possibility of using that format. Another note: r6rs-libraries.scm uses both 'identifier?' and the form 'sym?' which is defined as '(symbol? (syntax->datum x))'. It's unclear to me what the difference is and I hope my use of 'sym?' is correct. Relevant bug reports: - https://bugs.gnu.org/39601 (fixed) - https://bugs.gnu.org/40371 (partly fixed) Taylan --------------E72F15A76233D4ED802B4C1C Content-Type: text/plain; charset=UTF-8; name="0001-Improve-support-for-R6-R7-SRFI-module-name-formats.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Improve-support-for-R6-R7-SRFI-module-name-formats.patc"; filename*1="h" RnJvbSBiNjA3NjEzMDI4ZjhmNjc2NGMwM2MxZDc5MTc0MzQyNDJlZTMyMTkxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUYXlsYW4gS2FtbWVyIDx0YXlsYW4ua2FtbWVyQGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxMCBNYXkgMjAyMSAxODoxMjozNCArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIEltcHJvdmUgc3VwcG9ydCBmb3IgUjYvUjcgU1JGSSBtb2R1bGUgbmFtZSBm b3JtYXRzLgoKRml4ZXMgPGh0dHBzOi8vYnVncy5nbnUub3JnLzM5NjAxPi4KClBhcnRseSBm aXhlcyA8aHR0cHM6Ly9idWdzLmdudS5vcmcvNDAzNzE+LgoKSXQgd2FzIGFscmVhZHkgcG9z c2libGUgdG8gaW1wb3J0IGFuIFNSRkkgbW9kdWxlIGJ5IHJlZmVyZW5jaW5nIGl0CmFzIChz cmZpIDpuKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZWQgdG8gKHNyZmkgc3Jm aS1uKSwgYnV0CnRoaXMgY29udmVyc2lvbiB3YXMgb25seSBkb25lIGR1cmluZyBpbXBvcnQu ICBBZnRlciB0aGlzIGNoYW5nZSwgaXQncwphbHNvIHBvc3NpYmxlIHRvIGRlZmluZSBhIGxp YnJhcnkgYXMgKHNyZmkgOm4pIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkKdHJhbnNsYXRlZCB0 byAoc3JmaSBzcmZpLW4pIGR1cmluZyBkZWZpbml0aW9uLgoKSXQgd2FzIG5vdCBwb3NzaWJs ZSBhdCBhbGwgdG8gZGVmaW5lIG9yIGltcG9ydCBTUkZJIG1vZHVsZSBuYW1lcyBpbiB0aGUK UjdSUyBmb3JtYXQsIChzcmZpIG4pLCB3aGVyZSBuIGlzIGEgbm9uLW5lZ2F0aXZlIGV4YWN0 IGludGVnZXIuICBJdCBpcwpub3cgcG9zc2libGUgYm90aCB0byBkZWZpbmUgYW5kIGltcG9y dCB0aGVtIGFzIHN1Y2gsIHJlYWxpemVkIHRocm91Z2gKdGhlIHNhbWUga2luZCBvZiBjb252 ZXJzaW9uIHRvIGEgY2Fub25pY2FsIChzcmZpIHNyZmktbikgbmFtZS4KCiogbW9kdWxlL2lj ZS05L3I2cnMtbGlicmFyaWVzLnNjbTogTnVtZXJvdXMgY2hhbmdlcy4KLS0tCiBtb2R1bGUv aWNlLTkvcjZycy1saWJyYXJpZXMuc2NtIHwgODQgKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbW9kdWxlL2ljZS05L3I2cnMtbGlicmFyaWVzLnNjbSBi L21vZHVsZS9pY2UtOS9yNnJzLWxpYnJhcmllcy5zY20KaW5kZXggYzZiYTZhNDk2Li4zM2Rj YmRlMjIgMTAwNjQ0Ci0tLSBhL21vZHVsZS9pY2UtOS9yNnJzLWxpYnJhcmllcy5zY20KKysr IGIvbW9kdWxlL2ljZS05L3I2cnMtbGlicmFyaWVzLnNjbQpAQCAtMjAsNiArMjAsNDkgQEAK IDs7IFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIGJvb3QtOS5zY20gYW5kIGFzc3VtZXMg dGhlIGV4aXN0ZW5jZSBvZiAoYW5kIAogOzsgZXhwYW5kcyBpbnRvKSBwcm9jZWR1cmVzIGFu ZCBzeW50YWN0aWMgZm9ybXMgZGVmaW5lZCB0aGVyZWluLgogCisoZGVmaW5lIChzeW0/IHN0 eCkKKyAgKHN5bWJvbD8gKHN5bnRheC0+ZGF0dW0gc3R4KSkpCisKKyhkZWZpbmUgKG4/IHN0 eCkKKyAgKGxldCAoKG4gKHN5bnRheC0+ZGF0dW0gc3R4KSkpCisgICAgKGFuZCAoZXhhY3Qt aW50ZWdlcj8gbikKKyAgICAgICAgIChub3QgKG5lZ2F0aXZlPyBuKSkpKSkKKworKGRlZmlu ZSAoY29sb24tbj8geCkKKyAgKGxldCAoKHN5bSAoc3ludGF4LT5kYXR1bSB4KSkpCisgICAg KGFuZCAoc3ltYm9sPyBzeW0pCisgICAgICAgICAobGV0ICgoc3RyIChzeW1ib2wtPnN0cmlu ZyBzeW0pKSkKKyAgICAgICAgICAgKGFuZCAoc3RyaW5nLXByZWZpeD8gIjoiIHN0cikKKyAg ICAgICAgICAgICAgICAobGV0ICgobnVtIChzdHJpbmctPm51bWJlciAoc3Vic3RyaW5nIHN0 ciAxKSkpKQorICAgICAgICAgICAgICAgICAgKGFuZCAoZXhhY3QtaW50ZWdlcj8gbnVtKQor ICAgICAgICAgICAgICAgICAgICAgICAobm90IChuZWdhdGl2ZT8gbnVtKSkpKSkpKSkpCisK KyhkZWZpbmUgKHNyZmktbmFtZT8gc3R4KQorICAoc3ludGF4LWNhc2Ugc3R4IChzcmZpKQor ICAgICgoc3JmaSBuIHJlc3QgLi4uKQorICAgICAoYW5kIChhbmQtbWFwIHN5bT8gIycocmVz dCAuLi4pKQorICAgICAgICAgIChvciAobj8gIyduKQorICAgICAgICAgICAgICAoY29sb24t bj8gIyduKSkpKQorICAgIChfICNmKSkpCisKKyhkZWZpbmUgKG1vZHVsZS1uYW1lPyBzdHgp CisgIChvciAoc3JmaS1uYW1lPyBzdHgpCisgICAgICAoc3ludGF4LWNhc2Ugc3R4ICgpCisg ICAgICAgICgobmFtZSBuYW1lKiAuLi4pCisgICAgICAgICAoYW5kLW1hcCBzeW0/ICMnKG5h bWUgbmFtZSogLi4uKSkpCisgICAgICAgIChfICNmKSkpKQorCisoZGVmaW5lIChtYWtlLXNy ZmktbiBjb250ZXh0IG4pCisgIChkYXR1bS0+c3ludGF4CisgICBjb250ZXh0CisgICAoc3Ry aW5nLT5zeW1ib2wKKyAgICAoc3RyaW5nLWFwcGVuZAorICAgICAic3JmaS0iCisgICAgIChs ZXQgKChuIChzeW50YXgtPmRhdHVtIG4pKSkKKyAgICAgICAoaWYgKHN5bWJvbD8gbikKKyAg ICAgICAgICAgKHN1YnN0cmluZyAoc3ltYm9sLT5zdHJpbmcgbikgMSkKKyAgICAgICAgICAg KG51bWJlci0+c3RyaW5nIG4pKSkpKSkpCisKIChkZWZpbmUgKHJlc29sdmUtcjZycy1pbnRl cmZhY2UgaW1wb3J0LXNwZWMpCiAgIChkZWZpbmUgKG1ha2UtY3VzdG9tLWludGVyZmFjZSBt b2QpCiAgICAgKGxldCAoKGlmYWNlIChtYWtlLW1vZHVsZSkpKQpAQCAtMzcsMjcgKzgwLDEz IEBACiAgICAgKGZvci1lYWNoIChsYW1iZGEgKG1vZCkKICAgICAgICAgICAgICAgICAobW9k dWxlLWZvci1lYWNoIGYgbW9kKSkKICAgICAgICAgICAgICAgKG1vZHVsZS1hbmQtdXNlcyBt b2QpKSkKLSAgKGRlZmluZSAoc3ltPyB4KSAoc3ltYm9sPyAoc3ludGF4LT5kYXR1bSB4KSkp CiAKICAgKHN5bnRheC1jYXNlIGltcG9ydC1zcGVjIChsaWJyYXJ5IG9ubHkgZXhjZXB0IHBy ZWZpeCByZW5hbWUgc3JmaSkKICAgICA7OyAoc3JmaSA6biAuLi4pIC0+IChzcmZpIHNyZmkt biAuLi4pCiAgICAgOzsgKHNyZmkgbiAuLi4pIC0+IChzcmZpIHNyZmktbiAuLi4pCiAgICAg KChsaWJyYXJ5IChzcmZpIG4gcmVzdCAuLi4gKHZlcnNpb24gLi4uKSkpCi0gICAgIChhbmQg KGFuZC1tYXAgc3ltPyAjJyhzcmZpIHJlc3QgLi4uKSkKLSAgICAgICAgICAob3IgKGFuZAot ICAgICAgICAgICAgICAgKHN5bWJvbD8gKHN5bnRheC0+ZGF0dW0gIyduKSkKLSAgICAgICAg ICAgICAgIChsZXQgKChzdHIgKHN5bWJvbC0+c3RyaW5nIChzeW50YXgtPmRhdHVtICMnbikp KSkKLSAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLXByZWZpeD8gIjoiIHN0cikKLSAg ICAgICAgICAgICAgICAgICAgICAoYW5kPT4gKHN0cmluZy0+bnVtYmVyIChzdWJzdHJpbmcg c3RyIDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdC1pbnRlZ2VyPykp KSkKLSAgICAgICAgICAgICAgKGV4YWN0LWludGVnZXI/IChzeW50YXgtPmRhdHVtICMnbikp KSkKLSAgICAgKGxldCAoKHNyZmktbiAoc3RyaW5nLT5zeW1ib2wKLSAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy1hcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICJzcmZpLSIKLSAg ICAgICAgICAgICAgICAgICAgIChsZXQgKChuIChzeW50YXgtPmRhdHVtICMnbikpKQotICAg ICAgICAgICAgICAgICAgICAgICAoaWYgKHN5bWJvbD8gbikKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzdWJzdHJpbmcgKHN5bWJvbC0+c3RyaW5nIG4pIDEpCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAobnVtYmVyLT5zdHJpbmcgbikpKSkpKSkKKyAgICAgKHNyZmkt bmFtZT8gIycoc3JmaSBuIHJlc3QgLi4uKSkKKyAgICAgKGxldCAoKHNyZmktbiAobWFrZS1z cmZpLW4gIydzcmZpICMnbikpKQogICAgICAgIChyZXNvbHZlLXI2cnMtaW50ZXJmYWNlCiAg ICAgICAgIChzeW50YXgtY2FzZSAjJyhyZXN0IC4uLikgKCkKICAgICAgICAgICAoKCkKQEAg LTE1MiwxMSArMTgxLDExIEBACiAgICAgICAgICAgICAgKGxwIChjZHIgaW4pIChjb25zICh2 ZWN0b3IgdG8gcmVwbGFjZT8gdmFyKSBvdXQpKSkpKSkpKQogICAgIAogICAgICgobmFtZSBu YW1lKiAuLi4gKHZlcnNpb24gLi4uKSkKLSAgICAgKGFuZC1tYXAgc3ltPyAjJyhuYW1lIG5h bWUqIC4uLikpCisgICAgIChtb2R1bGUtbmFtZT8gIycobmFtZSBuYW1lKiAuLi4pKQogICAg ICAocmVzb2x2ZS1yNnJzLWludGVyZmFjZSAjJyhsaWJyYXJ5IChuYW1lIG5hbWUqIC4uLiAo dmVyc2lvbiAuLi4pKSkpKQogCi0gICAgKChuYW1lIG5hbWUqIC4uLikgCi0gICAgIChhbmQt bWFwIHN5bT8gIycobmFtZSBuYW1lKiAuLi4pKQorICAgICgobmFtZSBuYW1lKiAuLi4pCisg ICAgIChtb2R1bGUtbmFtZT8gIycobmFtZSBuYW1lKiAuLi4pKQogICAgICAocmVzb2x2ZS1y NnJzLWludGVyZmFjZSAjJyhsaWJyYXJ5IChuYW1lIG5hbWUqIC4uLiAoKSkpKSkpKQogCiAo ZGVmaW5lLXN5bnRheCBsaWJyYXJ5CkBAIC0xOTUsMjMgKzIyNCwzNCBAQAogICAgICAgICAg ICAgICAoZWxzZQogICAgICAgICAgICAgICAgKGxwICMncmVzdCAoY29ucyAjJ2lkIGUpIHIg eCkpKSkpKSkpCiAKLSAgICAoc3ludGF4LWNhc2Ugc3R4IChleHBvcnQgaW1wb3J0KQorICAg IChzeW50YXgtY2FzZSBzdHggKGV4cG9ydCBpbXBvcnQgc3JmaSkKICAgICAgICgoXyAobmFt ZSBuYW1lKiAuLi4pCiAgICAgICAgICAgKGV4cG9ydCBlc3BlYyAuLi4pCiAgICAgICAgICAg KGltcG9ydCBpc3BlYyAuLi4pCiAgICAgICAgICAgYm9keSAuLi4pCi0gICAgICAgKGFuZC1t YXAgaWRlbnRpZmllcj8gIycobmFtZSBuYW1lKiAuLi4pKQorICAgICAgIChtb2R1bGUtbmFt ZT8gIycobmFtZSBuYW1lKiAuLi4pKQogICAgICAgIDs7IEFkZCAoKSBhcyB0aGUgdmVyc2lv bi4KICAgICAgICAjJyhsaWJyYXJ5IChuYW1lIG5hbWUqIC4uLiAoKSkKICAgICAgICAgICAg KGV4cG9ydCBlc3BlYyAuLi4pCiAgICAgICAgICAgIChpbXBvcnQgaXNwZWMgLi4uKQogICAg ICAgICAgICBib2R5IC4uLikpCiAKKyAgICAgICgoXyAoc3JmaSBuIHJlc3QgLi4uICh2ZXJz aW9uIC4uLikpCisgICAgICAgICAgKGV4cG9ydCBlc3BlYyAuLi4pCisgICAgICAgICAgKGlt cG9ydCBpc3BlYyAuLi4pCisgICAgICAgICAgYm9keSAuLi4pCisgICAgICAgKHNyZmktbmFt ZT8gIycoc3JmaSBuIHJlc3QgLi4uKSkKKyAgICAgICAobGV0ICgoc3JmaS1uIChtYWtlLXNy ZmktbiAjJ3NyZmkgIyduKSkpCisgICAgICAgICAjYChsaWJyYXJ5IChzcmZpICMsc3JmaS1u IHJlc3QgLi4uICh2ZXJzaW9uIC4uLikpCisgICAgICAgICAgICAgKGV4cG9ydCBlc3BlYyAu Li4pCisgICAgICAgICAgICAgKGltcG9ydCBpc3BlYyAuLi4pCisgICAgICAgICAgICAgYm9k eSAuLi4pKSkKKwogICAgICAgKChfIChuYW1lIG5hbWUqIC4uLiAodmVyc2lvbiAuLi4pKQog ICAgICAgICAgIChleHBvcnQgZXNwZWMgLi4uKQogICAgICAgICAgIChpbXBvcnQgaXNwZWMg Li4uKQogCSAgYm9keSAuLi4pCi0gICAgICAgKGFuZC1tYXAgaWRlbnRpZmllcj8gIycobmFt ZSBuYW1lKiAuLi4pKQorICAgICAgIChtb2R1bGUtbmFtZT8gIycobmFtZSBuYW1lKiAuLi4p KQogICAgICAgIChjYWxsLXdpdGgtdmFsdWVzCiAgICAgICAgICAgIChsYW1iZGEgKCkKICAg ICAgICAgICAgICAoY29tcHV0ZS1leHBvcnRzIAotLSAKMi4zMC4yCgo= --------------E72F15A76233D4ED802B4C1C--