From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id 4OzICjoc/WIbfAAAbAwnHQ (envelope-from ) for ; Wed, 17 Aug 2022 18:50:02 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id wCKzCjoc/WIOFwEA9RJhRA (envelope-from ) for ; Wed, 17 Aug 2022 18:50:02 +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 B10F12C7FD for ; Wed, 17 Aug 2022 18:50:01 +0200 (CEST) Received: from localhost ([::1]:56626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oOMEy-0006EJ-Kk for larch@yhetil.org; Wed, 17 Aug 2022 12:50:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oOM8v-0002YV-BI for guix-devel@gnu.org; Wed, 17 Aug 2022 12:43:45 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:34690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oOM8q-0001bv-C3 for guix-devel@gnu.org; Wed, 17 Aug 2022 12:43:43 -0400 Received: by mail-wr1-x429.google.com with SMTP id a4so5131457wrq.1 for ; Wed, 17 Aug 2022 09:43:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:to:from :from:to:cc; bh=4kuOp1GShDlmMZ83IB44hsPrv36tt7lL1j4N5W4DuL8=; b=dNxaDDhhL4j1iGl8JVUwrMwFny2vqdUVsxEwZGer7vgWmBhsr1CZrRNdi98raFH/J7 Jb6YvnbiRtgDdEfhBVfvsR1OVWI0N49NbOIZ/YlZqBnZI1nCvRIjKBYc4TfyeXwN7RmL zO75WkZQ9Lj7xb6Dg9oEFQwq5OwsuFoG/jrr7r8JZoCwv316iNdEqVhuLxUCJFwZ/sUg v4zCvdsch68Dhtb4FZLmYp8jnFjv4cgzVL6TIj8IH0MlbWEEHa8Xg2d2SpzxorH8Qyq5 RSpa7qSlw8uFhSG3ZqGB+7vmuhrMuc8VkIIln9EfM+MvvOdcoL39EUS1i/c4v5P6WWAj Agiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:to:from :x-gm-message-state:from:to:cc; bh=4kuOp1GShDlmMZ83IB44hsPrv36tt7lL1j4N5W4DuL8=; b=qTp2hAh9llzuNRJHMBo3z7dXjc9kOBYfUR9pfYtTl+D2XJ5n3PZEi5Fj8cLcN0lpXC UV3zD2ehTxgX6Fvhq+7iv5tmtwCrEUOHgn/T3MKoJQIlYmHx3xpAd00od+H7eBWKRiDY bxV7+/hCYAiyO3XGvnRAJdnnjiZPWY93GM8eXYncZCLRAAR5z0QtS0GWq2tSlhFV8kVa BXb0PEa92TR+C6gKW2A9yy/OVqUYUXPdnabeOfr9crq2FEBvbjInUzstVeuu+CIyi85i nrubJ8WcAys4kWSEPNat73jQA7/wQky0GYmcRMtssO7AeZ+zhJmhPQVKdcysYKl7Gua9 I7SA== X-Gm-Message-State: ACgBeo3drsHYr58tYFEx0WqseuOgOaZ1d52mSb91e9yGbYq0nXSdRYN6 oCyIJ9iXmq9VA9hwAtDDBEEo3KVQEEk= X-Google-Smtp-Source: AA6agR6wJbqQvS/qUjlqH1qi/HvFk5Xomzz1aFVSO80EXJZ8Y21UaA+M5YD3dSkCVC0zJXgkSy6hHg== X-Received: by 2002:a5d:6348:0:b0:220:5edf:c3e8 with SMTP id b8-20020a5d6348000000b002205edfc3e8mr14745443wrw.255.1660754617338; Wed, 17 Aug 2022 09:43:37 -0700 (PDT) Received: from pfiuh07 ([193.48.40.241]) by smtp.gmail.com with ESMTPSA id l4-20020a5d4bc4000000b0021e6277bc50sm16267156wrt.36.2022.08.17.09.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Aug 2022 09:43:36 -0700 (PDT) From: zimoun To: Olivier Dion , guix-devel@gnu.org Subject: Re: GitLab to plans to delete dormant projects In-Reply-To: <87o7wxpliy.fsf@laura> References: <87o7wxpliy.fsf@laura> Date: Wed, 17 Aug 2022 18:41:56 +0200 Message-ID: <87h72ayg8b.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=zimon.toutoune@gmail.com; helo=mail-wr1-x429.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1660755001; 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=4kuOp1GShDlmMZ83IB44hsPrv36tt7lL1j4N5W4DuL8=; b=QLIuB8YYx0p9eXFPHCMcHgqjHHFXyN/UG2d3FFPO6Mso/UzQ2v7tT1u3Tk4ge6uqUVzCB0 mzxKusbsLNHpB+edv/dW+XCoX1phYlUhyyP2B2UZEhKwgupZiAEEfdSIUYTezK5oTkwZTX KPxBRQm1HQ9BcAYeS+UJQjujcgwZQfgOBCV/bu5YzpGVCjyGWbXAWWfsNA33WVVBBihxBX tHiBz6mqQbMBzYBLKHhUH51xMZotuMBxhmLkUIr1mOIe4KgKCPaNWNpXzl6pCqXHtR418T 0VtpBkj9cQO4aFV96Gks4w4nDa5ujZteqbfbOVquhdW9tLKTxmOy/hqqF9yC5w== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1660755001; a=rsa-sha256; cv=none; b=UJMQWuWzg6lzk2/zs8LkE+pLdbQHM+MZOeM7fSTimp4/WjVfZXfPxfbCWSZiCtbDxQDHP2 oCbyOk9rudh8g0JSIj0ys9Zs4mlqvL5Df52itiYXRbTXAl08RVFP7Eh3V0TQ034IjO3vVD CjwmxYF/7J3AvmtofW9is8/XMfbAv0zWLaikyxnFmtbh97vDFxzGcLAVKMOkfxDVCplDVV t/fBKbbuBvN3pPtBq7/V28sRd9uiJSd33rti3q2apDuQ7qte2WCO1+zgf4GMVt9imDTNyE NNZ//RtBua7lWvXWLynH/Qb0tBd6I72o/Nuxg4f9ReZKC1fQCSzkm8sDX7nHYg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=dNxaDDhh; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.86 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=dNxaDDhh; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: B10F12C7FD X-Spam-Score: -3.86 X-Migadu-Scanner: scn0.migadu.com X-TUID: +uk1Exlop7qG --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, I guess, Gitlab means the instance gitlab.com, right? On sam., 06 ao=C3=BBt 2022 at 09:08, Olivier Dion via "Development of GNU G= uix and the GNU System distribution." wrote: > Many packages origin in Guix use an url to a GitLab project. What are > the consequence of such deletion on Guix reproducibility? Will it > affects the time-machine? As explained by others, thanks to Software Heritage, the time-machine should not be impacted when Gitlab.com would stop to serve some source. First, Guix is able to automatically fallback to SWH when upstream source are unavailable. Considering substitutes is turned on, fetching respects this order: 1. try with Guix build farms 2. try upstream defined by origin 3. try SWH 4. try other =E2=80=9Cwebarchives=E2=80=9C Second, the coverage by SWH depends on the kind of origin (url-fetch, git-fetch, etc.) because it is not the same entry point (for SWH). On a side note, SWH ingests many forges using what they call a =E2=80=98loa= der=E2=80=99 [1]. For example, their Git loader ingests an instance of a Gitlab forge, e.g., gitlab.com; but many others too as gitlab.inria.fr or gitlab.freedesktop.org or gitlab.gnome.org etc. It exists a (rudimentary) =E2=80=98nixguix=E2=80=99 loader [2]. ;-) This l= oader reads the file =E2=80=99sources.json=E2=80=99 [3] and then SWH ingests all the ta= rball archives. Moreover, =E2=80=9Cguix lint -c archival=E2=80=9D allows to send a save req= uest to SWH but this request is only for Git origin. In summary, it is highly probable that the source code is in SWH. Third, the issue: being able to later fetch back from SWH using the (meta-)information we have now. Other said, the fallback requires an unique identifier. The net: this identifier needs to be compatible with SWH, which provides their own=E2=80=93named swh-id. The Git commit hash is compatible. But the checksum is not. That=E2=80=99= s why the Guix project currently maintains a map (named Disarchive) from the checksum to swh-id allowing to rebuild the expected source code from the data stored in SWH. Well, many Guix packages use a string Git tag for referring. It can lead to issues, as in-place replacements. SWH regularly crawls, ingests and build =E2=80=9Csnapshots=E2=80=9D (history of history) but there is no = guarantee that the Guix origin is well-covered =E2=80=93 aside Guix is currently not = able to manage these snapshots. :-) And today, the main weakness is about Subversion or CVS. Some packages =E2=80=93 deep in the dependency graph =E2=80=93 are svn-fetch or cvs-fetch= . And there is no robust fallback mechanism, AFAIK. In summary, the time-machine may or may not work. The main factor when it fails is about the availability of the substitute (from Guix build farm). Other said, older the time-machine jump is, and higher the probability of the failure becomes. Back to Gitlab.com. Using Guix 8f0d45c from July, 18th let =E2=80=9Cguix r= epl=E2=80=9D; code attached below. --8<---------------cut here---------------start------------->8--- $ guix repl GNU Guile 3.0.8 Copyright (C) 1995-2021 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guix-user)> (load "from-gitlab-dot-com.scm") scheme@(guix-user)> (length packages-on-gitlab.com) $1 =3D 223 scheme@(guix-user)> (length git-references-on-gitlab.com) $2 =3D 213 scheme@(guix-user)> ,pp tarballs-from-gitlab.com $3 =3D (# # # # # # # # # #) scheme@(guix-user)> ,pp recursive-packages-on-gitlab.com $4 =3D (# #) --8<---------------cut here---------------end--------------->8--- It means that the string =E2=80=9Cgitlab.com=E2=80=9C appears in the origin= of 223 packages and 213 of those are git-fetch. Others said, 10 packages are using url-fetch with tarballs generated by Gitlab.com. Only 2 packages are recursive git-reference, therefore badly covered. Guix is currently not able to fully save them in SWH. Moreover, fetch back the data from SWH works but the not the resulting checksum; which defeats the fallback. See . --8<---------------cut here---------------start------------->8--- scheme@(guix-user)> (length archived-packages-on-swh) $5 =3D 202 scheme@(guix-user)> ,pp missing-packages $6 =3D (# # # # # # # # # # # # # # # # # # # # #) --8<---------------cut here---------------end--------------->8--- Not that bad. :-) Note that the 2 packages using recursive checkouts are not missing; the data is in SWH but the checksum hits bug#48540. Ok, let save these missing packages. --8<---------------cut here---------------start------------->8--- $ for p in tint2 surfraw remmina libsequoia zn-poly ecl-cl-utilities cl-uti= lities sbcl-cl-utilities openrgb guile-ac-d-bus guile-goblins graphviz komi= kku bitcoin-unlimited fulcrum flowee kicad kicad-footprints kicad-symbols e= macs-execline python-pyodbc-c; do guix lint -c archival $p ;done gnu/packages/xdisorg.scm:1848:12: tint2@0.14.6: Disarchive entry refers to = non-existent SWH directory 'b37b584d6b32848a4d57e8cab1af412cd46fcc9e' gnu/packages/vnc.scm:66:5: remmina@1.4.23: scheduled Software Heritage arch= ival gnu/packages/sequoia.scm:421:12: libsequoia@0.22.0: scheduled Software Heri= tage archival gnu/packages/sagemath.scm:231:5: zn-poly@0.9.2: scheduled Software Heritage= archival gnu/packages/hardware.scm:986:5: openrgb@0.7: scheduled Software Heritage a= rchival gnu/packages/guile-xyz.scm:3800:12: guile-ac-d-bus@1.0.0-beta.0: scheduled = Software Heritage archival gnu/packages/guile-xyz.scm:5109:5: guile-goblins@0.8: scheduled Software He= ritage archival gnu/packages/gnome.scm:12350:5: komikku@0.39.0: scheduled Software Heritage= archival gnu/packages/finance.scm:1644:5: bitcoin-unlimited@1.10.0.0: scheduled Soft= ware Heritage archival gnu/packages/engineering.scm:949:12: kicad@6.0.6: scheduled Software Herita= ge archival gnu/packages/engineering.scm:1118:12: kicad-footprints@6.0.6: scheduled Sof= tware Heritage archival gnu/packages/engineering.scm:1089:12: kicad-symbols@6.0.6: scheduled Softwa= re Heritage archival gnu/packages/emacs-xyz.scm:30313:12: emacs-execline@1.1: scheduled Software= Heritage archival gnu/packages/databases.scm:3061:5: python-pyodbc-c@3.1.5: scheduled Softwar= e Heritage archival --8<---------------cut here---------------end--------------->8--- About tint2, commit 34c0cb5d6305ff7cc56318fbaa649afbe83464c7 from Thu Aug 4 replaces url-fetch by git-fetch. Now, let examine SWH and browse the saved requests. The package =E2=80=99remmina@1.4.23=E2=80=99 was saved because it had been visited on 1= 1 January 2022. For instance, give a look at [4]. It means something is unexpected although the source code is there: instead of string Git tag, let consider the Git commit hash [5]. --8<---------------cut here---------------start------------->8--- scheme@(guix-user)> (lookup-origin-revision "https://gitlab.com/Remmina/Rem= mina" "v1.4.23") $10 =3D #f scheme@(guix-user)> (lookup-revision "a03c1648a090458736434c77c0be00a7cf9cc= 44b") $11 =3D #< id: "a03c1648a090458736434c77c0be00a7cf9cc44b" date: #= directory: "cc094a7d19d607beea54bfec549b4120d8c2ec92" di= rectory-url: "https://archive.softwareheritage.org/api/1/directory/cc094a7d= 19d607beea54bfec549b4120d8c2ec92/"> --8<---------------cut here---------------end--------------->8--- Well, it requires more investigations to understand why the Guix code fails. Last, SWH fails to ingest for instance; another investigation. 1: 2: 3: 4: 5: All in all, robust time-machine needs some love. :-) Cheers, simon --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=from-gitlab-dot-com.scm Content-Transfer-Encoding: base64 Content-Description: snippet.scm KHVzZS1tb2R1bGVzIChndWl4KSAoZ251KQogICAgICAgICAgICAgKGd1aXggZ2l0LWRvd25sb2Fk KQogICAgICAgICAgICAgKChndWl4IHN3aCkgIzpoaWRlIChvcmlnaW4/KSkKICAgICAgICAgICAg IChpY2UtOSBtYXRjaCkKICAgICAgICAgICAgIChzcmZpIHNyZmktMSkKICAgICAgICAgICAgIChz cmZpIHNyZmktMjYpKQoKKGRlZmluZSAoZ2l0bGFiLmNvbT8gcGFja2FnZSkKICAoZGVmaW5lIChn aXRsYWItc3RyaW5nPyBzdHIpCiAgICAoc3RyaW5nLWNvbnRhaW5zIHN0ciAiZ2l0bGFiLmNvbSIp KQoKICAobWF0Y2ggKHBhY2thZ2Utc291cmNlIHBhY2thZ2UpCiAgICAoKD8gb3JpZ2luPyBvKQog ICAgIChtYXRjaCAob3JpZ2luLXVyaSBvKQogICAgICAgKCg/IHN0cmluZz8gdXJsKQogICAgICAg IChnaXRsYWItc3RyaW5nPyB1cmwpKQogICAgICAgKCgoPyBzdHJpbmc/IHVybHMpIC4uLikKICAg ICAgICAoYW55IGdpdGxhYi1zdHJpbmc/IHVybHMpKQoKICAgICAgICgoPyBnaXQtcmVmZXJlbmNl PyByZWYpCiAgICAgICAgKGdpdGxhYi1zdHJpbmc/IChnaXQtcmVmZXJlbmNlLXVybCByZWYpKSkK ICAgICAgIChfICNmKSkpCiAgICAoXyAjZikpKQoKKGRlZmluZSBwYWNrYWdlcy1vbi1naXRsYWIu Y29tCiAgKGZvbGQtcGFja2FnZXMgKGxhbWJkYSAocGFja2FnZSByZXN1bHQpCiAgICAgICAgICAg ICAgICAgICAoaWYgKGdpdGxhYi5jb20/IHBhY2thZ2UpCiAgICAgICAgICAgICAgICAgICAgICAg KGNvbnMgcGFja2FnZSByZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkKICAg ICAgICAgICAgICAgICAnKCkpKQoKKGRlZmluZSBnaXQtcmVmZXJlbmNlcy1vbi1naXRsYWIuY29t CiAgKGZpbHRlciAobGFtYmRhIChwYWNrYWdlKQogICAgICAgICAgICAobGV0KiAoKG9yaWdpbiAo cGFja2FnZS1zb3VyY2UgcGFja2FnZSkpCiAgICAgICAgICAgICAgICAgICAodXJpIChvcmlnaW4t dXJpIG9yaWdpbikpKQogICAgICAgICAgICAgIChnaXQtcmVmZXJlbmNlPyB1cmkpKSkKICAgICAg ICAgIHBhY2thZ2VzLW9uLWdpdGxhYi5jb20pKQoKKGRlZmluZSB0YXJiYWxscy1mcm9tLWdpdGxh Yi5jb20KICAobHNldC1kaWZmZXJlbmNlIGVxPwogICAgICAgICAgICAgICAgICAgcGFja2FnZXMt b24tZ2l0bGFiLmNvbQogICAgICAgICAgICAgICAgICAgZ2l0LXJlZmVyZW5jZXMtb24tZ2l0bGFi LmNvbSkpCgooZGVmaW5lIHJlY3Vyc2l2ZS1wYWNrYWdlcy1vbi1naXRsYWIuY29tCiAgKGZpbHRl ciAobGFtYmRhIChwYWNrYWdlKQogICAgICAgICAgICAobGV0KiAoKG9yaWdpbiAocGFja2FnZS1z b3VyY2UgcGFja2FnZSkpCiAgICAgICAgICAgICAgICAgICAodXJpIChvcmlnaW4tdXJpIG9yaWdp bikpKQogICAgICAgICAgICAgIChtYXRjaCB1cmkKICAgICAgICAgICAgICAgICgoPyBnaXQtcmVm ZXJlbmNlPyByZWYpCiAgICAgICAgICAgICAgICAgKGdpdC1yZWZlcmVuY2UtcmVjdXJzaXZlPyBy ZWYpKQogICAgICAgICAgICAgICAgKF8gI2YpKSkpCiAgICAgICAgICBwYWNrYWdlcy1vbi1naXRs YWIuY29tKSkKCihkZWZpbmUgYXJjaGl2ZWQtcGFja2FnZXMtb24tc3doCiAgKGZpbHRlciAobGFt YmRhIChwYWNrYWdlKQogICAgICAgICAgICAobGV0KiAoKG9yaWdpbiAocGFja2FnZS1zb3VyY2Ug cGFja2FnZSkpCiAgICAgICAgICAgICAgICAgICAodXJpIChvcmlnaW4tdXJpIG9yaWdpbikpKQog ICAgICAgICAgICAgIChtYXRjaCB1cmkKICAgICAgICAgICAgICAgICgoPyBnaXQtcmVmZXJlbmNl PyByZWYpCiAgICAgICAgICAgICAgICAgKGxldCAoKHVybCAoZ2l0LXJlZmVyZW5jZS11cmwgcmVm KSkKICAgICAgICAgICAgICAgICAgICAgICAoY29tbWl0IChnaXQtcmVmZXJlbmNlLWNvbW1pdCBy ZWYpKSkKICAgICAgICAgICAgICAgICAgIChyZXZpc2lvbj8gKGlmIChjb21taXQtaWQ/IGNvbW1p dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAobG9va3VwLXJldmlzaW9u IGNvbW1pdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9va3VwLW9y aWdpbi1yZXZpc2lvbiB1cmwgY29tbWl0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb29rdXAtb3JpZ2luLXJldmlzaW9uIHVybCBjb21taXQpKSkpKQogICAgICAgICAgICAg ICAgKF8KICAgICAgICAgICAgICAgICAobGV0ICgoaGFzaCAob3JpZ2luLWhhc2ggb3JpZ2luKSkp CiAgICAgICAgICAgICAgICAgICAobG9va3VwLWNvbnRlbnQgKGNvbnRlbnQtaGFzaC12YWx1ZSBo YXNoKSA7VE9ETzogQ2hlY2sgb24gRGlzYXJjaGl2ZSB0b28uCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoc3ltYm9sLT5zdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29udGVudC1oYXNoLWFsZ29yaXRobSBoYXNoKSkpKSkpKSkKICAgICAg ICAgIHBhY2thZ2VzLW9uLWdpdGxhYi5jb20pKQoKKGRlZmluZSBtaXNzaW5nLXBhY2thZ2VzCiAg KGxzZXQtZGlmZmVyZW5jZSBlcT8KICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzLW9uLWdpdGxh Yi5jb20KICAgICAgICAgICAgICAgICAgIGFyY2hpdmVkLXBhY2thZ2VzLW9uLXN3aCkpCg== --=-=-=--