From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Bavier Subject: Re: [PATCH] guix: lint: Check for version-only origin file names. Date: Thu, 10 Sep 2015 23:04:08 -0500 Message-ID: References: <1440371134-2699-1-git-send-email-ericbavier@openmailbox.org> <87pp2cmgss.fsf@netris.org> <20150824191024.3da87f41@openmailbox.org> <87y4gvvonz.fsf@gnu.org> <20150910155058.0a7c99b0@openmailbox.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ca5faf72da46bbaca0f6450ee3a5d0e2" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZaFZY-0003Ha-HW for guix-devel@gnu.org; Fri, 11 Sep 2015 00:04:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZaFZU-0006J1-D2 for guix-devel@gnu.org; Fri, 11 Sep 2015 00:04:24 -0400 In-Reply-To: <20150910155058.0a7c99b0@openmailbox.org> 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+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: ludo@gnu.org Cc: guix-devel@gnu.org --=_ca5faf72da46bbaca0f6450ee3a5d0e2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Something happened to the attachments. Let's try that again. Sorry=20 about that. `~Eric On 2015-09-10 15:50, Eric Bavier wrote: > On Fri, 28 Aug 2015 09:48:48 +0200 > ludo@gnu.org (Ludovic Court=C3=A8s) wrote: >=20 >> Eric Bavier skribis: >>=20 >> > From 0311d5b383003600ac43d3a9bfdec0ad3c398db2 Mon Sep 17 00:00:00 20= 01 >> > From: Eric Bavier >> > Date: Sun, 23 Aug 2015 18:00:45 -0500 >> > Subject: [PATCH] guix: lint: Check for version-only origin file name= s. >> > >> > * guix/scripts/lint.scm (check-source): Emit warning if source filen= ame >> > contains only the version of the package. >> > * tests/lint.scm ("source: filename", "source: filename v", >> > "source: filename valid"): New tests. >> > * doc/guix.texi (Invoking guix lint): Mention file name check. >> > Offending packages updated. >>=20 >> This is useful, thanks for looking into it. >=20 > Thanks for the review! >=20 >> I would prefer it to make a separate linter, like =E2=80=98source-file= -name=E2=80=99. >> The reason is that =E2=80=98source=E2=80=99 is a relatively expensive = check, since it >> needs to probe URLs (so you might want to skip it in some cases), >> whereas the linter your propose is lightweight. >=20 > Makes sense. >=20 >>=20 >> > --- a/gnu/packages/algebra.scm >> > +++ b/gnu/packages/algebra.scm >> > @@ -386,6 +386,7 @@ cosine/ sine transforms or DCT/DST).") >> > (method url-fetch) >> > (uri (string-append "https://bitbucket.org/eigen/eige= n/get/" >> > version ".tar.bz2")) >> > + (file-name (string-append name "-" version ".tar.bz2"= )) >>=20 >> Could you make these package updates a separate patch? Some may=20 >> trigger >> large rebuilds, so you may have to keep them for =E2=80=98core-updates= =E2=80=99 or=20 >> such. >=20 > I've left the package updates out of the attached patches. >=20 >>=20 >> > + (define (origin-version-name? origin) >> > + ;; Return #t if the source file name contains only a version; i= ndicates >> > + ;; that the origin needs a 'file-name' field. >> > + (let ((filename (store-path-package-name >> > + (with-store store >> > + (derivation->output-path >> > + (package-source-derivation store origin))))= ) >> > + (version (package-version package))) >> > + (or (string-prefix? version filename) >> > + ;; Common in many projects is for the filename to start w= ith a "v" >> > + ;; followed by the version, e.g. "v3.2.0.tar.gz". >> > + (string-prefix? (string-append "v" version) filename)))) >>=20 >> Opening a connection to the store in the middle of the code >> (=E2=80=98with-store=E2=80=99) is Bad Practice. ;-) >>=20 >> I think this can actually be made simpler, with something akin to what >> =E2=80=98node-full-name=E2=80=99 does in guix/scripts/graph.scm. Mayb= e we could=20 >> extract >> an =E2=80=98origin-actual-file-name=E2=80=99 procedure from that and m= ove it to (guix >> packages). WDYT? >=20 > The first attached patch does this. Is using the basename of the > source URI always accurate? I.e. are there cases where the store file > name might not match the URI's basename? This uncertainty, I think, is > what caused me to use store-path-package-name initially. >=20 > This revised patch might actually be considered "more accurate" in that > the checker now flags origins from 'git-reference' et al where no > 'file-name' field is declared. >=20 > `~Eric --=_ca5faf72da46bbaca0f6450ee3a5d0e2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-guix-packages-Add-origin-actual-file-name.patch Content-Disposition: attachment; filename=0001-guix-packages-Add-origin-actual-file-name.patch; size=3303 RnJvbSA4ZGIzZTU5NzgzOTRiOTlhZDE0ZDY5NDk0YjAwMzQzYjcwZjkxOGUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgpE YXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE1OjM5OjQ0IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAxLzJd IGd1aXg6IHBhY2thZ2VzOiBBZGQgb3JpZ2luLWFjdHVhbC1maWxlLW5hbWUuCgoqIGd1aXgvc2Ny aXB0cy9ncmFwaC5zY20gKHVyaS0+ZmlsZS1uYW1lLCBub2RlLWZ1bGwtbmFtZSk6IE1vdmUgb3Jp Z2luIGZpbGUKICBuYW1lIGxvZ2ljIHRvLi4uCiogZ3VpeC9wYWNrYWdlcy5zY20gKG9yaWdpbi1h Y3R1YWwtZmlsZS1uYW1lKTogLi4uaGVyZS4KLS0tCiBndWl4L3BhY2thZ2VzLnNjbSAgICAgIHwg MjIgKysrKysrKysrKysrKysrKysrKysrKwogZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbSB8IDE1ICst LS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxNCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ndWl4L3BhY2thZ2VzLnNjbSBiL2d1aXgvcGFja2FnZXMu c2NtCmluZGV4IGU0NjZmZmUuLmVkY2I1M2UgMTAwNjQ0Ci0tLSBhL2d1aXgvcGFja2FnZXMuc2Nt CisrKyBiL2d1aXgvcGFja2FnZXMuc2NtCkBAIC0zNyw2ICszNyw3IEBACiAgICM6dXNlLW1vZHVs ZSAoc3JmaSBzcmZpLTI2KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNCkKICAgIzp1c2Ut bW9kdWxlIChzcmZpIHNyZmktMzUpCisgICM6dXNlLW1vZHVsZSAod2ViIHVyaSkKICAgIzpyZS1l eHBvcnQgKCVjdXJyZW50LXN5c3RlbQogICAgICAgICAgICAgICAgJWN1cnJlbnQtdGFyZ2V0LXN5 c3RlbQogICAgICAgICAgICAgICAgc2VhcmNoLXBhdGgtc3BlY2lmaWNhdGlvbikgICAgICAgICA7 Zm9yIGNvbnZlbmllbmNlCkBAIC00Niw2ICs0Nyw3IEBACiAgICAgICAgICAgICBvcmlnaW4tbWV0 aG9kCiAgICAgICAgICAgICBvcmlnaW4tc2hhMjU2CiAgICAgICAgICAgICBvcmlnaW4tZmlsZS1u YW1lCisgICAgICAgICAgICBvcmlnaW4tYWN0dWFsLWZpbGUtbmFtZQogICAgICAgICAgICAgb3Jp Z2luLXBhdGNoZXMKICAgICAgICAgICAgIG9yaWdpbi1wYXRjaC1mbGFncwogICAgICAgICAgICAg b3JpZ2luLXBhdGNoLWlucHV0cwpAQCAtMTg4LDYgKzE5MCwyNiBAQCByZXByZXNlbnRhdGlvbi4i CiAgICAgICAoKF8gc3RyKQogICAgICAgICMnKG5peC1iYXNlMzItc3RyaW5nLT5ieXRldmVjdG9y IHN0cikpKSkpCiAKKyhkZWZpbmUgKG9yaWdpbi1hY3R1YWwtZmlsZS1uYW1lIG9yaWdpbikKKyAg IlJldHVybiB0aGUgZmlsZSBuYW1lIG9mIE9SSUdJTiwgZWl0aGVyIGl0cyAnZmlsZS1uYW1lJyBm aWVsZCBvciB0aGUgZmlsZQorbmFtZSBvZiBpdHMgVVJJLiIKKyAgKGRlZmluZSAodXJpLT5maWxl LW5hbWUgdXJpKQorICAgIDs7IFJldHVybiB0aGUgJ2Jhc2UgbmFtZScgb2YgVVJJIG9yIFVSSSBp dHNlbGYsIHdoZXJlIFVSSSBpcyBhIHN0cmluZy4KKyAgICAobGV0ICgocGF0aCAoYW5kPT4gKHN0 cmluZy0+dXJpIHVyaSkgdXJpLXBhdGgpKSkKKyAgICAgIChpZiBwYXRoCisgICAgICAgICAgKGJh c2VuYW1lIHBhdGgpCisgICAgICAgICAgdXJpKSkpCisKKyAgKG9yIChvcmlnaW4tZmlsZS1uYW1l IG9yaWdpbikKKyAgICAgIChtYXRjaCAob3JpZ2luLXVyaSBvcmlnaW4pCisgICAgICAgICgoaGVh ZCAuIHRhaWwpCisgICAgICAgICAodXJpLT5maWxlLW5hbWUgaGVhZCkpCisgICAgICAgICgoPyBz dHJpbmc/IHVyaSkKKyAgICAgICAgICh1cmktPmZpbGUtbmFtZSB1cmkpKQorICAgICAgICAoZWxz ZQorICAgICAgICAgOzsgZ2l0LCBzdm4sIGN2cywgZXRjLiByZWZlcmVuY2UKKyAgICAgICAgICNm KSkpKQorCiAoZGVmaW5lICVzdXBwb3J0ZWQtc3lzdGVtcwogICA7OyBUaGlzIGlzIHRoZSBsaXN0 IG9mIHN5c3RlbSB0eXBlcyB0aGF0IGFyZSBzdXBwb3J0ZWQuICBCeSBkZWZhdWx0LCB3ZQogICA7 OyBleHBlY3QgYWxsIHBhY2thZ2VzIHRvIGJ1aWxkIHN1Y2Nlc3NmdWxseSBoZXJlLgpkaWZmIC0t Z2l0IGEvZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbSBiL2d1aXgvc2NyaXB0cy9ncmFwaC5zY20KaW5k ZXggMmI2NzFiZS4uY2RkZDYzZSAxMDA2NDQKLS0tIGEvZ3VpeC9zY3JpcHRzL2dyYXBoLnNjbQor KysgYi9ndWl4L3NjcmlwdHMvZ3JhcGguc2NtCkBAIC0zMyw3ICszMyw2IEBACiAgICM6dXNlLW1v ZHVsZSAoc3JmaSBzcmZpLTM0KQogICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNykKICAgIzp1 c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKLSAgIzp1c2UtbW9kdWxlICh3ZWIgdXJpKQogICAjOmV4 cG9ydCAoJXBhY2thZ2Utbm9kZS10eXBlCiAgICAgICAgICAgICAlYmFnLW5vZGUtdHlwZQogICAg ICAgICAgICAgJWJhZy1lbWVyZ2VkLW5vZGUtdHlwZQpAQCAtNzgsMjUgKzc3LDEzIEBACiA7Ozsg UGFja2FnZSBEQUcuCiA7OzsKIAotKGRlZmluZSAodXJpLT5maWxlLW5hbWUgdXJpKQotICAiUmV0 dXJuIHRoZSAnYmFzZSBuYW1lJyBvZiBVUkkgb3IgVVJJIGl0c2VsZiwgd2hlcmUgVVJJIGlzIGEg c3RyaW5nLiIKLSAgKGxldCAoKHBhdGggKGFuZD0+IChzdHJpbmctPnVyaSB1cmkpIHVyaS1wYXRo KSkpCi0gICAgKGlmIHBhdGgKLSAgICAgICAgKGJhc2VuYW1lIHBhdGgpCi0gICAgICAgIHVyaSkp KQotCiAoZGVmaW5lIChub2RlLWZ1bGwtbmFtZSB0aGluZykKICAgIlJldHVybiBhIGh1bWFuLXJl YWRhYmxlIG5hbWUgdG8gZGVub3RlIFRISU5HLCBhIHBhY2thZ2UsIG9yaWdpbiwgb3IgZmlsZQog bmFtZS4iCiAgIChjb25kICgocGFja2FnZT8gdGhpbmcpCiAgICAgICAgICAocGFja2FnZS1mdWxs LW5hbWUgdGhpbmcpKQogICAgICAgICAoKG9yaWdpbj8gdGhpbmcpCi0gICAgICAgICAob3IgKG9y aWdpbi1maWxlLW5hbWUgdGhpbmcpCi0gICAgICAgICAgICAgKG1hdGNoIChvcmlnaW4tdXJpIHRo aW5nKQotICAgICAgICAgICAgICAgKChoZWFkIC4gdGFpbCkKLSAgICAgICAgICAgICAgICAodXJp LT5maWxlLW5hbWUgaGVhZCkpCi0gICAgICAgICAgICAgICAoKD8gc3RyaW5nPyB1cmkpCi0gICAg ICAgICAgICAgICAgKHVyaS0+ZmlsZS1uYW1lIHVyaSkpKSkpCisgICAgICAgICAob3JpZ2luLWFj dHVhbC1maWxlLW5hbWUgdGhpbmcpKQogICAgICAgICAoKHN0cmluZz8gdGhpbmcpICAgICAgICAg ICAgICAgICAgICAgICAgICA7ZmlsZSBuYW1lCiAgICAgICAgICAob3IgKGJhc2VuYW1lIHRoaW5n KQogICAgICAgICAgICAgIChlcnJvciAiYmFzZW5hbWUiIHRoaW5nKSkpCi0tIAoyLjQuMwoK --=_ca5faf72da46bbaca0f6450ee3a5d0e2 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-guix-lint-Check-for-meaningful-origin-file-names.patch Content-Disposition: attachment; filename=0002-guix-lint-Check-for-meaningful-origin-file-names.patch; size=9697 RnJvbSAwM2MzZjJiMjFhMjQ2NzY3NTA5MjgzMGFlYTJkZGYxOTJlMTMzZmY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgpE YXRlOiBUaHUsIDEwIFNlcCAyMDE1IDE1OjM0OjU4IC0wNTAwClN1YmplY3Q6IFtQQVRDSCAyLzJd IGd1aXg6IGxpbnQ6IENoZWNrIGZvciBtZWFuaW5nZnVsIG9yaWdpbiBmaWxlIG5hbWVzLgoKKiBn dWl4L3NjcmlwdHMvbGludC5zY20gKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUpOiBOZXcgcHJvY2Vk dXJlLgogICglY2hlY2tlcnMpOiBBZGQgJ3NvdXJjZS1maWxlLW5hbWUnIGNoZWNrZXIuCiogdGVz dHMvbGludC5zY20gKCJzb3VyY2U6IGZpbGUgbmFtZSIsICJzb3VyY2U6IGZpbGUgbmFtZSB2IikK ICAoInNvdXJjZTogZmlsZSBuYW1lIHZhbGlkIiwgInNvdXJjZTogZmlsZSBuYW1lIGJhZCBjaGVj a291dCIpCiAgKCJzb3VyY2U6IGZpbGUgbmFtZSBnb29kIGNoZWNrb3V0Iik6IE5ldyB0ZXN0cy4K KiBkb2MvZ3VpeC50ZXhpIChJbnZva2luZyBndWl4IGxpbnQpOiBNZW50aW9uIGZpbGUgbmFtZSBj aGVjay4KLS0tCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgfCAgNSArKystCiBndWl4L3NjcmlwdHMv bGludC5zY20gfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLQogdGVzdHMvbGludC5zY20gICAgICAgIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDEzMyBpbnNlcnRp b25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9j L2d1aXgudGV4aQppbmRleCA5YWU5MWE4Li42YzU2M2E5IDEwMDY0NAotLS0gYS9kb2MvZ3VpeC50 ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTQyMTcsOCArNDIxNywxMSBAQCBJZGVudGlmeSBp bnB1dHMgdGhhdCBzaG91bGQgbW9zdCBsaWtlbHkgYmUgbmF0aXZlIGlucHV0cy4KIAogQGl0ZW0g c291cmNlCiBAaXRlbXggaG9tZS1wYWdlCitAaXRlbXggc291cmNlLWZpbGUtbmFtZQogUHJvYmUg QGNvZGV7aG9tZS1wYWdlfSBhbmQgQGNvZGV7c291cmNlfSBVUkxzIGFuZCByZXBvcnQgdGhvc2Ug dGhhdCBhcmUKLWludmFsaWQuCitpbnZhbGlkLiAgQ2hlY2sgdGhhdCB0aGUgc291cmNlIGZpbGUg bmFtZSBpcyBtZWFuaW5nZnVsLCBlLmcuIGlzIG5vdAoranVzdCBhIHZlcnNpb24gbnVtYmVyIG9y IGBgZ2l0LWNoZWNrb3V0JycsIGFuZCBzaG91bGQgbm90IGhhdmUgYQorQGNvZGV7ZmlsZS1uYW1l fSBkZWNsYXJlZCAoQHB4cmVme29yaWdpbiBSZWZlcmVuY2V9KS4KIAogQGl0ZW0gZm9ybWF0dGlu ZwogV2FybiBhYm91dCBvYnZpb3VzIHNvdXJjZSBjb2RlIGZvcm1hdHRpbmcgaXNzdWVzOiB0cmFp bGluZyB3aGl0ZSBzcGFjZSwKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9saW50LnNjbSBiL2d1 aXgvc2NyaXB0cy9saW50LnNjbQppbmRleCAyYTYxOGM5Li42YWRlYTE0IDEwMDY0NAotLS0gYS9n dWl4L3NjcmlwdHMvbGludC5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL2xpbnQuc2NtCkBAIC0xLDYg KzEsNiBAQAogOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBm b3IgR05VCiA7OzsgQ29weXJpZ2h0IMKpIDIwMTQgQ3lyaWwgUm9lbGFuZHQgPHRpcGVjYW1sQGdt YWlsLmNvbT4KLTs7OyBDb3B5cmlnaHQgwqkgMjAxNCBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJl ci5mc2Yub3JnPgorOzs7IENvcHlyaWdodCDCqSAyMDE0LCAyMDE1IEVyaWMgQmF2aWVyIDxiYXZp ZXJAbWVtYmVyLmZzZi5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTMsIDIwMTQsIDIwMTUgTHVk b3ZpYyBDb3VydMOocyA8bHVkb0BnbnUub3JnPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR05VIEd1aXguCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgICAgICAgICBjaGVjay1kZXJpdmF0 aW9uCiAgICAgICAgICAgICBjaGVjay1ob21lLXBhZ2UKICAgICAgICAgICAgIGNoZWNrLXNvdXJj ZQorICAgICAgICAgICAgY2hlY2stc291cmNlLWZpbGUtbmFtZQogICAgICAgICAgICAgY2hlY2st bGljZW5zZQogICAgICAgICAgICAgY2hlY2stZm9ybWF0dGluZwogCkBAIC00NzYsMzAgKzQ3Nyw1 MCBAQCBkZXNjcmlwdGlvbnMgbWFpbnRhaW5lZCB1cHN0cmVhbS4iCiAgICAgICAnKCkpKQogCiAg IChsZXQgKChvcmlnaW4gKHBhY2thZ2Utc291cmNlIHBhY2thZ2UpKSkKLSAgICAod2hlbiAoYW5k IG9yaWdpbgotICAgICAgICAgICAgICAgKGVxdj8gKG9yaWdpbi1tZXRob2Qgb3JpZ2luKSB1cmwt ZmV0Y2gpKQotICAgICAgKGxldCogKChzdHJpbmdzIChvcmlnaW4tdXJpIG9yaWdpbikpCi0gICAg ICAgICAgICAgKHVyaXMgKGlmIChsaXN0PyBzdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICAg ICAobWFwIHN0cmluZy0+dXJpIHN0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgIChsaXN0 IChzdHJpbmctPnVyaSBzdHJpbmdzKSkpKSkKLQotICAgICAgICA7OyBKdXN0IG1ha2Ugc3VyZSB0 aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgVVJJcyBpcyB2YWxpZC4KLSAgICAgICAgKGNhbGwtd2l0 aC12YWx1ZXMKLSAgICAgICAgICAgIChsYW1iZGEgKCkgKHRyeS11cmlzIHVyaXMpKQotICAgICAg ICAgIChsYW1iZGEgKHN1Y2Nlc3M/IHdhcm5pbmdzKQotICAgICAgICAgICAgOzsgV2hlbiBldmVy eXRoaW5nIGZhaWxzLCByZXBvcnQgYWxsIG9mIFdBUk5JTkdTLCBvdGhlcndpc2UgZG9uJ3QKLSAg ICAgICAgICAgIDs7IHJlcG9ydCBhbnl0aGluZy4KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAg ICA7OyBYWFg6IElkZWFsbHkgd2UnZCBzdGlsbCBhbGxvdyB3YXJuaW5ncyB0byBiZSByYWlzZWQg aWYgKnNvbWUqCi0gICAgICAgICAgICA7OyBVUklzIGFyZSB1bnJlYWNoYWJsZSwgYnV0IGRpc3Rp bmd1aXNoIHRoYXQgZnJvbSB0aGUgZXJyb3IgY2FzZQotICAgICAgICAgICAgOzsgd2hlcmUgKmFs bCogdGhlIFVSSXMgYXJlIHVucmVhY2hhYmxlLgotICAgICAgICAgICAgKHVubGVzcyBzdWNjZXNz PwotICAgICAgICAgICAgICAoZW1pdC13YXJuaW5nIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoXyAiYWxsIHRoZSBzb3VyY2UgVVJJcyBhcmUgdW5yZWFjaGFibGU6IikKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlKQotICAgICAgICAgICAgICAoZm9yLWVh Y2ggKGxhbWJkYSAod2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpc3BsYXkg d2FybmluZyAoZ3VpeC13YXJuaW5nLXBvcnQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIChy ZXZlcnNlIHdhcm5pbmdzKSkpKSkpKSkpCisgICAgKHdoZW4gb3JpZ2luCisgICAgICAoaWYgKGVx dj8gKG9yaWdpbi1tZXRob2Qgb3JpZ2luKSB1cmwtZmV0Y2gpCisgICAgICAgICAgKGxldCogKChz dHJpbmdzIChvcmlnaW4tdXJpIG9yaWdpbikpCisgICAgICAgICAgICAgICAgICh1cmlzIChpZiAo bGlzdD8gc3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXAgc3RyaW5nLT51 cmkgc3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IChzdHJpbmctPnVy aSBzdHJpbmdzKSkpKSkKKworICAgICAgICAgICAgOzsgSnVzdCBtYWtlIHN1cmUgdGhhdCBhdCBs ZWFzdCBvbmUgb2YgdGhlIFVSSXMgaXMgdmFsaWQuCisgICAgICAgICAgICAoY2FsbC13aXRoLXZh bHVlcworICAgICAgICAgICAgICAgIChsYW1iZGEgKCkgKHRyeS11cmlzIHVyaXMpKQorICAgICAg ICAgICAgICAobGFtYmRhIChzdWNjZXNzPyB3YXJuaW5ncykKKyAgICAgICAgICAgICAgICA7OyBX aGVuIGV2ZXJ5dGhpbmcgZmFpbHMsIHJlcG9ydCBhbGwgb2YgV0FSTklOR1MsIG90aGVyd2lzZSBk b24ndAorICAgICAgICAgICAgICAgIDs7IHJlcG9ydCBhbnl0aGluZy4KKyAgICAgICAgICAgICAg ICA7OworICAgICAgICAgICAgICAgIDs7IFhYWDogSWRlYWxseSB3ZSdkIHN0aWxsIGFsbG93IHdh cm5pbmdzIHRvIGJlIHJhaXNlZCBpZiAqc29tZSoKKyAgICAgICAgICAgICAgICA7OyBVUklzIGFy ZSB1bnJlYWNoYWJsZSwgYnV0IGRpc3Rpbmd1aXNoIHRoYXQgZnJvbSB0aGUgZXJyb3IgY2FzZQor ICAgICAgICAgICAgICAgIDs7IHdoZXJlICphbGwqIHRoZSBVUklzIGFyZSB1bnJlYWNoYWJsZS4K KyAgICAgICAgICAgICAgICAodW5sZXNzIHN1Y2Nlc3M/CisgICAgICAgICAgICAgICAgICAoZW1p dC13YXJuaW5nIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF8gImFs bCB0aGUgc291cmNlIFVSSXMgYXJlIHVucmVhY2hhYmxlOiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdzb3VyY2UpCisgICAgICAgICAgICAgICAgICAoZm9yLWVhY2ggKGxhbWJk YSAod2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5IHdhcm5p bmcgKGd1aXgtd2FybmluZy1wb3J0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJl dmVyc2Ugd2FybmluZ3MpKSkpKSkpKSkpCisKKyhkZWZpbmUgKGNoZWNrLXNvdXJjZS1maWxlLW5h bWUgcGFja2FnZSkKKyAgIkVtaXQgYSB3YXJuaW5nIGlmIFBBQ0tBR0UncyBvcmlnaW4gaGFzIGEg dmVyc2lvbi1vbmx5IGZpbGUgbmFtZS4iCisgIChkZWZpbmUgKG9yaWdpbi1maWxlLW5hbWUtdmFs aWQ/IG9yaWdpbikKKyAgICA7OyBSZXR1cm4gI3QgaWYgdGhlIHNvdXJjZSBmaWxlIG5hbWUgY29u dGFpbnMgb25seSBhIHZlcnNpb247IGluZGljYXRlcworICAgIDs7IHRoYXQgdGhlIG9yaWdpbiBu ZWVkcyBhICdmaWxlLW5hbWUnIGZpZWxkLgorICAgIChsZXQgKChmaWxlLW5hbWUgKG9yaWdpbi1h Y3R1YWwtZmlsZS1uYW1lIG9yaWdpbikpCisgICAgICAgICAgKHZlcnNpb24gKHBhY2thZ2UtdmVy c2lvbiBwYWNrYWdlKSkpCisgICAgICAoYW5kIGZpbGUtbmFtZQorICAgICAgICAgICAobm90IChv ciAoc3RyaW5nLXByZWZpeD8gdmVyc2lvbiBmaWxlLW5hbWUpCisgICAgICAgICAgICAgICAgICAg IDs7IENvbW1vbiBpbiBtYW55IHByb2plY3RzIGlzIGZvciB0aGUgZmlsZW5hbWUgdG8gc3RhcnQK KyAgICAgICAgICAgICAgICAgICAgOzsgd2l0aCBhICJ2IiBmb2xsb3dlZCBieSB0aGUgdmVyc2lv biwKKyAgICAgICAgICAgICAgICAgICAgOzsgZS5nLiAidjMuMi4wLnRhci5neiIuCisgICAgICAg ICAgICAgICAgICAgIChzdHJpbmctcHJlZml4PyAoc3RyaW5nLWFwcGVuZCAidiIgdmVyc2lvbikg ZmlsZS1uYW1lKSkpKSkpCisKKyAgKGxldCAoKG9yaWdpbiAocGFja2FnZS1zb3VyY2UgcGFja2Fn ZSkpKQorICAgICh1bmxlc3MgKG9yIChub3Qgb3JpZ2luKSAob3JpZ2luLWZpbGUtbmFtZS12YWxp ZD8gb3JpZ2luKSkKKyAgICAgIChlbWl0LXdhcm5pbmcgcGFja2FnZQorICAgICAgICAgICAgICAg ICAgICAoXyAidGhlIHNvdXJjZSBmaWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2Ug bmFtZSIpCisgICAgICAgICAgICAgICAgICAgICdzb3VyY2UpKSkpCiAKIChkZWZpbmUgKGNoZWNr LWRlcml2YXRpb24gcGFja2FnZSkKICAgIkVtaXQgYSB3YXJuaW5nIGlmIHdlIGZhaWwgdG8gY29t cGlsZSBQQUNLQUdFIHRvIGEgZGVyaXZhdGlvbi4iCkBAIC02NDMsNiArNjY0LDEwIEBAIG9yIGEg bGlzdCB0aGVyZW9mIikKICAgICAgKGRlc2NyaXB0aW9uICJWYWxpZGF0ZSBzb3VyY2UgVVJMcyIp CiAgICAgIChjaGVjayAgICAgICBjaGVjay1zb3VyY2UpKQogICAgKGxpbnQtY2hlY2tlcgorICAg ICAobmFtZSAgICAgICAgJ3NvdXJjZS1maWxlLW5hbWUpCisgICAgIChkZXNjcmlwdGlvbiAiVmFs aWRhdGUgZmlsZSBuYW1lcyBvZiBzb3VyY2VzIikKKyAgICAgKGNoZWNrICAgICAgIGNoZWNrLXNv dXJjZS1maWxlLW5hbWUpKQorICAgKGxpbnQtY2hlY2tlcgogICAgICAobmFtZSAgICAgICAgJ2Rl cml2YXRpb24pCiAgICAgIChkZXNjcmlwdGlvbiAiUmVwb3J0IGZhaWx1cmUgdG8gY29tcGlsZSBh IHBhY2thZ2UgdG8gYSBkZXJpdmF0aW9uIikKICAgICAgKGNoZWNrICAgICAgIGNoZWNrLWRlcml2 YXRpb24pKQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGludC5zY20gYi90ZXN0cy9saW50LnNjbQppbmRl eCBhYzQ3ZGJiLi4yZmFjMjg0IDEwMDY0NAotLS0gYS90ZXN0cy9saW50LnNjbQorKysgYi90ZXN0 cy9saW50LnNjbQpAQCAtMSw2ICsxLDYgQEAKIDs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBw YWNrYWdlIG1hbmFnZW1lbnQgZm9yIEdOVQogOzs7IENvcHlyaWdodCDCqSAyMDEyLCAyMDEzIEN5 cmlsIFJvZWxhbmR0IDx0aXBlY2FtbEBnbWFpbC5jb20+Ci07OzsgQ29weXJpZ2h0IMKpIDIwMTQg RXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4KKzs7OyBDb3B5cmlnaHQgwqkgMjAx NCwgMjAxNSBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgogOzs7IENvcHlyaWdo dCDCqSAyMDE0LCAyMDE1IEx1ZG92aWMgQ291cnTDqHMgPGx1ZG9AZ251Lm9yZz4KIDs7OwogOzs7 IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgpAQCAtMjEsNiArMjEsNyBAQAogKGRlZmlu ZS1tb2R1bGUgKHRlc3QtbGludCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHRlc3RzKQogICAjOnVz ZS1tb2R1bGUgKGd1aXggZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnaXQtZG93bmxv YWQpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZC1zeXN0ZW0gZ251KQogICAjOnVzZS1tb2R1 bGUgKGd1aXggcGFja2FnZXMpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBzY3JpcHRzIGxpbnQpCkBA IC0zOTgsNiArMzk5LDgzIEBAIHJlcXVlc3RzLiIKICAgICAgICAgICAoY2hlY2staG9tZS1wYWdl IHBrZykpKSkKICAgICAibm90IHJlYWNoYWJsZTogNDA0IikpKQogCisodGVzdC1hc3NlcnQgInNv dXJjZTogZmlsZSBuYW1lIgorICAoLT5ib29sCisgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgKHdp dGgtd2FybmluZ3MKKyAgICAgIChsZXQgKChwa2cgKGR1bW15LXBhY2thZ2UgIngiCisgICAgICAg ICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikKKyAgICAgICAgICAgICAgICAgICAoc291cmNl CisgICAgICAgICAgICAgICAgICAgIChvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAobWV0 aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAodXJpICJodHRwOi8vd3d3LmV4 YW1wbGUuY29tLzMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAgICAgICAgICAgKHNoYTI1NiAl bnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkp CisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKQorCiso dGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIHYiCisgICgtPmJvb2wKKyAgIChzdHJpbmct Y29udGFpbnMKKyAgICAod2l0aC13YXJuaW5ncworICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFj a2FnZSAieCIKKyAgICAgICAgICAgICAgICAgICAodmVyc2lvbiAiMy4yLjEiKQorICAgICAgICAg ICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgKG9yaWdpbgorICAgICAgICAg ICAgICAgICAgICAgIChtZXRob2QgdXJsLWZldGNoKQorICAgICAgICAgICAgICAgICAgICAgICh1 cmkgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vdjMuMi4xLnRhci5neiIpCisgICAgICAgICAgICAg ICAgICAgICAgKHNoYTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJj ZS1maWxlLW5hbWUgcGtnKSkpCisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFj a2FnZSBuYW1lIikpKQorCisodGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIGJhZCBjaGVj a291dCIKKyAgKC0+Ym9vbAorICAgKHN0cmluZy1jb250YWlucworICAgICh3aXRoLXdhcm5pbmdz CisgICAgICAobGV0ICgocGtnIChkdW1teS1wYWNrYWdlICJ4IgorICAgICAgICAgICAgICAgICAg ICh2ZXJzaW9uICIzLjIuMSIpCisgICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAg ICAgICAgICAgICAob3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZCBnaXQtZmV0 Y2gpCisgICAgICAgICAgICAgICAgICAgICAgKHVyaSAoZ2l0LXJlZmVyZW5jZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh1cmwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20veC5naXQiKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21taXQgIjAiKSkpCisgICAgICAgICAgICAg ICAgICAgICAgKHNoYTI1NiAlbnVsbC1zaGEyNTYpKSkpKSkKKyAgICAgICAgKGNoZWNrLXNvdXJj ZS1maWxlLW5hbWUgcGtnKSkpCisgICAgImZpbGUgbmFtZSBzaG91bGQgY29udGFpbiB0aGUgcGFj a2FnZSBuYW1lIikpKQorCisodGVzdC1hc3NlcnQgInNvdXJjZTogZmlsZSBuYW1lIGdvb2QgY2hl Y2tvdXQiCisgIChub3QKKyAgICgtPmJvb2wKKyAgICAoc3RyaW5nLWNvbnRhaW5zCisgICAgICh3 aXRoLXdhcm5pbmdzCisgICAgICAgKGxldCAoKHBrZyAoZHVtbXktcGFja2FnZSAieCIKKyAgICAg ICAgICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikKKyAgICAgICAgICAgICAgICAgICAgKHNv dXJjZQorICAgICAgICAgICAgICAgICAgICAgKG9yaWdpbgorICAgICAgICAgICAgICAgICAgICAg ICAobWV0aG9kIGdpdC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHVyaSAoZ2l0LXJl ZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJsICJodHRwOi8vZ2l0LmV4 YW1wbGUuY29tL3guZ2l0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1pdCAi MCIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAoc3RyaW5nLWFwcGVuZCAi eC0iIHZlcnNpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAoc2hhMjU2ICVudWxsLXNoYTI1 NikpKSkpKQorICAgICAgICAgKGNoZWNrLXNvdXJjZS1maWxlLW5hbWUgcGtnKSkpCisgICAgICJm aWxlIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIHBhY2thZ2UgbmFtZSIpKSkpCisKKyh0ZXN0LWFz c2VydCAic291cmNlOiBmaWxlIG5hbWUgdmFsaWQiCisgIChub3QKKyAgICgtPmJvb2wKKyAgICAo c3RyaW5nLWNvbnRhaW5zCisgICAgICh3aXRoLXdhcm5pbmdzCisgICAgICAgKGxldCAoKHBrZyAo ZHVtbXktcGFja2FnZSAieCIKKyAgICAgICAgICAgICAgICAgICAgKHZlcnNpb24gIjMuMi4xIikK KyAgICAgICAgICAgICAgICAgICAgKHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgKG9yaWdp bgorICAgICAgICAgICAgICAgICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAg ICAgICAgICAgICAgKHVyaSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS94LTMuMi4xLnRhci5neiIp CisgICAgICAgICAgICAgICAgICAgICAgIChzaGEyNTYgJW51bGwtc2hhMjU2KSkpKSkpCisgICAg ICAgICAoY2hlY2stc291cmNlLWZpbGUtbmFtZSBwa2cpKSkKKyAgICAgImZpbGUgbmFtZSBzaG91 bGQgY29udGFpbiB0aGUgcGFja2FnZSBuYW1lIikpKSkKKwogKHRlc3Qtc2tpcCAoaWYgJWh0dHAt c2VydmVyLXNvY2tldCAwIDEpKQogKHRlc3QtZXF1YWwgInNvdXJjZTogMjAwIgogICAiIgotLSAK Mi40LjMKCg== --=_ca5faf72da46bbaca0f6450ee3a5d0e2--