From 1a64deeb894dc95e2645a75771732c6cc53a79ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isma=C3=ABl=20Bouya?=
Date: Wed, 4 Oct 2023 01:35:06 +0200
Subject: Squash changes containing private information
There were a lot of changes since the previous commit, but a lot of them
contained personnal information about users. All thos changes got
stashed into a single commit (history is kept in a different place) and
private information was moved in a separate private repository
---
systems/eldiron/base.nix | 371 +
systems/eldiron/buildbot/default.nix | 310 +
systems/eldiron/coturn.nix | 73 +
systems/eldiron/databases/default.nix | 56 +
systems/eldiron/databases/mariadb.nix | 188 +
systems/eldiron/databases/openldap/default.nix | 304 +
systems/eldiron/databases/postgresql.nix | 236 +
systems/eldiron/databases/redis.nix | 138 +
systems/eldiron/dns.nix | 290 +
systems/eldiron/duply_backup.nix | 151 +
systems/eldiron/ejabberd/default.nix | 141 +
systems/eldiron/ejabberd/ejabberd.yml | 231 +
systems/eldiron/ejabberd/warn_xmpp_email.py | 112 +
systems/eldiron/flake.lock | 2758 ++++++
systems/eldiron/flake.nix | 90 +
systems/eldiron/ftp.nix | 339 +
systems/eldiron/ftp_sync.sh | 47 +
systems/eldiron/gemini/default.nix | 50 +
systems/eldiron/gemini/public/index.gmi | 70 +
systems/eldiron/gitolite/default.nix | 127 +
systems/eldiron/gitolite/gitolite_ldap_groups.sh | 15 +
systems/eldiron/gitolite/ldap_gitolite.sh | 28 +
systems/eldiron/irc.nix | 80 +
systems/eldiron/mail/default.nix | 44 +
systems/eldiron/mail/dovecot.nix | 348 +
systems/eldiron/mail/postfix.nix | 497 ++
systems/eldiron/mail/rspamd.nix | 88 +
systems/eldiron/mail/scan_reported_mails | 21 +
systems/eldiron/mail/sieve_bin/imapsieve_copy | 8 +
systems/eldiron/mail/sieve_scripts/backup.sieve | 7 +
.../eldiron/mail/sieve_scripts/report_ham.sieve | 11 +
.../eldiron/mail/sieve_scripts/report_spam.sieve | 3 +
systems/eldiron/mail/sympa.nix | 232 +
systems/eldiron/monitoring.nix | 51 +
systems/eldiron/mpd.nix | 60 +
systems/eldiron/pub/default.nix | 100 +
systems/eldiron/pub/ldap_pub.sh | 38 +
systems/eldiron/pub/restrict | 71 +
systems/eldiron/pub/tmux.restrict.conf | 43 +
systems/eldiron/tasks/default.nix | 384 +
systems/eldiron/tasks/www/index.php | 168 +
systems/eldiron/vpn/default.nix | 92 +
systems/eldiron/vpn/tinc/host-down | 7 +
systems/eldiron/vpn/tinc/host-up | 11 +
systems/eldiron/vpn/tinc/tinc-down | 12 +
systems/eldiron/vpn/tinc/tinc-up | 14 +
systems/eldiron/vpn/tinc/tinc.conf | 11 +
.../websites/_www/googleb6d69446ff4ca3e5.html | 1 +
systems/eldiron/websites/_www/index.htm | 9 +
.../eldiron/websites/_www/maintenance_immae.html | 58 +
systems/eldiron/websites/_www/nossl.html | 11 +
systems/eldiron/websites/assets/default.nix | 98 +
systems/eldiron/websites/assets/static/favicon.png | Bin 0 -> 1734 bytes
systems/eldiron/websites/assets/static/logger.png | Bin 0 -> 3340 bytes
systems/eldiron/websites/assets/static/logger.txt | 3 +
systems/eldiron/websites/assets/static/logo.jpg | Bin 0 -> 6931 bytes
systems/eldiron/websites/assets/static/logo.txt | 7 +
.../eldiron/websites/assets/static/logo_big.jpg | Bin 0 -> 16390 bytes
.../eldiron/websites/assets/static/logo_big.txt | 7 +
.../eldiron/websites/assets/static/logo_center.jpg | Bin 0 -> 29509 bytes
.../eldiron/websites/assets/static/logo_center.txt | 8 +
.../eldiron/websites/assets/static/monitoring.png | Bin 0 -> 57395 bytes
.../eldiron/websites/assets/static/monitoring.txt | 3 +
.../eldiron/websites/assets/static/photos/ct.jpg | Bin 0 -> 55914 bytes
.../websites/assets/static/photos/fretlink.jpg | Bin 0 -> 1520106 bytes
.../websites/assets/static/photos/raton.jpg | Bin 0 -> 17614 bytes
systems/eldiron/websites/cloud/add-htaccess.php | 70 +
systems/eldiron/websites/cloud/default.nix | 151 +
systems/eldiron/websites/cloud/farm.nix | 221 +
systems/eldiron/websites/commento/default.nix | 84 +
systems/eldiron/websites/cryptpad/default.nix | 89 +
systems/eldiron/websites/cryptpad/farm.nix | 186 +
systems/eldiron/websites/dav/davical.nix | 128 +
systems/eldiron/websites/dav/default.nix | 140 +
systems/eldiron/websites/dav/www/index.html | 42 +
systems/eldiron/websites/db/default.nix | 32 +
systems/eldiron/websites/default.nix | 319 +
systems/eldiron/websites/diaspora/default.nix | 224 +
systems/eldiron/websites/ether/default.nix | 251 +
.../websites/games/codenames/codenames.patch | 8306 +++++++++++++++++
.../eldiron/websites/games/codenames/default.nix | 76 +
systems/eldiron/websites/games/codenames/deps.nix | 11 +
.../eldiron/websites/games/codenames/elm-srcs.nix | 77 +
.../eldiron/websites/games/codenames/frontend.nix | 22 +
.../eldiron/websites/games/codenames/greenapid.nix | 18 +
.../websites/games/codenames/greenapid.patch | 39 +
.../websites/games/codenames/immae-assets.patch | 15 +
.../websites/games/codenames/node-packages.nix | 7622 ++++++++++++++++
.../eldiron/websites/games/codenames/registry.dat | Bin 0 -> 105421 bytes
systems/eldiron/websites/games/codenames/shell.nix | 50 +
.../websites/games/codenames/wordlists/french.txt | 694 ++
.../websites/games/terraforming-mars/default.nix | 75 +
.../games/terraforming-mars/immae-assets.patch | 13 +
.../games/terraforming-mars/node-packages.nix | 4353 +++++++++
.../games/terraforming-mars/terraforming-mars.nix | 39 +
systems/eldiron/websites/git/cgit_js.html | 16 +
systems/eldiron/websites/git/default.nix | 98 +
systems/eldiron/websites/git/gitweb.nix | 124 +
systems/eldiron/websites/git/mantisbt.nix | 86 +
systems/eldiron/websites/im/default.nix | 118 +
systems/eldiron/websites/im/www/converse.html | 57 +
systems/eldiron/websites/im/www/index.html | 47 +
systems/eldiron/websites/immae/matrix/client | 11 +
systems/eldiron/websites/immae/matrix/server | 3 +
systems/eldiron/websites/immae/production.nix | 107 +
systems/eldiron/websites/immae/release.nix | 40 +
.../immae/sarl/certificates/2021-certificate.crt | 23 +
systems/eldiron/websites/kanboard/farm.nix | 183 +
systems/eldiron/websites/mail/default.nix | 141 +
systems/eldiron/websites/mail/mta-sts.nix | 42 +
systems/eldiron/websites/mail/rainloop.nix | 54 +
systems/eldiron/websites/mail/roundcubemail.nix | 119 +
systems/eldiron/websites/mail/www/index.html | 74 +
systems/eldiron/websites/mastodon/default.nix | 174 +
systems/eldiron/websites/mgoblin/default.nix | 173 +
systems/eldiron/websites/moomin.txt | 16 +
systems/eldiron/websites/nossl/index.html | 11 +
systems/eldiron/websites/peertube/default.nix | 147 +
systems/eldiron/websites/performance/default.nix | 93 +
systems/eldiron/websites/stats/default.nix | 51 +
systems/eldiron/websites/tools/adminer.nix | 83 +
systems/eldiron/websites/tools/default.nix | 547 ++
systems/eldiron/websites/tools/dmarc_reports.nix | 61 +
.../eldiron/websites/tools/dmarc_reports/api.php | 122 +
.../eldiron/websites/tools/dmarc_reports/app.js | 103 +
.../websites/tools/dmarc_reports/default.css | 130 +
.../websites/tools/dmarc_reports/index.html | 128 +
systems/eldiron/websites/tools/dokuwiki.nix | 106 +
systems/eldiron/websites/tools/grocy.nix | 48 +
systems/eldiron/websites/tools/kanboard.nix | 81 +
systems/eldiron/websites/tools/landing.nix | 38 +
.../websites/tools/landing/ldap_password.php | 170 +
.../websites/tools/landing/ldap_ssh_keys.php | 343 +
systems/eldiron/websites/tools/landing/myip.php | 1 +
.../websites/tools/landing/node-packages.nix | 130 +
.../websites/tools/landing/yarn-packages.nix | 9357 ++++++++++++++++++++
systems/eldiron/websites/tools/ldap.nix | 77 +
systems/eldiron/websites/tools/phpbb.nix | 69 +
systems/eldiron/websites/tools/rompr.nix | 86 +
systems/eldiron/websites/tools/shaarli.nix | 102 +
systems/eldiron/websites/tools/ttrss.nix | 167 +
systems/eldiron/websites/tools/wallabag.nix | 180 +
systems/eldiron/websites/tools/webhooks.nix | 25 +
systems/eldiron/websites/tools/ympd.nix | 54 +
systems/eldiron/websites/tools/yourls.nix | 118 +
systems/eldiron/websites/visio/default.nix | 63 +
systems/eldiron/websites/vpn/default.nix | 13 +
systems/eldiron/websites/vpn/www/index.html | 91 +
systems/eldiron/websites/vpn/www/style.css | 61 +
systems/eldiron/webstats/default.nix | 80 +
systems/eldiron/webstats/goaccess.conf | 100 +
151 files changed, 46820 insertions(+)
create mode 100644 systems/eldiron/base.nix
create mode 100644 systems/eldiron/buildbot/default.nix
create mode 100644 systems/eldiron/coturn.nix
create mode 100644 systems/eldiron/databases/default.nix
create mode 100644 systems/eldiron/databases/mariadb.nix
create mode 100644 systems/eldiron/databases/openldap/default.nix
create mode 100644 systems/eldiron/databases/postgresql.nix
create mode 100644 systems/eldiron/databases/redis.nix
create mode 100644 systems/eldiron/dns.nix
create mode 100644 systems/eldiron/duply_backup.nix
create mode 100644 systems/eldiron/ejabberd/default.nix
create mode 100644 systems/eldiron/ejabberd/ejabberd.yml
create mode 100755 systems/eldiron/ejabberd/warn_xmpp_email.py
create mode 100644 systems/eldiron/flake.lock
create mode 100644 systems/eldiron/flake.nix
create mode 100644 systems/eldiron/ftp.nix
create mode 100755 systems/eldiron/ftp_sync.sh
create mode 100644 systems/eldiron/gemini/default.nix
create mode 100644 systems/eldiron/gemini/public/index.gmi
create mode 100644 systems/eldiron/gitolite/default.nix
create mode 100755 systems/eldiron/gitolite/gitolite_ldap_groups.sh
create mode 100644 systems/eldiron/gitolite/ldap_gitolite.sh
create mode 100644 systems/eldiron/irc.nix
create mode 100644 systems/eldiron/mail/default.nix
create mode 100644 systems/eldiron/mail/dovecot.nix
create mode 100644 systems/eldiron/mail/postfix.nix
create mode 100644 systems/eldiron/mail/rspamd.nix
create mode 100755 systems/eldiron/mail/scan_reported_mails
create mode 100755 systems/eldiron/mail/sieve_bin/imapsieve_copy
create mode 100644 systems/eldiron/mail/sieve_scripts/backup.sieve
create mode 100644 systems/eldiron/mail/sieve_scripts/report_ham.sieve
create mode 100644 systems/eldiron/mail/sieve_scripts/report_spam.sieve
create mode 100644 systems/eldiron/mail/sympa.nix
create mode 100644 systems/eldiron/monitoring.nix
create mode 100644 systems/eldiron/mpd.nix
create mode 100644 systems/eldiron/pub/default.nix
create mode 100644 systems/eldiron/pub/ldap_pub.sh
create mode 100644 systems/eldiron/pub/restrict
create mode 100644 systems/eldiron/pub/tmux.restrict.conf
create mode 100644 systems/eldiron/tasks/default.nix
create mode 100644 systems/eldiron/tasks/www/index.php
create mode 100644 systems/eldiron/vpn/default.nix
create mode 100755 systems/eldiron/vpn/tinc/host-down
create mode 100755 systems/eldiron/vpn/tinc/host-up
create mode 100755 systems/eldiron/vpn/tinc/tinc-down
create mode 100755 systems/eldiron/vpn/tinc/tinc-up
create mode 100644 systems/eldiron/vpn/tinc/tinc.conf
create mode 100644 systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html
create mode 100644 systems/eldiron/websites/_www/index.htm
create mode 100644 systems/eldiron/websites/_www/maintenance_immae.html
create mode 100644 systems/eldiron/websites/_www/nossl.html
create mode 100644 systems/eldiron/websites/assets/default.nix
create mode 100644 systems/eldiron/websites/assets/static/favicon.png
create mode 100644 systems/eldiron/websites/assets/static/logger.png
create mode 100644 systems/eldiron/websites/assets/static/logger.txt
create mode 100644 systems/eldiron/websites/assets/static/logo.jpg
create mode 100644 systems/eldiron/websites/assets/static/logo.txt
create mode 100644 systems/eldiron/websites/assets/static/logo_big.jpg
create mode 100644 systems/eldiron/websites/assets/static/logo_big.txt
create mode 100644 systems/eldiron/websites/assets/static/logo_center.jpg
create mode 100644 systems/eldiron/websites/assets/static/logo_center.txt
create mode 100644 systems/eldiron/websites/assets/static/monitoring.png
create mode 100644 systems/eldiron/websites/assets/static/monitoring.txt
create mode 100644 systems/eldiron/websites/assets/static/photos/ct.jpg
create mode 100644 systems/eldiron/websites/assets/static/photos/fretlink.jpg
create mode 100644 systems/eldiron/websites/assets/static/photos/raton.jpg
create mode 100644 systems/eldiron/websites/cloud/add-htaccess.php
create mode 100644 systems/eldiron/websites/cloud/default.nix
create mode 100644 systems/eldiron/websites/cloud/farm.nix
create mode 100644 systems/eldiron/websites/commento/default.nix
create mode 100644 systems/eldiron/websites/cryptpad/default.nix
create mode 100644 systems/eldiron/websites/cryptpad/farm.nix
create mode 100644 systems/eldiron/websites/dav/davical.nix
create mode 100644 systems/eldiron/websites/dav/default.nix
create mode 100644 systems/eldiron/websites/dav/www/index.html
create mode 100644 systems/eldiron/websites/db/default.nix
create mode 100644 systems/eldiron/websites/default.nix
create mode 100644 systems/eldiron/websites/diaspora/default.nix
create mode 100644 systems/eldiron/websites/ether/default.nix
create mode 100644 systems/eldiron/websites/games/codenames/codenames.patch
create mode 100644 systems/eldiron/websites/games/codenames/default.nix
create mode 100644 systems/eldiron/websites/games/codenames/deps.nix
create mode 100644 systems/eldiron/websites/games/codenames/elm-srcs.nix
create mode 100644 systems/eldiron/websites/games/codenames/frontend.nix
create mode 100644 systems/eldiron/websites/games/codenames/greenapid.nix
create mode 100644 systems/eldiron/websites/games/codenames/greenapid.patch
create mode 100644 systems/eldiron/websites/games/codenames/immae-assets.patch
create mode 100644 systems/eldiron/websites/games/codenames/node-packages.nix
create mode 100644 systems/eldiron/websites/games/codenames/registry.dat
create mode 100644 systems/eldiron/websites/games/codenames/shell.nix
create mode 100644 systems/eldiron/websites/games/codenames/wordlists/french.txt
create mode 100644 systems/eldiron/websites/games/terraforming-mars/default.nix
create mode 100644 systems/eldiron/websites/games/terraforming-mars/immae-assets.patch
create mode 100644 systems/eldiron/websites/games/terraforming-mars/node-packages.nix
create mode 100644 systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix
create mode 100644 systems/eldiron/websites/git/cgit_js.html
create mode 100644 systems/eldiron/websites/git/default.nix
create mode 100644 systems/eldiron/websites/git/gitweb.nix
create mode 100644 systems/eldiron/websites/git/mantisbt.nix
create mode 100644 systems/eldiron/websites/im/default.nix
create mode 100644 systems/eldiron/websites/im/www/converse.html
create mode 100644 systems/eldiron/websites/im/www/index.html
create mode 100644 systems/eldiron/websites/immae/matrix/client
create mode 100644 systems/eldiron/websites/immae/matrix/server
create mode 100644 systems/eldiron/websites/immae/production.nix
create mode 100644 systems/eldiron/websites/immae/release.nix
create mode 100644 systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt
create mode 100644 systems/eldiron/websites/kanboard/farm.nix
create mode 100644 systems/eldiron/websites/mail/default.nix
create mode 100644 systems/eldiron/websites/mail/mta-sts.nix
create mode 100644 systems/eldiron/websites/mail/rainloop.nix
create mode 100644 systems/eldiron/websites/mail/roundcubemail.nix
create mode 100644 systems/eldiron/websites/mail/www/index.html
create mode 100644 systems/eldiron/websites/mastodon/default.nix
create mode 100644 systems/eldiron/websites/mgoblin/default.nix
create mode 100644 systems/eldiron/websites/moomin.txt
create mode 100644 systems/eldiron/websites/nossl/index.html
create mode 100644 systems/eldiron/websites/peertube/default.nix
create mode 100644 systems/eldiron/websites/performance/default.nix
create mode 100644 systems/eldiron/websites/stats/default.nix
create mode 100644 systems/eldiron/websites/tools/adminer.nix
create mode 100644 systems/eldiron/websites/tools/default.nix
create mode 100644 systems/eldiron/websites/tools/dmarc_reports.nix
create mode 100644 systems/eldiron/websites/tools/dmarc_reports/api.php
create mode 100644 systems/eldiron/websites/tools/dmarc_reports/app.js
create mode 100644 systems/eldiron/websites/tools/dmarc_reports/default.css
create mode 100644 systems/eldiron/websites/tools/dmarc_reports/index.html
create mode 100644 systems/eldiron/websites/tools/dokuwiki.nix
create mode 100644 systems/eldiron/websites/tools/grocy.nix
create mode 100644 systems/eldiron/websites/tools/kanboard.nix
create mode 100644 systems/eldiron/websites/tools/landing.nix
create mode 100644 systems/eldiron/websites/tools/landing/ldap_password.php
create mode 100644 systems/eldiron/websites/tools/landing/ldap_ssh_keys.php
create mode 100644 systems/eldiron/websites/tools/landing/myip.php
create mode 100644 systems/eldiron/websites/tools/landing/node-packages.nix
create mode 100644 systems/eldiron/websites/tools/landing/yarn-packages.nix
create mode 100644 systems/eldiron/websites/tools/ldap.nix
create mode 100644 systems/eldiron/websites/tools/phpbb.nix
create mode 100644 systems/eldiron/websites/tools/rompr.nix
create mode 100644 systems/eldiron/websites/tools/shaarli.nix
create mode 100644 systems/eldiron/websites/tools/ttrss.nix
create mode 100644 systems/eldiron/websites/tools/wallabag.nix
create mode 100644 systems/eldiron/websites/tools/webhooks.nix
create mode 100644 systems/eldiron/websites/tools/ympd.nix
create mode 100644 systems/eldiron/websites/tools/yourls.nix
create mode 100644 systems/eldiron/websites/visio/default.nix
create mode 100644 systems/eldiron/websites/vpn/default.nix
create mode 100644 systems/eldiron/websites/vpn/www/index.html
create mode 100644 systems/eldiron/websites/vpn/www/style.css
create mode 100644 systems/eldiron/webstats/default.nix
create mode 100644 systems/eldiron/webstats/goaccess.conf
(limited to 'systems/eldiron')
diff --git a/systems/eldiron/base.nix b/systems/eldiron/base.nix
new file mode 100644
index 0000000..cda518e
--- /dev/null
+++ b/systems/eldiron/base.nix
@@ -0,0 +1,371 @@
+{ config, pkgs, lib, php, name, secrets, ... }:
+{
+ # ssh-keyscan eldiron | nix-shell -p ssh-to-age --run ssh-to-age
+ secrets.ageKeys = [ "age1dxr5lhvtnjssfaqpnf6qx80h8gfwkxg3tdf35m6n9wljmk7wadfs3kmahj" ];
+ boot = {
+ kernelModules = [ "kvm-intel" ];
+ blacklistedKernelModules = [ "nvidiafb" ];
+ loader.timeout = 1;
+ loader.grub.devices = [ "/dev/sda" "/dev/sdc" ];
+ kernel.sysctl = {
+ # https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-001.md
+ "net.ipv4.tcp_sack" = 0;
+ };
+ supportedFilesystems = [ "zfs" ];
+ kernelParams = ["zfs.zfs_arc_max=6442450944"];
+ kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
+ initrd.availableKernelModules = [ "ahci" "sd_mod" ];
+ initrd.secrets = {
+ "/boot/pass.key" = "/boot/pass.key";
+ };
+ };
+ services.udev.extraRules = ''
+ ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="c8:60:00:56:a0:88", NAME="eth0"
+ '';
+ nix.settings.max-jobs = 8;
+ nixpkgs.config.permittedInsecurePackages = [
+ "python-2.7.18.6" # for nagios-cli
+ "nodejs-16.20.2" # for landing page building
+ ];
+
+ nixpkgs.overlays = [
+ php.overlays.php
+ ];
+ powerManagement.cpuFreqGovernor = "powersave";
+
+ security.acme.certs."${name}".postRun = builtins.concatStringsSep "\n" [
+ (lib.optionalString config.services.websites.env.production.enable "/run/current-system/sw/bin/machinectl shell httpd-production /usr/bin/env systemctl reload httpd.service")
+ (lib.optionalString config.services.websites.env.integration.enable "/run/current-system/sw/bin/machinectl shell httpd-integration /usr/bin/env systemctl reload httpd.service")
+ ];
+
+ fileSystems = {
+ # pools:
+ # zpool: ashift=12
+ # zfast: ashift=12
+ # zfs:
+ # zpool/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy
+ # zpool/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key
+ # zpool/root/var: atime=on
+ # zfast/: acltype=posixacl ; xattr=sa ; atime=off ; mountpoint=legacy
+ # zfast/root: encryption=on ; keyformat=passphrase ; keylocation=file:///boot/pass.key
+ # zfast/root/etc: ø
+ # zfast/root/nix: ø
+ # zfast/root/tmp: async=disabled
+ # zfast/root/var: atime=on
+ # zfast/root/var/lib: ø
+ # zfast/root/var/lib/mysql: logbias=throughput ; atime=off ; primarycache=metadata
+ # zfast/root/var/lib/postgresql: recordsize=8K ; atime=off ; logbias=throughput
+ # zfast/root/var/lib/postgresql/11.0: ø
+ # zfast/root/var/lib/postgresql/11.0/pg_wal: ø
+ "/" = { fsType = "zfs"; device = "zpool/root"; };
+ "/boot" = { fsType = "ext4"; device = "/dev/disk/by-uuid/e6bb18fb-ff56-4b5f-ae9f-e60d40dc0622"; };
+ "/etc" = { fsType = "zfs"; device = "zpool/root/etc"; };
+ "/nix" = { fsType = "zfs"; device = "zfast/root/nix"; };
+ "/tmp" = { fsType = "zfs"; device = "zfast/root/tmp"; };
+ "/var" = { fsType = "zfs"; device = "zpool/root/var"; };
+ "/var/lib/mysql" = { fsType = "zfs"; device = "zfast/root/var/lib/mysql"; };
+ "/var/lib/postgresql" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql"; };
+ "/var/lib/postgresql/11.0" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0"; };
+ "/var/lib/postgresql/11.0/pg_wal" = { fsType = "zfs"; device = "zfast/root/var/lib/postgresql/11.0/pg_wal"; };
+ };
+ swapDevices = [ { label = "swap1"; } { label = "swap2"; } ];
+ hardware.enableRedistributableFirmware = true;
+
+ services.zfs = {
+ autoScrub = {
+ enable = false;
+ };
+ };
+ networking = {
+ hostId = "8262ca33"; # generated with head -c4 /dev/urandom | od -A none -t x4
+ firewall.enable = true;
+ firewall.allowedTCPPorts = [ config.myEnv.ports.zrepl_flony ];
+ # FIXME: on next reboot, remove the /27 and the localCommands
+ interfaces."eth0".ipv4.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
+ (n: ips: map (ip: { address = ip; prefixLength = 32; }) (ips.ip4 or []))
+ (pkgs.lib.attrsets.filterAttrs (n: v: n != "main") config.hostEnv.ips))
+ ++ [ { address = lib.head config.hostEnv.ips.main.ip4; prefixLength = 27; } ];
+ interfaces."eth0".ipv6.addresses = pkgs.lib.flatten (pkgs.lib.attrsets.mapAttrsToList
+ (n: ips: map (ip: { address = ip; prefixLength = (if n == "main" && ip == pkgs.lib.head ips.ip6 then 64 else 128); }) (ips.ip6 or []))
+ config.hostEnv.ips);
+ defaultGateway = "176.9.151.65";
+ localCommands = ''
+ # FIXME: Those commands were added by nixops and may not be
+ # actually needed
+ ip -6 addr add '2a01:4f8:160:3445::/64' dev 'eth0' || true
+ ip -4 route change '176.9.151.64/27' via '176.9.151.65' dev 'eth0' || true
+ ip -6 route add default via 'fe80::1' dev eth0 || true
+ '';
+ nameservers = [
+ "213.133.98.98"
+ "213.133.99.99"
+ "213.133.100.100"
+ "2a01:4f8:0:a0a1::add:1010"
+ "2a01:4f8:0:a102::add:9999"
+ "2a01:4f8:0:a111::add:9898"
+ ];
+ };
+
+ imports = [
+ secrets.nixosModules.users-config-eldiron
+ ./databases
+ ./databases/mariadb.nix
+ ./databases/openldap
+ ./databases/postgresql.nix
+ ./databases/redis.nix
+
+
+ ./monitoring.nix
+ ./ejabberd
+ ./buildbot
+ ./coturn.nix
+ ./dns.nix
+ ./duply_backup.nix
+ ./gemini
+ ./gitolite
+ ./mail
+ ./websites
+ ./webstats
+ ./irc.nix
+ ./pub
+ ./tasks
+ ./ftp.nix
+ ./mpd.nix
+ ./vpn
+ ];
+
+ myServices.buildbot.enable = true;
+ myServices.databases.enable = true;
+ myServices.gitolite.enable = true;
+ myServices.monitoring.enable = true;
+ myServices.irc.enable = true;
+ myServices.pub.enable = true;
+ myServices.tasks.enable = true;
+ myServices.mpd.enable = true;
+ myServices.dns.enable = true;
+ myServices.websites.enable = true;
+ myServices.gemini.enable = true;
+ myServices.mail.enable = true;
+ myServices.ejabberd.enable = true;
+ myServices.vpn.enable = true;
+ myServices.ftp.enable = true;
+
+ myServices.chatonsProperties.hostings.infogerance = {
+ file.datetime = "2022-08-27T18:50:00";
+ hosting = {
+ name = "Infogérance";
+ description = "Administration de serveurs";
+ website = "https://www.immae.eu/";
+ logo = "https://assets.immae.eu/logo.jpg";
+ type = "HOSTEDSERVER";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+
+ services.netdata.enable = true;
+ services.netdata.config.global."memory mode" = "none";
+ services.netdata.config.health."enabled" = "no";
+ services.netdata.config.web.mode = "none";
+ users.users."${config.services.netdata.user}".extraGroups = [ "keys" ];
+ services.netdata.configDir."stream.conf" = config.secrets.fullPaths."netdata-stream.conf";
+ secrets.keys = {
+ "ldap/pam_pgsql" = {
+ user = "root";
+ group = "root";
+ permissions = "0400";
+ text = ''
+ database = immae
+ user = immae_auth_read
+ password = {{ .postgresql.immae_auth_read }}
+ table = ldap_users
+ user_column = login
+ pw_type = function
+ auth_query = SELECT (mechanism = 'SSHA' AND password = encode(digest( %p || salt, 'sha1'), 'hex')) FROM ldap_users WHERE login = %u OR login || '@' || realm = %u
+ #pwd_query = WITH newsalt as (select gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( %p || (SELECT * FROM newsalt), 'sha1'), 'hex'), salt = (SELECT * FROM newsalt), mechanism = 'SSHA' WHERE login = %u OR login || '@' || realm = %u
+ '';
+ };
+
+ "netdata-stream.conf" = {
+ user = config.services.netdata.user;
+ group = config.services.netdata.group;
+ permissions = "0400";
+ text = ''
+ [stream]
+ enabled = yes
+ destination = ${config.myEnv.monitoring.netdata_aggregator}
+ api key = ${config.myEnv.monitoring.netdata_keys.eldiron}
+ '';
+ };
+ "zrepl_backup/identity" = {
+ user = "root";
+ group = "root";
+ permissions = "0400";
+ text = config.myEnv.zrepl_backup.ssh_key.private;
+ };
+ "zrepl/${name}.key" = {
+ permissions = "0400";
+ text = config.myEnv.zrepl_backup.certs."${name}".key;
+ user = "root";
+ group = "root";
+ };
+ } // builtins.listToAttrs (map (x: lib.attrsets.nameValuePair "zrepl/certificates/${x}.crt" {
+ permissions = "0400";
+ text = config.myEnv.zrepl_backup.certs."${x}".certificate;
+ user = "root";
+ group = "root";
+ }) (builtins.attrNames config.myEnv.zrepl_backup.certs));
+
+ programs.ssh.knownHosts.dilion = {
+ extraHostNames = ["dilion.immae.eu"];
+ publicKey = config.myEnv.servers.dilion.hostKey;
+ };
+
+ services.cron = {
+ enable = true;
+ mailto = "cron@immae.eu";
+ systemCronJobs = [
+ ''
+ 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "immae.eu.*Recipient address rejected"
+ # Need a way to blacklist properly
+ # 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtpd -g "NOQUEUE:"
+ 0 0 * * * root journalctl -q --since="25 hours ago" -u postfix -t postfix/smtp -g "status=bounced"
+ ''
+ ];
+ };
+
+ environment.systemPackages = [ pkgs.bindfs ];
+
+ environment.etc."mdadm.conf" = {
+ enable = true;
+ mode = "0644";
+ user = "root";
+ text = "MAILADDR ${config.myEnv.monitoring.email}";
+ };
+
+ systemd.services.zrepl.path = [ pkgs.openssh ];
+ services.zrepl = {
+ enable = true;
+ settings = {
+ jobs = [
+ {
+ type = "push";
+ # must not change
+ name = "backup-to-dilion";
+ filesystems."zpool/root" = true;
+ filesystems."zpool/root/etc" = true;
+ filesystems."zpool/root/var<" = true;
+ connect = {
+ address = "dilion.immae.eu:19000";
+ type = "tls";
+ server_cn = "dilion";
+ ca = config.secrets.fullPaths."zrepl/certificates/dilion.crt";
+ cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt";
+ key = config.secrets.fullPaths."zrepl/eldiron.key";
+ };
+ snapshotting = {
+ type = "periodic";
+ prefix = "zrepl_";
+ interval = "1h";
+ # hooks = [
+ # {
+ # type = "mysql-lock-tables";
+ # dsn = "${config.myEnv.zrepl_backup.mysql.user}:${config.myEnv.zrepl_backup.mysql.password}@tcp(localhost)/";
+ # filesystems."zpool/root/var" = true;
+ # }
+ # {
+ # type = "command";
+ # path = pkgs.writeScript "redis-dump" ''
+ # #!${pkgs.stdenv.shell}
+ # ${pkgs.redis}/bin/redis-cli bgsave
+ # '';
+ # err_is_fatal = false;
+ # filesystems."zpool/root/var" = true;
+ # }
+ # ];
+ };
+ send.encrypted = true;
+ pruning.keep_sender = [
+ { type = "regex"; regex = "^manual_.*"; }
+ { type = "grid"; grid = "24x1h | 7x1d | 4x7d | 6x30d"; regex = "^zrepl_.*"; }
+ ];
+ pruning.keep_receiver = [
+ { type = "regex"; regex = "^manual_.*"; }
+ { type = "grid"; grid = "6x4h | 7x1d | 4x7d | 6x30d"; regex = "^zrepl_.*"; }
+ ];
+ }
+ {
+ type = "source";
+ # must not change
+ name = "backup-to-wd-zpool";
+ serve.type = "tls";
+ serve.listen = ":${builtins.toString config.myEnv.ports.zrepl_flony}";
+ serve.ca = config.secrets.fullPaths."zrepl/certificates/flony.crt";
+ serve.cert = config.secrets.fullPaths."zrepl/certificates/eldiron.crt";
+ serve.key = config.secrets.fullPaths."zrepl/eldiron.key";
+ serve.client_cns = [ "flony" ];
+ filesystems."zpool/root" = true;
+ filesystems."zpool/root/etc" = true;
+ filesystems."zpool/root/var<" = true;
+ filesystems."zfast/root/var<" = true;
+ send.encrypted = true;
+ snapshotting.type = "manual";
+ }
+ ];
+ };
+ };
+
+ environment.etc."fail2ban/filter.d/postgresql.conf".text = ''
+ [Definition]
+ failregex = \S+ FATAL: password authentication failed for user .+$
+ \S+ FATAL: PAM authentication failed for user.+$
+ \S+ FATAL: no pg_hba.conf entry for host.+$
+ '';
+ environment.etc."fail2ban/filter.d/mysqld-auth.local".text = ''
+ [Definition]
+ _daemon = mysql[-\w]*
+ '';
+ services.fail2ban.jails.dovecot = ''
+ enabled = true
+ '';
+ services.fail2ban.jails.postfix-sasl = ''
+ enabled = true
+ '';
+ services.fail2ban.jails.proftpd = ''
+ enabled = true
+ '';
+ services.fail2ban.jails.postgresql = ''
+ enabled = true
+ port = 5432
+ logpath = %(syslog_daemon)s
+ backend = %(default_backend)s
+ journalmatch = _SYSTEMD_UNIT=postgresql.service + _COMM=postgres
+ '';
+ services.fail2ban.jails.mysqld-auth = ''
+ enabled = true
+ journalmatch = _SYSTEMD_UNIT=mysql.service + _COMM=mysqld
+ '';
+ # This value determines the NixOS release with which your system is
+ # to be compatible, in order to avoid breaking some software such as
+ # database servers. You should change this only after NixOS release
+ # notes say you should.
+ # https://nixos.org/nixos/manual/release-notes.html
+ system.stateVersion = "23.05"; # Did you read the comment?
+
+ security.pam.services.ldap.text = ''
+ # Authentication from ldap for pgsql
+ auth required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql
+ account required ${pkgs.pam_pgsql}/lib/security/pam_pgsql.so config_file=/var/secrets/ldap/pam_pgsql
+ '';
+ services.saslauthd = {
+ enable = true;
+ mechanism = "pam";
+ };
+ environment.etc."sasl2/slapd.conf".text = ''
+ mech_list: plain
+ pwcheck_method: saslauthd
+ saslauthd_path: /run/saslauthd/mux
+ '';
+}
diff --git a/systems/eldiron/buildbot/default.nix b/systems/eldiron/buildbot/default.nix
new file mode 100644
index 0000000..e86b081
--- /dev/null
+++ b/systems/eldiron/buildbot/default.nix
@@ -0,0 +1,310 @@
+{ lib, pkgs, config, buildbot, ... }:
+let
+ varDir = "/var/lib/buildbot";
+ bb-python = buildbot.pythonModule;
+in
+{
+ options = {
+ myServices.buildbot.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable buildbot.
+ '';
+ };
+ };
+
+ config = lib.mkIf config.myServices.buildbot.enable {
+ myEnv.buildbot.projects.test = {
+ name = "test";
+ workerPort = config.myEnv.ports.buildbot_test;
+ packages = [ pkgs.git pkgs.gzip pkgs.openssh ];
+ pythonPathHome = false;
+ secrets = {
+ apprise_webhooks = builtins.concatStringsSep "\n" [
+ "{{ .apprise_webhooks.matrix_immae_eu_alert }}"
+ ];
+ notify_xmpp_password = "{{ .xmpp.notify_bot }}";
+ };
+ activationScript = ''
+ install -m 0755 -o buildbot -g buildbot -d /var/lib/ftp/release.immae.eu/test
+ '';
+ webhookTokens = [
+ "{{ .buildbot.webhookTokens.Immae }}"
+ "{{ .buildbot.webhookTokens.Immae }}"
+ ];
+ };
+
+ myServices.chatonsProperties.hostings.buildbot = {
+ file.datetime = "2022-08-21T10:37:00";
+ hosting = {
+ name = "Buildbot";
+ description = "Python-based continuous integration testing framework";
+ type = "INSTANCE";
+ website = "https://git.immae.eu";
+ logo = "https://www.buildbot.net/img/icon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+ };
+ software = {
+ name = "Buildbot";
+ website = "https://www.buildbot.net/";
+ license.url = "https://github.com/buildbot/buildbot/blob/master/LICENSE";
+ license.name = "GNU General Public License v2.0";
+ version = pkgs.buildbot.version;
+ source.url = "https://github.com/buildbot/buildbot";
+ };
+ };
+ nixpkgs.overlays = [
+ (self: super: {
+ follow-systemd-unit = self.writeScriptBin "follow-systemd-unit" ''
+ #!${self.stdenv.shell}
+
+ set -euo pipefail
+
+ service=$1
+ before_invocation_id=$2
+
+ get_id() {
+ systemctl show -p InvocationID --value "$service"
+ }
+
+ while [ "$(get_id)" = "$before_invocation_id" ]; do sleep 1; done
+
+ invocation_id="$(get_id)"
+ cursor="$(mktemp)"
+ trap "rm -f $cursor" EXIT
+
+ get_logs() {
+ journalctl --quiet --cursor-file=$cursor INVOCATION_ID=$invocation_id + _SYSTEMD_INVOCATION_ID=$invocation_id
+ }
+
+ while [ -n "$(systemctl show -p Job --value "$service")" ]; do
+ get_logs
+ done
+ get_logs
+ '';
+ })
+ ];
+ ids.uids.buildbot = config.myEnv.buildbot.user.uid;
+ ids.gids.buildbot = config.myEnv.buildbot.user.gid;
+
+ users.groups.buildbot.gid = config.ids.gids.buildbot;
+ users.users.buildbot = {
+ name = "buildbot";
+ uid = config.ids.uids.buildbot;
+ group = "buildbot";
+ description = "Buildbot user";
+ home = varDir;
+ extraGroups = [ "keys" "systemd-journal" ];
+ useDefaultShell = true;
+ openssh.authorizedKeys.keys = [ config.myEnv.buildbot.ssh_key.public ];
+ };
+
+ services.websites.env.tools.watchPaths = lib.attrsets.mapAttrsToList
+ (k: project: config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include")
+ config.myEnv.buildbot.projects;
+
+ services.websites.env.tools.vhostConfs.git.extraConfig = lib.attrsets.mapAttrsToList (k: project: ''
+ RedirectMatch permanent "^/buildbot/${project.name}$" "/buildbot/${project.name}/"
+ RewriteEngine On
+ RewriteRule ^/buildbot/${project.name}/ws(.*)$ unix:///run/buildbot/${project.name}.sock|ws://git.immae.eu/ws$1 [P,NE,QSA,L]
+ ProxyPass /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/
+ ProxyPassReverse /buildbot/${project.name}/ unix:///run/buildbot/${project.name}.sock|http://${project.name}-git.immae.eu/
+
+ Use LDAPConnect
+ Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu
+
+ SetEnvIf X-Url-Scheme https HTTPS=1
+ ProxyPreserveHost On
+
+
+
+ Require local
+ Require ldap-group cn=users,ou=${project.name},cn=buildbot,ou=services,dc=immae,dc=eu
+ Include ${config.secrets.fullPaths."buildbot/${project.name}/webhook-httpd-include"}
+
+
+ '') config.myEnv.buildbot.projects;
+
+ system.activationScripts = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
+ deps = [ "users" "wrappers" ];
+ text = ''
+ install -m 755 -o buildbot -g buildbot -d ${varDir}/${project.name}
+
+ ${project.activationScript}
+ '';
+ }) config.myEnv.buildbot.projects;
+
+ secrets.keys = lib.listToAttrs (
+ lib.lists.flatten (
+ lib.attrsets.mapAttrsToList (k: project:
+ lib.attrsets.mapAttrsToList (k: v:
+ (lib.nameValuePair "buildbot/${project.name}/${k}" {
+ permissions = "0600";
+ user = "buildbot";
+ group = "buildbot";
+ text = v;
+ })
+ ) project.secrets
+ ++ [
+ (lib.nameValuePair "buildbot/${project.name}/webhook-httpd-include" {
+ permissions = "0600";
+ user = "wwwrun";
+ group = "wwwrun";
+ text = lib.optionalString (project.webhookTokens != null) ''
+ Require expr "req('Access-Key') in { ${builtins.concatStringsSep ", " (map (x: "'${x}'") project.webhookTokens)} }"
+ '';
+ })
+ (lib.nameValuePair "buildbot/${project.name}/environment_file" {
+ permissions = "0600";
+ user = "buildbot";
+ group = "buildbot";
+ keyDependencies = [ (buildbot.buildbot_config project).src ] ++ project.secretsDeps;
+ text = let
+ project_env = with lib.attrsets;
+ mapAttrs' (k: v: nameValuePair "BUILDBOT_${k}" v) project.environment //
+ {
+ BUILDBOT_PROJECT_DIR = (buildbot.buildbot_config project).src;
+ BUILDBOT_WORKER_PORT = builtins.toString project.workerPort;
+ BUILDBOT_HOST = config.hostEnv.fqdn;
+ BUILDBOT_VIRT_URL = "qemu+ssh://libvirt@dilion.immae.eu/system";
+ };
+ in builtins.concatStringsSep "\n"
+ (lib.mapAttrsToList (envK: envV: "${envK}=${envV}") project_env);
+ })
+ ]
+ ) config.myEnv.buildbot.projects
+ )
+ ) // {
+ "buildbot/ldap" = {
+ permissions = "0600";
+ user = "buildbot";
+ group = "buildbot";
+ text = config.myEnv.buildbot.ldap.password;
+ };
+ "buildbot/worker_password" = {
+ permissions = "0600";
+ user = "buildbot";
+ group = "buildbot";
+ text = config.myEnv.buildbot.workerPassword;
+ };
+ "buildbot/ssh_key" = {
+ permissions = "0600";
+ user = "buildbot";
+ group = "buildbot";
+ text = config.myEnv.buildbot.ssh_key.private;
+ };
+ "buildbot/ssh_known_hosts" = {
+ permissions = "0644";
+ user = "buildbot";
+ group = "buildbot";
+ text = ''
+ git.immae.eu ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF
+ eldiron ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF
+ phare.normalesup.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN2GomItXICXpCtCFRMT2xuerqx2nLMO/3mNUuWyzFr1
+ '';
+ };
+ };
+
+ services.filesWatcher = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
+ restart = true;
+ paths = [
+ config.secrets.fullPaths."buildbot/ldap"
+ config.secrets.fullPaths."buildbot/worker_password"
+ config.secrets.fullPaths."buildbot/ssh_key"
+ config.secrets.fullPaths."buildbot/${project.name}/environment_file"
+ ] ++ lib.attrsets.mapAttrsToList (k: v: config.secrets.fullPaths."buildbot/${project.name}/${k}") project.secrets;
+ }) config.myEnv.buildbot.projects;
+
+ systemd.slices.buildbot = {
+ description = "buildbot slice";
+ };
+
+ networking.firewall.allowedTCPPorts = lib.attrsets.mapAttrsToList (k: v: v.workerPort) config.myEnv.buildbot.projects;
+ systemd.services = lib.attrsets.mapAttrs' (k: project: lib.attrsets.nameValuePair "buildbot-${project.name}" {
+ description = "Buildbot Continuous Integration Server ${project.name}.";
+ after = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+ path = project.packages;
+ preStart = let
+ master-cfg = "${buildbot.buildbot_common}/${bb-python.pythonForBuild.sitePackages}/buildbot_common/master.cfg";
+ tac_file = pkgs.writeText "buildbot.tac" ''
+ import os
+
+ from twisted.application import service
+ from buildbot.master import BuildMaster
+
+ basedir = '${varDir}/${project.name}'
+ rotateLength = 10000000
+ maxRotatedFiles = 10
+ configfile = '${master-cfg}'
+
+ # Default umask for server
+ umask = None
+
+ # if this is a relocatable tac file, get the directory containing the TAC
+ if basedir == '.':
+ import os
+ basedir = os.path.abspath(os.path.dirname(__file__))
+
+ # note: this line is matched against to check that this is a buildmaster
+ # directory; do not edit it.
+ application = service.Application('buildmaster')
+ from twisted.python.logfile import LogFile
+ from twisted.python.log import ILogObserver, FileLogObserver
+ logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength,
+ maxRotatedFiles=maxRotatedFiles)
+ application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
+
+ m = BuildMaster(basedir, configfile, umask)
+ m.setServiceParent(application)
+ m.log_rotation.rotateLength = rotateLength
+ m.log_rotation.maxRotatedFiles = maxRotatedFiles
+ '';
+ in ''
+ if [ ! -f ${varDir}/${project.name}/buildbot.tac ]; then
+ ${buildbot}/bin/buildbot create-master -c "${master-cfg}" "${varDir}/${project.name}"
+ rm -f ${varDir}/${project.name}/master.cfg.sample
+ rm -f ${varDir}/${project.name}/buildbot.tac
+ fi
+ ln -sf ${tac_file} ${varDir}/${project.name}/buildbot.tac
+ # different buildbots may be trying that simultaneously, add the || true to avoid complaining in case of race
+ install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_key"} ${varDir}/buildbot_key || true
+ install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ssh_known_hosts"} ${varDir}/buildbot_hosts || true
+ buildbot_secrets=${varDir}/${project.name}/secrets
+ install -m 0700 -o buildbot -g buildbot -d $buildbot_secrets
+ install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/ldap"} $buildbot_secrets/ldap
+ install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/worker_password"} $buildbot_secrets/worker_password
+ ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList
+ (k: v: "install -Dm600 -o buildbot -g buildbot -T ${config.secrets.fullPaths."buildbot/${project.name}/${k}"} $buildbot_secrets/${k}") project.secrets
+ )}
+ ${buildbot}/bin/buildbot upgrade-master ${varDir}/${project.name}
+ '';
+ environment = let
+ HOME = "${varDir}/${project.name}";
+ PYTHONPATH = "${bb-python.withPackages (self:
+ buildbot.common_packages self ++
+ [ (buildbot.buildbot_config project) ]
+ )}/${bb-python.sitePackages}${if project.pythonPathHome then ":${varDir}/${project.name}/.local/${bb-python.sitePackages}" else ""}";
+ in { inherit PYTHONPATH HOME; };
+
+ serviceConfig = {
+ Slice = "buildbot.slice";
+ Type = "forking";
+ User = "buildbot";
+ Group = "buildbot";
+ RuntimeDirectory = "buildbot";
+ RuntimeDirectoryPreserve = "yes";
+ StateDirectory = "buildbot";
+ SupplementaryGroups = "keys";
+ WorkingDirectory = "${varDir}/${project.name}";
+ ExecStart = "${buildbot}/bin/buildbot start";
+ EnvironmentFile = config.secrets.fullPaths."buildbot/${project.name}/environment_file";
+ };
+ }) config.myEnv.buildbot.projects;
+ };
+}
diff --git a/systems/eldiron/coturn.nix b/systems/eldiron/coturn.nix
new file mode 100644
index 0000000..d8b02c5
--- /dev/null
+++ b/systems/eldiron/coturn.nix
@@ -0,0 +1,73 @@
+{ config, name, lib, pkgs, ... }:
+{
+ config = lib.mkIf (name == "eldiron") {
+ myServices.chatonsProperties.services.coturn = {
+ file.datetime = "2022-08-27T19:00:00";
+ service = {
+ name = "Coturn";
+ description = "coturn TURN server";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "FULL";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "coturn";
+ website = "https://github.com/coturn/coturn";
+ license.url = "https://github.com/coturn/coturn/blob/master/LICENSE";
+ license.name = "3-Clause BSD License";
+ version = pkgs.coturn.version;
+ source.url = "https://github.com/coturn/coturn";
+ };
+ };
+ networking.firewall.allowedTCPPorts = [
+ config.services.coturn.alt-listening-port
+ config.services.coturn.alt-tls-listening-port
+ config.services.coturn.listening-port
+ config.services.coturn.tls-listening-port
+ ];
+ networking.firewall.allowedTCPPortRanges = [
+ { from = config.services.coturn.min-port; to = config.services.coturn.max-port; }
+ ];
+ networking.firewall.allowedUDPPortRanges = [
+ { from = config.services.coturn.min-port; to = config.services.coturn.max-port; }
+ ];
+ networking.firewall.allowedUDPPorts = [
+ config.services.coturn.alt-listening-port
+ config.services.coturn.alt-tls-listening-port
+ config.services.coturn.listening-port
+ config.services.coturn.tls-listening-port
+ ];
+ #users.users.turnserver.extraGroups = [ "keys" ];
+ services.coturn = {
+ enable = true;
+ no-cli = true;
+ no-tls = true;
+ no-dtls = true;
+ use-auth-secret = true;
+ lt-cred-mech = true;
+ realm = "eldiron.immae.eu";
+ extraConfig = ''
+ fingerprint
+ total-quota=0
+ bps-capacity=0
+ stale-nonce
+ no-multicast-peers
+ '';
+ static-auth-secret = config.myEnv.coturn.auth_access_key;
+ #cert = "/var/lib/acme/eldiron/fullchain.pem";
+ #pkey = "/var/lib/acme/eldiron/key.pem";
+ listening-ips = [
+ "127.0.0.1"
+ "::1"
+ ] ++ config.myEnv.servers.eldiron.ips.main.ip4
+ ++ config.myEnv.servers.eldiron.ips.main.ip6;
+ relay-ips = [
+ "127.0.0.1"
+ "::1"
+ ] ++ config.myEnv.servers.eldiron.ips.main.ip4
+ ++ config.myEnv.servers.eldiron.ips.main.ip6;
+ };
+ };
+}
diff --git a/systems/eldiron/databases/default.nix b/systems/eldiron/databases/default.nix
new file mode 100644
index 0000000..d8d3048
--- /dev/null
+++ b/systems/eldiron/databases/default.nix
@@ -0,0 +1,56 @@
+{ lib, config, secrets, ... }:
+let
+ cfg = config.myServices.databases;
+in
+{
+ options.myServices = {
+ databases.enable = lib.mkEnableOption "my databases service";
+ };
+
+ config.myServices.dns.zones."immae.eu".subdomains.db-1 = lib.mkIf cfg.enable (with config.myServices.dns.helpers; ips servers.eldiron.ips.main);
+ config.myServices.databases = lib.mkIf cfg.enable {
+
+ mariadb = {
+ enable = true;
+ ldapConfig = {
+ inherit (config.myEnv.ldap) host base;
+ inherit (config.myEnv.databases.mysql.pam) dn filter password;
+ };
+ replicationLdapConfig = {
+ inherit (config.myEnv.ldap) host base;
+ inherit (config.myEnv.servers.eldiron.ldap) dn password;
+ };
+ credentials.root = config.myEnv.databases.mysql.systemUsers.root;
+ };
+
+ openldap = {
+ accessFile = secrets.ldap-conf;
+ baseDn = config.myEnv.ldap.base;
+ rootDn = config.myEnv.ldap.root_dn;
+ rootPw = config.myEnv.ldap.root_pw;
+ enable = true;
+ };
+
+ postgresql = {
+ ldapConfig = {
+ inherit (config.myEnv.ldap) host base;
+ inherit (config.myEnv.databases.postgresql.pam) dn filter password;
+ };
+ replicationLdapConfig = {
+ inherit (config.myEnv.ldap) host base;
+ inherit (config.myEnv.servers.eldiron.ldap) dn password;
+ };
+ authorizedHosts = {
+ };
+ replicationHosts = {
+ backup-2 = {
+ ip4 = config.myEnv.servers.backup-2.ips.main.ip4;
+ ip6 = config.myEnv.servers.backup-2.ips.main.ip6;
+ };
+ };
+ enable = true;
+ };
+
+ redis.enable = true;
+ };
+}
diff --git a/systems/eldiron/databases/mariadb.nix b/systems/eldiron/databases/mariadb.nix
new file mode 100644
index 0000000..b4a6917
--- /dev/null
+++ b/systems/eldiron/databases/mariadb.nix
@@ -0,0 +1,188 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.databases.mariadb;
+in {
+ options.myServices.databases = {
+ mariadb = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable mariadb database";
+ type = lib.types.bool;
+ };
+ package = lib.mkOption {
+ type = lib.types.package;
+ default = pkgs.mariadb;
+ description = ''
+ Mariadb package to use.
+ '';
+ };
+ credentials = lib.mkOption {
+ default = {};
+ description = "Credentials";
+ type = lib.types.attrsOf lib.types.str;
+ };
+ ldapConfig = lib.mkOption {
+ description = "LDAP configuration to allow PAM identification via LDAP";
+ type = lib.types.submodule {
+ options = {
+ host = lib.mkOption { type = lib.types.str; };
+ base = lib.mkOption { type = lib.types.str; };
+ dn = lib.mkOption { type = lib.types.str; };
+ password = lib.mkOption { type = lib.types.str; };
+ filter = lib.mkOption { type = lib.types.str; };
+ };
+ };
+ };
+ replicationLdapConfig = lib.mkOption {
+ description = "LDAP configuration to allow replication";
+ type = lib.types.submodule {
+ options = {
+ host = lib.mkOption { type = lib.types.str; };
+ base = lib.mkOption { type = lib.types.str; };
+ dn = lib.mkOption { type = lib.types.str; };
+ password = lib.mkOption { type = lib.types.str; };
+ };
+ };
+ };
+ dataDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib/mysql";
+ description = ''
+ The directory where Mariadb stores its data.
+ '';
+ };
+ # Output variables
+ socketsDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/run/mysqld";
+ description = ''
+ The directory where Mariadb puts sockets.
+ '';
+ };
+ sockets = lib.mkOption {
+ type = lib.types.attrsOf lib.types.path;
+ default = {
+ mysqld = "${cfg.socketsDir}/mysqld.sock";
+ };
+ readOnly = true;
+ description = ''
+ Mariadb sockets
+ '';
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = [ config.myEnv.databases.mysql.port ];
+
+ # for adminer, ssl is implemented with mysqli only, which is
+ # currently disabled because it’s not compatible with pam.
+ # Thus we need to generate two users for each 'remote': one remote
+ # with SSL, and one localhost without SSL.
+ # User identified by LDAP:
+ # CREATE USER foo@% IDENTIFIED VIA pam USING 'mysql' REQUIRE SSL;
+ # CREATE USER foo@localhost IDENTIFIED VIA pam USING 'mysql';
+
+ # To create a user (host) for replication:
+ # CREATE USER 'host'@'%' IDENTIFIED VIA pam USING 'mysql_replication' REQUIRE SSL;
+ # GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, LOCK TABLES, SELECT, SHOW VIEW ON *.* TO 'host'@'%';
+ # (the lock/select grant permits to let the replication host handle
+ # the initial fetch of the database)
+ # % should be valid for both localhost (for cron dumps) and the origin host.
+ services.mysql = {
+ enable = true;
+ package = cfg.package;
+ dataDir = cfg.dataDir;
+ settings = {
+ mysqld = {
+ port = config.myEnv.databases.mysql.port;
+ ssl_ca = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
+ ssl_key = "${config.security.acme.certs.mysql.directory}/key.pem";
+ ssl_cert = "${config.security.acme.certs.mysql.directory}/fullchain.pem";
+
+ # for replication
+ log-bin = "mariadb-bin";
+ server-id = "1";
+
+ # this introduces a small delay before storing on disk, but
+ # makes it order of magnitudes quicker
+ innodb_flush_log_at_trx_commit = "0";
+
+ # This is necessary since the default ("dialog") is not
+ # supported by php's mysqlnd plugin (in mysqli). But with that
+ # change only regular login+password schemes can work (no
+ # "fancy" authentication methods like fprintd or keys)
+ pam_use_cleartext_plugin = true;
+ };
+ };
+ };
+
+ users.users.mysql.extraGroups = [ "keys" ];
+ security.acme.certs."mysql" = {
+ group = "mysql";
+ domain = "db-1.immae.eu";
+ postRun = ''
+ systemctl restart mysql.service
+ '';
+ };
+
+ secrets.keys = {
+ "mysql/mysqldump" = {
+ permissions = "0400";
+ user = "root";
+ group = "root";
+ text = ''
+ [mysqldump]
+ user = root
+ password = ${cfg.credentials.root}
+ '';
+ };
+ "mysql/pam" = {
+ permissions = "0400";
+ user = "mysql";
+ group = "mysql";
+ text = with cfg.ldapConfig; ''
+ host ${host}
+ base ${base}
+ binddn ${dn}
+ bindpw ${password}
+ pam_filter ${filter}
+ ssl start_tls
+ '';
+ };
+ "mysql/pam_replication" = {
+ permissions = "0400";
+ user = "mysql";
+ group = "mysql";
+ text = with cfg.replicationLdapConfig; ''
+ host ${host}
+ base ${base}
+ binddn ${dn}
+ bindpw ${password}
+ pam_login_attribute cn
+ ssl start_tls
+ '';
+ };
+ };
+
+ security.pam.services = let
+ pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so";
+ in {
+ mysql = {
+ text = ''
+ # https://mariadb.com/kb/en/mariadb/pam-authentication-plugin/
+ auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"}
+ account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam"}
+ '';
+ };
+ mysql_replication = {
+ text = ''
+ auth required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"}
+ account required ${pam_ldap} config=${config.secrets.fullPaths."mysql/pam_replication"}
+ '';
+ };
+ };
+
+ };
+}
diff --git a/systems/eldiron/databases/openldap/default.nix b/systems/eldiron/databases/openldap/default.nix
new file mode 100644
index 0000000..7cd15da
--- /dev/null
+++ b/systems/eldiron/databases/openldap/default.nix
@@ -0,0 +1,304 @@
+{ lib, pkgs, config, openldap, ... }:
+let
+ cfg = config.myServices.databases.openldap;
+in
+{
+ options.myServices.databases = {
+ openldap = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable ldap";
+ type = lib.types.bool;
+ };
+ baseDn = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ Base DN for LDAP
+ '';
+ };
+ rootDn = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ Root DN
+ '';
+ };
+ rootPw = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ Root (Hashed) password
+ '';
+ };
+ accessFile = lib.mkOption {
+ type = lib.types.path;
+ description = ''
+ The file path that defines the access
+ '';
+ };
+ dataDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib/openldap/mdb";
+ description = ''
+ The directory where Openldap stores its data.
+ '';
+ };
+ socketsDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/run/openldap";
+ description = ''
+ The directory where Openldap puts sockets and pid files.
+ '';
+ };
+ # Output variables
+ pids = lib.mkOption {
+ type = lib.types.attrsOf lib.types.path;
+ default = {
+ pid = "${cfg.socketsDir}/slapd.pid";
+ args = "${cfg.socketsDir}/slapd.args";
+ };
+ readOnly = true;
+ description = ''
+ Slapd pid files
+ '';
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.ldap =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ nixpkgs.overlays = [
+ (self: super: {
+ openldap_libressl_cyrus = (self.openldap.override {
+ openssl = self.libressl;
+ cyrus_sasl = self.cyrus_sasl.overrideAttrs (old: {
+ configureFlags = old.configureFlags ++ [ "--with-configdir=/etc/sasl2" ];
+ });
+ }).overrideAttrs (old: {
+ configureFlags = old.configureFlags ++ [ "--with-cyrus-sasl" "--enable-spasswd" ];
+ });
+ })
+ ];
+
+ secrets.keys = {
+ "ldap/password" = {
+ permissions = "0400";
+ user = "openldap";
+ group = "openldap";
+ text = "${cfg.rootPw}";
+ };
+ "ldap/access" = {
+ permissions = "0400";
+ user = "openldap";
+ group = "openldap";
+ text = builtins.readFile cfg.accessFile;
+ };
+ "ldap" = {
+ permissions = "0500";
+ user = "openldap";
+ group = "openldap";
+ isDir = true;
+ };
+ };
+ users.users.openldap.extraGroups = [ "keys" ];
+ networking.firewall.allowedTCPPorts = [ 636 389 ];
+
+ security.acme.certs."ldap" = {
+ group = "openldap";
+ domain = "ldap.immae.eu";
+ postRun = ''
+ systemctl restart openldap.service
+ '';
+ };
+
+ services.filesWatcher.openldap = {
+ restart = true;
+ paths = [ config.secrets.fullPaths."ldap" ];
+ };
+
+ services.openldap = {
+ enable = true;
+ urlList = [ "ldap://" "ldaps://" ];
+ package = pkgs.openldap_libressl_cyrus;
+ settings = {
+ attrs = {
+ olcPidFile = cfg.pids.pid;
+ olcArgsFile = cfg.pids.args;
+ olcLogLevel = "none";
+ olcTLSCertificateFile = "${config.security.acme.certs.ldap.directory}/cert.pem";
+ olcTLSCertificateKeyFile = "${config.security.acme.certs.ldap.directory}/key.pem";
+ olcTLSCACertificateFile = "${config.security.acme.certs.ldap.directory}/fullchain.pem";
+ olcTLSCACertificatePath = "${pkgs.cacert.unbundled}/etc/ssl/certs/";
+ # This makes openldap crash
+ # olcTLSCipherSuite = "DEFAULT";
+ #olcSaslHost = "kerberos.immae.eu";
+ # Map sasl "dn" to ldap dn
+ #olcAuthzRegexp = ''{0}"uid=([^,]*)(,cn=IMMAE.EU)?,cn=(gssapi|gss-spnego),cn=auth" "uid=$1,ou=users,dc=immae,dc=eu"'';
+ };
+ children = {
+ "cn=module{0}" = {
+ attrs = {
+ cn = "module{0}";
+ objectClass = [ "olcModuleList" ];
+ olcModuleLoad = [ "{0}back_mdb" "{1}memberof" "{2}syncprov" ];
+ };
+ };
+ "cn=schema".includes = map (schema:
+ "${config.services.openldap.package}/etc/schema/${schema}.ldif"
+ ) [ "core" "cosine" "inetorgperson" "nis" ] ++ [
+ "${openldap.immae-ldif}"
+ ];
+ "olcDatabase={0}config" = {
+ attrs = {
+ objectClass = "olcDatabaseConfig";
+ olcDatabase = "{0}config";
+ olcAccess = ["{0}to * by * none"];
+ };
+ };
+ "olcDatabase={1}mdb" = {
+ attrs = {
+ objectClass = [ "olcDatabaseConfig" "olcMdbConfig" ];
+ olcDatabase = "{1}mdb";
+ olcDbIndex = [
+ "objectClass eq"
+ "uid pres,eq"
+ "mail pres,eq,sub"
+ "cn pres,eq,sub"
+ "sn pres,eq,sub"
+ "dc eq"
+ "member eq"
+ "memberOf eq"
+ ];
+ olcAccess = let
+ join = builtins.replaceStrings ["\n"] [" "];
+ in [
+ # First matching "to" + "by" wins
+ #### Replication needs full access
+ (join ''{0}to *
+ by dn.base="uid=ldap_replication,cn=ldap,ou=services,dc=immae,dc=eu" read
+ by * break
+ '')
+ #### Prevent modification of SASL passwords
+ (join ''{1}to attrs=userPassword val.regex="^.SASL..+"
+ by self read
+ by anonymous auth
+ by * none
+ '')
+ #### Oneself needs access to users password
+ (join ''{2}to attrs=userPassword,shadowLastChange
+ by self write
+ by anonymous auth
+ by * none
+ '')
+ #### Should be write, but disabled during migration to psql
+ (join ''{3}to attrs=immaeSshKey
+ by self read
+ by * break
+ '')
+
+ #### Anyone can auth, and I can see myself
+ (join ''{4}to *
+ by self read
+ by anonymous auth
+ by * break
+ '')
+
+ #### Specific access for phpldapadmin
+ (join ''{5}to filter="(uid=*)" attrs=entry,uid
+ by dn.base="cn=phpldapadmin,ou=services,dc=immae,dc=eu" read
+ by * break
+ '')
+
+ #### Hosts
+ # The attributes are available to every host
+ (join ''{6}to dn.one="ou=hosts,dc=immae,dc=eu"
+ by dn.subtree="ou=hosts,dc=immae,dc=eu" read
+ by dn.base="dc=immae,dc=eu" search
+ by * break
+ '')
+ #### /Hosts
+
+ #### Local services
+ # this/-* & user : all your ancestors have access to you
+ # this/memberOf/-* & user : all those whom you belong to (in a group),
+ # and their ancestors, have access to you
+ # user/immaeAccessWriteDn*/member & this : you have write access to the
+ # members of your immaeAccessDn
+ # attributes
+ # user/immaeAccessDn*/member & this : you have access to the members
+ # of your immaeAccessDn attributes
+ # user/immaeAccessReadSubtree* & this/-* : you have access to the
+ # childrens of your immaeAccessReadSubtree
+ # attributes
+ # this/memberOf/-* & user/immaeAccessReadSubtree*: you have access to
+ # the members of the childrens of your
+ # immaeAccessReadSubtree attributes
+ # http://www.openldap.org/faq/data/cache/1133.html
+ (join ''{7}to dn.subtree="dc=immae,dc=eu"
+ by dn.subtree="ou=external_services,dc=immae,dc=eu" break
+ by set.exact="this/-* & user" read
+ by set.exact="this/memberOf/-* & user" read
+ by set.exact="user/immaeAccessWriteDn*/member & this" write
+ by set.exact="user/immaeAccessDn*/member & this" read
+ by set.exact="user/immaeAccessReadSubtree* & this/-*" read
+ by set.exact="this/memberOf/-* & user/immaeAccessReadSubtree*" read
+ by users search
+ by * break
+ '')
+ #### /Local services
+
+ #### External services
+ # http://www.openldap.org/faq/data/cache/429.html
+ # FIXME: Find a way to whitelist?
+ (join ''{8}to attrs=immaeSshKey
+ by dn.subtree="ou=external_services,dc=immae,dc=eu" none
+ '')
+ (join ''{9}to dn.subtree="dc=immae,dc=eu"
+ by set.exact="this/-* & user" read
+ by set.exact="this/memberOf/-* & user" read
+ by set.exact="user/immaeAccessDn*/member & this/-*" read
+ by users search
+ by * none
+ '')
+ #### /External services
+ ];
+ olcDbDirectory = cfg.dataDir;
+ olcRootDN = cfg.rootDn;
+ olcRootPW.path = config.secrets.fullPaths."ldap/password";
+ olcSuffix = cfg.baseDn;
+ };
+ children = {
+ "olcOverlay={0}memberof" = {
+ attrs = {
+ objectClass = [ "olcOverlayConfig" "olcMemberOf" ];
+ olcOverlay = "{0}memberof";
+ };
+ };
+ "olcOverlay={1}syncprov" = {
+ attrs = {
+ objectClass = [ "olcOverlayConfig" "olcSyncProvConfig" ];
+ olcOverlay = "{1}syncprov";
+ olcSpCheckpoint = "100 10";
+ };
+ };
+ };
+ };
+ };
+ };
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "tcp" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "ldap SSL is up to date";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = ["check_tcp_ssl" "636"];
+
+ servicegroups = "webstatus-ssl";
+ _webstatus_name = "LDAP";
+ _webstatus_url = "ldap.immae.eu";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/databases/postgresql.nix b/systems/eldiron/databases/postgresql.nix
new file mode 100644
index 0000000..721059a
--- /dev/null
+++ b/systems/eldiron/databases/postgresql.nix
@@ -0,0 +1,236 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.databases.postgresql;
+in {
+ options.myServices.databases = {
+ postgresql = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable postgresql database";
+ type = lib.types.bool;
+ };
+ package = lib.mkOption {
+ type = lib.types.package;
+ default = pkgs.postgresql;
+ description = ''
+ Postgresql package to use.
+ '';
+ };
+ ldapConfig = lib.mkOption {
+ description = "LDAP configuration to allow PAM identification via LDAP";
+ type = lib.types.submodule {
+ options = {
+ host = lib.mkOption { type = lib.types.str; };
+ base = lib.mkOption { type = lib.types.str; };
+ dn = lib.mkOption { type = lib.types.str; };
+ password = lib.mkOption { type = lib.types.str; };
+ filter = lib.mkOption { type = lib.types.str; };
+ };
+ };
+ };
+ replicationLdapConfig = lib.mkOption {
+ description = "LDAP configuration to allow replication";
+ type = lib.types.submodule {
+ options = {
+ host = lib.mkOption { type = lib.types.str; };
+ base = lib.mkOption { type = lib.types.str; };
+ dn = lib.mkOption { type = lib.types.str; };
+ password = lib.mkOption { type = lib.types.str; };
+ };
+ };
+ };
+ authorizedHosts = lib.mkOption {
+ default = {};
+ description = "Hosts to allow connections from";
+ type = lib.types.attrsOf (lib.types.listOf (lib.types.submodule {
+ options = {
+ method = lib.mkOption {
+ default = "md5";
+ type = lib.types.str;
+ };
+ username = lib.mkOption {
+ default = "all";
+ type = lib.types.str;
+ };
+ database = lib.mkOption {
+ default = "all";
+ type = lib.types.str;
+ };
+ ip4 = lib.mkOption {
+ default = [];
+ type = lib.types.listOf lib.types.str;
+ };
+ ip6 = lib.mkOption {
+ default = [];
+ type = lib.types.listOf lib.types.str;
+ };
+ };
+ }));
+ };
+ replicationHosts = lib.mkOption {
+ default = {};
+ description = "Hosts to allow replication from";
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ ip4 = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ };
+ ip6 = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ };
+ };
+ });
+ };
+ # Output variables
+ socketsDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/run/postgresql";
+ description = ''
+ The directory where Postgresql puts sockets.
+ '';
+ readOnly = true;
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = [ 5432 ];
+
+ security.acme.certs."postgresql" = {
+ group = "postgres";
+ domain = "db-1.immae.eu";
+ postRun = ''
+ systemctl reload postgresql.service
+ '';
+ };
+
+ systemd.services.postgresql.serviceConfig = {
+ SupplementaryGroups = "keys";
+ ExecStartPre = [ ("+" + (pkgs.writeShellScript "postgresql-fix-cert" ''
+ # postgresql complains:
+ # private key file "${config.security.acme.certs.postgresql.directory}/key.pem" must be owned by the database user or root
+ cp -f "${config.security.acme.certs.postgresql.directory}/key.pem" "${config.services.postgresql.dataDir}/key.pem"
+ chown postgres:postgres "${config.services.postgresql.dataDir}/key.pem"
+ chmod go-r "${config.services.postgresql.dataDir}/key.pem"
+ '')) ];
+ };
+ systemd.services.postgresql.postStart = lib.mkAfter ''
+ # This line is already defined in 19.09
+ PSQL="psql --port=5432"
+
+ ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _: ''
+ $PSQL -tAc "SELECT 1 FROM pg_roles WHERE rolname='${role}'" \
+ | grep -q 1 \
+ || $PSQL -tAc 'CREATE USER "${role}" WITH REPLICATION'
+ '') cfg.replicationHosts)}
+
+ ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (role: _:
+ let
+ sname = builtins.replaceStrings ["-"] ["_"] role;
+ in
+ ''
+ $PSQL -tAc "SELECT 1 FROM pg_replication_slots WHERE slot_name='${sname}'" \
+ | grep -q 1 \
+ || $PSQL -tAc "SELECT * FROM pg_create_physical_replication_slot('${sname}')"
+ '') cfg.replicationHosts)}
+ '';
+
+ services.postgresql = {
+ enable = true;
+ package = cfg.package;
+ enableTCPIP = true;
+ checkConfig = false;
+ logLinePrefix = "%h %q%u@%d "; # Default: '%m [%p] ', already stored independently by journald. %h needed for fail2ban
+ settings = {
+ max_connections = 300;
+ wal_level = "logical";
+ shared_buffers = "512MB";
+ work_mem = "10MB";
+ max_wal_size = "1GB";
+ min_wal_size = "80MB";
+ log_timezone = "Europe/Paris";
+ datestyle = "iso, mdy";
+ timezone = "Europe/Paris";
+ lc_messages = "en_US.UTF-8";
+ lc_monetary = "en_US.UTF-8";
+ lc_numeric = "en_US.UTF-8";
+ lc_time = "en_US.UTF-8";
+ default_text_search_config = "pg_catalog.english";
+ # this introduces a small delay before storing on disk, but
+ # makes it order of magnitudes quicker
+ synchronous_commit = "off";
+ ssl = "on";
+ ssl_cert_file = "${config.security.acme.certs.postgresql.directory}/fullchain.pem";
+ ssl_key_file = "${config.services.postgresql.dataDir}/key.pem";
+ };
+ authentication = let
+ hosts = builtins.concatStringsSep "\n" (
+ lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v:
+ map (ip6: "hostssl ${v.database} ${v.username} ${ip6} ${v.method}") v.ip6
+ ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4
+ ) vs) cfg.authorizedHosts
+ ));
+ replication = builtins.concatStringsSep "\n" (
+ lib.lists.flatten (lib.mapAttrsToList (k: v:
+ map (ip6: "hostssl replication ${k} ${ip6}/128 pam pamservice=postgresql_replication") v.ip6
+ ++ map (ip4: "hostssl replication ${k} ${ip4}/32 pam pamservice=postgresql_replication") v.ip4
+ ) cfg.replicationHosts
+ ));
+ in ''
+ local all postgres ident
+ local all all md5
+ ${hosts}
+ hostssl all all all pam
+ ${replication}
+ '';
+ };
+
+ secrets.keys = {
+ "postgresql/pam" = {
+ permissions = "0400";
+ group = "postgres";
+ user = "postgres";
+ text = with cfg.ldapConfig; ''
+ host ${host}
+ base ${base}
+ binddn ${dn}
+ bindpw ${password}
+ pam_filter ${filter}
+ ssl start_tls
+ '';
+ };
+ "postgresql/pam_replication" = {
+ permissions = "0400";
+ group = "postgres";
+ user = "postgres";
+ text = with cfg.replicationLdapConfig; ''
+ host ${host}
+ base ${base}
+ binddn ${dn}
+ bindpw ${password}
+ pam_login_attribute cn
+ ssl start_tls
+ '';
+ };
+ };
+
+ security.pam.services = let
+ pam_ldap = "${pkgs.pam_ldap}/lib/security/pam_ldap.so";
+ in {
+ postgresql = {
+ text = ''
+ auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"}
+ account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam"}
+ '';
+ };
+ postgresql_replication = {
+ text = ''
+ auth required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"}
+ account required ${pam_ldap} config=${config.secrets.fullPaths."postgresql/pam_replication"}
+ '';
+ };
+ };
+ };
+}
+
diff --git a/systems/eldiron/databases/redis.nix b/systems/eldiron/databases/redis.nix
new file mode 100644
index 0000000..1f57aa9
--- /dev/null
+++ b/systems/eldiron/databases/redis.nix
@@ -0,0 +1,138 @@
+{ lib, config, pkgs, ... }:
+let
+ cfg = config.myServices.databases.redis;
+in {
+ options.myServices.databases.redis = {
+ enable = lib.mkOption {
+ default = false;
+ example = true;
+ description = "Whether to enable redis database";
+ type = lib.types.bool;
+ };
+ socketsDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/run/redis";
+ description = ''
+ The directory where Redis puts sockets.
+ '';
+ };
+ # Output variables
+ sockets = lib.mkOption {
+ type = lib.types.attrsOf lib.types.path;
+ default = {
+ redis = "${cfg.socketsDir}/redis.sock";
+ };
+ readOnly = true;
+ description = ''
+ Redis sockets
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ users.users.redis.uid = config.ids.uids.redis;
+ users.groups.redis.gid = config.ids.gids.redis;
+ services.redis.servers."" = {
+ enable = true;
+ bind = "127.0.0.1";
+ unixSocket = cfg.sockets.redis;
+ unixSocketPerm = 777;
+ maxclients = 1024;
+ };
+ systemd.services.redis.serviceConfig.Slice = "redis.slice";
+ systemd.services.redis.serviceConfig.RuntimeDirectoryMode = lib.mkForce "0755";
+ services.redis.servers."php-sessions" = {
+ enable = true;
+ maxclients = 1024;
+ unixSocketPerm = 777;
+ user = "wwwrun";
+ };
+
+ services.spiped = {
+ enable = true;
+ config.redis = {
+ decrypt = true;
+ source = "0.0.0.0:16379";
+ target = "/run/redis/redis.sock";
+ keyfile = config.secrets.fullPaths."redis/spiped_keyfile";
+ };
+ };
+ systemd.services.spiped_redis = {
+ description = "Secure pipe 'redis'";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+
+ serviceConfig = {
+ Slice = "redis.slice";
+ Restart = "always";
+ User = "spiped";
+ PermissionsStartOnly = true;
+ SupplementaryGroups = "keys";
+ };
+
+ script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`";
+ };
+
+ #services.filesWatcher.predixy = {
+ # restart = true;
+ # paths = [ config.secrets.fullPaths."redis/predixy.conf" ];
+ #};
+
+ networking.firewall.allowedTCPPorts = [ 16379 ];
+ secrets.keys = {
+ #"redis/predixy.conf" = {
+ # user = "redis";
+ # group = "redis";
+ # permissions = "0400";
+ # text = ''
+ # Name Predixy
+ # Bind 127.0.0.1:7617
+ # ClientTimeout 300
+ # WorkerThreads 1
+
+ # Authority {
+ # Auth "${config.myEnv.databases.redis.predixy.read}" {
+ # Mode read
+ # }
+ # }
+
+ # StandaloneServerPool {
+ # Databases 16
+ # RefreshMethod fixed
+ # Group shard001 {
+ # + ${config.myEnv.databases.redis.socket}
+ # }
+ # }
+ # '';
+ #};
+ "redis/spiped_keyfile" = {
+ user = "spiped";
+ group = "spiped";
+ permissions = "0400";
+ text = config.myEnv.databases.redis.spiped_key;
+ };
+ };
+
+ systemd.slices.redis = {
+ description = "Redis slice";
+ };
+
+ #systemd.services.predixy = {
+ # description = "Redis proxy";
+ # wantedBy = [ "multi-user.target" ];
+ # after = [ "redis.service" ];
+
+ # serviceConfig = {
+ # Slice = "redis.slice";
+ # User = "redis";
+ # Group = "redis";
+ # SupplementaryGroups = "keys";
+ # Type = "simple";
+
+ # ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.fullPaths."redis/predixy.conf"}";
+ # };
+
+ #};
+ };
+}
+
diff --git a/systems/eldiron/dns.nix b/systems/eldiron/dns.nix
new file mode 100644
index 0000000..486fcc1
--- /dev/null
+++ b/systems/eldiron/dns.nix
@@ -0,0 +1,290 @@
+{ lib, pkgs, config, dns-nix, ... }:
+{
+ options.myServices.dns = {
+ enable = lib.mkEnableOption "enable DNS resolver";
+ helpers = lib.mkOption {
+ readOnly = true;
+ description = ''
+ Some useful constants or functions for zones definition
+ '';
+ default = rec {
+ servers = config.myEnv.servers;
+ ips = i: { A = i.ip4; AAAA = i.ip6; };
+ letsencrypt = [ { tag = "issue"; value = "letsencrypt.org"; issuerCritical = false; } ];
+ toKV = a: builtins.concatStringsSep ";" (builtins.attrValues (builtins.mapAttrs (n: v: "${n}=${v}") a));
+ mailMX = {
+ hasEmail = true;
+ subdomains = let
+ mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers;
+ in
+ lib.mapAttrs' (n: v: lib.nameValuePair v.mx.subdomain (ips v.ips.main)) mxes;
+ };
+ zoneHeader = {
+ TTL = 3*60*60;
+ SOA = {
+ # yyyymmdd?? (increment ?? at each change)
+ serial = 2022121902; # Don't change this value, it is replaced automatically!
+ refresh = 10800;
+ retry = 3600;
+ expire = 604800;
+ minimum = 10800; # negative cache ttl
+ adminEmail = "hostmaster@immae.eu"; #email-address s/@/./
+ nameServer = "ns1.immae.eu.";
+ };
+ };
+ mailSend = {
+ # DKIM
+ subdomains._domainkey.subdomains.eldiron.TXT = [
+ (toKV config.myEnv.mail.dkim.eldiron.public)
+ ];
+ # old key, may still be used by verifiers
+ subdomains._domainkey.subdomains.immae_eu.TXT = [
+ (toKV config.myEnv.mail.dkim.immae_eu.public)
+ ];
+ };
+ mailCommon = name: {
+ MX = let
+ mxes = lib.filterAttrs (n: v: v ? mx && v.mx.enable) servers;
+ in
+ lib.mapAttrsToList (n: v: { preference = v.mx.priority; exchange = "${v.mx.subdomain}.${name}."; }) mxes;
+
+ # https://tools.ietf.org/html/rfc6186
+ SRV = [
+ { service = "submission"; proto = "tcp"; priority = 0; weight = 1; port = 587; target = "smtp.immae.eu."; }
+ { service = "submissions"; proto = "tcp"; priority = 0; weight = 1; port = 465; target = "smtp.immae.eu."; }
+
+ { service = "imap"; proto = "tcp"; priority = 0; weight = 1; port = 143; target = "imap.immae.eu."; }
+ { service = "imaps"; proto = "tcp"; priority = 0; weight = 1; port = 993; target = "imap.immae.eu."; }
+ { service = "sieve"; proto = "tcp"; priority = 0; weight = 1; port = 4190; target = "imap.immae.eu."; }
+
+ { service = "pop3"; proto = "tcp"; priority = 10; weight = 1; port = 110; target = "pop3.immae.eu."; }
+ { service = "pop3s"; proto = "tcp"; priority = 10; weight = 1; port = 995; target = "pop3.immae.eu."; }
+ ];
+
+ subdomains = {
+ # MTA-STS
+ # https://blog.delouw.ch/2018/12/16/using-mta-sts-to-enhance-email-transport-security-and-privacy/
+ # https://support.google.com/a/answer/9261504
+ _mta-sts.TXT = [ (toKV { v = "STSv1"; id = "20200109150200Z"; }) ]; # Don't change this value, it is updated automatically!
+ _tls.subdomains._smtp.TXT = [ (toKV { v = "TLSRPTv1"; "rua" = "mailto:postmaster+mta-sts@immae.eu"; }) ];
+ mta-sts = ips servers.eldiron.ips.main;
+
+ # DMARC
+ _dmarc.TXT = [ (toKV { v = "DMARC1"; p = "none"; adkim = "r"; aspf = "r"; fo = "1"; rua = "mailto:postmaster+rua@immae.eu"; ruf = "mailto:postmaster+ruf@immae.eu"; }) ];
+ };
+
+ # SPF
+ TXT = [ (toKV { v = "spf1 mx ~all"; }) ];
+ };
+ };
+ };
+ zones = lib.mkOption {
+ type = lib.types.attrsOf (dns-nix.lib.types.zone.substSubModules (
+ dns-nix.lib.types.zone.getSubModules ++ [
+ ({ name, ... }: {
+ options = {
+ hasEmail = lib.mkEnableOption "This domain has e-mails configuration";
+ emailPolicies = lib.mkOption {
+ default = {};
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ receive = lib.mkEnableOption "Configure this domain to receive e-mail";
+ };
+ });
+ apply = builtins.mapAttrs (n: v: v // {
+ domain = name;
+ fqdn = if n == "" then name else "${n}.${name}";
+ });
+ };
+ extraConfig = lib.mkOption {
+ type = lib.types.lines;
+ description = "Extra zone configuration for bind";
+ example = ''
+ notify yes;
+ '';
+ default = "";
+ };
+ slaves = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ description = "NS slave groups of this zone";
+ default = [];
+ };
+ ns = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [];
+ };
+ };
+ })
+ ]));
+ apply = let
+ toNS = n: builtins.map (d: "${d}.") (builtins.concatMap (s: builtins.attrNames config.myEnv.dns.ns."${s}") n);
+ in
+ builtins.mapAttrs (n: v: v // { NS = v.NS or [] ++ toNS (v.ns); });
+ default = {};
+ description = ''
+ attrset of zones to configure
+ '';
+ };
+ };
+ config = let
+ cfg = config.services.bind;
+ in lib.mkIf config.myServices.dns.enable {
+ myServices.chatonsProperties.hostings.dns-secondaire = {
+ file.datetime = "2022-08-22T02:00:00";
+ hosting = {
+ name = "DNS secondaire";
+ description = "DNS secondaire";
+ website = "ns1.immae.eu";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "bind9";
+ website = pkgs.bind.meta.homepage;
+ license.url = pkgs.bind.meta.license.url;
+ license.name = pkgs.bind.meta.license.fullName;
+ version = pkgs.bind.version;
+ source.url = "https://www.isc.org/download/";
+ };
+ };
+ myServices.dns.zones = with config.myServices.dns.helpers; {
+ "imsite.eu" = lib.mkMerge [
+ zoneHeader
+ (ips servers.eldiron.ips.main)
+ {
+ ns = [ "immae" ];
+ CAA = letsencrypt;
+ }
+ ];
+ "immae.dev" = lib.mkMerge [
+ {
+ extraConfig = ''
+ notify yes;
+ '';
+ slaves = [ "raito" ];
+ }
+ zoneHeader
+ (ips servers.eldiron.ips.integration)
+ {
+ ns = [ "immae" "raito" ];
+ CAA = letsencrypt;
+ }
+ ];
+ "immae.eu" = lib.mkMerge [
+ {
+ extraConfig = ''
+ notify yes;
+ '';
+ slaves = [ "raito" ];
+ }
+ zoneHeader
+ (ips servers.eldiron.ips.production)
+ {
+ ns = [ "immae" "raito" ];
+ CAA = letsencrypt;
+
+ # ns1 has glue records in gandi.net
+ subdomains.ns1 = ips servers.eldiron.ips.main;
+ # raito / kurisu.dual.lahfa.xyz ; replace with eldiron in case of problem
+ subdomains.ns2.A = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip4;
+ subdomains.ns2.AAAA = builtins.map (address: { inherit address; ttl = 600; }) servers.eldiron.ips.main.ip6;
+ }
+ {
+ # Machines local users
+ emailPolicies.localhost.receive = false;
+ subdomains.localhost = lib.mkMerge [ (mailCommon "immae.eu") mailSend ];
+ emailPolicies.eldiron.receive = true;
+ subdomains.eldiron = lib.mkMerge [ (mailCommon "immae.eu") mailSend ];
+ }
+ {
+ # For each server "server" and each server ip group "ipgroup",
+ # define ipgroup.server.immae.eu
+ # "main" is set as server.immae.eu instead
+ # if main has an "alias", it is duplicated with this alias.
+ # If the server is a vm, use the v.immae.eu namespace (only main is created)
+ subdomains = let
+ vms = lib.filterAttrs (n: v: v.isVm) servers;
+ bms = lib.filterAttrs (n: v: !v.isVm) servers;
+ toIps = type: builtins.mapAttrs (n: v: ips v.ips."${type}");
+ in
+ lib.mkMerge [
+ (toIps "main" bms)
+
+ { v.subdomains = toIps "main" vms; }
+
+ (lib.mapAttrs (_: v: {
+ subdomains = lib.mapAttrs'
+ (n': v': lib.nameValuePair "${if v'.alias == null then n' else v'.alias}" (ips v'))
+ (lib.filterAttrs (n': v': n' != "main" || v'.alias != null) v.ips);
+ }) bms)
+ ];
+ }
+ {
+ # Outils
+ subdomains = {
+ status = ips servers.monitoring-1.ips.main;
+ };
+ }
+ ];
+ };
+ networking.firewall.allowedUDPPorts = [ 53 ];
+ networking.firewall.allowedTCPPorts = [ 53 ];
+ users.users.named.extraGroups = [ "keys" ];
+ services.bind = {
+ enable = true;
+ cacheNetworks = ["any"];
+ extraOptions = ''
+ allow-recursion { 127.0.0.1; };
+ allow-transfer { none; };
+
+ notify-source ${lib.head config.myEnv.servers.eldiron.ips.main.ip4};
+ notify-source-v6 ${lib.head config.myEnv.servers.eldiron.ips.main.ip6};
+ version none;
+ hostname none;
+ server-id none;
+ '';
+ zones =
+ builtins.mapAttrs (name: v: {
+ master = true;
+ extraConfig = v.extraConfig;
+ masters = [];
+ slaves =
+ lib.flatten (map (n: builtins.attrValues config.myEnv.dns.ns.${n}) v.slaves);
+ file = pkgs.runCommand "${name}.zone" {
+ text = v;
+ passAsFile = [ "text" ];
+ # Automatically change the increment when relevant change
+ # happened (both serial and mta-sts)
+ } ''
+ mv "$textPath" $out
+ increment=$(( 100*($(date -u +%-H) * 60 + $(date -u +%-M))/1440 ))
+ sed -i -e "s/2022121902/$(date -u +%Y%m%d)$increment/g" $out
+ sed -i -e "s/20200109150200Z/$(date -u +%Y%m%d%H%M%SZ)/g" $out
+ '';
+ }) config.myServices.dns.zones;
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "dns" ];
+ myServices.monitoring.fromMasterObjects.service = lib.mkMerge (lib.mapAttrsToList (name: z:
+ lib.optional (builtins.elem "immae" z.ns) {
+ service_description = "eldiron dns is active and authoritative for ${name}";
+ host_name = config.hostEnv.fqdn;
+ use = "dns-service";
+ check_command = ["check_dns" name "-A"];
+
+ servicegroups = "webstatus-dns";
+ _webstatus_name = name;
+ } ++
+ lib.optional (builtins.elem "raito" z.ns) {
+ service_description = "raito dns is active and authoritative for ${name}";
+ host_name = config.hostEnv.fqdn;
+ use = "dns-service";
+ check_command = ["check_external_dns" "kurisu.dual.lahfa.xyz" name "-A"];
+
+ servicegroups = "webstatus-dns";
+ _webstatus_name = "${name} (Secondary DNS Raito)";
+ }
+ ) config.myServices.dns.zones);
+ };
+}
diff --git a/systems/eldiron/duply_backup.nix b/systems/eldiron/duply_backup.nix
new file mode 100644
index 0000000..590d125
--- /dev/null
+++ b/systems/eldiron/duply_backup.nix
@@ -0,0 +1,151 @@
+{ lib, pkgs, config, name, ... }:
+
+let
+ cfg = config.myEnv.backup;
+ varDir = "/var/lib/duply";
+ duplyProfile = profile: remote: prefix: ''
+ GPG_PW="${cfg.password}"
+ TARGET="${cfg.remotes.${remote}.remote profile.bucket}${prefix}"
+ export AWS_ACCESS_KEY_ID="${cfg.remotes.${remote}.accessKeyId}"
+ export AWS_SECRET_ACCESS_KEY="${cfg.remotes.${remote}.secretAccessKey}"
+ SOURCE="${profile.rootDir}"
+ FILENAME=".duplicity-ignore"
+ DUPL_PARAMS="$DUPL_PARAMS --exclude-if-present '$FILENAME'"
+ VERBOSITY=4
+ ARCH_DIR="${varDir}/caches"
+
+ # Do a full backup after 1 month
+ MAX_FULLBKP_AGE=1M
+ DUPL_PARAMS="$DUPL_PARAMS --allow-source-mismatch --exclude-other-filesystems --full-if-older-than $MAX_FULLBKP_AGE "
+ # Backups older than 2months are deleted
+ MAX_AGE=2M
+ # Keep 2 full backups
+ MAX_FULL_BACKUPS=2
+ MAX_FULLS_WITH_INCRS=2
+ '';
+ action = "bkp_purge_purgeFull_purgeIncr";
+ varName = k: remoteName:
+ if remoteName == "eriomem" then k else remoteName + "_" + k;
+in
+{
+ options = {
+ services.duplyBackup.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable remote backups.
+ '';
+ };
+ services.duplyBackup.profiles = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ rootDir = lib.mkOption {
+ type = lib.types.path;
+ description = ''
+ Path to backup
+ '';
+ };
+ bucket = lib.mkOption {
+ type = lib.types.str;
+ default = "immae-${name}";
+ description = ''
+ Bucket to use
+ '';
+ };
+ remotes = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = ["eriomem"];
+ description = ''
+ Remotes to use for backup
+ '';
+ };
+ excludeFile = lib.mkOption {
+ type = lib.types.lines;
+ default = "";
+ description = ''
+ Content to put in exclude file
+ '';
+ };
+ };
+ });
+ };
+ };
+
+ config = lib.mkIf config.services.duplyBackup.enable {
+ system.activationScripts.backup = ''
+ install -m 0700 -o root -g root -d ${varDir} ${varDir}/caches
+ '';
+ secrets.keys = lib.listToAttrs (lib.flatten (lib.mapAttrsToList (k: v:
+ map (remote: [
+ (lib.nameValuePair "backup/${varName k remote}/conf" {
+ permissions = "0400";
+ text = duplyProfile v remote "${k}/";
+ })
+ (lib.nameValuePair "backup/${varName k remote}/exclude" {
+ permissions = "0400";
+ text = v.excludeFile;
+ })
+ (lib.nameValuePair "backup/${varName k remote}" {
+ permissions = "0500";
+ isDir = true;
+ })
+ ]) v.remotes) config.services.duplyBackup.profiles));
+
+ services.cron = {
+ enable = true;
+ systemCronJobs = let
+ backups = pkgs.writeScript "backups" ''
+ #!${pkgs.stdenv.shell}
+
+ ${builtins.concatStringsSep "\n" (lib.flatten (lib.mapAttrsToList (k: v:
+ map (remote: [
+ ''
+ touch ${varDir}/${varName k remote}.log
+ ${pkgs.duply}/bin/duply ${config.secrets.fullPaths."backup/${varName k remote}"}/ ${action} --force >> ${varDir}/${varName k remote}.log
+ [[ $? = 0 ]] || echo -e "Error when doing backup for ${varName k remote}, see above\n---------------------------------------" >&2
+ ''
+ ]) v.remotes
+ ) config.services.duplyBackup.profiles))}
+ '';
+ in
+ [
+ "0 2 * * * root ${backups}"
+ ];
+
+ };
+
+ security.pki.certificateFiles = [
+ (pkgs.fetchurl {
+ url = "http://downloads.e.eriomem.net/eriomemca.pem";
+ sha256 = "1ixx4c6j3m26j8dp9a3dkvxc80v1nr5aqgmawwgs06bskasqkvvh";
+ })
+ ];
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "eriomem" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "eriomem backup is up and not full";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = "check_backup_eriomem";
+
+ check_interval = 120;
+ notification_interval = "1440";
+
+ servicegroups = "webstatus-backup";
+ }
+
+ {
+ service_description = "ovh backup is up and not full";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = "check_ok";
+
+ check_interval = 120;
+ notification_interval = "1440";
+
+ servicegroups = "webstatus-backup";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/ejabberd/default.nix b/systems/eldiron/ejabberd/default.nix
new file mode 100644
index 0000000..5268516
--- /dev/null
+++ b/systems/eldiron/ejabberd/default.nix
@@ -0,0 +1,141 @@
+{ lib, pkgs, config, mypackages-lib, ... }:
+let
+ cfg = config.myServices.ejabberd;
+in
+{
+ options.myServices = {
+ ejabberd.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable ejabberd service.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.fr" = with config.myServices.dns.helpers;
+ lib.mkMerge [
+ {
+ extraConfig = ''
+ notify yes;
+ '';
+ slaves = [ "raito" ];
+ emailPolicies."".receive = true;
+ }
+ zoneHeader
+ mailMX
+ (mailCommon "immae.fr")
+ (ips servers.eldiron.ips.main)
+ {
+ ns = [ "immae" "raito" ];
+ CAA = letsencrypt;
+ subdomains.www = ips servers.eldiron.ips.production;
+ subdomains.im = ips servers.eldiron.ips.main;
+ subdomains.conference = ips servers.eldiron.ips.main;
+ subdomains.pubsub = ips servers.eldiron.ips.main;
+ subdomains.proxy = ips servers.eldiron.ips.main;
+ subdomains.upload = ips servers.eldiron.ips.main;
+ subdomains._xmppconnect.TXT = [
+ "_xmpp-client-xbosh=https://im.immae.fr/bosh"
+ "_xmpp-client-websocket=wss://im.immae.fr/ws"
+ ];
+ }
+ ];
+
+ security.acme.certs = {
+ "ejabberd" = {
+ group = "ejabberd";
+ domain = "eldiron.immae.eu";
+ keyType = "rsa4096";
+ postRun = ''
+ systemctl restart ejabberd.service
+ '';
+ extraDomainNames = [ "immae.fr" "conference.immae.fr" "proxy.immae.fr" "pubsub.immae.fr" "upload.immae.fr" ];
+ };
+ };
+ networking.firewall.allowedTCPPorts = [ 5222 5269 ];
+ myServices.websites.tools.im.enable = true;
+ systemd.services.ejabberd.postStop = ''
+ rm /var/log/ejabberd/erl_crash*.dump
+ '';
+ secrets.keys = {
+ "ejabberd/psql.yml" = {
+ permissions = "0400";
+ user = "ejabberd";
+ group = "ejabberd";
+ text = ''
+ sql_type: pgsql
+ sql_server: "localhost"
+ sql_database: "${config.myEnv.jabber.postgresql.database}"
+ sql_username: "${config.myEnv.jabber.postgresql.user}"
+ sql_password: "${config.myEnv.jabber.postgresql.password}"
+ '';
+ };
+ "ejabberd/host.yml" = {
+ permissions = "0400";
+ user = "ejabberd";
+ group = "ejabberd";
+ text = ''
+ host_config:
+ "immae.fr":
+ domain_certfile: "${config.security.acme.certs.ejabberd.directory}/full.pem"
+ auth_method: [ldap]
+ ldap_servers: ["${config.myEnv.jabber.ldap.host}"]
+ ldap_encrypt: tls
+ ldap_rootdn: "${config.myEnv.jabber.ldap.dn}"
+ ldap_password: "${config.myEnv.jabber.ldap.password}"
+ ldap_base: "${config.myEnv.jabber.ldap.base}"
+ ldap_uids:
+ uid: "%u"
+ immaeXmppUid: "%u"
+ ldap_filter: "${config.myEnv.jabber.ldap.filter}"
+ '';
+ };
+ };
+ users.users.ejabberd.extraGroups = [ "keys" ];
+ services.ejabberd = {
+ package = pkgs.ejabberd.override { withPgsql = true; };
+ imagemagick = true;
+ enable = true;
+ ctlConfig = ''
+ ERLANG_NODE=ejabberd@localhost
+ '';
+ configFile = pkgs.runCommand "ejabberd.yml" {
+ certificatePrivateKeyAndFullChain = "${config.security.acme.certs.ejabberd.directory}/full.pem";
+ certificateCA = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
+ sql_config_file = config.secrets.fullPaths."ejabberd/psql.yml";
+ host_config_file = config.secrets.fullPaths."ejabberd/host.yml";
+ } ''
+ substituteAll ${./ejabberd.yml} $out
+ '';
+ };
+ secrets.keys."postfix/scripts/ejabberd-env" = {
+ user = "postfixscripts";
+ group = "root";
+ permissions = "0400";
+ text = builtins.toJSON {
+ jid = "notify_bot@immae.fr";
+ password = "{{ .xmpp.notify_bot }}";
+ };
+ };
+ services.postfix.extraAliases = let
+ nixpkgs = builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs/archive/840c782d507d60aaa49aa9e3f6d0b0e780912742.tar.gz";
+ sha256 = "14q3kvnmgz19pgwyq52gxx0cs90ddf24pnplmq33pdddbb6c51zn";
+ };
+ pkgs' = import nixpkgs { inherit (pkgs) system; overlays = []; };
+ warn_xmpp_email = scriptEnv: pkgs'.runCommand "warn_xmpp_email" {
+ inherit scriptEnv;
+ pythonEnv = pkgs'.python3.withPackages (ps: [
+ ps.unidecode ps.slixmpp
+ ]);
+ } ''
+ substituteAll ${./warn_xmpp_email.py} $out
+ chmod a+x $out
+ '';
+ in ''
+ ejabberd: "|${mypackages-lib.postfixScript pkgs "ejabberd" (warn_xmpp_email config.secrets.fullPaths."postfix/scripts/ejabberd-env")}"
+ '';
+ };
+}
diff --git a/systems/eldiron/ejabberd/ejabberd.yml b/systems/eldiron/ejabberd/ejabberd.yml
new file mode 100644
index 0000000..82ac35b
--- /dev/null
+++ b/systems/eldiron/ejabberd/ejabberd.yml
@@ -0,0 +1,231 @@
+###
+### ejabberd configuration file
+###
+### The parameters used in this configuration file are explained at
+###
+### https://docs.ejabberd.im/admin/configuration
+###
+### The configuration file is written in YAML.
+### *******************************************************
+### ******* !!! WARNING !!! *******
+### ******* YAML IS INDENTATION SENSITIVE *******
+### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
+### *******************************************************
+### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
+### However, ejabberd treats different literals as different types:
+###
+### - unquoted or single-quoted strings. They are called "atoms".
+### Example: dog, 'Jupiter', '3.14159', YELLOW
+###
+### - numeric literals. Example: 3, -45.0, .0
+###
+### - quoted or folded strings.
+### Examples of quoted string: "Lizzard", "orange".
+### Example of folded string:
+### > Art thou not Romeo,
+### and a Montague?
+###
+
+hosts:
+ - "immae.fr"
+
+loglevel: 4
+log_rotate_size: 10485760
+log_rotate_date: ""
+log_rotate_count: 1
+log_rate_limit: 100
+
+certfiles:
+ - "@certificatePrivateKeyAndFullChain@"
+
+listen:
+ -
+ port: 5222
+ ip: "::"
+ module: ejabberd_c2s
+ max_stanza_size: 262144
+ shaper: c2s_shaper
+ access: c2s
+ starttls_required: true
+ -
+ port: 5269
+ ip: "::"
+ module: ejabberd_s2s_in
+ max_stanza_size: 524288
+ -
+ port: 5280
+ ip: "127.0.0.1"
+ module: ejabberd_http
+ request_handlers:
+ "/admin": ejabberd_web_admin
+ "/api": mod_http_api
+ "/bosh": mod_bosh
+ "/captcha": ejabberd_captcha
+ "/upload": mod_http_upload
+ "/ws": ejabberd_http_ws
+ tls: false
+
+s2s_use_starttls: optional
+s2s_cafile: "@certificateCA@"
+
+default_db: sql
+include_config_file: @sql_config_file@
+include_config_file: @host_config_file@
+new_sql_schema: true
+
+acl:
+ admin:
+ - user: "ismael@immae.fr"
+ local:
+ user_regexp: ""
+ loopback:
+ ip:
+ - "127.0.0.0/8"
+ - "::1/128"
+ - "::FFFF:127.0.0.1/128"
+
+access_rules:
+ local:
+ - allow: local
+ c2s:
+ - deny: blocked
+ - allow
+ announce:
+ - allow: admin
+ configure:
+ - allow: admin
+ muc_admin:
+ - allow: admin
+ muc_create:
+ - allow: local
+ muc:
+ - allow
+ pubsub_createnode:
+ - allow: local
+ register:
+ - deny
+ trusted_network:
+ - allow: loopback
+
+api_permissions:
+ "console commands":
+ from:
+ - ejabberd_ctl
+ who: all
+ what: "*"
+ "admin access":
+ who:
+ - acl: admin
+ - oauth:
+ - scope: "ejabberd:admin"
+ - acl: admin
+ what:
+ - "*"
+ - "!stop"
+ - "!start"
+ "public commands":
+ who:
+ - ip:
+ - "0.0.0.0"
+ - "::"
+ what:
+ - "status"
+ - "connected_users_number"
+
+shaper:
+ normal: 1000
+ fast: 50000
+
+shaper_rules:
+ max_user_sessions: 10
+ max_user_offline_messages:
+ - 5000: admin
+ - 100
+ c2s_shaper:
+ - none: admin
+ - normal
+ s2s_shaper: fast
+
+modules:
+ mod_adhoc: {}
+ mod_admin_extra: {}
+ mod_announce:
+ access: announce
+ mod_avatar: {}
+ mod_blocking: {}
+ mod_bosh: {}
+ mod_caps: {}
+ mod_carboncopy: {}
+ mod_client_state: {}
+ mod_configure: {}
+ mod_disco: {}
+ mod_fail2ban: {}
+ mod_http_api: {}
+ mod_http_upload:
+ put_url: "https://im.immae.fr/upload"
+ custom_headers:
+ "Access-Control-Allow-Origin": "*"
+ "Access-Control-Allow-Methods": "OPTIONS, HEAD, GET, PUT, POST"
+ "Access-Control-Allow-Headers": "Content-Type"
+ mod_last: {}
+ mod_mam:
+ default: always
+ mod_muc:
+ access:
+ - allow
+ access_admin:
+ - allow: admin
+ access_create: muc_create
+ access_persistent: muc_create
+ default_room_options:
+ mam: true
+ mod_muc_admin: {}
+ mod_offline:
+ access_max_user_messages: max_user_offline_messages
+ mod_ping: {}
+ mod_privacy: {}
+ mod_private: {}
+ mod_proxy65:
+ access: local
+ max_connections: 5
+ mod_pubsub:
+ access_createnode: pubsub_createnode
+ plugins:
+ - "flat"
+ - "pep"
+ force_node_config:
+ ## Change from "whitelist" to "open" to enable OMEMO support
+ ## See https://github.com/processone/ejabberd/issues/2425
+ "eu.siacs.conversations.axolotl.*":
+ access_model: open
+ ## Avoid buggy clients to make their bookmarks public
+ "storage:bookmarks":
+ access_model: whitelist
+ mod_push: {}
+ mod_push_keepalive: {}
+ mod_register:
+ ## Only accept registration requests from the "trusted"
+ ## network (see access_rules section above).
+ ## Think twice before enabling registration from any
+ ## address. See the Jabber SPAM Manifesto for details:
+ ## https://github.com/ge0rg/jabber-spam-fighting-manifesto
+ ip_access: trusted_network
+ access: register
+ mod_roster:
+ versioning: true
+ mod_s2s_dialback: {}
+ mod_shared_roster: {}
+ mod_stats: {}
+ mod_stream_mgmt:
+ resend_on_timeout: if_offline
+ mod_time: {}
+ mod_vcard: {}
+ mod_vcard_xupdate: {}
+ mod_version:
+ show_os: false
+
+### Local Variables:
+### mode: yaml
+### End:
+### vim: set filetype=yaml tabstop=8
+
diff --git a/systems/eldiron/ejabberd/warn_xmpp_email.py b/systems/eldiron/ejabberd/warn_xmpp_email.py
new file mode 100755
index 0000000..d482b43
--- /dev/null
+++ b/systems/eldiron/ejabberd/warn_xmpp_email.py
@@ -0,0 +1,112 @@
+#!@pythonEnv@/bin/python3
+
+import sys
+import json
+import slixmpp
+import asyncio
+import logging
+import io
+
+CONFIG = json.load(open("@scriptEnv@", "r"))
+
+def sanitize(string):
+ import re
+ from unidecode import unidecode
+ return re.compile(r"[^-.A-Za-z0-9_]").sub("_", unidecode(string))
+
+def parse_email():
+ import email
+ from email.header import decode_header
+
+ mail = email.message_from_file(sys.stdin)
+ try:
+ d = decode_header(mail["subject"])[0]
+ if d[1] is not None:
+ subject = d[0].decode(d[1])
+ else:
+ subject = d[0]
+ except Exception as e:
+ subject = mail["subject"]
+ sender = mail["from"]
+ recipient = mail["X-Original-To"]
+
+ body = ""
+ html = None
+ files = {}
+ for part in mail.walk():
+ if part.get_content_type() == "text/plain":
+ body += "\n-------------------\n"
+ try:
+ body += part.get_payload(decode=True).decode(encoding=part.get_content_charset() or "utf-8")
+ except Exception as e:
+ body += part.get_payload(decode=False)
+ elif part.get_content_type() == "text/html":
+ html = part.get_payload(decode=True)
+ elif part.get_content_type() != "text/html" and\
+ part.get_content_maintype() != "multipart":
+
+ filename = part.get_filename() or "{}.dat".format(part["Content-ID"])
+ files[sanitize(filename)] = (part.get_content_type(), part.get_payload(decode=True))
+
+ return [body, html, subject, sender, recipient, files]
+
+[body, html, subject, sender, recipient, files] = parse_email()
+
+class Bot(slixmpp.ClientXMPP):
+ def __init__(self, jid, password, body, html, subject, sender, recipient, files):
+ super().__init__(jid, password)
+
+ self.got_error = False
+ self.body = body
+ self.html = html
+ self.subject = subject
+ self.sender = sender
+ self.recipient = recipient
+ self.files = files
+ self.register_plugin('xep_0363')
+ self.add_event_handler("session_start", self.session_start)
+ self.add_event_handler("message", self.message)
+
+ @asyncio.coroutine
+ def session_start(self, event):
+ files = []
+ if self.html is not None:
+ url = yield from self['xep_0363'].upload_file(
+ "mail.html",
+ content_type="text/html",
+ input_file=io.BytesIO(self.html))
+ files.append(("HTML version", url))
+ for f in self.files:
+ url = yield from self['xep_0363'].upload_file(
+ f,
+ content_type=self.files[f][0],
+ input_file=io.BytesIO(self.files[f][1])
+ )
+ files.append((f, url))
+
+ text = """
+New e-mail message from {sender}
+Subject: {subject}
+{body}
+""".format(sender=self.sender, subject=self.subject, body=self.body)
+ if len(files) > 0:
+ text += "\n\nAttachments:"
+ for f in files:
+ text += "\n{}: {}".format(f[0], f[1])
+ self.send_message(mto=self.recipient, mbody=text, msubject=self.subject, mtype='message')
+ yield from asyncio.sleep(5)
+ self.disconnect()
+
+ @asyncio.coroutine
+ def message(self, msg):
+ if msg["type"] == "error":
+ self.got_error = True
+
+logging.basicConfig(level=logging.DEBUG, format='%(levelname)-8s %(message)s')
+xmpp = Bot(CONFIG["jid"], CONFIG["password"], body, html, subject, sender, recipient, files)
+xmpp.connect()
+xmpp.process(forever=False)
+if xmpp.got_error:
+ sys.exit(1)
+else:
+ sys.exit(0)
diff --git a/systems/eldiron/flake.lock b/systems/eldiron/flake.lock
new file mode 100644
index 0000000..99a5c92
--- /dev/null
+++ b/systems/eldiron/flake.lock
@@ -0,0 +1,2758 @@
+{
+ "nodes": {
+ "backports": {
+ "inputs": {
+ "flake-utils": "flake-utils_12",
+ "nixpkgs": "nixpkgs_15"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-VewHWeZvwLvWVm2bMQk5UQ0G/HyO8X87BssvmbLWbrY=",
+ "path": "../../backports",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../backports",
+ "type": "path"
+ }
+ },
+ "buildslist": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1585697026,
+ "narHash": "sha256-7CO89q6Bmg59eN5tFGYaqJR/rpJrLu7dpulXgJUv/0E=",
+ "ref": "master",
+ "rev": "fb8641f2badcec9f232cc5f727009911fc1c89b0",
+ "revCount": 4,
+ "type": "git",
+ "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist"
+ },
+ "original": {
+ "type": "git",
+ "url": "https://git.immae.eu/perso/Immae/Projets/Buildbot/buildslist"
+ }
+ },
+ "colmena": {
+ "inputs": {
+ "flake-compat": "flake-compat",
+ "flake-utils": "flake-utils_2",
+ "nixpkgs": "nixpkgs",
+ "stable": "stable"
+ },
+ "locked": {
+ "lastModified": 1687954574,
+ "narHash": "sha256-YasVTaNXq2xqZdejyIhuyqvNypmx+K/Y1ZZ4+raeeII=",
+ "owner": "immae",
+ "repo": "colmena",
+ "rev": "e427171150a35e23204c4c15a2483358d22a0eff",
+ "type": "github"
+ },
+ "original": {
+ "owner": "immae",
+ "ref": "add-lib-get-flake",
+ "repo": "colmena",
+ "type": "github"
+ }
+ },
+ "copanier": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1633895178,
+ "narHash": "sha256-0xrh12eBSVpgVeniSbKQAuGBhIyVB/rB/H3Tt7EJ1vQ=",
+ "owner": "spiral-project",
+ "repo": "copanier",
+ "rev": "d1b92cc639f4d25ad31baf4a6579a33c44a0d837",
+ "type": "github"
+ },
+ "original": {
+ "owner": "spiral-project",
+ "repo": "copanier",
+ "type": "github"
+ }
+ },
+ "diaspora": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1551139311,
+ "narHash": "sha256-Fyv7Af68YccJL2OGz6l9d71UmnLB+LstlWbOlgFZtgo=",
+ "owner": "diaspora",
+ "repo": "diaspora",
+ "rev": "663da1ef2573863eb870e0edbd50050f261f3d30",
+ "type": "github"
+ },
+ "original": {
+ "owner": "diaspora",
+ "ref": "v0.7.10.0",
+ "repo": "diaspora",
+ "type": "github"
+ }
+ },
+ "disko": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_2"
+ },
+ "locked": {
+ "lastModified": 1687968164,
+ "narHash": "sha256-L9jr2zCB6NIaBE3towusjGBigsnE2pMID8wBGkYbTS4=",
+ "owner": "nix-community",
+ "repo": "disko",
+ "rev": "8002e7cb899bc2a02a2ebfb7f999fcd7c18b92a1",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "disko",
+ "type": "github"
+ }
+ },
+ "dns-nix": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1635273082,
+ "narHash": "sha256-EHiDP2jEa7Ai5ZwIf5uld9RVFcV77+2SUxjQXwJsJa0=",
+ "owner": "kirelagin",
+ "repo": "dns.nix",
+ "rev": "c7b9645da9c0ddce4f9de4ef27ec01bb8108039a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "kirelagin",
+ "repo": "dns.nix",
+ "type": "github"
+ }
+ },
+ "environment": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "environment_2": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "environment_3": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "environment_4": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "environment_5": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "environment_6": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../environment",
+ "type": "path"
+ }
+ },
+ "etherpad-lite": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1587951095,
+ "narHash": "sha256-PjAkvkC7tJzRECUqOvuWfoZTz8QqDXk6oXEN3ig24rQ=",
+ "owner": "ether",
+ "repo": "etherpad-lite",
+ "rev": "62101147a0c3495dc80daa87ab53a3366321a205",
+ "type": "github"
+ },
+ "original": {
+ "owner": "ether",
+ "ref": "1.8.3",
+ "repo": "etherpad-lite",
+ "type": "github"
+ }
+ },
+ "files-watcher": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=",
+ "path": "../../files-watcher",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../files-watcher",
+ "type": "path"
+ }
+ },
+ "files-watcher_2": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=",
+ "path": "../../files-watcher",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../files-watcher",
+ "type": "path"
+ }
+ },
+ "files-watcher_3": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=",
+ "path": "../../files-watcher",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../files-watcher",
+ "type": "path"
+ }
+ },
+ "files-watcher_4": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=",
+ "path": "../files-watcher",
+ "type": "path"
+ },
+ "original": {
+ "path": "../files-watcher",
+ "type": "path"
+ }
+ },
+ "flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1650374568,
+ "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "b4a34015c698c7793d592d66adbab377907a2be8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1687762428,
+ "narHash": "sha256-DIf7mi45PKo+s8dOYF+UlXHzE0Wl/+k3tXUyAoAnoGE=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "37dd7bb15791c86d55c5121740a1887ab55ee836",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_2": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib_3"
+ },
+ "locked": {
+ "lastModified": 1675295133,
+ "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_3": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib_4"
+ },
+ "locked": {
+ "lastModified": 1675295133,
+ "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_4": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib_5"
+ },
+ "locked": {
+ "lastModified": 1675295133,
+ "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_5": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib_6"
+ },
+ "locked": {
+ "lastModified": 1675295133,
+ "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-parts_6": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib_7"
+ },
+ "locked": {
+ "lastModified": 1675295133,
+ "narHash": "sha256-dU8fuLL98WFXG0VnRgM00bqKX6CEPBLybhiIDIgO45o=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "bf53492df08f3178ce85e0c9df8ed8d03c030c9f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "flake-utils": {
+ "locked": {
+ "lastModified": 1614513358,
+ "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "5466c5bbece17adaab2d82fae80b46e807611bf3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_10": {
+ "locked": {
+ "lastModified": 1610051610,
+ "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_11": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_12": {
+ "locked": {
+ "lastModified": 1667395993,
+ "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_13": {
+ "locked": {
+ "lastModified": 1631561581,
+ "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_14": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_15": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_16": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_17": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_18": {
+ "locked": {
+ "lastModified": 1649676176,
+ "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_19": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_2": {
+ "locked": {
+ "lastModified": 1659877975,
+ "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_20": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_21": {
+ "locked": {
+ "lastModified": 1610051610,
+ "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_22": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_23": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_3": {
+ "locked": {
+ "lastModified": 1648297722,
+ "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_4": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_5": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_6": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_7": {
+ "locked": {
+ "lastModified": 1609246779,
+ "narHash": "sha256-eq6ZXE/VWo3EMC65jmIT6H/rrUc9UWOWVujkzav025k=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "08c7ad4a0844adc4a7f9f5bb3beae482e789afa4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_8": {
+ "locked": {
+ "lastModified": 1631561581,
+ "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "flake-utils_9": {
+ "locked": {
+ "lastModified": 1610051610,
+ "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "grocy": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1585166193,
+ "narHash": "sha256-rq1Fma/VgU01qXQmCghrt5k+LXWYt8z9b0NvGA7+/Y8=",
+ "owner": "grocy",
+ "repo": "grocy",
+ "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "grocy",
+ "repo": "grocy",
+ "rev": "d7738aa1ec330c81f11e4976681df0299d4ed35a",
+ "type": "github"
+ }
+ },
+ "mastodon": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1582790581,
+ "narHash": "sha256-YImWfvsJQzJHyKoWI6OP6BA+NvmHF2RiwJqOg0NUN/U=",
+ "owner": "tootsuite",
+ "repo": "mastodon",
+ "rev": "9bace2dd88d127d396794375c8fcb2132619a799",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tootsuite",
+ "ref": "v2.9.4",
+ "repo": "mastodon",
+ "type": "github"
+ }
+ },
+ "mediagoblin": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1531090939,
+ "narHash": "sha256-vSajRbuE/bu2HVsUZm25fkm/vNLXKDIK7Xn8kyKJ5Ps=",
+ "ref": "stable",
+ "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850",
+ "revCount": 4805,
+ "submodules": true,
+ "type": "git",
+ "url": "https://git.savannah.gnu.org/git/mediagoblin.git"
+ },
+ "original": {
+ "ref": "stable",
+ "rev": "cd465ebfec837a75a44c4ebd727dffe2fff6d850",
+ "submodules": true,
+ "type": "git",
+ "url": "https://git.savannah.gnu.org/git/mediagoblin.git"
+ }
+ },
+ "my-lib": {
+ "inputs": {
+ "colmena": "colmena",
+ "disko": "disko",
+ "flake-parts": "flake-parts",
+ "nixos-anywhere": "nixos-anywhere",
+ "nixpkgs": "nixpkgs_4"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-wwpT+I5/zrln85BDzlZoEDC19GwYrcZSXbrJjyvC4jk=",
+ "path": "../../flakes/lib",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/lib",
+ "type": "path"
+ }
+ },
+ "mypackages": {
+ "inputs": {
+ "flake-parts": "flake-parts_2",
+ "nixpkgs": "nixpkgs_16",
+ "webapps-ttrss": "webapps-ttrss"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=",
+ "path": "../../mypackages",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../mypackages",
+ "type": "path"
+ }
+ },
+ "mypackages_2": {
+ "inputs": {
+ "flake-parts": "flake-parts_3",
+ "nixpkgs": "nixpkgs_19",
+ "webapps-ttrss": "webapps-ttrss_2"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=",
+ "path": "../mypackages",
+ "type": "path"
+ },
+ "original": {
+ "path": "../mypackages",
+ "type": "path"
+ }
+ },
+ "mypackages_3": {
+ "inputs": {
+ "flake-parts": "flake-parts_4",
+ "nixpkgs": "nixpkgs_21",
+ "webapps-ttrss": "webapps-ttrss_3"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=",
+ "path": "../mypackages",
+ "type": "path"
+ },
+ "original": {
+ "path": "../mypackages",
+ "type": "path"
+ }
+ },
+ "mypackages_4": {
+ "inputs": {
+ "flake-parts": "flake-parts_6",
+ "nixpkgs": "nixpkgs_29",
+ "webapps-ttrss": "webapps-ttrss_5"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=",
+ "path": "../mypackages",
+ "type": "path"
+ },
+ "original": {
+ "path": "../mypackages",
+ "type": "path"
+ }
+ },
+ "myuids": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_10": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_11": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_12": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_13": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_14": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_2": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_3": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_4": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_5": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_6": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_7": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_8": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "myuids_9": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../myuids",
+ "type": "path"
+ }
+ },
+ "naemon": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-6le57WLKj1HXdhe4cgYO6N0Z9nJZC+plQY8HhOwzEIk=",
+ "path": "../../naemon",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../naemon",
+ "type": "path"
+ }
+ },
+ "nixos-2305": {
+ "locked": {
+ "lastModified": 1687938137,
+ "narHash": "sha256-Z00c0Pk3aE1aw9x44lVcqHmvx+oX7dxCXCvKcUuE150=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "ba2ded3227a2992f2040fad4ba6f218a701884a5",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "release-23.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixos-anywhere": {
+ "inputs": {
+ "disko": [
+ "my-lib",
+ "disko"
+ ],
+ "flake-parts": [
+ "my-lib",
+ "flake-parts"
+ ],
+ "nixos-2305": "nixos-2305",
+ "nixos-images": "nixos-images",
+ "nixpkgs": "nixpkgs_3",
+ "treefmt-nix": "treefmt-nix"
+ },
+ "locked": {
+ "lastModified": 1689945193,
+ "narHash": "sha256-+GPRt7ouE84A7GPNKnFYGU0cQL7skKxz0BAY0sUjUmw=",
+ "owner": "numtide",
+ "repo": "nixos-anywhere",
+ "rev": "27161266077a177ac116e2cb72cc70af5f145189",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "nixos-anywhere",
+ "type": "github"
+ }
+ },
+ "nixos-images": {
+ "inputs": {
+ "nixos-2305": [
+ "my-lib",
+ "nixos-anywhere",
+ "nixos-2305"
+ ],
+ "nixos-unstable": [
+ "my-lib",
+ "nixos-anywhere",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1686819168,
+ "narHash": "sha256-IbRVStbKoMC2fUX6TxNO82KgpVfI8LL4Cq0bTgdYhnY=",
+ "owner": "nix-community",
+ "repo": "nixos-images",
+ "rev": "ccc1a2c08ce2fc38bcece85d2a6e7bf17bac9e37",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixos-images",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1683408522,
+ "narHash": "sha256-9kcPh6Uxo17a3kK3XCHhcWiV1Yu1kYj22RHiymUhMkU=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "897876e4c484f1e8f92009fd11b7d988a121a4e7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-4": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1685564631,
+ "narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_2": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1691269286,
+ "narHash": "sha256-7cPTz1bPhwq8smt9rHDcFtJsd1tFDcBukzj5jOXqjfk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "85d4248a4f5aa6bc55dd2cea8131bb68b2d43804",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_3": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1675183161,
+ "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_4": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1675183161,
+ "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_5": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1675183161,
+ "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_6": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1675183161,
+ "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib_7": {
+ "locked": {
+ "dir": "lib",
+ "lastModified": 1675183161,
+ "narHash": "sha256-Zq8sNgAxDckpn7tJo7V1afRSk2eoVbu3OjI1QklGLNg=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "e1e1b192c1a5aab2960bf0a0bd53a2e8124fa18e",
+ "type": "github"
+ },
+ "original": {
+ "dir": "lib",
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_10": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_11": {
+ "locked": {
+ "lastModified": 1631570365,
+ "narHash": "sha256-vc6bfo0hijpicdUDiui2DvZXmpIP2iqOFZRcpMOuYPo=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "df7113c0727881519248d4c7d080324e0ee3327b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_12": {
+ "locked": {
+ "lastModified": 1611097871,
+ "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_13": {
+ "locked": {
+ "lastModified": 1611097871,
+ "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_14": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_15": {
+ "locked": {
+ "lastModified": 1687502512,
+ "narHash": "sha256-dBL/01TayOSZYxtY4cMXuNCBk8UMLoqRZA+94xiFpJA=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "3ae20aa58a6c0d1ca95c9b11f59a2d12eebc511f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_16": {
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs_17": {
+ "locked": {
+ "lastModified": 1633901457,
+ "narHash": "sha256-GNJLwKENqEA4xlzkWI76VLHBAua4LUIlTeeiH4FR7Gc=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "f358794824b4595d77fec93732485d329ed7b0e0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_18": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_19": {
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1687701825,
+ "narHash": "sha256-aMC9hqsf+4tJL7aJWSdEUurW2TsjxtDcJBwM9Y4FIYM=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "07059ee2fa34f1598758839b9af87eae7f7ae6ea",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_20": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_21": {
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs_22": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_23": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_24": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_25": {
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs_26": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_27": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_28": {
+ "locked": {
+ "lastModified": 1611097871,
+ "narHash": "sha256-Q6bUkno5JNt0OoyXThFDrKArFBp/GryvJhwEgVzGSuk=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "31f5dd3f3655fbedac19f64f77844aa5ed79501c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_29": {
+ "locked": {
+ "lastModified": 1646497237,
+ "narHash": "sha256-Ccpot1h/rV8MgcngDp5OrdmLTMaUTbStZTR5/sI7zW0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "062a0c5437b68f950b081bbfc8a699d57a4ee026",
+ "type": "github"
+ }
+ },
+ "nixpkgs_3": {
+ "locked": {
+ "lastModified": 1687893427,
+ "narHash": "sha256-jJHj0Lxpvov1IPYQK441oLAKxxemHm16U9jf60bXAFU=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "4b14ab2a916508442e685089672681dff46805be",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable-small",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_30": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_31": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_4": {
+ "locked": {
+ "lastModified": 1648725829,
+ "narHash": "sha256-tXEzI38lLrzW2qCAIs0UAatE2xcsTsoKWaaXqAcF1NI=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "72152ff5ad470ed1a5b97c0ba2737938c136c994",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_5": {
+ "locked": {
+ "lastModified": 1693158576,
+ "narHash": "sha256-aRTTXkYvhXosGx535iAFUaoFboUrZSYb1Ooih/auGp0=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "a999c1cc0c9eb2095729d5aa03e0d8f7ed256780",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_6": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1596265691,
+ "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
+ "type": "github"
+ }
+ },
+ "nixpkgs_7": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_8": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_9": {
+ "locked": {
+ "lastModified": 1597943282,
+ "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "openarc": {
+ "inputs": {
+ "flake-utils": "flake-utils_4",
+ "myuids": "myuids",
+ "nixpkgs": "nixpkgs_7",
+ "openarc": "openarc_2"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=",
+ "path": "../../openarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../openarc",
+ "type": "path"
+ }
+ },
+ "openarc_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1537545083,
+ "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=",
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "rev": "355ee2a1ca85acccce494478991983b54f794f4e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "type": "github"
+ }
+ },
+ "openarc_3": {
+ "inputs": {
+ "flake-utils": "flake-utils_6",
+ "myuids": "myuids_3",
+ "nixpkgs": "nixpkgs_9",
+ "openarc": "openarc_4"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=",
+ "path": "../../openarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../openarc",
+ "type": "path"
+ }
+ },
+ "openarc_4": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1537545083,
+ "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=",
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "rev": "355ee2a1ca85acccce494478991983b54f794f4e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "type": "github"
+ }
+ },
+ "openarc_5": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1537545083,
+ "narHash": "sha256-xUSRARC7875vFjtZ66t8KBlKmkEdIZblWHc4zqGZAQQ=",
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "rev": "355ee2a1ca85acccce494478991983b54f794f4e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "trusteddomainproject",
+ "repo": "OpenARC",
+ "type": "github"
+ }
+ },
+ "opendmarc": {
+ "inputs": {
+ "flake-utils": "flake-utils_5",
+ "myuids": "myuids_2",
+ "nixpkgs": "nixpkgs_8"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=",
+ "path": "../../opendmarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../opendmarc",
+ "type": "path"
+ }
+ },
+ "opendmarc_2": {
+ "inputs": {
+ "flake-utils": "flake-utils_7",
+ "myuids": "myuids_4",
+ "nixpkgs": "nixpkgs_10"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=",
+ "path": "../../opendmarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../opendmarc",
+ "type": "path"
+ }
+ },
+ "paste": {
+ "inputs": {
+ "flake-utils": "flake-utils_8",
+ "nixpkgs": "nixpkgs_11"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-a6rqBy5/ePeKhqag8K7FtOHpYLur3Z6Yzk7uCqH522A=",
+ "path": "../../paste",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../paste",
+ "type": "path"
+ }
+ },
+ "peertube": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1611184594,
+ "narHash": "sha256-1N59Dmo9zny+bZWRPiR7fXConECAw9OFcVIWMp2wois=",
+ "ref": "gitolite_local/open_instance",
+ "rev": "f49b8d9b697f098490e81ce0afd889ba37dcb2f3",
+ "revCount": 6316,
+ "type": "git",
+ "url": "https://git.immae.eu/github/Chocobozzz/PeerTube.git"
+ },
+ "original": {
+ "owner": "Chocobozzz",
+ "ref": "v3.0.1",
+ "repo": "PeerTube",
+ "type": "github"
+ }
+ },
+ "peertube_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1610436329,
+ "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=",
+ "owner": "Chocobozzz",
+ "repo": "PeerTube",
+ "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Chocobozzz",
+ "ref": "v3.0.1",
+ "repo": "PeerTube",
+ "type": "github"
+ }
+ },
+ "peertube_3": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1610436329,
+ "narHash": "sha256-bIXt5bQiBBlNDFXYzcdQA8qp4nse5epUx/XQOguDOX8=",
+ "owner": "Chocobozzz",
+ "repo": "PeerTube",
+ "rev": "69e0e678beb7f1a3b6753eeff585a14f9a61ea86",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Chocobozzz",
+ "ref": "v3.0.1",
+ "repo": "PeerTube",
+ "type": "github"
+ }
+ },
+ "peertube_open_instance": {
+ "inputs": {
+ "flake-utils": "flake-utils_9",
+ "myuids": "myuids_5",
+ "nixpkgs": "nixpkgs_12",
+ "peertube": "peertube"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=",
+ "path": "./../../peertube",
+ "type": "path"
+ },
+ "original": {
+ "path": "./../../peertube",
+ "type": "path"
+ }
+ },
+ "peertube_origin": {
+ "inputs": {
+ "flake-utils": "flake-utils_10",
+ "myuids": "myuids_6",
+ "nixpkgs": "nixpkgs_13",
+ "peertube": "peertube_2"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=",
+ "path": "./../../peertube",
+ "type": "path"
+ },
+ "original": {
+ "path": "./../../peertube",
+ "type": "path"
+ }
+ },
+ "private-buildbot": {
+ "inputs": {
+ "buildslist": "buildslist",
+ "flake-utils": "flake-utils_3",
+ "nixpkgs": "nixpkgs_6"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-LZRLA37RiN1VyKRqoAdZa9oc61PfQX7dCANSFuwuSa8=",
+ "path": "../../flakes/private/buildbot",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/buildbot",
+ "type": "path"
+ }
+ },
+ "private-chatons": {
+ "inputs": {
+ "environment": "environment"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-UNkS/IZGHCdSX4hCzpTZwNBj9B8RGCMr9Za+G9Xdm4Y=",
+ "path": "../../flakes/private/chatons",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/chatons",
+ "type": "path"
+ }
+ },
+ "private-environment": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-rMKbM7fHqWQbI7y59BsPG8KwoDj2jyrvN2niPWB24uE=",
+ "path": "../../flakes/private/environment",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/environment",
+ "type": "path"
+ }
+ },
+ "private-milters": {
+ "inputs": {
+ "environment": "environment_2",
+ "files-watcher": "files-watcher",
+ "openarc": "openarc",
+ "opendmarc": "opendmarc",
+ "secrets": "secrets"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-+FlrtZ2sR58VeLsYFeQ6ccaAiGQRFoc9ofs/X/S0Bkg=",
+ "path": "../../flakes/private/milters",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/milters",
+ "type": "path"
+ }
+ },
+ "private-monitoring": {
+ "inputs": {
+ "environment": "environment_3",
+ "naemon": "naemon",
+ "nixpkgs-lib": "nixpkgs-lib_2",
+ "secrets": "secrets_2"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-K720bqCEHPK0F7GBaxo/ioJ3LVAyhjl/ZZobWwO4ebU=",
+ "path": "../../flakes/private/monitoring",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/monitoring",
+ "type": "path"
+ }
+ },
+ "private-openarc": {
+ "inputs": {
+ "files-watcher": "files-watcher_2",
+ "openarc": "openarc_3",
+ "secrets": "secrets_3"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-08NmS2KKpthWHC7ob5cu1RBKA7JaPEMqcL5HHwH3vLA=",
+ "path": "../../flakes/private/openarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/openarc",
+ "type": "path"
+ }
+ },
+ "private-opendmarc": {
+ "inputs": {
+ "environment": "environment_4",
+ "files-watcher": "files-watcher_3",
+ "opendmarc": "opendmarc_2",
+ "secrets": "secrets_4"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-2lx6oVf/3OuqWdP8dHlA6f6+npwx6N/oFv/WkqIbV1Q=",
+ "path": "../../flakes/private/opendmarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/opendmarc",
+ "type": "path"
+ }
+ },
+ "private-openldap": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-Z4Gg8wU/wVVQDFwWAC9k1LW+yg0xI1iNhKB51K9Gq4c=",
+ "path": "../../flakes/private/openldap",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/openldap",
+ "type": "path"
+ }
+ },
+ "private-paste": {
+ "inputs": {
+ "paste": "paste"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-w8WnrSJj05Y8hJsJfY46sI6PUSg2xo5h9t0zWP4woog=",
+ "path": "../../flakes/private/paste",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/paste",
+ "type": "path"
+ }
+ },
+ "private-peertube": {
+ "inputs": {
+ "peertube_open_instance": "peertube_open_instance",
+ "peertube_origin": "peertube_origin"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-1MpzxwaZ+TZJzBf+Do/PFdI9khD1GSvfjuSC0h2Hk58=",
+ "path": "../../flakes/private/peertube",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/peertube",
+ "type": "path"
+ }
+ },
+ "private-php": {
+ "inputs": {
+ "flake-utils": "flake-utils_11",
+ "nixpkgs": "nixpkgs_14",
+ "nixpkgs-4": "nixpkgs-4"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-Qs+O86L4sPArYWm7wMCFNKLCWfUwkz8STePsn5K9Xwk=",
+ "path": "../../flakes/private/php",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/php",
+ "type": "path"
+ }
+ },
+ "private-ssh": {
+ "inputs": {
+ "environment": "environment_5",
+ "secrets": "secrets_5"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ckUFmIHxrUuBMxOHhzgT+4sX/ek/Op0PjdyL3NyU/Mc=",
+ "path": "../../flakes/private/ssh",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/ssh",
+ "type": "path"
+ }
+ },
+ "private-system": {
+ "inputs": {
+ "backports": "backports",
+ "environment": "environment_6",
+ "mypackages": "mypackages",
+ "myuids": "myuids_7",
+ "secrets-public": "secrets-public"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-vOs7fcQVsOSl/gsyzFXfsWE7u0/O9mIKpHnwDwHxJTQ=",
+ "path": "../../flakes/private/system",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/private/system",
+ "type": "path"
+ }
+ },
+ "public-copanier": {
+ "inputs": {
+ "copanier": "copanier",
+ "flake-utils": "flake-utils_13",
+ "nixpkgs": "nixpkgs_17"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-v7ZhvU3UAmA7EtPWutYddHE84qbqWx/ugtFAEgpD4H0=",
+ "path": "../../flakes/copanier",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/copanier",
+ "type": "path"
+ }
+ },
+ "public-diaspora": {
+ "inputs": {
+ "diaspora": "diaspora",
+ "flake-utils": "flake-utils_14",
+ "myuids": "myuids_8",
+ "nixpkgs": "nixpkgs_18"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-S+ZZI5/WNGE9m5yRkOM3LlJUTrjtjzcBRLNrHi0fx6M=",
+ "path": "../../flakes/diaspora",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/diaspora",
+ "type": "path"
+ }
+ },
+ "public-etherpad-lite": {
+ "inputs": {
+ "etherpad-lite": "etherpad-lite",
+ "flake-utils": "flake-utils_15",
+ "mypackages": "mypackages_2",
+ "nixpkgs": "nixpkgs_20"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-j6p9rVNwD0C3VN65VdnF3yG8fy5S8aAsi2kRXWPd3VE=",
+ "path": "../../flakes/etherpad-lite",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/etherpad-lite",
+ "type": "path"
+ }
+ },
+ "public-fiche": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-oIMKN1dD4K+5pOGugNaNNdJme5NYlYtnNd3ivvyVoJI=",
+ "path": "../../flakes/fiche",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/fiche",
+ "type": "path"
+ }
+ },
+ "public-files-watcher": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-ZsdumUVoSPkV/DB6gO6dNDttjzalye0ToVBF9bl5W0k=",
+ "path": "../../flakes/files-watcher",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/files-watcher",
+ "type": "path"
+ }
+ },
+ "public-grocy": {
+ "inputs": {
+ "flake-utils": "flake-utils_16",
+ "grocy": "grocy",
+ "mypackages": "mypackages_3",
+ "nixpkgs": "nixpkgs_22"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-Xv5wFz3A1f+jkJ1hxb6DwisBwsZxaQccp/Kwe5lqwy0=",
+ "path": "../../flakes/grocy",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/grocy",
+ "type": "path"
+ }
+ },
+ "public-loginctl-linger": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-TLlUOhiQzYo6SwH0E3oPCDfhgW249qPZTlVar1VmpKw=",
+ "path": "../../flakes/loginctl-linger",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/loginctl-linger",
+ "type": "path"
+ }
+ },
+ "public-mastodon": {
+ "inputs": {
+ "flake-utils": "flake-utils_17",
+ "mastodon": "mastodon",
+ "myuids": "myuids_9",
+ "nixpkgs": "nixpkgs_23"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5bh3eTXdSac7Kw17+6EVmjNZpPIdGc7a3E5lb7wYn2U=",
+ "path": "../../flakes/mastodon",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/mastodon",
+ "type": "path"
+ }
+ },
+ "public-mediagoblin": {
+ "inputs": {
+ "flake-utils": "flake-utils_18",
+ "mediagoblin": "mediagoblin",
+ "myuids": "myuids_10",
+ "nixpkgs": "nixpkgs_24"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-CVFwdH+i6K9dxyniI6nUeLiNZoD17uKT1Q8/4MaiTGU=",
+ "path": "../../flakes/mediagoblin",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/mediagoblin",
+ "type": "path"
+ }
+ },
+ "public-multi-apache-container": {
+ "inputs": {
+ "files-watcher": "files-watcher_4",
+ "myuids": "myuids_11"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-euh+K7DLk5B3hKTeK5Xwo6dvnvHk+7ZDCqaRdG48i8I=",
+ "path": "../../flakes/multi-apache-container",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/multi-apache-container",
+ "type": "path"
+ }
+ },
+ "public-mypackages": {
+ "inputs": {
+ "flake-parts": "flake-parts_5",
+ "nixpkgs": "nixpkgs_25",
+ "webapps-ttrss": "webapps-ttrss_4"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-C0plEL+g6kv5fo/VmTjMJK45RfFcGufqPKJVnviMyGY=",
+ "path": "../../flakes/mypackages",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/mypackages",
+ "type": "path"
+ }
+ },
+ "public-myuids": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-HkW9YCLQCNBX3Em7J7MjraVEZO3I3PizkVV2QrUdULQ=",
+ "path": "../../flakes/myuids",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/myuids",
+ "type": "path"
+ }
+ },
+ "public-openarc": {
+ "inputs": {
+ "flake-utils": "flake-utils_19",
+ "myuids": "myuids_12",
+ "nixpkgs": "nixpkgs_26",
+ "openarc": "openarc_5"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-+X3x0t7DSYBvgFAUGNnMV4F/vQOUWE+9Q4Az6V8/iTw=",
+ "path": "../../flakes/openarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/openarc",
+ "type": "path"
+ }
+ },
+ "public-opendmarc": {
+ "inputs": {
+ "flake-utils": "flake-utils_20",
+ "myuids": "myuids_13",
+ "nixpkgs": "nixpkgs_27"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-dDS9a1XujZU6KVCgz2RKbx2T3yT1k7z0EknUh1OyMdQ=",
+ "path": "../../flakes/opendmarc",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/opendmarc",
+ "type": "path"
+ }
+ },
+ "public-peertube": {
+ "inputs": {
+ "flake-utils": "flake-utils_21",
+ "myuids": "myuids_14",
+ "nixpkgs": "nixpkgs_28",
+ "peertube": "peertube_3"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-l+XpuMrH6I51hk37REAPVSLlbvCdad3kcDGioodzPR4=",
+ "path": "../../flakes/peertube",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/peertube",
+ "type": "path"
+ }
+ },
+ "public-secrets": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../flakes/secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/secrets",
+ "type": "path"
+ }
+ },
+ "public-surfer": {
+ "inputs": {
+ "flake-utils": "flake-utils_22",
+ "mypackages": "mypackages_4",
+ "nixpkgs": "nixpkgs_30",
+ "surfer": "surfer"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-67TqavMsANZI6X15AFUQZ2zHSmoWJc80XaXwEGhWsRg=",
+ "path": "../../flakes/surfer",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/surfer",
+ "type": "path"
+ }
+ },
+ "public-taskwarrior-web": {
+ "inputs": {
+ "flake-utils": "flake-utils_23",
+ "nixpkgs": "nixpkgs_31",
+ "taskwarrior-web": "taskwarrior-web"
+ },
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-0u83WrBwbIpuyy82UK3EUqC/dgoCoDzptRe+G4VhKXo=",
+ "path": "../../flakes/taskwarrior-web",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../flakes/taskwarrior-web",
+ "type": "path"
+ }
+ },
+ "root": {
+ "inputs": {
+ "dns-nix": "dns-nix",
+ "my-lib": "my-lib",
+ "nixpkgs": "nixpkgs_5",
+ "private-buildbot": "private-buildbot",
+ "private-chatons": "private-chatons",
+ "private-environment": "private-environment",
+ "private-milters": "private-milters",
+ "private-monitoring": "private-monitoring",
+ "private-openarc": "private-openarc",
+ "private-opendmarc": "private-opendmarc",
+ "private-openldap": "private-openldap",
+ "private-paste": "private-paste",
+ "private-peertube": "private-peertube",
+ "private-php": "private-php",
+ "private-ssh": "private-ssh",
+ "private-system": "private-system",
+ "public-copanier": "public-copanier",
+ "public-diaspora": "public-diaspora",
+ "public-etherpad-lite": "public-etherpad-lite",
+ "public-fiche": "public-fiche",
+ "public-files-watcher": "public-files-watcher",
+ "public-grocy": "public-grocy",
+ "public-loginctl-linger": "public-loginctl-linger",
+ "public-mastodon": "public-mastodon",
+ "public-mediagoblin": "public-mediagoblin",
+ "public-multi-apache-container": "public-multi-apache-container",
+ "public-mypackages": "public-mypackages",
+ "public-myuids": "public-myuids",
+ "public-openarc": "public-openarc",
+ "public-opendmarc": "public-opendmarc",
+ "public-peertube": "public-peertube",
+ "public-secrets": "public-secrets",
+ "public-surfer": "public-surfer",
+ "public-taskwarrior-web": "public-taskwarrior-web"
+ }
+ },
+ "secrets": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "secrets-public": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "secrets_2": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "secrets_3": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "secrets_4": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "secrets_5": {
+ "locked": {
+ "lastModified": 1,
+ "narHash": "sha256-5AakznhrJFmwCD7lr4JEh55MtdAJL6WA/YuBks6ISSE=",
+ "path": "../../secrets",
+ "type": "path"
+ },
+ "original": {
+ "path": "../../secrets",
+ "type": "path"
+ }
+ },
+ "stable": {
+ "locked": {
+ "lastModified": 1669735802,
+ "narHash": "sha256-qtG/o/i5ZWZLmXw108N2aPiVsxOcidpHJYNkT45ry9Q=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "731cc710aeebecbf45a258e977e8b68350549522",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-22.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "surfer": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1588637864,
+ "narHash": "sha256-B1Sbu1YSHj+ONSoT5v6bVlAHJWtceUV4O5huGhc8b0U=",
+ "rev": "476177380452c9c7c5b1624805feedc824c5995e",
+ "revCount": 318,
+ "type": "git",
+ "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git"
+ },
+ "original": {
+ "rev": "476177380452c9c7c5b1624805feedc824c5995e",
+ "type": "git",
+ "url": "https://git.immae.eu/perso/Immae/Projets/Nodejs/Surfer.git"
+ }
+ },
+ "taskwarrior-web": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546434241,
+ "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=",
+ "owner": "theunraveler",
+ "repo": "taskwarrior-web",
+ "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8",
+ "type": "github"
+ },
+ "original": {
+ "owner": "theunraveler",
+ "repo": "taskwarrior-web",
+ "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "my-lib",
+ "nixos-anywhere",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1687940979,
+ "narHash": "sha256-D4ZFkgIG2s9Fyi78T3fVG9mqMD+/UnFDB62jS4gjZKY=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "0a4f06c27610a99080b69433873885df82003aae",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ },
+ "webapps-ttrss": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546759381,
+ "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "revCount": 9256,
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ },
+ "original": {
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ }
+ },
+ "webapps-ttrss_2": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546759381,
+ "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "revCount": 9256,
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ },
+ "original": {
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ }
+ },
+ "webapps-ttrss_3": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546759381,
+ "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "revCount": 9256,
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ },
+ "original": {
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ }
+ },
+ "webapps-ttrss_4": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546759381,
+ "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "revCount": 9256,
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ },
+ "original": {
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ }
+ },
+ "webapps-ttrss_5": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1546759381,
+ "narHash": "sha256-urjf4EoLWS7G0s0hRtaErrs2B8DUatNK/eoneuB0anY=",
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "revCount": 9256,
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ },
+ "original": {
+ "ref": "master",
+ "rev": "986ca251f995f7754a0470d3e0c44538a545081f",
+ "type": "git",
+ "url": "https://git.tt-rss.org/fox/tt-rss.git"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/systems/eldiron/flake.nix b/systems/eldiron/flake.nix
new file mode 100644
index 0000000..790b638
--- /dev/null
+++ b/systems/eldiron/flake.nix
@@ -0,0 +1,90 @@
+{
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ dns-nix.url = "github:kirelagin/dns.nix";
+ dns-nix.inputs.nixpkgs.follows = "nixpkgs";
+
+ my-lib.url = "path:../../flakes/lib";
+
+ public-etherpad-lite.url = "path:../../flakes/etherpad-lite";
+ public-grocy.url = "path:../../flakes/grocy";
+ public-openarc.url = "path:../../flakes/openarc";
+ public-opendmarc.url = "path:../../flakes/opendmarc";
+ public-peertube.url = "path:../../flakes/peertube";
+ public-diaspora.url = "path:../../flakes/diaspora";
+ public-mastodon.url = "path:../../flakes/mastodon";
+ public-mediagoblin.url = "path:../../flakes/mediagoblin";
+ public-surfer.url = "path:../../flakes/surfer";
+ public-myuids.url = "path:../../flakes/myuids";
+ public-copanier.url = "path:../../flakes/copanier";
+ public-secrets.url = "path:../../flakes/secrets";
+ public-files-watcher.url = "path:../../flakes/files-watcher";
+ public-fiche.url = "path:../../flakes/fiche";
+ public-mypackages.url = "path:../../flakes/mypackages";
+ public-loginctl-linger.url = "path:../../flakes/loginctl-linger";
+ public-multi-apache-container.url = "path:../../flakes/multi-apache-container";
+ public-taskwarrior-web.url = "path:../../flakes/taskwarrior-web";
+
+ private-peertube.url = "path:../../flakes/private/peertube";
+ private-buildbot.url = "path:../../flakes/private/buildbot";
+ private-php.url = "path:../../flakes/private/php";
+ private-environment.url = "path:../../flakes/private/environment";
+ private-openarc.url = "path:../../flakes/private/openarc";
+ private-openldap.url = "path:../../flakes/private/openldap";
+ private-opendmarc.url = "path:../../flakes/private/opendmarc";
+ private-milters.url = "path:../../flakes/private/milters";
+ private-monitoring.url = "path:../../flakes/private/monitoring";
+ private-paste.url = "path:../../flakes/private/paste";
+ private-ssh.url = "path:../../flakes/private/ssh";
+ private-chatons.url = "path:../../flakes/private/chatons";
+ private-system.url = "path:../../flakes/private/system";
+ };
+ outputs = inputs@{ self, my-lib, nixpkgs, dns-nix, ...}:
+ my-lib.lib.mkColmenaFlake {
+ name = "eldiron";
+ inherit self nixpkgs;
+ system = "x86_64-linux";
+ targetHost = "176.9.151.89";
+ targetUser = "root";
+ nixosModules = with inputs; {
+ base = ./base.nix;
+ myuids = public-myuids.nixosModule;
+ secrets = public-secrets.nixosModule;
+ loginctl-linger = public-loginctl-linger.nixosModule;
+ files-watcher = public-files-watcher.nixosModule;
+ multi-apache-container = public-multi-apache-container.nixosModule;
+ etherpad-lite = public-etherpad-lite.nixosModule;
+ mastodon = public-mastodon.nixosModule;
+ mediagoblin = public-mediagoblin.nixosModule;
+ peertube = public-peertube.nixosModule;
+ diaspora = public-diaspora.nixosModule;
+ fiche = public-fiche.nixosModule;
+
+ environment = private-environment.nixosModule;
+ openarc = private-openarc.nixosModule;
+ opendmarc = private-opendmarc.nixosModule;
+ ssh = private-ssh.nixosModule;
+ chatons = private-chatons.nixosModule;
+ system = private-system.nixosModule;
+ monitoring = private-monitoring.nixosModule;
+ paste = private-paste.nixosModule;
+ milters = private-milters.nixosModule;
+ };
+ moduleArgs = with inputs; {
+ dns-nix = dns-nix;
+ nixpkgsRaw = nixpkgs.legacyPackages.x86_64-linux;
+ mypackages-lib = public-mypackages.lib.x86_64-linux;
+ etherpad-lite = public-etherpad-lite.defaultPackage.x86_64-linux;
+ taskwarrior-web = public-taskwarrior-web.defaultPackage.x86_64-linux;
+ copanier = public-copanier.defaultPackage.x86_64-linux;
+ grocy = public-grocy.defaultPackage.x86_64-linux;
+ surfer = public-surfer.defaultPackage.x86_64-linux;
+ mediagoblin = public-mediagoblin.defaultPackage.x86_64-linux;
+ buildbot = private-buildbot.packages.x86_64-linux.buildbot-full;
+ openldap = private-openldap;
+ monitoring = private-monitoring;
+ peertube = private-peertube.packages.x86_64-linux;
+ php = private-php;
+ };
+ };
+}
diff --git a/systems/eldiron/ftp.nix b/systems/eldiron/ftp.nix
new file mode 100644
index 0000000..6aa1afc
--- /dev/null
+++ b/systems/eldiron/ftp.nix
@@ -0,0 +1,339 @@
+{ lib, pkgs, config, ... }:
+let
+ package = pkgs.pure-ftpd.override { ldapFtpId = "immaeFtp"; };
+ pure-ftpd-enabled = config.myServices.ftp.pure-ftpd.enable;
+ proftpd-enabled = config.myServices.ftp.proftpd.enable;
+in
+{
+ options = {
+ myServices.ftp.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable ftp.
+ '';
+ };
+ myServices.ftp.pure-ftpd.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable pure-ftpd.
+ '';
+ };
+ myServices.ftp.proftpd.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to enable proftpd.
+ '';
+ };
+ };
+
+ config = lib.mkIf config.myServices.ftp.enable {
+ myServices.dns.zones."immae.eu".subdomains.ftp =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.espace-de-stockage = {
+ file.datetime = "2022-08-22T01:00:00";
+ service = {
+ name = "Espace de stockage";
+ description = "Compte FTP/SFTP";
+ logo = if pure-ftpd-enabled
+ then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png"
+ else if proftpd-enabled
+ then "http://proftpd.org/proftpd.png"
+ else "";
+ website = "ftp.immae.eu";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = if pure-ftpd-enabled then {
+ name = "Pure-ftpd";
+ website = "https://www.pureftpd.org/project/pure-ftpd/";
+ license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING";
+ license.name = "MIT Licence";
+ version = package.version;
+ source.url = "https://github.com/jedisct1/pure-ftpd/";
+ modules = "openssh";
+ } else if proftpd-enabled then {
+ name = "ProFTPD";
+ website = "http://proftpd.org/";
+ license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING";
+ license.name = "GNU General Public License v2.0";
+ version = pkgs.proftpd.version;
+ source.url = "https://github.com/proftpd/proftpd/";
+ modules = "openssh";
+ } else {};
+ };
+ #myServices.chatonsProperties.services.ftp = {
+ # file.datetime = "2022-08-22T01:00:00";
+ # service = {
+ # name = "Comptes FTP";
+ # description = "Compte FTP/SFTP";
+ # logo = if pure-ftpd-enabled
+ # then "https://www.pureftpd.org/project/pure-ftpd/images/favicon.png"
+ # else if proftpd-enabled
+ # then "http://proftpd.org/proftpd.png"
+ # else "";
+ # website = "ftp.immae.eu";
+ # status.level = "OK";
+ # status.description = "OK";
+ # registration."" = ["MEMBER" "CLIENT"];
+ # registration.load = "OPEN";
+ # install.type = "PACKAGE";
+ # };
+ # software = if pure-ftpd-enabled then {
+ # name = "Pure-ftpd";
+ # website = "https://www.pureftpd.org/project/pure-ftpd/";
+ # license.url = "https://github.com/jedisct1/pure-ftpd/blob/master/COPYING";
+ # license.name = "MIT Licence";
+ # version = package.version;
+ # source.url = "https://github.com/jedisct1/pure-ftpd/";
+ # } else if proftpd-enabled then {
+ # name = "ProFTPD";
+ # website = "http://proftpd.org/";
+ # license.url = "https://github.com/proftpd/proftpd/blob/master/COPYING";
+ # license.name = "GNU General Public License v2.0";
+ # version = pkgs.proftpd.version;
+ # source.url = "https://github.com/proftpd/proftpd/";
+ # } else {};
+ #};
+ security.acme.certs."ftp" = {
+ domain = "eldiron.immae.eu";
+ # FIXME: make it global
+ extraLegoRunFlags = ["--preferred-chain" "ISRG Root X1"];
+ extraLegoRenewFlags = ["--preferred-chain" "ISRG Root X1"];
+ postRun = (lib.optionalString pure-ftpd-enabled ''
+ systemctl restart pure-ftpd.service
+ '') + (lib.optionalString proftpd-enabled ''
+ systemctl restart proftpd.service
+ '');
+ extraDomainNames = [ "ftp.immae.eu" ];
+ };
+
+ networking = {
+ firewall = {
+ allowedTCPPorts = [ 21 115 ];
+ allowedTCPPortRanges = [ { from = 40000; to = 50000; } ];
+ };
+ };
+
+ users.users.ftp = {
+ uid = config.ids.uids.ftp; # 8
+ group = "ftp";
+ description = "Anonymous FTP user";
+ home = "/homeless-shelter";
+ extraGroups = [ "keys" ];
+ };
+
+ users.groups.ftp.gid = config.ids.gids.ftp;
+
+ system.activationScripts.ftp = ''
+ install -m 0755 -o ftp -g ftp -d /var/lib/ftp
+ '' + (lib.optionalString proftpd-enabled ''
+ install -m 0755 -o nobody -g nogroup -d /var/lib/proftpd/authorized_keys
+ '');
+
+ secrets.keys."pure-ftpd-ldap" = lib.mkIf pure-ftpd-enabled {
+ permissions = "0400";
+ user = "ftp";
+ group = "ftp";
+ text = ''
+ LDAPServer ${config.myEnv.ftp.ldap.host}
+ LDAPPort 389
+ LDAPUseTLS True
+ LDAPBaseDN ${config.myEnv.ftp.ldap.base}
+ LDAPBindDN ${config.myEnv.ftp.ldap.dn}
+ LDAPBindPW ${config.myEnv.ftp.ldap.password}
+ LDAPDefaultUID 500
+ LDAPForceDefaultUID False
+ LDAPDefaultGID 100
+ LDAPForceDefaultGID False
+ LDAPFilter ${config.myEnv.ftp.ldap.pure-ftpd_filter}
+
+ LDAPAuthMethod BIND
+
+ # Pas de possibilite de donner l'Uid/Gid !
+ # Compile dans pure-ftpd directement avec immaeFtpUid / immaeFtpGid
+ LDAPHomeDir immaeFtpDirectory
+ '';
+ };
+ secrets.keys."proftpd-ldap.conf" = lib.mkIf proftpd-enabled {
+ permissions = "0400";
+ user = "ftp";
+ group = "ftp";
+ text = ''
+ LDAPServer ldaps://${config.myEnv.ftp.ldap.host}:636/??sub
+ LDAPUseTLS on
+ LDAPAuthBinds on
+ LDAPBindDN "${config.myEnv.ftp.ldap.dn}" "${config.myEnv.ftp.ldap.password}"
+ LDAPSearchScope subtree
+ LDAPAuthBinds on
+ LDAPDefaultGID 100
+ LDAPDefaultUID 500
+ LDAPForceDefaultUID off
+ LDAPForceDefaultGID off
+ LDAPAttr gidNumber immaeFtpGid
+ LDAPAttr uidNumber immaeFtpUid
+ LDAPAttr homeDirectory immaeFtpDirectory
+ LDAPUsers "${config.myEnv.ftp.ldap.base}" "${config.myEnv.ftp.ldap.proftpd_filter}"
+ LDAPGroups "${config.myEnv.ftp.ldap.base}"
+ '';
+ };
+
+ services.filesWatcher.pure-ftpd = lib.mkIf pure-ftpd-enabled {
+ restart = true;
+ paths = [ config.secrets.fullPaths."pure-ftpd-ldap" ];
+ };
+ services.filesWatcher.proftpd = lib.mkIf proftpd-enabled {
+ restart = true;
+ paths = [ config.secrets.fullPaths."proftpd-ldap.conf" ];
+ };
+
+ systemd.services.pure-ftpd = let
+ configFile = pkgs.writeText "pure-ftpd.conf" ''
+ PassivePortRange 40000 50000
+ Bind 42
+ ChrootEveryone yes
+ CreateHomeDir yes
+ BrokenClientsCompatibility yes
+ MaxClientsNumber 50
+ Daemonize yes
+ MaxClientsPerIP 8
+ VerboseLog no
+ DisplayDotFiles yes
+ AnonymousOnly no
+ NoAnonymous no
+ SyslogFacility ftp
+ DontResolve yes
+ MaxIdleTime 15
+ LDAPConfigFile ${config.secrets.fullPaths."pure-ftpd-ldap"}
+ LimitRecursion 10000 8
+ AnonymousCanCreateDirs no
+ MaxLoad 4
+ AntiWarez yes
+ Umask 133:022
+ # ftp
+ MinUID 8
+ AllowUserFXP no
+ AllowAnonymousFXP no
+ ProhibitDotFilesWrite no
+ ProhibitDotFilesRead no
+ AutoRename no
+ AnonymousCantUpload no
+ MaxDiskUsage 99
+ CustomerProof yes
+ TLS 1
+ CertFile ${config.security.acme.certs.ftp.directory}/full.pem
+ '';
+ in lib.mkIf pure-ftpd-enabled {
+ description = "Pure-FTPd server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+
+ serviceConfig.ExecStart = "${package}/bin/pure-ftpd ${configFile}";
+ serviceConfig.Type = "forking";
+ serviceConfig.PIDFile = "/run/pure-ftpd.pid";
+ };
+
+ systemd.services.proftpd = let
+ configFile = pkgs.writeText "proftpd.conf" ''
+ ServerName "ProFTPD"
+ ServerType standalone
+ DefaultServer on
+
+ Port 21
+ UseIPv6 on
+ Umask 022
+ MaxInstances 30
+ MaxClients 50
+ MaxClientsPerHost 8
+
+ # Set the user and group under which the server will run.
+ User ftp
+ Group ftp
+
+ CreateHome on
+ DefaultRoot ~
+
+ AllowOverwrite on
+
+ TLSEngine on
+ TLSRequired off
+ TLSProtocol TLSv1.1 TLSv1.2 TLSv1.3
+
+ TLSCertificateChainFile ${config.security.acme.certs.ftp.directory}/fullchain.pem
+ TLSECCertificateFile ${config.security.acme.certs.ftp.directory}/cert.pem
+ TLSECCertificateKeyFile ${config.security.acme.certs.ftp.directory}/key.pem
+ TLSRenegotiate none
+ PidFile /run/proftpd/proftpd.pid
+
+ ScoreboardFile /run/proftpd/proftpd.scoreboard
+
+ PassivePorts 40000 50000
+ #DebugLevel 10
+ Include ${config.secrets.fullPaths."proftpd-ldap.conf"}
+
+ RequireValidShell off
+
+ # Bar use of SITE CHMOD by default
+
+ DenyAll
+
+
+
+ Umask 022
+ Port 115
+ SFTPEngine on
+ CreateHome on
+ DefaultRoot ~
+
+ AllowOverwrite on
+
+ SFTPHostKey /etc/ssh/ssh_host_ed25519_key
+ SFTPHostKey /etc/ssh/ssh_host_rsa_key
+ Include ${config.secrets.fullPaths."proftpd-ldap.conf"}
+ RequireValidShell off
+ SFTPAuthorizedUserKeys file:/var/lib/proftpd/authorized_keys/%u
+ SFTPAuthMethods password publickey
+
+ SFTPOptions IgnoreSFTPSetOwners
+ AllowChrootSymlinks off
+
+ '';
+ in lib.mkIf proftpd-enabled {
+ description = "ProFTPD server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+
+ serviceConfig.ExecStart = "${pkgs.proftpd}/bin/proftpd -c ${configFile}";
+ serviceConfig.Type = "forking";
+ serviceConfig.PIDFile = "/run/proftpd/proftpd.pid";
+ serviceConfig.RuntimeDirectory = "proftpd";
+ };
+
+ services.cron.systemCronJobs = lib.mkIf proftpd-enabled [
+ "*/2 * * * * nobody ${./ftp_sync.sh}"
+ ];
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "ftp" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "ftp has access to database for authentication";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = "check_ftp_database";
+
+ servicegroups = "webstatus-remote-services";
+ _webstatus_name = "FTP";
+ _webstatus_url = "ftp.immae.eu";
+ }
+
+ ];
+
+ };
+
+}
diff --git a/systems/eldiron/ftp_sync.sh b/systems/eldiron/ftp_sync.sh
new file mode 100755
index 0000000..aff7178
--- /dev/null
+++ b/systems/eldiron/ftp_sync.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env bash
+
+LDAPSEARCH=ldapsearch
+
+LDAP_BIND="cn=ssh,ou=services,dc=immae,dc=eu"
+LDAP_PASS=$(cat /etc/ssh/ldap_password)
+LDAP_HOST="ldap://ldap.immae.eu"
+LDAP_BASE="dc=immae,dc=eu"
+LDAP_FILTER="(memberOf=cn=users,cn=ftp,ou=services,dc=immae,dc=eu)"
+
+handle_keys() {
+ uids="$1"
+ keys="$2"
+ if [ -n "$uids" ]; then
+ for uid in $uids; do
+ echo "$keys" | while read key; do
+ if [ -n "$key" ]; then
+ ssh-keygen -e -f <(echo "$key")
+ fi
+ done > /var/lib/proftpd/authorized_keys/$uid
+ done
+ fi
+}
+
+mkdir -p /var/lib/proftpd/authorized_keys
+
+while read i; do
+ if [[ "$i" =~ ^dn: ]]; then
+ handle_keys "$uids" "$keys"
+ uids=""
+ keys=""
+ fi;
+ if [[ "$i" =~ ^uid: ]]; then
+ uids="$uids ${i#uid: }"
+ fi
+ if [[ "$i" =~ ^immaeSshKey: ]]; then
+ key="${i#immaeSshKey: }"
+ if [[ "$key" =~ ^ssh- ]]; then
+ keys="$keys
+$key"
+ elif echo "$key" | cut -d" " -f1 | grep -q "\bftp\b"; then
+ keys="$keys
+$(echo "$key" | cut -d" " -f2-)"
+ fi
+ fi
+done < <(ldapsearch -H "$LDAP_HOST" -ZZ -LLL -D "$LDAP_BIND" -w "$LDAP_PASS" -b "$LDAP_BASE" -x -o ldif-wrap=no "$LDAP_FILTER" uid immaeSshKey)
+handle_keys "$uids" "$keys"
diff --git a/systems/eldiron/gemini/default.nix b/systems/eldiron/gemini/default.nix
new file mode 100644
index 0000000..600afbc
--- /dev/null
+++ b/systems/eldiron/gemini/default.nix
@@ -0,0 +1,50 @@
+{ lib, config, pkgs, ... }:
+let
+ configFile = pkgs.writeText "config.yaml" ''
+ listen: ":1965"
+ hosts:
+ immae.eu:
+ cert: /var/lib/acme/immae/full.pem
+ key: /var/lib/acme/immae/key.pem
+ paths:
+ - path: /
+ root: ${./public}
+ '';
+in
+{
+ options.myServices.gemini.enable = lib.mkEnableOption "enable Gemini capsule";
+ config = lib.mkIf config.myServices.gemini.enable {
+ security.acme.certs.immae.postRun = ''
+ systemctl restart gemini.service
+ '';
+ myServices.chatonsProperties.hostings.gemini = {
+ file.datetime = "2022-08-27T18:00:00";
+ hosting = {
+ name = "Hébergement Gemini";
+ description = "Hébergement de capsules Gemini";
+ type = "INSTANCE";
+ website = "gemini://immae.eu";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "twins";
+ website = "https://code.rocketnine.space/tslocum/twins";
+ license.url = "https://code.rocketnine.space/tslocum/twins/src/branch/master/LICENSE";
+ license.name = "MIT License";
+ version = pkgs.twins.version;
+ source.url = "https://code.rocketnine.space/tslocum/twins";
+ };
+ };
+ networking.firewall.allowedTCPPorts = [ 1965 ];
+ systemd.services.gemini = {
+ description = "Gemini capsule server";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ serviceConfig.ExecStart = "${pkgs.twins}/bin/twins -config ${configFile}";
+ serviceConfig.Type = "simple";
+ };
+ };
+}
diff --git a/systems/eldiron/gemini/public/index.gmi b/systems/eldiron/gemini/public/index.gmi
new file mode 100644
index 0000000..034a0d9
--- /dev/null
+++ b/systems/eldiron/gemini/public/index.gmi
@@ -0,0 +1,70 @@
+# Immae
+
+## Présentation
+
+Dans le but de promouvoir la décentralisation des données personnelles et l’usage de logiciels open source, je propose un hébergement de divers services utiles. Ces services sont basés sur du code libre et déployés sur des systèmes libres également.
+
+Je suis un particulier, et dans la mesure de mes capacités, j’essaye toujours de fournir des services à ma famille et à mes amis proches en remplacement de services non libres fournis par les géants du web. J’ai décidé de faire le nécessaire pour étendre ces services à un public plus large, avec pour but de conserver une qualité suffisante.
+
+Lorsque c’est possible, les programmes que je développe sont également libres de droits (ce n’est pas toujours dépendant de ma volonté ou tributaire de ma disponibilité pour rendre le code accessible)
+
+Depuis juin 2019 je fais partie du collectif CHATONS, dont je respecte en particulier la charte:
+=> https://chatons.org CHATONS
+
+## Tarifs
+
+Je ne cherche pas à faire de profits en proposant ces services. Cependant, l’hébergement de ces services n’est pas gratuit, et maintenir ces services à un niveau de qualité suffisant demande de l’investissement en temps. Ainsi, selon l’usage désiré, le niveau de personnalisation et support dont vous avez besoin et les moyens à votre disposition et votre volonté, une participation pourra être demandée afin d’y accéder.
+=> https://www.immae.eu/licences_et_tip.html Tips
+
+## Services proposés
+
+Voici une liste non exhaustive de services que je propose :
+
+* Mastodon
+* Nextcloud
+* Calendrier/Contacts et synchronisation
+* Hébergement de vidéos (Mediagoblin)
+* Hébergement de vidéos (Peertube)
+* Kanboard
+* Flux RSS
+* "Lire plus tard" (wallabag)
+* Partage de liens (Shaarli)
+* Raccourcisseur d’URLs
+* Édition de texte collaborative
+* Réseau social
+* Hébergement de dépôts git privés et publics, gestion d’issues
+* Messagerie instantanée (XMPP/Jabber)
+* Comptes e-mails avec domaines personnalisés, IMAP/SMTP, MX backup
+* Hébergement et administration de sites web privés
+* Comptes shell protégés
+
+Un tableau de bord des services est disponible :
+=> https://tools.immae.eu Tableau de bord des services
+
+Je propose également de l’aide à distance (ou de visu si la distance est faible), pour l’usage de ces outils ou d’autres problèmes liés à l’informatique.
+
+Si vous ne voyez pas ce que vous voulez dans la liste, nous pourrons essayer de trouver une solution ensemble. Je suis ouvert aussi bien sûr à la création de nouveaux services (la liste est encore incomplète et d’autres services sont déjà prévus), dans le cadre défini en haut : basé sur des applications libres.
+
+=> https://status.immae.eu État des services
+
+## Comment faire ?
+
+Vous devez commencer par accepter les conditions générales dgutilisation :
+=> https://www.immae.eu/CGU Conditions générales d’utilisation
+Elles ne contiennent rien d’inhabituel mais elles ont été écrites par moi-même, donc sans jargon juridique. Elles vous permettront de décider si les garanties proposées sont en accord avec ce que vous pouvez vous permettre.
+
+Ensuite, contactez-moi avec vos vœux :
+=> https://www.immae.eu/contacts_fr.html Page de contact
+
+## Infrastructure et open source
+
+Dans le but de pouvoir décemment offrir une qualité de service suffisante sans pour autant y passer mes journées, l’installation des services est gérée via NixOS, permettant d’assurer la reproductibilité et l’automatisation des installations.
+
+Cette configuration est stockée publiquement dans un dépôt git, réutilisable et améliorable librement (avec probablement quelques ajustements).
+=> https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/ Dépôt git de la configuration
+
+
+=> https://www.immae.eu/contacts_fr.html Page de contact
+=> https://www.immae.eu/CGU Conditions générales d’utilisation
+=> https://www.immae.eu/mentions.html Mentions légales
+=> https://www.immae.eu/licences_et_tip.html Quelques informations sur les licences utilisées et tips
diff --git a/systems/eldiron/gitolite/default.nix b/systems/eldiron/gitolite/default.nix
new file mode 100644
index 0000000..1885234
--- /dev/null
+++ b/systems/eldiron/gitolite/default.nix
@@ -0,0 +1,127 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.gitolite;
+in {
+ options.myServices.gitolite = {
+ enable = lib.mkEnableOption "my gitolite service";
+ gitoliteDir = lib.mkOption {
+ type = lib.types.str;
+ default = "/var/lib/gitolite";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.git =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.gitolite = {
+ file.datetime = "2022-08-21T10:01:00";
+ service = {
+ name = "Gitolite";
+ description = "Gitolite allows you to setup git hosting on a central server, with fine-grained access control and many more powerful features.";
+ website = "https://git.immae.eu";
+ logo = "https://git.immae.eu/cgit-css/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+ };
+ software = {
+ name = "Gitolite";
+ website = "https://gitolite.com/gitolite/";
+ license.url = "https://github.com/sitaramc/gitolite/blob/master/COPYING";
+ license.name = "GNU General Public License v2.0";
+ version = pkgs.gitolite.version;
+ source.url = "https://github.com/sitaramc/gitolite";
+ };
+ };
+ myServices.ssh.modules.gitolite = {
+ snippet = builtins.readFile ./ldap_gitolite.sh;
+ dependencies = [ pkgs.gitolite ];
+ vars.ldap_group = "cn=users,cn=gitolite,ou=services,dc=immae,dc=eu";
+ vars.shell_path = "${pkgs.gitolite}/bin/gitolite-shell";
+ vars.services = let
+ toLine = login: key: ''command="${pkgs.gitolite}/bin/gitolite-shell ${login}",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ${key}'';
+ in builtins.concatStringsSep "\n" [
+ (toLine "naemon" config.myEnv.monitoring.ssh_public_key)
+ (toLine "buildbot" config.myEnv.buildbot.ssh_key.public)
+ ];
+ };
+ networking.firewall.allowedTCPPorts = [ 9418 ];
+
+ secrets.keys."gitolite/ldap_password" = {
+ user = "gitolite";
+ group = "gitolite";
+ permissions = "0400";
+ text = config.myEnv.tools.gitolite.ldap.password;
+ };
+
+ services.gitDaemon = {
+ enable = true;
+ user = "gitolite";
+ group = "gitolite";
+ basePath = "${cfg.gitoliteDir}/repositories";
+ };
+
+ system.activationScripts.gitolite = let
+ deps = [ pkgs.openldap pkgs.stdenv.shellPackage pkgs.gnugrep pkgs.coreutils ];
+ gitolite_ldap_groups = pkgs.runCommand "gitolite_ldap_groups.sh" {
+ buildInputs = [ pkgs.makeWrapper ];
+ } ''
+ makeWrapper "${./gitolite_ldap_groups.sh}" "$out" \
+ --prefix PATH : ${lib.makeBinPath deps} \
+ --set LDAP_PASS_PATH ${config.secrets.fullPaths."gitolite/ldap_password"}
+ '';
+ in {
+ deps = [ "users" ];
+ text = ''
+ if [ -d ${cfg.gitoliteDir} ]; then
+ ln -sf ${gitolite_ldap_groups} ${cfg.gitoliteDir}/gitolite_ldap_groups.sh
+ chmod g+rx ${cfg.gitoliteDir}
+ fi
+ if [ -f ${cfg.gitoliteDir}/projects.list ]; then
+ chmod g+r ${cfg.gitoliteDir}/projects.list
+ fi
+ '';
+ };
+
+ users.users.wwwrun.extraGroups = [ "gitolite" ];
+ users.users.gitolite.extraGroups = [ "keys" ];
+
+ users.users.gitolite.packages = let
+ python-packages = python-packages: with python-packages; [
+ simplejson
+ apprise
+ sleekxmpp
+ urllib3
+ pyyaml
+ ];
+ in
+ [
+ # For some reason it absolutely wants to include "doc" output
+ ((pkgs.python39.withPackages python-packages) // { doc = ""; })
+ pkgs.nettools
+ pkgs.findutils
+ ];
+ # Installation: https://git.immae.eu/mantisbt/view.php?id=93
+ services.gitolite = {
+ enable = true;
+ adminPubkey = config.myEnv.sshd.rootKeys.immae_dilion;
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "git" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "gitolite is working";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = "check_git";
+
+ servicegroups = "webstatus-remote-services";
+ _webstatus_name = "Git";
+ _webstatus_url = "git.immae.eu";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/gitolite/gitolite_ldap_groups.sh b/systems/eldiron/gitolite/gitolite_ldap_groups.sh
new file mode 100755
index 0000000..ffa2dab
--- /dev/null
+++ b/systems/eldiron/gitolite/gitolite_ldap_groups.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+uid_param="$1"
+ldap_host="ldap://ldap.immae.eu"
+ldap_binddn="cn=gitolite,ou=services,dc=immae,dc=eu"
+ldap_bindpw="$(cat $LDAP_PASS_PATH)"
+ldap_searchbase="dc=immae,dc=eu"
+ldap_scope="subtree"
+
+ldap_options="-H ${ldap_host} -ZZ -x -D ${ldap_binddn} -w ${ldap_bindpw} -b ${ldap_searchbase} -s ${ldap_scope}"
+
+ldap_filter="(&(memberOf=cn=groups,cn=gitolite,ou=services,dc=immae,dc=eu)(|(member=uid=${uid_param},ou=users,dc=immae,dc=eu)(member=uid=${uid_param},ou=group_users,dc=immae,dc=eu)))"
+ldap_result=$(ldapsearch ${ldap_options} -LLL "${ldap_filter}" cn | grep 'cn:' | cut -d' ' -f2)
+
+echo "$ldap_result"
diff --git a/systems/eldiron/gitolite/ldap_gitolite.sh b/systems/eldiron/gitolite/ldap_gitolite.sh
new file mode 100644
index 0000000..75a39bf
--- /dev/null
+++ b/systems/eldiron/gitolite/ldap_gitolite.sh
@@ -0,0 +1,28 @@
+### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh
+LDAP_GITOLITE_MEMBER="@gitolite_ldap_group@"
+GITOLITE_SHELL="@gitolite_shell_path@"
+
+if [[ $user == gitolite ]]; then
+ allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \
+ ldap_search '(memberOf='$LDAP_GITOLITE_MEMBER')' '' \
+ | grep ^dn \
+ | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \
+ | paste -sd,)
+
+ psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'git' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do
+ if [[ $user == "immae" ]] || [[ $user == "denise" ]]; then
+ # Capitalize first letter (backward compatibility)
+ user=$(sed -r 's/^([a-z])/\U\1/' <<< "$user")
+ fi
+ if [ ! -z "$key" ]; then
+ if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
+ echo -n 'command="'$GITOLITE_SHELL' '$user'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty '
+ echo $key
+ fi
+ fi
+ done
+cat <&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
+ ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Junk SEEN NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
+ ${pkgs.dovecot}/bin/doveadm expunge -A MAILBOX Trash NOT FLAGGED BEFORE 4w 2>&1 > /dev/null | grep -v "Mailbox doesn't exist:" | grep -v "Info: Opening DB"
+ '';
+ in
+ [
+ "0 2 * * * root ${cron_script}/bin/cleanup-imap-folders"
+ ];
+ security.acme.certs."mail-rsa" = {
+ postRun = ''
+ systemctl restart dovecot2.service
+ '';
+ extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ];
+ };
+ security.acme.certs."mail" = {
+ postRun = ''
+ systemctl restart dovecot2.service
+ '';
+ extraDomainNames = [ "imap.immae.eu" "pop3.immae.eu" ];
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "imap" "tcp" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "imap connection works";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = "check_imap_connection";
+
+ servicegroups = "webstatus-remote-services,webstatus-email";
+ _webstatus_name = "IMAP";
+ _webstatus_url = "imap.immae.eu";
+ }
+
+ {
+ service_description = "imap SSL is up to date";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = ["check_tcp_ssl" "993"];
+
+ servicegroups = "webstatus-ssl";
+ _webstatus_name = "IMAP";
+ _webstatus_url = "imap.immae.eu";
+ }
+
+ ];
+ };
+}
+
diff --git a/systems/eldiron/mail/postfix.nix b/systems/eldiron/mail/postfix.nix
new file mode 100644
index 0000000..f95ee1b
--- /dev/null
+++ b/systems/eldiron/mail/postfix.nix
@@ -0,0 +1,497 @@
+{ lib, pkgs, config, options, ... }:
+let
+ getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) (lib.filterAttrs (n: v: v.receive) p.emailPolicies);
+ bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones;
+ receiving_domains = lib.flatten (builtins.attrValues bydomain);
+in
+{
+ options.services.postfix.submissionOptions' = options.services.postfix.submissionOptions // {
+ type = with lib.types; attrsOf (either str (listOf str));
+ apply = builtins.mapAttrs (n: v: if builtins.isList v then builtins.concatStringsSep "," v else v);
+ };
+ config = lib.mkIf config.myServices.mail.enable {
+ myServices.dns.zones."immae.eu" = with config.myServices.dns.helpers; lib.mkMerge [
+ mailMX
+ (mailCommon "immae.eu")
+ mailSend
+ {
+ # Virtual forwards and mailboxes for real users
+ emailPolicies."mail".receive = true;
+ # multi-domain generic mails:
+ # hostmaster, cron, httpd, naemon, postmaster
+ # system virtual mailboxes:
+ # devnull, printer, testconnect
+ emailPolicies."".receive = true;
+ subdomains.mail = lib.mkMerge [ (mailCommon "immae.eu") mailSend ];
+ subdomains.smtp = ips servers.eldiron.ips.main;
+
+ # DMARC reports
+ subdomains._dmarc.subdomains._report.subdomains = let
+ getDomains = p: lib.mapAttrsToList (n: v: v.fqdn) p.emailPolicies;
+ bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones;
+ hostsWithMail = lib.flatten (builtins.attrValues bydomain);
+ nvpairs = builtins.map (e: { name = e; value = { TXT = [ "v=DMARC1;" ]; }; }) hostsWithMail;
+ in
+ builtins.listToAttrs nvpairs;
+ }
+ ];
+
+ myServices.chatonsProperties.hostings.mx-backup = {
+ file.datetime = "2022-08-22T01:00:00";
+ hosting = {
+ name = "MX Backup";
+ description = "Serveur e-mail secondaire";
+ logo = "https://www.postfix.org/favicon.ico";
+ website = "https://mail.immae.eu/";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Postfix";
+ website = "http://www.postfix.org/";
+ license.url = "http://postfix.mirrors.ovh.net/postfix-release/LICENSE";
+ license.name = "Eclipse Public license (EPL 2.0) and IBM Public License (IPL 1.0)";
+ version = pkgs.postfix.version;
+ source.url = "http://www.postfix.org/download.html";
+ };
+ };
+ secrets.keys = {
+ "postfix/mysql_alias_maps" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ # We need to specify that option to trigger ssl connection
+ tls_ciphers = TLSv1.2
+ user = ${config.myEnv.mail.postfix.mysql.user}
+ password = ${config.myEnv.mail.postfix.mysql.password}
+ hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
+ dbname = ${config.myEnv.mail.postfix.mysql.database}
+ query = SELECT DISTINCT destination
+ FROM forwardings
+ WHERE
+ ((regex = 1 AND '%s' REGEXP CONCAT('^',source,'$') ) OR (regex = 0 AND source = '%s'))
+ AND active = 1
+ AND '%s' NOT IN
+ (
+ SELECT source
+ FROM forwardings_blacklisted
+ WHERE source = '%s'
+ ) UNION
+ SELECT 'devnull@immae.eu'
+ FROM forwardings_blacklisted
+ WHERE source = '%s'
+ '';
+ };
+ "postfix/ldap_mailboxes" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ server_host = ldaps://${config.myEnv.mail.dovecot.ldap.host}:636
+ search_base = ${config.myEnv.mail.dovecot.ldap.base}
+ query_filter = ${config.myEnv.mail.dovecot.ldap.postfix_mailbox_filter}
+ bind_dn = ${config.myEnv.mail.dovecot.ldap.dn}
+ bind_pw = ${config.myEnv.mail.dovecot.ldap.password}
+ result_attribute = immaePostfixAddress
+ result_format = dummy
+ version = 3
+ '';
+ };
+ "postfix/mysql_sender_login_maps" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ # We need to specify that option to trigger ssl connection
+ tls_ciphers = TLSv1.2
+ user = ${config.myEnv.mail.postfix.mysql.user}
+ password = ${config.myEnv.mail.postfix.mysql.password}
+ hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
+ dbname = ${config.myEnv.mail.postfix.mysql.database}
+ query = SELECT DISTINCT destination
+ FROM forwardings
+ WHERE
+ (
+ (regex = 1 AND CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') REGEXP CONCAT('^',source,'$') )
+ OR
+ (regex = 0 AND source = CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d'))
+ )
+ AND active = 1
+ UNION SELECT CONCAT(SUBSTRING_INDEX('%u', '+', 1), '@%d') AS destination
+ '';
+ };
+ "postfix/mysql_sender_relays_maps" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ # We need to specify that option to trigger ssl connection
+ tls_ciphers = TLSv1.2
+ user = ${config.myEnv.mail.postfix.mysql.user}
+ password = ${config.myEnv.mail.postfix.mysql.password}
+ hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
+ dbname = ${config.myEnv.mail.postfix.mysql.database}
+ # INSERT INTO sender_relays
+ # (`from`, owner, relay, login, password, regex, active)
+ # VALUES
+ # ( 'sender@otherhost.org'
+ # , 'me@mail.immae.eu'
+ # , '[otherhost.org]:587'
+ # , 'otherhostlogin'
+ # , AES_ENCRYPT('otherhostpassword', '${config.myEnv.mail.postfix.mysql.password_encrypt}')
+ # , '0'
+ # , '1');
+
+ query = SELECT DISTINCT `owner`
+ FROM sender_relays
+ WHERE
+ ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
+ AND active = 1
+ '';
+ };
+ "postfix/mysql_sender_relays_hosts" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ # We need to specify that option to trigger ssl connection
+ tls_ciphers = TLSv1.2
+ user = ${config.myEnv.mail.postfix.mysql.user}
+ password = ${config.myEnv.mail.postfix.mysql.password}
+ hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
+ dbname = ${config.myEnv.mail.postfix.mysql.database}
+
+ query = SELECT DISTINCT relay
+ FROM sender_relays
+ WHERE
+ ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
+ AND active = 1
+ '';
+ };
+ "postfix/mysql_sender_relays_creds" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ # We need to specify that option to trigger ssl connection
+ tls_ciphers = TLSv1.2
+ user = ${config.myEnv.mail.postfix.mysql.user}
+ password = ${config.myEnv.mail.postfix.mysql.password}
+ hosts = unix:${config.myEnv.mail.postfix.mysql.socket}
+ dbname = ${config.myEnv.mail.postfix.mysql.database}
+
+ query = SELECT DISTINCT CONCAT(`login`, ':', AES_DECRYPT(`password`, '${config.myEnv.mail.postfix.mysql.password_encrypt}'))
+ FROM sender_relays
+ WHERE
+ ((regex = 1 AND '%s' REGEXP CONCAT('^',`from`,'$') ) OR (regex = 0 AND `from` = '%s'))
+ AND active = 1
+ '';
+ };
+ "postfix/ldap_ejabberd_users_immae_fr" = {
+ user = config.services.postfix.user;
+ group = config.services.postfix.group;
+ permissions = "0440";
+ text = ''
+ server_host = ldaps://${config.myEnv.jabber.ldap.host}:636
+ search_base = ${config.myEnv.jabber.ldap.base}
+ query_filter = ${config.myEnv.jabber.postfix_user_filter}
+ domain = immae.fr
+ bind_dn = ${config.myEnv.jabber.ldap.dn}
+ bind_pw = ${config.myEnv.jabber.ldap.password}
+ result_attribute = immaeXmppUid
+ result_format = ejabberd@localhost
+ version = 3
+ '';
+ };
+ };
+
+ networking.firewall.allowedTCPPorts = [ 25 465 587 ];
+
+ users.users.postfixscripts = {
+ group = "keys";
+ uid = config.ids.uids.postfixscripts;
+ description = "Postfix scripts user";
+ };
+ users.users."${config.services.postfix.user}".extraGroups = [ "keys" ];
+ services.filesWatcher.postfix = {
+ restart = true;
+ paths = [
+ config.secrets.fullPaths."postfix/mysql_alias_maps"
+ config.secrets.fullPaths."postfix/ldap_mailboxes"
+ config.secrets.fullPaths."postfix/mysql_sender_login_maps"
+ config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"
+ ];
+ };
+ services.postfix = {
+ extraAliases = let
+ testmail = pkgs.writeScript "testmail" ''
+ #! ${pkgs.stdenv.shell}
+ ${pkgs.coreutils}/bin/touch \
+ "/var/lib/naemon/checks/email/$(${pkgs.procmail}/bin/formail -x To: | ${pkgs.coreutils}/bin/tr -d ' <>')"
+ '';
+ in
+ ''testmail: "|${testmail}"'';
+ mapFiles = let
+ virtual_map = {
+ virtual = let
+ cfg = config.myEnv.monitoring.email_check.eldiron;
+ address = "${cfg.mail_address}@${cfg.mail_domain}";
+ aliases = config.myEnv.mail.postfix.common_aliases;
+ admins = builtins.concatStringsSep "," config.myEnv.mail.postfix.admins;
+ in pkgs.writeText "postfix-virtual" (
+ builtins.concatStringsSep "\n" (
+ [ "${address} testmail@localhost"
+ ] ++
+ map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases
+ ++ lib.lists.flatten (
+ map (domain:
+ map (alias: "${alias}@${domain} ${admins}") aliases
+ ) receiving_domains
+ )
+ ));
+ };
+ sasl_access = {
+ host_sender_login = with lib.attrsets; let
+ addresses = zipAttrs (lib.flatten (mapAttrsToList
+ (n: v: (map (e: { "${e}" = "${n}@immae.eu"; }) v.emails)) config.myEnv.servers));
+ aliases = config.myEnv.mail.postfix.common_aliases;
+ joined = builtins.concatStringsSep ",";
+ admins = joined config.myEnv.mail.postfix.admins;
+ in pkgs.writeText "host-sender-login"
+ (builtins.concatStringsSep "\n" (
+ mapAttrsToList (n: v: "${n} ${joined v}") addresses
+ ++ lib.lists.flatten (
+ map (domain:
+ map (alias: "${alias}@${domain} ${admins}") aliases
+ ) receiving_domains
+ )
+ ++ map (a: "${a} ${admins}") config.myEnv.mail.postfix.other_aliases
+ ));
+ };
+ in
+ virtual_map // sasl_access;
+ config = {
+ ### postfix module overrides
+ readme_directory = "${pkgs.postfix}/share/postfix/doc";
+ smtp_tls_CAfile = lib.mkForce "";
+ smtp_tls_cert_file = lib.mkForce "";
+ smtp_tls_key_file = lib.mkForce "";
+
+ message_size_limit = "1073741824"; # Don't put 0 here, it's not equivalent to "unlimited"
+ mailbox_size_limit = "1073741825"; # Workaround, local delivered mails should all go through scripts
+ alias_database = "\$alias_maps";
+
+ ### Aliases scripts user
+ default_privs = "postfixscripts";
+
+ ### Virtual mailboxes config
+ virtual_alias_maps = [
+ "hash:/etc/postfix/virtual"
+ "mysql:${config.secrets.fullPaths."postfix/mysql_alias_maps"}"
+ "ldap:${config.secrets.fullPaths."postfix/ldap_ejabberd_users_immae_fr"}"
+ ];
+ virtual_mailbox_domains = receiving_domains;
+ virtual_mailbox_maps = [
+ "ldap:${config.secrets.fullPaths."postfix/ldap_mailboxes"}"
+ ];
+ dovecot_destination_recipient_limit = "1";
+ virtual_transport = "dovecot";
+
+ ### Relay domains
+ smtpd_relay_restrictions = [
+ "defer_unauth_destination"
+ ];
+
+ ### Additional smtpd configuration
+ smtpd_tls_received_header = "yes";
+ smtpd_tls_loglevel = "1";
+
+ ### Email sending configuration
+ smtp_tls_security_level = "may";
+ smtp_tls_loglevel = "1";
+
+ ### Force ip bind for smtp
+ smtp_bind_address = builtins.head config.hostEnv.ips.main.ip4;
+ smtp_bind_address6 = builtins.head config.hostEnv.ips.main.ip6;
+
+ # Use some relays when authorized senders are not myself
+ smtp_sasl_mechanism_filter = [
+ "plain"
+ "login"
+ ]; # GSSAPI Not correctly supported by postfix
+ smtp_sasl_auth_enable = "yes";
+ smtp_sasl_password_maps = [
+ "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_creds"}"
+ ];
+ smtp_sasl_security_options = "noanonymous";
+ smtp_sender_dependent_authentication = "yes";
+ sender_dependent_relayhost_maps = [
+ "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_hosts"}"
+ ];
+
+ ### opendkim, opendmarc, openarc milters
+ non_smtpd_milters = [
+ "unix:${config.myServices.mail.milters.sockets.opendkim}"
+ ];
+ smtpd_milters = [
+ "unix:${config.myServices.mail.milters.sockets.opendkim}"
+ "unix:${config.myServices.mail.milters.sockets.openarc}"
+ "unix:${config.myServices.mail.milters.sockets.opendmarc}"
+ ];
+
+ smtp_use_tls = true;
+ smtpd_use_tls = true;
+ smtpd_tls_chain_files = [
+ "/var/lib/acme/mail/full.pem"
+ "/var/lib/acme/mail-rsa/full.pem"
+ ];
+
+ maximal_queue_lifetime = "6w";
+ bounce_queue_lifetime = "6w";
+ };
+ enable = true;
+ enableSmtp = true;
+ enableSubmission = true;
+ submissionOptions = config.services.postfix.submissionOptions';
+ submissionOptions' = {
+ # Don’t use "long form", only commas (cf
+ # http://www.postfix.org/master.5.html long form is not handled
+ # well by the submission function)
+ smtpd_tls_security_level = "encrypt";
+ smtpd_sasl_auth_enable = "yes";
+ smtpd_tls_auth_only = "yes";
+ smtpd_sasl_tls_security_options = "noanonymous";
+ smtpd_sasl_type = "dovecot";
+ smtpd_sasl_path = "private/auth";
+ smtpd_reject_unlisted_recipient = "no";
+ smtpd_client_restrictions = [
+ "permit_sasl_authenticated"
+ "reject"
+ ];
+ smtpd_relay_restrictions = [
+ "permit_sasl_authenticated"
+ "reject"
+ ];
+ # Refuse to send e-mails with a From that is not handled
+ smtpd_sender_restrictions = [
+ "reject_sender_login_mismatch"
+ "reject_unlisted_sender"
+ "permit_sasl_authenticated,reject"
+ ];
+ smtpd_sender_login_maps = [
+ "hash:/etc/postfix/host_sender_login"
+ "mysql:${config.secrets.fullPaths."postfix/mysql_sender_relays_maps"}"
+ "mysql:${config.secrets.fullPaths."postfix/mysql_sender_login_maps"}"
+ ];
+ smtpd_recipient_restrictions = [
+ "permit_sasl_authenticated"
+ "reject"
+ ];
+ milter_macro_daemon_name = "ORIGINATING";
+ smtpd_milters = [
+ # FIXME: put it back when opensmtpd is upgraded and able to
+ # rewrite the from header
+ #"unix:/run/milter_verify_from/verify_from.sock"
+ "unix:${config.myServices.mail.milters.sockets.opendkim}"
+ ];
+ };
+ destination = ["localhost"];
+ # This needs to reverse DNS
+ hostname = config.hostEnv.fqdn;
+ setSendmail = true;
+ recipientDelimiter = "+";
+ masterConfig = {
+ submissions = {
+ type = "inet";
+ private = false;
+ command = "smtpd";
+ args = ["-o" "smtpd_tls_wrappermode=yes" ] ++ (let
+ mkKeyVal = opt: val: [ "-o" (opt + "=" + val) ];
+ in lib.concatLists (lib.mapAttrsToList mkKeyVal config.services.postfix.submissionOptions)
+ );
+ };
+ dovecot = {
+ type = "unix";
+ privileged = true;
+ chroot = false;
+ command = "pipe";
+ args = let
+ # rspamd could be used as a milter, but then it cannot apply
+ # its checks "per user" (milter is not yet dispatched to
+ # users), so we wrap dovecot-lda inside rspamc per recipient
+ # here.
+ rspamc_dovecot = pkgs.writeScriptBin "rspamc_dovecot" ''
+ #! ${pkgs.stdenv.shell}
+ set -o pipefail
+ sender="$1"
+ original_recipient="$2"
+ user="$3"
+
+ ${pkgs.coreutils}/bin/cat - | \
+ ${pkgs.rspamd}/bin/rspamc -h ${config.myServices.mail.rspamd.sockets.worker-controller} -c bayes -d "$user" --mime | \
+ ${pkgs.dovecot}/libexec/dovecot/dovecot-lda -f "$sender" -a "$original_recipient" -d "$user"
+ if echo ''${PIPESTATUS[@]} | ${pkgs.gnugrep}/bin/grep -qE '^[0 ]+$'; then
+ exit 0
+ else
+ # src/global/sys_exits.h to retry
+ exit 75
+ fi
+ '';
+ in [
+ "flags=ODRhu" "user=vhost:vhost"
+ "argv=${rspamc_dovecot}/bin/rspamc_dovecot \${sender} \${original_recipient} \${user}@\${nexthop}"
+ ];
+ };
+ };
+ };
+ security.acme.certs."mail" = {
+ postRun = ''
+ systemctl restart postfix.service
+ '';
+ extraDomainNames = [ "smtp.immae.eu" ];
+ };
+ security.acme.certs."mail-rsa" = {
+ postRun = ''
+ systemctl restart postfix.service
+ '';
+ extraDomainNames = [ "smtp.immae.eu" ];
+ };
+ system.activationScripts.testmail = {
+ deps = [ "users" ];
+ text = let
+ allCfg = config.myEnv.monitoring.email_check;
+ cfg = allCfg.eldiron;
+ reverseTargets = builtins.attrNames (lib.attrsets.filterAttrs (k: v: builtins.elem "eldiron" v.targets) allCfg);
+ to_email = cfg': host':
+ let sep = if lib.strings.hasInfix "+" cfg'.mail_address then "_" else "+";
+ in "${cfg'.mail_address}${sep}${host'}@${cfg'.mail_domain}";
+ mails_to_receive = builtins.concatStringsSep " " (map (to_email cfg) reverseTargets);
+ in ''
+ install -m 0555 -o postfixscripts -g keys -d /var/lib/naemon/checks/email
+ for f in ${mails_to_receive}; do
+ if [ ! -f /var/lib/naemon/checks/email/$f ]; then
+ install -m 0644 -o postfixscripts -g keys /dev/null -T /var/lib/naemon/checks/email/$f
+ touch -m -d @0 /var/lib/naemon/checks/email/$f
+ fi
+ done
+ '';
+ };
+ systemd.services.postfix.serviceConfig.Slice = "mail.slice";
+
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "postfix SSL is up to date";
+ host_name = config.hostEnv.fqdn;
+ use = "external-service";
+ check_command = "check_smtp";
+
+ servicegroups = "webstatus-ssl";
+ _webstatus_name = "SMTP";
+ _webstatus_url = "smtp.immae.eu";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/mail/rspamd.nix b/systems/eldiron/mail/rspamd.nix
new file mode 100644
index 0000000..a300cc5
--- /dev/null
+++ b/systems/eldiron/mail/rspamd.nix
@@ -0,0 +1,88 @@
+{ lib, pkgs, config, ... }:
+{
+ options.myServices.mail.rspamd.sockets = lib.mkOption {
+ type = lib.types.attrsOf lib.types.path;
+ default = {
+ worker-controller = "/run/rspamd/worker-controller.sock";
+ };
+ readOnly = true;
+ description = ''
+ rspamd sockets
+ '';
+ };
+ config = lib.mkIf config.myServices.mail.enable {
+ services.cron.systemCronJobs = let
+ cron_script = pkgs.runCommand "cron_script" {
+ buildInputs = [ pkgs.makeWrapper ];
+ } ''
+ mkdir -p $out
+ cp ${./scan_reported_mails} $out/scan_reported_mails
+ patchShebangs $out
+ for i in $out/*; do
+ wrapProgram "$i" --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils pkgs.rspamd pkgs.flock ]}
+ done
+ '';
+ in
+ [ "*/20 * * * * vhost ${cron_script}/scan_reported_mails" ];
+
+ systemd.services.rspamd.serviceConfig.Slice = "mail.slice";
+ systemd.services.rspamd.serviceConfig.SupplementaryGroups = [ "vhost" ];
+ services.rspamd = {
+ enable = true;
+ debug = false;
+ overrides = {
+ "actions.conf".text = ''
+ reject = null;
+ add_header = 6;
+ greylist = null;
+ '';
+ "milter_headers.conf".text = ''
+ extended_spam_headers = true;
+ '';
+ };
+ locals = {
+ "redis.conf".text = ''
+ servers = "${config.myEnv.mail.rspamd.redis.socket}";
+ db = "${config.myEnv.mail.rspamd.redis.db}";
+ '';
+ "classifier-bayes.conf".text = ''
+ users_enabled = true;
+ backend = "redis";
+ servers = "${config.myEnv.mail.rspamd.redis.socket}";
+ database = "${config.myEnv.mail.rspamd.redis.db}";
+ autolearn = true;
+ cache {
+ backend = "redis";
+ }
+ new_schema = true;
+ statfile {
+ BAYES_HAM {
+ spam = false;
+ }
+ BAYES_SPAM {
+ spam = true;
+ }
+ }
+ '';
+ };
+ workers = {
+ controller = {
+ extraConfig = ''
+ enable_password = "${config.myEnv.mail.rspamd.write_password_hashed}";
+ password = "${config.myEnv.mail.rspamd.read_password_hashed}";
+ '';
+ bindSockets = [ {
+ socket = config.myServices.mail.rspamd.sockets.worker-controller;
+ mode = "0660";
+ owner = config.services.rspamd.user;
+ group = "vhost";
+ } ];
+ };
+ };
+ postfix = {
+ enable = true;
+ config = {};
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/mail/scan_reported_mails b/systems/eldiron/mail/scan_reported_mails
new file mode 100755
index 0000000..fe9f4d6
--- /dev/null
+++ b/systems/eldiron/mail/scan_reported_mails
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+( flock -n 9 || exit 1
+shopt -s nullglob
+for spool in /var/lib/vhost/.rspamd/*/pending; do
+ rspamd_folder=$(dirname $spool)
+ mail_user=$(basename $rspamd_folder)
+ mv $rspamd_folder/pending $rspamd_folder/processing
+
+ for mtype in ham spam; do
+ if [ -d $rspamd_folder/processing/$mtype ]; then
+ output="$(rspamc -h /run/rspamd/worker-controller.sock -c bayes -d $mail_user learn_$mtype $rspamd_folder/processing/$mtype/*)"
+ echo "[$mtype: $mail_user]" ${output} >> /var/lib/vhost/.rspamd/rspamd.log
+ mkdir -p $rspamd_folder/processed/$mtype
+ cp $rspamd_folder/processing/$mtype/* $rspamd_folder/processed/$mtype/
+ fi
+ done
+
+ rm -rf $rspamd_folder/processing
+done
+) 9>/var/lib/vhost/scan_reported_mails.lock
diff --git a/systems/eldiron/mail/sieve_bin/imapsieve_copy b/systems/eldiron/mail/sieve_bin/imapsieve_copy
new file mode 100755
index 0000000..2ca1f23
--- /dev/null
+++ b/systems/eldiron/mail/sieve_bin/imapsieve_copy
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+# Inspired from https://docs.iredmail.org/dovecot.imapsieve.html
+
+MSG_TYPE="$1"
+OUTPUT_DIR="/var/lib/vhost/.rspamd/${USER}/pending/${MSG_TYPE}"
+FILE="${OUTPUT_DIR}/$(date +%Y%m%d%H%M%S)-${RANDOM}${RANDOM}.eml"
+mkdir -p "${OUTPUT_DIR}"
+cat > ${FILE} < /dev/stdin
diff --git a/systems/eldiron/mail/sieve_scripts/backup.sieve b/systems/eldiron/mail/sieve_scripts/backup.sieve
new file mode 100644
index 0000000..3014c0a
--- /dev/null
+++ b/systems/eldiron/mail/sieve_scripts/backup.sieve
@@ -0,0 +1,7 @@
+# vim: filetype=sieve
+require ["copy","mailbox","fileinto","regex"];
+if header :is "X-Spam" "Yes" {
+ fileinto :create :copy "Backup/Spam";
+} else {
+ fileinto :create :copy "Backup/Ham";
+}
diff --git a/systems/eldiron/mail/sieve_scripts/report_ham.sieve b/systems/eldiron/mail/sieve_scripts/report_ham.sieve
new file mode 100644
index 0000000..f9b8481
--- /dev/null
+++ b/systems/eldiron/mail/sieve_scripts/report_ham.sieve
@@ -0,0 +1,11 @@
+require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
+
+if environment :matches "imap.mailbox" "*" {
+ set "mailbox" "${1}";
+}
+
+if string "${mailbox}" "Trash" {
+ stop;
+}
+
+pipe :copy "imapsieve_copy" [ "ham" ];
diff --git a/systems/eldiron/mail/sieve_scripts/report_spam.sieve b/systems/eldiron/mail/sieve_scripts/report_spam.sieve
new file mode 100644
index 0000000..9a1f794
--- /dev/null
+++ b/systems/eldiron/mail/sieve_scripts/report_spam.sieve
@@ -0,0 +1,3 @@
+require ["vnd.dovecot.pipe", "copy", "imapsieve" ];
+
+pipe :copy "imapsieve_copy" [ "spam" ];
diff --git a/systems/eldiron/mail/sympa.nix b/systems/eldiron/mail/sympa.nix
new file mode 100644
index 0000000..8e801dd
--- /dev/null
+++ b/systems/eldiron/mail/sympa.nix
@@ -0,0 +1,232 @@
+{ lib, pkgs, config, ... }:
+let
+ domain = "lists.immae.eu";
+ sympaConfig = config.myEnv.mail.sympa;
+in
+{
+ config = lib.mkIf config.myServices.mail.enable {
+ myServices.dns.zones."immae.eu".emailPolicies."lists".receive = true;
+ myServices.dns.zones."immae.eu".subdomains.lists =
+ with config.myServices.dns.helpers; lib.mkMerge [
+ (ips servers.eldiron.ips.main)
+ (mailCommon "immae.eu")
+ mailSend
+ ];
+
+ myServices.chatonsProperties.services.sympa = {
+ file.datetime = "2022-08-22T00:50:00";
+ service = {
+ name = "Sympa";
+ description = "Mailing lists service";
+ website = "https://mail.immae.eu/sympa";
+ logo = "https://mail.immae.eu/static-sympa/icons/favicon_sympa.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Sympa";
+ website = "https://www.sympa.org/";
+ license.url = "https://github.com/sympa-community/sympa/blob/sympa-6.2/COPYING";
+ license.name = "GNU General Public License v2.0";
+ version = pkgs.sympa.version;
+ source.url = "https://github.com/sympa-community/sympa/";
+ };
+ };
+ myServices.databases.postgresql.authorizedHosts = {
+ backup-2 = [
+ {
+ username = "sympa";
+ database = "sympa";
+ ip4 = config.myEnv.servers.backup-2.ips.main.ip4;
+ ip6 = map (v: "${v}/128") config.myEnv.servers.backup-2.ips.main.ip6;
+ }
+ ];
+ };
+ services.websites.env.tools.vhostConfs.mail = {
+ extraConfig = lib.mkAfter [
+ ''
+ Alias /static-sympa/ /var/lib/sympa/static_content/
+
+ Require all granted
+ AllowOverride none
+
+
+ SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://"
+ Require all granted
+
+ ''
+ ];
+ };
+
+ secrets.keys = {
+ "sympa/db_password" = {
+ permissions = "0400";
+ group = "sympa";
+ user = "sympa";
+ text = sympaConfig.postgresql.password;
+ };
+ }
+ // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/data_sources/${n}.incl" {
+ permissions = "0400"; group = "sympa"; user = "sympa"; text = v;
+ }) sympaConfig.data_sources
+ // lib.mapAttrs' (n: v: lib.nameValuePair "sympa/scenari/${n}" {
+ permissions = "0400"; group = "sympa"; user = "sympa"; text = v;
+ }) sympaConfig.scenari;
+ users.users.sympa.extraGroups = [ "keys" ];
+ systemd.slices.mail-sympa = {
+ description = "Sympa slice";
+ };
+
+ systemd.services.sympa.serviceConfig.SupplementaryGroups = [ "keys" ];
+ systemd.services.sympa-archive.serviceConfig.SupplementaryGroups = [ "keys" ];
+ systemd.services.sympa-bounce.serviceConfig.SupplementaryGroups = [ "keys" ];
+ systemd.services.sympa-bulk.serviceConfig.SupplementaryGroups = [ "keys" ];
+ systemd.services.sympa-task.serviceConfig.SupplementaryGroups = [ "keys" ];
+
+ systemd.services.sympa.serviceConfig.Slice = "mail-sympa.slice";
+ systemd.services.sympa-archive.serviceConfig.Slice = "mail-sympa.slice";
+ systemd.services.sympa-bounce.serviceConfig.Slice = "mail-sympa.slice";
+ systemd.services.sympa-bulk.serviceConfig.Slice = "mail-sympa.slice";
+ systemd.services.sympa-task.serviceConfig.Slice = "mail-sympa.slice";
+
+ # https://github.com/NixOS/nixpkgs/pull/84202
+ systemd.services.sympa.serviceConfig.ProtectKernelModules = lib.mkForce false;
+ systemd.services.sympa-archive.serviceConfig.ProtectKernelModules = lib.mkForce false;
+ systemd.services.sympa-bounce.serviceConfig.ProtectKernelModules = lib.mkForce false;
+ systemd.services.sympa-bulk.serviceConfig.ProtectKernelModules = lib.mkForce false;
+ systemd.services.sympa-task.serviceConfig.ProtectKernelModules = lib.mkForce false;
+ systemd.services.sympa.serviceConfig.ProtectKernelTunables = lib.mkForce false;
+ systemd.services.sympa-archive.serviceConfig.ProtectKernelTunables = lib.mkForce false;
+ systemd.services.sympa-bounce.serviceConfig.ProtectKernelTunables = lib.mkForce false;
+ systemd.services.sympa-bulk.serviceConfig.ProtectKernelTunables = lib.mkForce false;
+ systemd.services.sympa-task.serviceConfig.ProtectKernelTunables = lib.mkForce false;
+
+ systemd.services.wwsympa = {
+ wantedBy = [ "multi-user.target" ];
+ after = [ "sympa.service" ];
+ serviceConfig = {
+ Slice = "mail-sympa.slice";
+ Type = "forking";
+ PIDFile = "/run/sympa/wwsympa.pid";
+ Restart = "always";
+ ExecStart = ''${pkgs.spawn_fcgi}/bin/spawn-fcgi \
+ -u sympa \
+ -g sympa \
+ -U wwwrun \
+ -M 0600 \
+ -F 2 \
+ -P /run/sympa/wwsympa.pid \
+ -s /run/sympa/wwsympa.socket \
+ -- ${pkgs.sympa}/lib/sympa/cgi/wwsympa.fcgi
+ '';
+ StateDirectory = "sympa";
+ ProtectHome = true;
+ ProtectSystem = "full";
+ ProtectControlGroups = true;
+ };
+ };
+
+ services.postfix = {
+ mapFiles = {
+ # Update relay list when changing one of those
+ sympa_virtual = pkgs.writeText "virtual.sympa" ''
+ sympa-request@${domain} postmaster@immae.eu
+ sympa-owner@${domain} postmaster@immae.eu
+ '';
+ sympa_transport = pkgs.writeText "transport.sympa" ''
+ ${domain} error:User unknown in recipient table
+ sympa@${domain} sympa:sympa@${domain}
+ listmaster@${domain} sympa:listmaster@${domain}
+ bounce@${domain} sympabounce:sympa@${domain}
+ abuse-feedback-report@${domain} sympabounce:sympa@${domain}
+ '';
+ };
+ config = {
+ transport_maps = lib.mkAfter [
+ "hash:/etc/postfix/sympa_transport"
+ "hash:/var/lib/sympa/sympa_transport"
+ ];
+ virtual_alias_maps = lib.mkAfter [
+ "hash:/etc/postfix/sympa_virtual"
+ ];
+ virtual_mailbox_maps = lib.mkAfter [
+ "hash:/etc/postfix/sympa_transport"
+ "hash:/var/lib/sympa/sympa_transport"
+ "hash:/etc/postfix/sympa_virtual"
+ ];
+ };
+ masterConfig = {
+ sympa = {
+ type = "unix";
+ privileged = true;
+ chroot = false;
+ command = "pipe";
+ args = [
+ "flags=hqRu"
+ "user=sympa"
+ "argv=${pkgs.sympa}/libexec/queue"
+ "\${nexthop}"
+ ];
+ };
+ sympabounce = {
+ type = "unix";
+ privileged = true;
+ chroot = false;
+ command = "pipe";
+ args = [
+ "flags=hqRu"
+ "user=sympa"
+ "argv=${pkgs.sympa}/libexec/bouncequeue"
+ "\${nexthop}"
+ ];
+ };
+ };
+ };
+ services.sympa = {
+ enable = true;
+ listMasters = sympaConfig.listmasters;
+ mainDomain = domain;
+ domains = {
+ "${domain}" = {
+ webHost = "mail.immae.eu";
+ webLocation = "/sympa";
+ };
+ };
+
+ database = {
+ type = "PostgreSQL";
+ user = sympaConfig.postgresql.user;
+ host = sympaConfig.postgresql.socket;
+ name = sympaConfig.postgresql.database;
+ passwordFile = config.secrets.fullPaths."sympa/db_password";
+ createLocally = false;
+ };
+ settings = {
+ sendmail = "/run/wrappers/bin/sendmail";
+ log_smtp = "on";
+ sendmail_aliases = "/var/lib/sympa/sympa_transport";
+ aliases_program = "${pkgs.postfix}/bin/postmap";
+ create_list = "listmaster";
+ };
+ settingsFile = {
+ "virtual.sympa".enable = false;
+ "transport.sympa".enable = false;
+ } // lib.mapAttrs' (n: v: lib.nameValuePair
+ "etc/${domain}/data_sources/${n}.incl"
+ { source = config.secrets.fullPaths."sympa/data_sources/${n}.incl"; }) sympaConfig.data_sources
+ // lib.mapAttrs' (n: v: lib.nameValuePair
+ "etc/${domain}/scenari/${n}"
+ { source = config.secrets.fullPaths."sympa/scenari/${n}"; }) sympaConfig.scenari;
+ web = {
+ server = "none";
+ };
+
+ mta = {
+ type = "none";
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/monitoring.nix b/systems/eldiron/monitoring.nix
new file mode 100644
index 0000000..2aa7f8f
--- /dev/null
+++ b/systems/eldiron/monitoring.nix
@@ -0,0 +1,51 @@
+{ config, pkgs, lib, name, monitoring, ... }:
+let
+ hostFQDN = config.hostEnv.fqdn;
+ emailCheck = monitoring.lib.emailCheck config.myEnv.monitoring.email_check;
+in
+{
+ config.myServices.monitoring.activatedPlugins = [ "memory" "command" "bandwidth" "emails" "mdadm" "postfix" "postgresql" "zfs" "notify-secondary"];
+ config.myServices.monitoring.pluginsArgs.postgresql.package = config.myServices.databases.postgresql.package;
+ config.myServices.monitoring.objects = lib.mkMerge [
+ (monitoring.lib.objectsCommon {
+ inherit hostFQDN;
+ hostName = name;
+ master = false;
+ processWarn = "550"; processAlert = "650";
+ loadWarn = "1.0"; loadAlert = "1.2";
+ interface = builtins.head (builtins.attrNames config.networking.interfaces);
+ })
+
+ {
+ service = [
+ {
+ service_description = "No mdadm array is degraded";
+ use = "local-service";
+ check_command = ["check_mdadm"];
+ __passive_servicegroups = "webstatus-resources";
+ }
+ {
+ service_description = "Postgresql replication for backup-2 is up to date";
+ use = "local-service";
+ check_command = ["check_postgresql_replication" "backup-2" "/run/postgresql" "5432"];
+ __passive_servicegroups = "webstatus-databases";
+ }
+ {
+ service_description = "No ZFS pool is degraded";
+ use = "local-service";
+ check_command = ["check_zfs"];
+ __passive_servicegroups = "webstatus-resources";
+ }
+ {
+ service_description = "mailq is empty";
+ use = "local-service";
+ check_command = ["check_mailq"];
+ __passive_servicegroups = "webstatus-email";
+ }
+ (emailCheck "eldiron" hostFQDN // {
+ __passive_servicegroups = "webstatus-email";
+ })
+ ];
+ }
+ ];
+}
diff --git a/systems/eldiron/mpd.nix b/systems/eldiron/mpd.nix
new file mode 100644
index 0000000..640b001
--- /dev/null
+++ b/systems/eldiron/mpd.nix
@@ -0,0 +1,60 @@
+{ lib, pkgs, config, ... }:
+{
+ options.myServices.mpd.enable = lib.mkEnableOption "enable MPD";
+ config = lib.mkIf config.myServices.mpd.enable {
+ secrets.keys = {
+ "mpd" = {
+ permissions = "0400";
+ text = config.myEnv.mpd.password;
+ };
+ "mpd-config" = {
+ permissions = "0400";
+ user = "mpd";
+ group = "mpd";
+ text = ''
+ password "${config.myEnv.mpd.password}@read,add,control,admin"
+ '';
+ };
+ };
+ networking.firewall.allowedTCPPorts = [ 6600 ];
+ users.users.mpd.extraGroups = [ "wwwrun" "keys" ];
+ systemd.services.mpd.serviceConfig.RuntimeDirectory = "mpd";
+ services.filesWatcher.mpd = {
+ restart = true;
+ paths = [ config.secrets.fullPaths."mpd-config" ];
+ };
+
+ services.mpd = {
+ enable = true;
+ network.listenAddress = "any";
+ musicDirectory = config.myEnv.mpd.folder;
+ extraConfig = ''
+ include "${config.secrets.fullPaths."mpd-config"}"
+ audio_output {
+ type "null"
+ name "No Output"
+ mixer_type "none"
+ }
+ audio_output {
+ type "httpd"
+ name "OGG"
+ encoder "vorbis"
+ bind_to_address "/run/mpd/ogg.sock"
+ quality "5.0"
+ format "44100:16:1"
+ }
+ audio_output {
+ type "httpd"
+ name "MP3"
+ encoder "lame"
+ bind_to_address "/run/mpd/mp3.sock"
+ quality "5.0"
+ format "44100:16:1"
+ }
+
+
+ '';
+ };
+ };
+}
+
diff --git a/systems/eldiron/pub/default.nix b/systems/eldiron/pub/default.nix
new file mode 100644
index 0000000..ca8122a
--- /dev/null
+++ b/systems/eldiron/pub/default.nix
@@ -0,0 +1,100 @@
+{ lib, pkgs, config, ... }:
+let
+ restrict = pkgs.runCommand "restrict" {
+ file = ./restrict;
+ buildInputs = [ pkgs.makeWrapper ];
+ } ''
+ mkdir -p $out/bin
+ cp $file $out/bin/restrict
+ chmod a+x $out/bin/restrict
+ patchShebangs $out/bin/restrict
+ wrapProgram $out/bin/restrict \
+ --prefix PATH : ${lib.makeBinPath [ pkgs.bubblewrap pkgs.rrsync ]} \
+ --set TMUX_RESTRICT ${./tmux.restrict.conf}
+ '';
+in
+{
+ options = {
+ myServices.pub.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable pub user.
+ '';
+ };
+ myServices.pub.usersProfiles = lib.mkOption {
+ type = lib.types.attrsOf (lib.types.listOf lib.types.package);
+ default = {};
+ description = ''
+ specific user profile
+ '';
+ };
+ myServices.pub.restrictCommand = lib.mkOption {
+ type = lib.types.path;
+ readOnly = true;
+ default = "${restrict}/bin/restrict";
+ description = ''
+ path to the restrict shell
+ '';
+ };
+ };
+
+ config = lib.mkIf config.myServices.pub.enable {
+ myServices.dns.zones."immae.eu".subdomains.pub =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.vm-like = {
+ file.datetime = "2022-08-22T01:00:00";
+ service = {
+ name = "Comptes shell";
+ description = "Compte shell cloisonné";
+ logo = "https://www.openssh.com/favicon.ico";
+ website = "pub.immae.eu";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Openssh";
+ website = "https://www.openssh.com/";
+ license.url = "https://github.com/openssh/openssh-portable/blob/master/LICENCE";
+ license.name = "BSD Licence";
+ version = pkgs.openssh.version;
+ source.url = "https://github.com/openssh/openssh-portable";
+ };
+ };
+ myServices.ssh.modules.pub = {
+ snippet = builtins.readFile ./ldap_pub.sh;
+ dependencies = [ pkgs.coreutils ];
+ vars.ldap_forward_group = "cn=forward,cn=pub,ou=services,dc=immae,dc=eu";
+ vars.ldap_pub_group = "cn=restrict,cn=pub,ou=services,dc=immae,dc=eu";
+ vars.echo_command = "${pkgs.coreutils}/bin/echo";
+ vars.restrict_command = "${restrict}/bin/restrict";
+ };
+
+ system.extraSystemBuilderCmds = let
+ toPath = u: paths: pkgs.buildEnv {
+ name = "${u}-profile";
+ inherit paths;
+ };
+ in ''
+ mkdir -p $out/pub
+ ${builtins.concatStringsSep "\n" (lib.mapAttrsToList (u: m: "ln -s ${toPath u m} $out/pub/${u}") config.myServices.pub.usersProfiles)}
+ '';
+ users.users.pub = let
+ in {
+ createHome = true;
+ description = "Restricted shell user";
+ home = "/var/lib/pub";
+ uid = config.myEnv.users.pub.uid;
+ isNormalUser = true;
+ group = "nogroup";
+ useDefaultShell = true;
+ packages = [
+ pkgs.tmux
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/pub/ldap_pub.sh b/systems/eldiron/pub/ldap_pub.sh
new file mode 100644
index 0000000..9f03ffe
--- /dev/null
+++ b/systems/eldiron/pub/ldap_pub.sh
@@ -0,0 +1,38 @@
+### This snippet is not standalone and must be integrated in the global ldap_authorized_keys.sh
+LDAP_PUB_RESTRICT_MEMBER="@pub_ldap_pub_group@"
+LDAP_PUB_FORWARD_MEMBER="@pub_ldap_forward_group@"
+ECHO="@pub_echo_command@"
+
+if [[ $user == pub ]]; then
+ allowed_logins=$(LDAP_BASE=$USER_LDAP_BASE \
+ ldap_search '(memberOf='$LDAP_PUB_RESTRICT_MEMBER')' '' \
+ | grep ^dn \
+ | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \
+ | paste -sd,)
+
+ allowed_forwards=$(LDAP_BASE=$USER_LDAP_BASE \
+ ldap_search '(memberOf='$LDAP_PUB_FORWARD_MEMBER')' '' \
+ | grep ^dn \
+ | sed -e "s/^dn: uid=\([^,]*\),.*$USER_LDAP_BASE$/'\1'/" \
+ | paste -sd,)
+
+ psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'pub' = ANY(usage) AND login IN ($allowed_logins);" | while IFS='|' read user key; do
+ if [ ! -z "$key" ]; then
+ if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
+ echo -n 'command="@pub_restrict_command@ '$user'" '
+ echo $key
+ fi
+ fi
+ done
+
+ psql_search "SELECT login, key FROM ldap_users_ssh_keys WHERE realm = 'immae' AND 'forward' = ANY(usage) AND login IN ($allowed_logins,$allowed_forwards);" | while IFS='|' read user key; do
+ if [ ! -z "$key" ]; then
+ if [[ $key != *$'\n'* ]] && [[ $key == ssh-* ]]; then
+ echo -n 'no-pty,no-X11-forwarding,command="'$ECHO' forward only" '
+ echo $key
+ fi
+ fi
+ done
+ exit 0
+fi
+
diff --git a/systems/eldiron/pub/restrict b/systems/eldiron/pub/restrict
new file mode 100644
index 0000000..698e394
--- /dev/null
+++ b/systems/eldiron/pub/restrict
@@ -0,0 +1,71 @@
+#!/usr/bin/env bash
+user="$1"
+rootuser="$HOME/$user/"
+mkdir -p $rootuser
+
+orig="$SSH_ORIGINAL_COMMAND"
+if [ -z "$orig" ]; then
+ orig="/bin/bash -l"
+fi
+if [ "${orig:0:7}" = "command" ]; then
+ orig="${orig:8}"
+fi
+
+case "$orig" in
+rsync*)
+ rrsync $HOME/$user/
+ ;;
+*)
+ nix_store_paths() {
+ nix-store -q -R \
+ /run/current-system/sw \
+ /etc/profiles/per-user/pub \
+ /etc/ssl/certs/ca-bundle.crt \
+ | while read i; do
+ printf '%s--ro-bind\0'$i'\0'$i'\0' ''
+ done
+ if [ -e "/run/current-system/pub/$user" ]; then
+ nix-store -q -R "/run/current-system/pub/$user" \
+ | while read i; do
+ printf '%s--ro-bind\0'$i'\0'$i'\0' ''
+ done
+ printf '%s--ro-bind\0/run/current-system/pub/'$user'/bin\0/bin-pub-'$user'\0' ''
+ fi
+ }
+
+ set -euo pipefail
+ (exec -c bwrap --ro-bind /usr /usr \
+ --args 10 \
+ --dir /tmp \
+ --dir /var \
+ --symlink ../tmp var/tmp \
+ --proc /proc \
+ --dev /dev \
+ --ro-bind /etc/resolv.conf /etc/resolv.conf \
+ --ro-bind /etc/zoneinfo /etc/zoneinfo \
+ --ro-bind /etc/ssl /etc/ssl \
+ --ro-bind /etc/static/ssl/certs /etc/static/ssl/certs \
+ --ro-bind /run/current-system/sw/lib/locale/locale-archive /etc/locale-archive \
+ --ro-bind /run/current-system/sw/bin /bin \
+ --ro-bind /etc/profiles/per-user/pub/bin /bin-pub \
+ --bind /var/lib/pub/$user /var/lib/pub \
+ --dir /var/lib/commons \
+ --ro-bind $TMUX_RESTRICT /var/lib/commons/tmux.restrict.conf \
+ --chdir /var/lib/pub \
+ --unshare-all \
+ --share-net \
+ --dir /run/user/$(id -u) \
+ --setenv TERM "$TERM" \
+ --setenv LOCALE_ARCHIVE "/etc/locale-archive" \
+ --setenv XDG_RUNTIME_DIR "/run/user/`id -u`" \
+ --setenv PS1 "$user@pub $ " \
+ --setenv PATH "/bin-pub-$user:/bin:/bin-pub" \
+ --setenv HOME "/var/lib/pub" \
+ --file 11 /etc/passwd \
+ --file 12 /etc/group \
+ -- $orig) \
+ 10< <(nix_store_paths | sort | uniq) \
+ 11< <(getent passwd $UID 65534) \
+ 12< <(getent group $(id -g) 65534)
+ ;;
+esac
diff --git a/systems/eldiron/pub/tmux.restrict.conf b/systems/eldiron/pub/tmux.restrict.conf
new file mode 100644
index 0000000..5aefd1c
--- /dev/null
+++ b/systems/eldiron/pub/tmux.restrict.conf
@@ -0,0 +1,43 @@
+# Pour les nostalgiques de screen
+# comme les raccourcis ne sont pas les mêmes, j'évite
+set -g prefix C-a
+unbind-key C-b
+
+unbind-key -a
+bind-key -n C-h list-keys
+bind-key C-d detach
+bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
+
+# même hack que sur screen lorsqu'on veut profiter du scroll du terminal
+# (xterm ...)
+set -g terminal-overrides 'xterm*:smcup@:rmcup@'
+
+#Pour les ctrl+arrow
+set-option -g xterm-keys on
+
+# c'est un minimum (defaut 2000)
+set-option -g history-limit 10000
+
+# lorsque j'ai encore un tmux ailleurs seule
+# sa fenetre active réduit la taille de ma fenetre locale
+setw -g aggressive-resize on
+
+# Pour etre alerté sur un changement dans une autre fenêtre
+setw -g monitor-activity on
+#set -g visual-activity on
+#set -g visual-bell on
+
+set -g base-index 1
+
+# repercuter le contenu de la fenetre dans la barre de titre
+# reference des string : man tmux (status-left)
+set -g set-titles on
+set -g set-titles-string '#H #W #T' # host window command
+
+#Dans les valeurs par defaut deja, avec le ssh-agent
+set -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY PATH"
+
+set -g status off
+set -g status-left ''
+set -g status-right ''
+
diff --git a/systems/eldiron/tasks/default.nix b/systems/eldiron/tasks/default.nix
new file mode 100644
index 0000000..0772a5f
--- /dev/null
+++ b/systems/eldiron/tasks/default.nix
@@ -0,0 +1,384 @@
+{ lib, pkgs, config, taskwarrior-web, ... }:
+let
+ cfg = config.myServices.tasks;
+ server_vardir = config.services.taskserver.dataDir;
+ fqdn = "task.immae.eu";
+ user = config.services.taskserver.user;
+ env = config.myEnv.tools.task;
+ group = config.services.taskserver.group;
+ taskserver-user-certs = pkgs.runCommand "taskserver-user-certs" {} ''
+ mkdir -p $out/bin
+ cat > $out/bin/taskserver-user-certs <<"EOF"
+ #!/usr/bin/env bash
+
+ user=$1
+
+ silent_certtool() {
+ if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then
+ echo "GNUTLS certtool invocation failed with output:" >&2
+ echo "$output" >&2
+ fi
+ }
+
+ silent_certtool -p \
+ --bits 4096 \
+ --outfile "${server_vardir}/userkeys/$user.key.pem"
+ ${pkgs.gnused}/bin/sed -i -n -e '/^-----BEGIN RSA PRIVATE KEY-----$/,$p' "${server_vardir}/userkeys/$user.key.pem"
+
+ silent_certtool -c \
+ --template "${pkgs.writeText "taskserver-ca.template" ''
+ tls_www_client
+ encryption_key
+ signing_key
+ expiration_days = 3650
+ ''}" \
+ --load-ca-certificate "${server_vardir}/keys/ca.cert" \
+ --load-ca-privkey "${server_vardir}/keys/ca.key" \
+ --load-privkey "${server_vardir}/userkeys/$user.key.pem" \
+ --outfile "${server_vardir}/userkeys/$user.cert.pem"
+ EOF
+ chmod a+x $out/bin/taskserver-user-certs
+ patchShebangs $out/bin/taskserver-user-certs
+ '';
+ socketsDir = "/run/taskwarrior-web";
+ varDir = "/var/lib/taskwarrior-web";
+ taskwebPages = let
+ uidPages = lib.attrsets.zipAttrs (
+ lib.lists.flatten
+ (lib.attrsets.mapAttrsToList (k: c: map (v: { "${v}" = k; }) c.uid) env.taskwarrior-web)
+ );
+ pages = lib.attrsets.mapAttrs (uid: items:
+ if lib.lists.length items == 1 then
+ ''
+
+
+
+
+
+
+ ''
+ else
+ ''
+
+
+ To-do list disponibles
+
+
+
+
+
+ ${builtins.concatStringsSep "\n" (map (item: "${item} ") items)}
+
+
+
+ ''
+ ) uidPages;
+ in
+ pkgs.runCommand "taskwerver-pages" {} ''
+ mkdir -p $out/
+ ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (k: v: "cp ${pkgs.writeText k v} $out/${k}.html") pages)}
+ echo "Please login" > $out/index.html
+ '';
+in {
+ options.myServices.tasks = {
+ enable = lib.mkEnableOption "my tasks service";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.task =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.taskwarrior = {
+ file.datetime = "2022-08-22T00:00:00";
+ service = {
+ name = "Taskwarrior";
+ description = "Taskwarrior is Free and Open Source Software that manages your TODO list from the command line. Web interface and synchronization server";
+ website = "https://task.immae.eu/";
+ logo = "https://taskwarrior.org/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Taskwarrior";
+ website = "https://taskwarrior.org/";
+ license.url = "https://github.com/GothenburgBitFactory/taskwarrior/blob/develop/LICENSE";
+ license.name = "MIT License";
+ version = taskwarrior-web.version;
+ source.url = "https://taskwarrior.org/download/";
+ };
+ };
+ secrets.keys = {
+ "webapps/tools-taskwarrior-web" = {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = ''
+ SetEnv TASKD_HOST "${fqdn}:${toString config.services.taskserver.listenPort}"
+ SetEnv TASKD_VARDIR "${server_vardir}"
+ SetEnv TASKD_LDAP_HOST "ldaps://${env.ldap.host}"
+ SetEnv TASKD_LDAP_DN "${env.ldap.dn}"
+ SetEnv TASKD_LDAP_PASSWORD "${env.ldap.password}"
+ SetEnv TASKD_LDAP_BASE "${env.ldap.base}"
+ SetEnv TASKD_LDAP_FILTER "${env.ldap.filter}"
+ '';
+ };
+ } // (lib.mapAttrs' (name: userConfig: lib.nameValuePair "webapps/tools-taskwarrior/${name}-taskrc" (
+ let
+ credentials = "${userConfig.org}/${name}/${userConfig.key}";
+ dateFormat = userConfig.date;
+ cacert = pkgs.writeText "ca.cert" ''
+ -----BEGIN CERTIFICATE-----
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+ TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+ cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+ WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+ MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+ h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+ A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+ T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+ B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+ B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+ KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+ OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+ jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+ qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+ rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+ hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+ NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+ TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+ jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+ 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+ mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+ emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+ -----END CERTIFICATE-----'';
+ in {
+ inherit user group;
+ permissions = "0400";
+ text = ''
+ data.location=${varDir}/${name}
+ taskd.certificate=${server_vardir}/userkeys/taskwarrior-web.cert.pem
+ taskd.key=${server_vardir}/userkeys/taskwarrior-web.key.pem
+ # IdenTrust DST Root CA X3
+ # obtained here: https://letsencrypt.org/fr/certificates/
+ taskd.ca=${cacert}
+ taskd.server=${fqdn}:${toString config.services.taskserver.listenPort}
+ taskd.credentials=${credentials}
+ dateformat=${dateFormat}
+ '';
+ keyDependencies = [ cacert ];
+ })) env.taskwarrior-web);
+ security.acme.certs.eldiron.extraDomainNames = [ "task.immae.eu" ];
+ services.websites.env.tools.watchPaths = [ config.secrets.fullPaths."webapps/tools-taskwarrior-web" ];
+ services.websites.env.tools.modules = [ "proxy_fcgi" "sed" ];
+ services.websites.env.tools.vhostConfs.task = {
+ certName = "eldiron";
+ hosts = [ "task.immae.eu" ];
+ root = ./www;
+ extraConfig = [ ''
+
+ DirectoryIndex index.php
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu
+
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.tasks.socket}|fcgi://localhost"
+
+ Include ${config.secrets.fullPaths."webapps/tools-taskwarrior-web"}
+
+ ''
+ ''
+
+ ProxyPass "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
+ ProxyPassReverse "unix://${socketsDir}/%{folderName}.sock|http://localhost-%{folderName}/"
+ ProxyPassReverse http://${fqdn}/
+
+ SetOutputFilter Sed
+ OutputSed "s|/ajax|/taskweb/%{folderName}/ajax|g"
+ OutputSed "s|\([^x]\)/tasks|\1/taskweb/%{folderName}/tasks|g"
+ OutputSed "s|\([^x]\)/projects|\1/taskweb/%{folderName}/projects|g"
+ OutputSed "s|http://${fqdn}/|/taskweb/%{folderName}/|g"
+ OutputSed "s|/img/relax.jpg|/taskweb/%{folderName}/img/relax.jpg|g"
+
+ ''
+ ''
+ Alias /taskweb ${taskwebPages}
+
+ DirectoryIndex index.html
+ Require all granted
+
+
+ RewriteEngine on
+ RewriteRule ^/taskweb$ /taskweb/ [R=301,L]
+ RedirectMatch permanent ^/taskweb/([^/]+)$ /taskweb/$1/
+
+ RewriteCond %{LA-U:REMOTE_USER} !=""
+ RewriteCond ${taskwebPages}/%{LA-U:REMOTE_USER}.html -f
+ RewriteRule ^/taskweb/?$ ${taskwebPages}/%{LA-U:REMOTE_USER}.html [L]
+
+
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=taskwarrior,ou=services,dc=immae,dc=eu
+
+ ''
+ ] ++ (lib.attrsets.mapAttrsToList (k: v: ''
+
+ ${builtins.concatStringsSep "\n" (map (uid: "Require ldap-attribute uid=${uid}") v.uid)}
+
+ Use Taskwarrior ${k}
+
+ '') env.taskwarrior-web);
+ };
+ services.phpfpm.pools = {
+ tasks = {
+ user = user;
+ group = group;
+ settings = {
+ "listen.owner" = "wwwrun";
+ "listen.group" = "wwwrun";
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "TaskPHPSESSID";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Task:'";
+ "php_admin_value[open_basedir]" = "${./www}:/tmp:${server_vardir}:/etc/profiles/per-user/${user}/bin/";
+ };
+ phpEnv = {
+ PATH = "/etc/profiles/per-user/${user}/bin";
+ };
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]);
+ };
+ };
+
+ security.acme.certs."task" = {
+ inherit group;
+ domain = fqdn;
+ postRun = ''
+ systemctl restart taskserver.service
+ '';
+ };
+
+ users.users.${user} = {
+ extraGroups = [ "keys" ];
+ packages = [ taskserver-user-certs ];
+ };
+
+ system.activationScripts.taskserver = {
+ deps = [ "users" ];
+ text = ''
+ install -m 0750 -o ${user} -g ${group} -d ${server_vardir}
+ install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/userkeys
+ install -m 0750 -o ${user} -g ${group} -d ${server_vardir}/keys
+
+ if [ ! -e "${server_vardir}/keys/ca.key" ]; then
+ silent_certtool() {
+ if ! output="$("${pkgs.gnutls.bin}/bin/certtool" "$@" 2>&1)"; then
+ echo "GNUTLS certtool invocation failed with output:" >&2
+ echo "$output" >&2
+ fi
+ }
+
+ silent_certtool -p \
+ --bits 4096 \
+ --outfile "${server_vardir}/keys/ca.key"
+
+ silent_certtool -s \
+ --template "${pkgs.writeText "taskserver-ca.template" ''
+ cn = ${fqdn}
+ expiration_days = -1
+ cert_signing_key
+ ca
+ ''}" \
+ --load-privkey "${server_vardir}/keys/ca.key" \
+ --outfile "${server_vardir}/keys/ca.cert"
+
+ chown :${group} "${server_vardir}/keys/ca.key"
+ chmod g+r "${server_vardir}/keys/ca.key"
+ fi
+ '';
+ };
+
+ services.taskserver = {
+ enable = true;
+ allowedClientIDs = [ "^task [2-9]" "^Mirakel [1-9]" ];
+ inherit fqdn;
+ listenHost = "::";
+ pki.manual.ca.cert = "${server_vardir}/keys/ca.cert";
+ pki.manual.server.cert = "${config.security.acme.certs.task.directory}/fullchain.pem";
+ pki.manual.server.crl = "${config.security.acme.certs.task.directory}/invalid.crl";
+ pki.manual.server.key = "${config.security.acme.certs.task.directory}/key.pem";
+ requestLimit = 104857600;
+ };
+
+ system.activationScripts.taskwarrior-web = {
+ deps = [ "users" ];
+ text = ''
+ if [ ! -f ${server_vardir}/userkeys/taskwarrior-web.cert.pem ]; then
+ ${taskserver-user-certs}/bin/taskserver-user-certs taskwarrior-web
+ chown taskd:taskd ${server_vardir}/userkeys/taskwarrior-web.cert.pem ${server_vardir}/userkeys/taskwarrior-web.key.pem
+ fi
+ '';
+ };
+
+ systemd.slices.taskwarrior = {
+ description = "Taskwarrior slice";
+ };
+
+ systemd.services = (lib.attrsets.mapAttrs' (name: userConfig:
+ lib.attrsets.nameValuePair "taskwarrior-web-${name}" {
+ description = "Taskwarrior webapp for ${name}";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ path = [ pkgs.taskwarrior ];
+
+ environment.TASKRC = config.secrets.fullPaths."webapps/tools-taskwarrior/${name}-taskrc";
+ environment.BUNDLE_PATH = "${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}";
+ environment.BUNDLE_GEMFILE = "${taskwarrior-web.gems.confFiles}/Gemfile";
+ environment.LC_ALL = "fr_FR.UTF-8";
+
+ script = ''
+ exec ${taskwarrior-web.gems}/${taskwarrior-web.gems.ruby.gemPath}/bin/bundle exec thin start -R config.ru -S ${socketsDir}/${name}.sock
+ '';
+
+ serviceConfig = {
+ Slice = "taskwarrior.slice";
+ User = user;
+ PrivateTmp = true;
+ Restart = "always";
+ TimeoutSec = 60;
+ Type = "simple";
+ WorkingDirectory = taskwarrior-web;
+ StateDirectoryMode = 0750;
+ StateDirectory = assert lib.strings.hasPrefix "/var/lib/" varDir;
+ (lib.strings.removePrefix "/var/lib/" varDir + "/${name}");
+ RuntimeDirectoryPreserve = "yes";
+ RuntimeDirectory = assert lib.strings.hasPrefix "/run/" socketsDir;
+ lib.strings.removePrefix "/run/" socketsDir;
+ };
+
+ unitConfig.RequiresMountsFor = varDir;
+ }) env.taskwarrior-web) // {
+ taskserver-ca.postStart = ''
+ chown :${group} "${server_vardir}/keys/ca.key"
+ chmod g+r "${server_vardir}/keys/ca.key"
+ '';
+ taskserver-ca.serviceConfig.Slice = "taskwarrior.slice";
+ taskserver-init.serviceConfig.Slice = "taskwarrior.slice";
+ taskserver.serviceConfig.Slice = "taskwarrior.slice";
+ };
+
+ };
+}
diff --git a/systems/eldiron/tasks/www/index.php b/systems/eldiron/tasks/www/index.php
new file mode 100644
index 0000000..bde773d
--- /dev/null
+++ b/systems/eldiron/tasks/www/index.php
@@ -0,0 +1,168 @@
+ $value) {
+ if ($key !== "count") {
+ $entries[] = explode(":", $value);
+ }
+}
+
+if (isset($_GET["file"])) {
+ $basecert = $vardir . "/userkeys/" . $ldap_user;
+ if (!file_exists($basecert . ".cert.pem")) {
+ exec("taskserver-user-certs $ldap_user");
+ }
+ $certificate = file_get_contents($basecert . ".cert.pem");
+ $cert_key = file_get_contents($basecert . ".key.pem");
+
+ // IdenTrust DST Root CA X3
+ // obtained here: https://letsencrypt.org/fr/certificates/
+ $server_cert = "-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----";
+
+ $file = $_GET["file"];
+ switch($file) {
+ case "ca.cert.pem":
+ $content = $server_cert;
+ $name = "ca.cert.pem";
+ $type = "application/x-x509-ca-cert";
+ break;
+ case "cert.pem":
+ $content = $certificate;
+ $name = $ldap_user . ".cert.pem";
+ $type = "application/x-x509-ca-cert";
+ break;
+ case "key.pem":
+ $content = $cert_key;
+ $name = $ldap_user . ".key.pem";
+ $type = "application/x-x509-ca-cert";
+ break;
+ case "mirakel";
+ foreach ($entries as $entry) {
+ list($org, $user, $key) = $entry;
+ if ($key == $_GET["key"]) { break; }
+ }
+ $name = $user . ".mirakel";
+ $type = "text/plain";
+ $content = "username: $user
+org: $org
+user key: $key
+server: $host
+client.cert:
+$certificate
+Client.key:
+$cert_key
+ca.cert:
+$server_cert
+";
+ break;
+ default:
+ die("invalid file name");
+ break;
+ }
+
+ header("Content-Type: $type");
+ header('Content-Disposition: attachment; filename="' . $name . '"');
+ header('Content-Transfer-Encoding: binary');
+ header('Accept-Ranges: bytes');
+ header('Cache-Control: private');
+ header('Pragma: private');
+ echo $content;
+ exit;
+}
+?>
+
+
+ Taskwarrior configuration
+
+
+
+For command line interface, download the files, put them near your Taskwarrior
+configuration files, and add that to your Taskwarrior configuration:
+
+taskd.certificate=/path/to/.cert.pem
+taskd.key=/path/to/.key.pem
+taskd.server=
+taskd.ca=/path/to/ca.cert.pem
+ 1) {
+ echo "# Chose one of them\n";
+ foreach($entries as $entry) {
+ list($org, $user, $key) = $entry;
+ echo "# taskd.credentials=$org/$user/$key\n";
+ }
+} else { ?>
+taskd.credentials=//
+
+
+For Mirakel, download and import the file:
+
+For Android Taskwarrior app, see instructions here .
+
+
+
diff --git a/systems/eldiron/vpn/default.nix b/systems/eldiron/vpn/default.nix
new file mode 100644
index 0000000..df56249
--- /dev/null
+++ b/systems/eldiron/vpn/default.nix
@@ -0,0 +1,92 @@
+{ config, pkgs, lib, ... }:
+let
+ cfg = config.myServices.vpn;
+in
+{
+ options.myServices = {
+ vpn.enable = lib.mkEnableOption "Enable vpn service";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.vpn = with config.myServices.dns.helpers;
+ ips servers.eldiron.ips.main // {
+ subdomains.gw.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}:0:ffff:1" ];
+ # Fake address to designate the subnet
+ subdomains.sn.AAAA = [ "${config.myEnv.vpn.eldiron.prefix}::" ];
+ };
+ myServices.chatonsProperties.hostings.vpn = {
+ file.datetime = "2022-08-27T18:00:00";
+ hosting = {
+ name = "VPN";
+ description = "VPN";
+ website = "https://vpn.immae.eu";
+ logo = "https://tinc-vpn.org/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "FULL";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "tinc";
+ website = "https://tinc-vpn.org/";
+ license.url = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html";
+ license.name = "GNU General Public License v2.0";
+ version = pkgs.tinc.version;
+ source.url = "https://tinc-vpn.org/git/browse?p=tinc";
+ };
+ };
+ secrets.keys = {
+ "tinc/key.priv" = {
+ user = "root";
+ group = "root";
+ permissions = "0400";
+ text = config.myEnv.vpn.eldiron.privateKey;
+ };
+ "tinc/key.pub" = {
+ user = "root";
+ group = "root";
+ permissions = "0400";
+ text = config.myEnv.vpn.eldiron.publicKey;
+ };
+ };
+ networking.firewall.allowedTCPPorts = [ 655 1194 ];
+ system.activationScripts.tinc = let
+ configFiles = pkgs.runCommand "tinc-files" {
+ mainInterface = "eth0";
+ hostName = "ImmaeEu";
+ network = "Immae";
+ keyFile = config.secrets.fullPaths."tinc/key.priv";
+ } ''
+ mkdir -p $out
+ for i in ${./tinc}/*; do
+ substituteAll $i $out/$(basename $i)
+ done
+ '';
+ in ''
+ install -m750 -o root -g root -d /var/lib/tinc/ /var/lib/tinc/Immae
+ install -m700 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/{host-*,tinc-*}
+ install -m400 -o root -g root -t /var/lib/tinc/Immae ${configFiles}/tinc.conf
+ if [ ! -d /var/lib/tinc/Immae/hosts ]; then
+ ${pkgs.git}/bin/git clone -b master https://git.immae.eu/perso/Immae/Config/tinc/hosts /var/lib/tinc/Immae/hosts
+ fi
+ '';
+
+ systemd.slices.tinc = {
+ description = "Tinc slice";
+ };
+
+ systemd.services.tinc-Immae = {
+ description = "Tinc Daemon - Immae";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ path = [ pkgs.getent pkgs.tinc pkgs.bashInteractive pkgs.iproute pkgs.gnused pkgs.gawk pkgs.git pkgs.glibc ];
+ serviceConfig = {
+ Slice = "tinc.slice";
+ Type = "simple";
+ Restart = "always";
+ RestartSec = "3";
+ ExecStart = "${pkgs.tinc}/bin/tincd -d1 -D -c /var/lib/tinc/Immae --pidfile /run/tinc.Immae.pid";
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/vpn/tinc/host-down b/systems/eldiron/vpn/tinc/host-down
new file mode 100755
index 0000000..1e79bd3
--- /dev/null
+++ b/systems/eldiron/vpn/tinc/host-down
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }')
+NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '`
+for NODEIP in $NODEIPS; do
+ ip neigh del proxy $NODEIP dev @mainInterface@
+done
diff --git a/systems/eldiron/vpn/tinc/host-up b/systems/eldiron/vpn/tinc/host-up
new file mode 100755
index 0000000..2f7cee2
--- /dev/null
+++ b/systems/eldiron/vpn/tinc/host-up
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+SUBDOMAIN=$(echo "$NODE" | sed -e "s/\([A-Z][a-z0-9]*\)/\L\1 /g;" | awk '{ for (i=NF; i>1; i--) printf("%s.",$i); print $1; }')
+while [ -z "$NODEIPS" ]; do
+ NODEIPS=`getent hosts ${SUBDOMAIN}.immae.eu | cut -d' ' -f1 | tr "\\n" ' '`
+ sleep 5
+done
+for NODEIP in $NODEIPS; do
+ ip neigh add proxy $NODEIP dev @mainInterface@
+done
+(cd /var/lib/tinc/@network@/hosts && git pull -q origin master) || true
diff --git a/systems/eldiron/vpn/tinc/tinc-down b/systems/eldiron/vpn/tinc/tinc-down
new file mode 100755
index 0000000..1cc45c0
--- /dev/null
+++ b/systems/eldiron/vpn/tinc/tinc-down
@@ -0,0 +1,12 @@
+#!/bin/sh
+# This file closes down the tap device.
+
+echo 0 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp
+echo 0 > /proc/sys/net/ipv6/conf/all/forwarding
+
+GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1`
+
+ip neigh del proxy $GWIP dev eth0
+
+ip -6 addr del $GWIP/96 dev $INTERFACE
+ip -6 link set $INTERFACE down
diff --git a/systems/eldiron/vpn/tinc/tinc-up b/systems/eldiron/vpn/tinc/tinc-up
new file mode 100755
index 0000000..26c1ec3
--- /dev/null
+++ b/systems/eldiron/vpn/tinc/tinc-up
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+echo 1 > /proc/sys/net/ipv6/conf/@mainInterface@/proxy_ndp
+echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+
+SUBNET=`getent hosts sn.vpn.immae.eu | head -n1 | cut -d' ' -f1`
+GWIP=`getent hosts gw.vpn.immae.eu | head -n1 | cut -d' ' -f1`
+
+ip -6 link set $INTERFACE up mtu 1280 txqueuelen 1000
+
+ip -6 addr add $GWIP/96 dev $INTERFACE
+ip -6 route add $SUBNET/80 dev $INTERFACE
+
+ip neigh add proxy $GWIP dev @mainInterface@
diff --git a/systems/eldiron/vpn/tinc/tinc.conf b/systems/eldiron/vpn/tinc/tinc.conf
new file mode 100644
index 0000000..7a4f103
--- /dev/null
+++ b/systems/eldiron/vpn/tinc/tinc.conf
@@ -0,0 +1,11 @@
+BindToAddress = * 655
+BindToAddress = * 1194
+
+Name = @hostName@
+Interface = vpn6
+
+Mode = switch
+
+Device = /dev/net/tun
+GraphDumpFile = /var/lib/tinc/@network@/tinc_graph
+PrivateKeyFile = @keyFile@
diff --git a/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html
new file mode 100644
index 0000000..ff6dbf3
--- /dev/null
+++ b/systems/eldiron/websites/_www/googleb6d69446ff4ca3e5.html
@@ -0,0 +1 @@
+google-site-verification: googleb6d69446ff4ca3e5.html
\ No newline at end of file
diff --git a/systems/eldiron/websites/_www/index.htm b/systems/eldiron/websites/_www/index.htm
new file mode 100644
index 0000000..0274251
--- /dev/null
+++ b/systems/eldiron/websites/_www/index.htm
@@ -0,0 +1,9 @@
+
+
+
+ Hello World HTML
+
+
+ It works!
+
+
diff --git a/systems/eldiron/websites/_www/maintenance_immae.html b/systems/eldiron/websites/_www/maintenance_immae.html
new file mode 100644
index 0000000..90f265f
--- /dev/null
+++ b/systems/eldiron/websites/_www/maintenance_immae.html
@@ -0,0 +1,58 @@
+
+
+
+ Maintenance
+
+
+
+
+
+
+ Erreur serveur ou maintenance en cours !
+
+
Une mise à jour ou une opération de maintenance est en cours sur le site. Retentez dans quelques instants ou patientez, la page se rechargera automatiquement.
+
+
+
+
+ Server error or website in maintenance!
+
+
An update or a maintenance is on track on the website. Please try again in a few seconds or wait, the page will reload automatically.
+
+
+
+
diff --git a/systems/eldiron/websites/_www/nossl.html b/systems/eldiron/websites/_www/nossl.html
new file mode 100644
index 0000000..4401a80
--- /dev/null
+++ b/systems/eldiron/websites/_www/nossl.html
@@ -0,0 +1,11 @@
+
+
+
+ No SSL site
+
+
+ No SSL on this site
+ Use for wifi networks with login page that doesn't work well with
+ https.
+
+
diff --git a/systems/eldiron/websites/assets/default.nix b/systems/eldiron/websites/assets/default.nix
new file mode 100644
index 0000000..02a4952
--- /dev/null
+++ b/systems/eldiron/websites/assets/default.nix
@@ -0,0 +1,98 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.websites.tools.assets;
+ fetchFont = v: pkgs.runCommand "fetch-font" {
+ outputHashAlgo = "sha256";
+ outputHashMode = "recursive";
+ outputHash = v.sha256;
+ } ''
+ mkdir -p $out
+ ${pkgs.curl}/bin/curl -k --output $out/font.css -H "User-Agent: Firefox/100.0" "${v.url}"
+ cat $out/font.css | grep -o "https://[^ )]*" | while read url; do
+ filename=$(echo "$url" | sed -e "s@.*/@@g")
+ ${pkgs.curl}/bin/curl -k --output "$out/$filename" "$url"
+ sed -i -e "s@$url@./$filename@" "$out/font.css"
+ done
+ '';
+ fetchTgz = v: pkgs.runCommand "fetch-tgz" {
+ outputHashAlgo = "sha256";
+ outputHashMode = "recursive";
+ outputHash = v.sha256;
+ } ''
+ mkdir -p $out
+ cd $out
+ ${pkgs.curl}/bin/curl -L -k "${v.url}" | tar -xz --strip-components=${builtins.toString v.tgzRemoveComponents}
+ '';
+ fetchAsset = v:
+ if v.assetType == "googleFont"
+ then fetchFont v
+ else if v.assetType == "tgz"
+ then fetchTgz v
+ else pkgs.fetchurl { url = v.url; sha256 = v.sha256; };
+ assets_urls = lib.mapAttrs (k: fetchAsset) config.myEnv.tools.assets;
+ assets = pkgs.runCommand "assets" {} (''
+ mkdir -p $out
+ cp -a ${./static}/* $out/
+ '' + builtins.concatStringsSep "\n"
+ (lib.mapAttrsToList (k: v: ''
+ if [ -d "${v}" ]; then
+ mkdir -p "$out/$(dirname "${k}")"
+ cp -a "${v}" "$out/${k}"
+ chmod -R u+rwX "$out/${k}"
+ else
+ install -D -m644 -T "${v}" "$out/${k}"
+ fi
+ '') assets_urls));
+in
+{
+ options.myServices.websites.tools.assets = {
+ enable = lib.mkEnableOption "Enable assets website";
+ };
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.assets =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ services.websites.env.production.bindMounts."/run/imgproxy" = {};
+ security.acme.certs.eldiron.extraDomainNames = [ "assets.immae.eu" ];
+ services.websites.env.tools.vhostConfs.assets = {
+ certName = "eldiron";
+ hosts = [ "assets.immae.eu" ];
+ root = assets;
+ extraConfig = [
+ ''
+ Use Apaxy "${assets}" "title"
+
+ Options Indexes FollowSymlinks
+ AllowOverride None
+ Require all granted
+ Header always set Last-Modified "Tue, 01 Jan 2020 00:00:00 GMT"
+ Header always set Cache-Control "public, max-age=31536000, immutable"
+ Header always set Access-Control-Allow-Origin "*"
+ Header always set Access-Control-Expose-Headers "*"
+
+
+ MergeSlashes OFF
+
+ ProxyPass unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu
+ ProxyPassReverse unix:///run/imgproxy/imgproxy.sock|http://assets.immae.eu
+
+ ''
+ ];
+ };
+ systemd.services.imgproxy = {
+ description = "IMG proxy";
+ wantedBy = [ "multi-user.target" ];
+
+ environment = {
+ IMGPROXY_NETWORK = "unix";
+ IMGPROXY_BIND = "%t/imgproxy/imgproxy.sock";
+ };
+ serviceConfig = {
+ User = "wwwrun";
+ Group = "wwwrun";
+ RuntimeDirectory = "imgproxy";
+ ExecStart = "${pkgs.imgproxy}/bin/imgproxy";
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/websites/assets/static/favicon.png b/systems/eldiron/websites/assets/static/favicon.png
new file mode 100644
index 0000000..1caf5a4
Binary files /dev/null and b/systems/eldiron/websites/assets/static/favicon.png differ
diff --git a/systems/eldiron/websites/assets/static/logger.png b/systems/eldiron/websites/assets/static/logger.png
new file mode 100644
index 0000000..d9579fb
Binary files /dev/null and b/systems/eldiron/websites/assets/static/logger.png differ
diff --git a/systems/eldiron/websites/assets/static/logger.txt b/systems/eldiron/websites/assets/static/logger.txt
new file mode 100644
index 0000000..50dccc6
--- /dev/null
+++ b/systems/eldiron/websites/assets/static/logger.txt
@@ -0,0 +1,3 @@
+Downloaded from https://commons.wikimedia.org/wiki/File:Ghost2.svg
+Licence Creative Commons Attribution-Share Alike 4.0 International
+https://creativecommons.org/licenses/by-sa/4.0/deed.en
diff --git a/systems/eldiron/websites/assets/static/logo.jpg b/systems/eldiron/websites/assets/static/logo.jpg
new file mode 100644
index 0000000..a89172d
Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo.jpg differ
diff --git a/systems/eldiron/websites/assets/static/logo.txt b/systems/eldiron/websites/assets/static/logo.txt
new file mode 100644
index 0000000..327e62a
--- /dev/null
+++ b/systems/eldiron/websites/assets/static/logo.txt
@@ -0,0 +1,7 @@
+size: 2
+dpi: 72
+background: white
+plot_type: fullcolor
+center: "whole"
+whitespace: 0.5
+format: jpg
diff --git a/systems/eldiron/websites/assets/static/logo_big.jpg b/systems/eldiron/websites/assets/static/logo_big.jpg
new file mode 100644
index 0000000..45448f2
Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_big.jpg differ
diff --git a/systems/eldiron/websites/assets/static/logo_big.txt b/systems/eldiron/websites/assets/static/logo_big.txt
new file mode 100644
index 0000000..ce92c09
--- /dev/null
+++ b/systems/eldiron/websites/assets/static/logo_big.txt
@@ -0,0 +1,7 @@
+size: 4
+dpi: 72
+background: white
+plot_type: fullcolor
+center: "whole"
+whitespace: 0.5
+format: jpg
diff --git a/systems/eldiron/websites/assets/static/logo_center.jpg b/systems/eldiron/websites/assets/static/logo_center.jpg
new file mode 100644
index 0000000..6b177e0
Binary files /dev/null and b/systems/eldiron/websites/assets/static/logo_center.jpg differ
diff --git a/systems/eldiron/websites/assets/static/logo_center.txt b/systems/eldiron/websites/assets/static/logo_center.txt
new file mode 100644
index 0000000..60a8f1c
--- /dev/null
+++ b/systems/eldiron/websites/assets/static/logo_center.txt
@@ -0,0 +1,8 @@
+size: 4
+dpi: 72
+background: white
+plot_type: fullcolor
+center: "center"
+whitespace: 0.5
+format: jpg
+
diff --git a/systems/eldiron/websites/assets/static/monitoring.png b/systems/eldiron/websites/assets/static/monitoring.png
new file mode 100644
index 0000000..0024fee
Binary files /dev/null and b/systems/eldiron/websites/assets/static/monitoring.png differ
diff --git a/systems/eldiron/websites/assets/static/monitoring.txt b/systems/eldiron/websites/assets/static/monitoring.txt
new file mode 100644
index 0000000..9f3e13a
--- /dev/null
+++ b/systems/eldiron/websites/assets/static/monitoring.txt
@@ -0,0 +1,3 @@
+Downloaded from https://commons.wikimedia.org/wiki/File:Magnifying_Glass2.svg
+Licence Creative Commons CC0 1.0 Universal Public Domain Dedication
+https://creativecommons.org/publicdomain/zero/1.0/deed.en
diff --git a/systems/eldiron/websites/assets/static/photos/ct.jpg b/systems/eldiron/websites/assets/static/photos/ct.jpg
new file mode 100644
index 0000000..ab7876b
Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/ct.jpg differ
diff --git a/systems/eldiron/websites/assets/static/photos/fretlink.jpg b/systems/eldiron/websites/assets/static/photos/fretlink.jpg
new file mode 100644
index 0000000..c941e1d
Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/fretlink.jpg differ
diff --git a/systems/eldiron/websites/assets/static/photos/raton.jpg b/systems/eldiron/websites/assets/static/photos/raton.jpg
new file mode 100644
index 0000000..a859e1c
Binary files /dev/null and b/systems/eldiron/websites/assets/static/photos/raton.jpg differ
diff --git a/systems/eldiron/websites/cloud/add-htaccess.php b/systems/eldiron/websites/cloud/add-htaccess.php
new file mode 100644
index 0000000..e11d943
--- /dev/null
+++ b/systems/eldiron/websites/cloud/add-htaccess.php
@@ -0,0 +1,70 @@
+a = $a;
+ }
+ public function getValue($val, $default) {
+ if(isset($this->a[$val])) {
+ return $this->a[$val];
+ } else {
+ return $default;
+ }
+ }
+ }
+}
+
+namespace {
+ class NServer {
+ private $argv;
+ public function __construct($argv) {
+ $this->argv = $argv;
+ }
+ public function getSystemConfig() {
+ return new OC\SystemConfig(Array(
+ 'htaccess.RewriteBase' => $this->argv[1],
+ ));
+ }
+
+ public function get($c) {
+ return new $c();
+ }
+ public function getL10N() {
+ return new \OCP\IL10N();
+ }
+ public function query($c) {
+ return new $c();
+ }
+ public function getSecureRandom() {
+ return new \OCP\Security\ISecureRandom();
+ }
+ }
+
+ class OC {
+ public static Bool $CLI = false;
+ public static $SERVERROOT = '.';
+ public static $WEBROOT;
+ public static \NServer $server;
+ }
+
+ \OC::$server = new NServer($argv);
+ \OC::$WEBROOT = $argv[1];
+
+ require "./lib/private/Setup.php";
+ $result = \OC\Setup::updateHtaccess();
+ if ($result) {
+ echo "done";
+ };
+}
diff --git a/systems/eldiron/websites/cloud/default.nix b/systems/eldiron/websites/cloud/default.nix
new file mode 100644
index 0000000..e1df883
--- /dev/null
+++ b/systems/eldiron/websites/cloud/default.nix
@@ -0,0 +1,151 @@
+{ lib, pkgs, config, ... }:
+let
+ ncfg = config.myServices.tools.cloud.farm.instances.immae;
+ env = config.myEnv.tools.nextcloud;
+ cfg = config.myServices.websites.tools.cloud;
+in {
+ options.myServices.websites.tools.cloud = {
+ enable = lib.mkEnableOption "enable cloud website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.cloud =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.hostings.nextcloud = {
+ file.datetime = "2022-08-21T19:50:00";
+ hosting = {
+ name = "Nextcloud";
+ description = "The self-hosted productivity platform that keeps you in control";
+ website = "https://cloud.immae.eu/";
+ logo = "https://cloud.immae.eu/core/img/favicon.ico";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ myServices.chatonsProperties.services.nextcloud = {
+ file.datetime = "2022-08-21T19:50:00";
+ service = {
+ name = "Nextcloud";
+ description = "The self-hosted productivity platform that keeps you in control";
+ website = "https://cloud.immae.eu/";
+ logo = "https://cloud.immae.eu/core/img/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ guide.user = "https://www.immae.eu/docs/nextcloud.html";
+ };
+ software = {
+ name = "Nextcloud";
+ website = "https://nextcloud.com/";
+ license.url = "https://github.com/nextcloud/server/blob/master/COPYING";
+ license.name = "GNU Affero General Public License v3.0";
+ version = ncfg.rootDir.version;
+ source.url = "https://github.com/nextcloud/server";
+ modules = map (a: a.appName) ncfg.rootDir.apps;
+ };
+ };
+
+ myServices.tools.cloud.farm.instances.immae = {
+ nextcloud = pkgs.webapps-nextcloud_27.override ({
+ # Allow /index.php redirects
+ postInstall = ''
+ cd $out
+ ${pkgs.php81}/bin/php ${./add-htaccess.php} /
+ '';
+ });
+ apps = a: [
+ a.side_menu a.audioplayer a.bookmarks a.calendar a.carnet a.contacts
+ a.cookbook a.deck a.extract a.files_markdown a.files_mindmap
+ a.gpxpod a.keeweb a.maps a.metadata a.music
+ a.notes a.passman a.polls a.spreed a.tasks
+ ];
+ varDir = "/var/lib/nextcloud";
+ secretsPath = "webapps/tools-nextcloud";
+ phpPackage = pkgs.php81;
+ # Be careful when editing that: config from here takes
+ # precedence over the regular one, but if a key got removed, it my
+ # still exist in the default config file
+ config = let
+ env = config.myEnv.tools.nextcloud;
+ in {
+ "dbtype" = "pgsql";
+ "dbname" = env.postgresql.database;
+ "dbhost" = env.postgresql.socket;
+ "dbport" = "";
+ "dbtableprefix" = "oc_";
+ "dbuser" = env.postgresql.user;
+ "dbpassword" = env.postgresql.password;
+
+ "instanceid" = env.instance_id;
+ "passwordsalt" = env.password_salt;
+ "secret" = env.secret;
+
+ "trusted_domains" = [ "cloud.immae.eu" ];
+ "overwrite.cli.url" = "https://cloud.immae.eu";
+
+ "lost_password_link" = "disabled";
+
+ "remember_login_cookie_lifetime" = 60*60*24*30;
+ "session_keepalive" = true;
+ "session_lifefime" = 60*60*24*30;
+
+ "maxZipInputSize" = 0;
+ "allowZipDownload" = true;
+
+ # set by Carnet
+ "has_rebuilt_cache" = true;
+
+ "memcache.distributed" = "\\OC\\Memcache\\Redis";
+ "memcache.locking" = "\\OC\\Memcache\\Redis";
+ "filelocking.enabled" = true;
+ "redis" = {
+ "host" = env.redis.socket;
+ "port" = 0;
+ "dbindex" = env.redis.db;
+ };
+
+ "ldapIgnoreNamingRules" = false;
+ "ldapProviderFactory" = "\\OCA\\User_LDAP\\LDAPProviderFactory";
+
+ "mail_smtpmode" = "sendmail";
+ "mail_smtphost" = "127.0.0.1";
+ "mail_smtpname" = "";
+ "mail_smtppassword" = "";
+ "mail_from_address" = "nextcloud";
+ "mail_smtpauth" = false;
+ "mail_domain" = "tools.immae.eu";
+ };
+ };
+ services.websites.env.tools.modules = [ "proxy_fcgi" ];
+
+ security.acme.certs.eldiron.extraDomainNames = [ "cloud.immae.eu" ];
+ services.websites.env.tools.vhostConfs.cloud = {
+ certName = "eldiron";
+ hosts = ["cloud.immae.eu" ];
+ root = ncfg.rootDir;
+ extraConfig = [
+ ncfg.vhost
+ ];
+ };
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "owncloud website is running on cloud.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "cloud.immae.eu" "/" "a safe home for all your data"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Nextcloud";
+ _webstatus_url = "https://cloud.immae.eu";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/cloud/farm.nix b/systems/eldiron/websites/cloud/farm.nix
new file mode 100644
index 0000000..df24cba
--- /dev/null
+++ b/systems/eldiron/websites/cloud/farm.nix
@@ -0,0 +1,221 @@
+{ lib, pkgs, config, ... }:
+let
+ scfg = config.secrets.fullPaths;
+ cfg = config.myServices.tools.cloud.farm;
+ apacheUser = config.services.websites.env.production.user;
+ apacheGroup = config.services.websites.env.production.group;
+ additionalConfs = icfg: lib.attrsets.mapAttrs (n: v: pkgs.writeText "${n}.json" (builtins.toJSON v)) icfg.rootDir.otherConfig;
+ overrideConfig = icfg: pkgs.writeText "override.config.php" ''
+
+ AcceptPathInfo On
+ DirectoryIndex index.php
+ Options FollowSymlinks
+ Require all granted
+ AllowOverride all
+
+
+ Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
+
+
+ CGIPassAuth on
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.${icfg.phpPoolName}.socket}|fcgi://localhost"
+
+
+
+ '';
+in
+{
+ options.myServices.tools.cloud.farm = {
+ instances = lib.mkOption {
+ description = "Instances names for the nextcloud Farm";
+ default = {};
+ type = lib.types.attrsOf (lib.types.submodule ({ name, config, ... }: {
+ options = {
+ nextcloud = lib.mkOption {
+ description = "Nextcloud version to use";
+ default = pkgs.webapps-nextcloud_27;
+ type = lib.types.package;
+ };
+ apps = lib.mkOption {
+ description = "Applications to use";
+ default = a: [];
+ #type = functionTo (listOf packages)
+ type = lib.types.unspecified;
+ };
+ config = lib.mkOption {
+ description = "Config keys";
+ default = {};
+ type = lib.types.attrsOf lib.types.unspecified;
+ };
+ secretsPath = lib.mkOption {
+ description = "Path in secrets to nextcloud config file";
+ default = "websites/${name}/nextcloud";
+ type = lib.types.str;
+ };
+ configOverride = lib.mkOption {
+ description = "Path to config override";
+ readOnly = true;
+ default = scfg."${config.secretsPath}";
+ type = lib.types.path;
+ };
+ phpPackage = lib.mkOption {
+ description = "PHP package to use";
+ default = pkgs.php81;
+ type = lib.types.package;
+ apply = v: (v.withExtensions({ enabled, all }: enabled ++ [ all.redis all.apcu all.opcache all.imagick all.sysvsem ])).override { extraConfig = ''
+ apc.enable_cli = 1
+ apc.enabled = 1
+ '';
+ };
+ };
+ rootDir = lib.mkOption {
+ description = "Instance root dirs";
+ readOnly = true;
+ type = lib.types.package;
+ default = config.nextcloud.withApps config.apps;
+ };
+ phpPoolName = lib.mkOption {
+ description = "Php pool name for the instance";
+ readOnly = true;
+ type = lib.types.str;
+ default = "nextcloud_farm_" + name;
+ };
+ phpBaseDir = lib.mkOption {
+ description = "Php basedir for the instance";
+ readOnly = true;
+ type = lib.types.str;
+ default = builtins.concatStringsSep ":" (
+ [ config.rootDir config.varDir ]
+ ++ config.rootDir.apps
+ ++ [ config.configOverride (overrideConfig config) ]
+ ++ (builtins.attrValues (additionalConfs config))
+ );
+ };
+ varDir = lib.mkOption {
+ description = "Instance var dir";
+ type = lib.types.path;
+ default = "/var/lib/nextcloud_farm/${name}";
+ };
+ vhost = lib.mkOption {
+ description = "Instance vhost config";
+ readOnly = true;
+ type = lib.types.str;
+ default = toVhost config;
+ };
+ };
+ }));
+ };
+ };
+
+ config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) {
+ systemd.services = lib.mapAttrs' (k: v: lib.nameValuePair ("phpfpm-" + v.phpPoolName) {
+ after = lib.mkAfter [ "postgresql.service" ];
+ wants = [ "postgresql.service" ];
+ serviceConfig.ExecStartPre =
+ "+${pkgs.writeScript "phpfpm-nextcloud-${k}-pre-start" ''
+ #!${pkgs.stdenv.shell}
+
+ install -m 0755 -o wwwrun -g wwwrun -d ${v.varDir} -d ${v.varDir}/config
+ ${builtins.concatStringsSep "\n" (lib.attrsets.mapAttrsToList (n: f:
+ "ln -sf ${f} ${v.varDir}/config/${n}.json"
+ ) (additionalConfs v))}
+ ln -sf ${overrideConfig v} ${v.varDir}/config/override.config.php
+ ''}";
+ }) cfg.instances;
+ services.phpfpm.pools = lib.mapAttrs' (k: v: lib.nameValuePair v.phpPoolName {
+ user = apacheUser;
+ group = apacheGroup;
+ settings = {
+ "listen.owner" = apacheUser;
+ "listen.group" = apacheGroup;
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "3";
+ "pm.min_spare_servers" = "3";
+ "pm.max_spare_servers" = "3";
+ "pm.process_idle_timeout" = "60";
+
+ "php_admin_value[output_buffering]" = "0";
+ "php_admin_value[max_execution_time]" = "1800";
+ "php_admin_value[zend_extension]" = "opcache";
+ "php_value[apc.enable_cli]" = "1";
+ "php_value[apc.enabled]" = "1";
+ #already enabled by default?
+ #"php_value[opcache.enable]" = "1";
+ "php_value[opcache.enable_cli]" = "1";
+ "php_value[opcache.interned_strings_buffer]" = "32";
+ "php_value[opcache.max_accelerated_files]" = "10000";
+ "php_value[opcache.memory_consumption]" = "128";
+ "php_value[opcache.save_comments]" = "1";
+ "php_value[opcache.revalidate_freq]" = "1";
+ "php_admin_value[memory_limit]" = "512M";
+
+ "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${v.phpBaseDir}:/proc/cpuinfo:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:NextcloudFarm:${k}:'";
+ };
+ phpPackage = v.phpPackage;
+ }) cfg.instances;
+ environment.systemPackages = let
+ toOcc = name: icfg: pkgs.writeScriptBin "nextcloud-occ-${name}" ''
+ #! ${pkgs.stdenv.shell}
+ cd ${icfg.rootDir}
+ NEXTCLOUD_CONFIG_DIR="${icfg.varDir}/config" \
+ exec \
+ sudo -E -u wwwrun ${icfg.phpPackage}/bin/php \
+ -d memory_limit=512M \
+ -c ${icfg.phpPackage}/etc/php.ini \
+ occ $*
+ '';
+ in lib.mapAttrsToList toOcc cfg.instances;
+ services.cron = {
+ enable = true;
+ systemCronJobs = let
+ toScript = name: icfg: pkgs.writeScriptBin "nextcloud-cron" ''
+ #! ${pkgs.stdenv.shell}
+ export LOCALE_ARCHIVE=/run/current-system/sw/lib/locale/locale-archive
+ export PATH=/run/wrappers/bin:$PATH
+ export NEXTCLOUD_CONFIG_DIR="${icfg.varDir}/config"
+ ${icfg.phpPackage}/bin/php -c ${icfg.phpPackage}/etc/php.ini -d memory_limit=512M -f ${icfg.rootDir}/cron.php
+ '';
+ toLine = name: icfg: ''
+ */5 * * * * wwwrun ${toScript name icfg}/bin/nextcloud-cron
+ '';
+ in lib.mapAttrsToList toLine cfg.instances;
+ };
+
+ secrets.keys = lib.mapAttrs' (name: v: lib.nameValuePair "${v.secretsPath}" {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0600";
+ # Be careful when editing that: config from this file takes
+ # precedence over the regular one, but if a key got removed, it my
+ # still exist in the default config file
+ text = builtins.toJSON ( {
+ "datadirectory" = if name == "immae" then v.varDir else "${v.varDir}/data";
+
+ "appstoreenabled" = false;
+ "integrity.check.disabled" = true;
+ "updater.release.channel" = "stable";
+ "upgrade.disable-web" = true;
+
+ "memcache.local" = "\\OC\\Memcache\\APCu";
+
+ "htaccess.RewriteBase" = "/";
+
+ "loglevel" = 2;
+ "logtimezone" = "Europe/Paris";
+
+ "default_phone_region" = "FR";
+ "skeletondirectory" = "";
+ "theme" = "";
+ } // v.config);
+ }) cfg.instances;
+ };
+}
diff --git a/systems/eldiron/websites/commento/default.nix b/systems/eldiron/websites/commento/default.nix
new file mode 100644
index 0000000..c5131b8
--- /dev/null
+++ b/systems/eldiron/websites/commento/default.nix
@@ -0,0 +1,84 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.websites.tools.commento;
+ env = config.myEnv.tools.commento;
+ webPort = "${host}:${port}";
+ port = toString env.listenPort;
+ host = "localhost";
+ postgresql_url = "postgres://${env.postgresql.user}:${env.postgresql.password}@localhost:${env.postgresql.port}/${env.postgresql.database}?sslmode=disable";
+in
+{
+ options.myServices.websites.tools.commento = {
+ enable = lib.mkEnableOption "Enable commento website";
+ };
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.commento =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.commento = {
+ file.datetime = "2022-08-21T01:11:00";
+ service = {
+ name = "Commento";
+ description = "Commento is a fast, privacy-focused commenting platform";
+ website = "https://commento.immae.eu";
+ logo = "https://commento.immae.eu/images/logo.svg";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Commento";
+ website = "https://www.commento.io/";
+ license.url = "https://gitlab.com/commento/commento/-/blob/master/LICENSE";
+ license.name = "MIT License";
+ version = pkgs.commento.version;
+ source.url = "https://gitlab.com/commento/commento";
+ };
+ };
+ secrets.keys = {
+ "commento/env" = {
+ permissions = "0400";
+ text = ''
+ COMMENTO_ORIGIN=https://commento.immae.eu/
+ COMMENTO_PORT=${port}
+ COMMENTO_POSTGRES=${postgresql_url}
+ COMMENTO_FORBID_NEW_OWNERS=true
+ COMMENTO_BIND_ADDRESS=${host}
+ COMMENTO_GZIP_STATIC=true
+ COMMENTO_SMTP_HOST=${env.smtp.host}
+ COMMENTO_SMTP_PORT=${env.smtp.port}
+ COMMENTO_SMTP_USERNAME=${env.smtp.email}
+ COMMENTO_SMTP_PASSWORD=${env.smtp.password}
+ COMMENTO_SMTP_FROM_ADDRESS=${env.smtp.email}
+ '';
+ };
+ };
+
+ security.acme.certs.eldiron.extraDomainNames = [ "commento.immae.eu" ];
+ services.websites.env.tools.vhostConfs.commento = {
+ certName = "eldiron";
+ hosts = [ "commento.immae.eu" ];
+ root = null;
+ extraConfig = [
+ ''
+ ProxyPass / http://${webPort}/
+ ProxyPassReverse / http://${webPort}/
+ ProxyPreserveHost On
+ ''
+ ];
+ };
+ systemd.services.commento = {
+ description = "Commento";
+ wantedBy = [ "multi-user.target" ];
+ requires = ["postgresql.service"];
+ after = ["network.target" "postgresql.service"];
+ serviceConfig = {
+ User = "wwwrun";
+ ExecStart = "${pkgs.commento}/commento";
+ EnvironmentFile = config.secrets.fullPaths."commento/env";
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/websites/cryptpad/default.nix b/systems/eldiron/websites/cryptpad/default.nix
new file mode 100644
index 0000000..4635548
--- /dev/null
+++ b/systems/eldiron/websites/cryptpad/default.nix
@@ -0,0 +1,89 @@
+{ config, pkgs, lib, ... }:
+let
+ cfg = config.myServices.websites.tools.cryptpad;
+ envCfg = config.myEnv.tools.cryptpad;
+ domain = "cryptpad.immae.eu";
+ port = envCfg.port;
+ configFile = pkgs.writeText "config.js" ''
+ // ${pkgs.cryptpad}/lib/node_modules/cryptpad/config/config.example.js
+ module.exports = {
+ httpUnsafeOrigin: 'https://${domain}',
+ httpPort: ${toString port},
+ adminEmail: '${envCfg.email}',
+ filePath: './datastore/',
+ archivePath: './data/archive',
+ pinPath: './data/pins',
+ taskPath: './data/tasks',
+ blockPath: './block',
+ blobPath: './blob',
+ blobStagingPath: './data/blobstage',
+ decreePath: './data/decrees',
+ logPath: './data/logs',
+ logToStdout: false,
+ logLevel: 'info',
+ logFeedback: false,
+ verbose: false,
+ inactiveTime: false,
+ maxUploadSize: 100 * 1024 * 1024,
+ adminKeys: ${builtins.toJSON envCfg.admins},
+ };
+ '';
+in
+{
+ options.myServices.websites.tools.cryptpad.enable = lib.mkEnableOption "Enable Cryptpad";
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.cryptpad =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.hostings.cryptpad = {
+ file.datetime = "2022-08-21T01:20:00";
+ hosting = {
+ name = "Cryptpad";
+ description = "Collaboration suite, encrypted and open-source";
+ website = "https://cryptpad.immae.eu/";
+ logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ myServices.chatonsProperties.services.cryptpad = {
+ file.datetime = "2022-08-21T01:20:00";
+ service = {
+ name = "Cryptpad";
+ description = "Collaboration suite, encrypted and open-source";
+ website = "https://cryptpad.immae.eu/";
+ logo = "https://cryptpad.immae.eu/customize/favicon/main-favicon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE" "FREE" "MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Cryptpad";
+ website = "https://cryptpad.org/";
+ license.url = "https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE";
+ license.name = "GNU Affero General Public License v3.0";
+ version = pkgs.cryptpad.version;
+ source.url = "https://github.com/xwiki-labs/cryptpad";
+ };
+ };
+ myServices.tools.cryptpad.farm.hosts.immaeEu = {
+ inherit domain port;
+ config = configFile;
+ };
+ services.websites.env.tools.modules = [ "proxy_wstunnel" ];
+ security.acme.certs.eldiron.extraDomainNames = [ domain ];
+ services.websites.env.tools.vhostConfs.cryptpad = {
+ certName = "eldiron";
+ hosts = [domain];
+ root = config.myServices.tools.cryptpad.farm.vhostRoots.immaeEu;
+ extraConfig = [
+ config.myServices.tools.cryptpad.farm.vhosts.immaeEu
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/cryptpad/farm.nix b/systems/eldiron/websites/cryptpad/farm.nix
new file mode 100644
index 0000000..58393ab
--- /dev/null
+++ b/systems/eldiron/websites/cryptpad/farm.nix
@@ -0,0 +1,186 @@
+{ pkgs, config, lib, ... }:
+let
+ cfg = config.myServices.tools.cryptpad.farm;
+ toService = name:
+ let
+ inherit (cfg.hosts.${name}) package config;
+ in {
+ description = "Cryptpad ${name} Service";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "networking.target" ];
+ serviceConfig = {
+ User = "cryptpad";
+ Group = "cryptpad";
+ Environment = [
+ "CRYPTPAD_CONFIG=${config}"
+ "HOME=%S/cryptpad/${name}"
+ ];
+ ExecStart = "${package}/bin/cryptpad";
+ PrivateTmp = true;
+ Restart = "always";
+ StateDirectory = "cryptpad/${name}";
+ WorkingDirectory = "%S/cryptpad/${name}";
+ };
+ };
+ toVhostRoot = name: "${cfg.hosts.${name}.package}/lib/node_modules/cryptpad";
+ toVhost = name:
+ let
+ inherit (cfg.hosts.${name}) package domain port;
+ api_domain = domain;
+ files_domain = domain;
+ in ''
+ RewriteEngine On
+
+ Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
+ Header set X-XSS-Protection "1; mode=block"
+ Header set X-Content-Type-Options "nosniff"
+ Header set Access-Control-Allow-Origin "*"
+ Header set Permissions-Policy "interest-cohort=()"
+
+ Header set Cross-Origin-Resource-Policy "cross-origin"
+
+ Header set Cross-Origin-Opener-Policy "same-origin"
+
+ Header set Cross-Origin-Embedder-Policy "require-corp"
+
+ ErrorDocument 404 /customize.dist/404.html
+
+
+ Header set Cache-Control "max-age=31536000"
+
+
+ Header set Cache-Control "no-cache"
+
+
+ SetEnv styleSrc "'unsafe-inline' 'self' ${domain}"
+ SetEnv connectSrc "'self' https://${domain} ${domain} https://${api_domain} blob: wss://${api_domain} ${api_domain} ${files_domain}"
+ SetEnv fontSrc "'self' data: ${domain}"
+ SetEnv imgSrc "'self' data: * blob: ${domain}"
+ SetEnv frameSrc "'self' blob:"
+ SetEnv mediaSrc "'self' data: * blob: ${domain}"
+ SetEnv childSrc "https://${domain}"
+ SetEnv workerSrc "https://${domain}"
+ SetEnv scriptSrc "'self' 'unsafe-eval' 'unsafe-inline' resource: ${domain}"
+
+ Header set Content-Security-Policy "default-src 'none'; child-src %{childSrc}e; worker-src %{workerSrc}e; media-src %{mediaSrc}e; style-src %{styleSrc}e; script-src %{scriptSrc}e; connect-src %{connectSrc}e; font-src %{fontSrc}e; img-src %{imgSrc}e; frame-src %{frameSrc}e;"
+
+ RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
+ RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
+ RewriteRule .* ws://localhost:${toString port}%{REQUEST_URI} [P,NE,QSA,L]
+
+ RewriteRule ^/customize/(.*)$ /customize.dist/$1 [L]
+
+ ProxyPassMatch "^/(api/(config|broadcast).*)$" "http://localhost:${toString port}/$1"
+ ProxyPassReverse /api http://localhost:${toString port}/api
+ ProxyPreserveHost On
+ RequestHeader set X-Real-IP %{REMOTE_ADDR}s
+
+ Alias /blob /var/lib/cryptpad/${name}/blob
+
+ Require all granted
+ AllowOverride None
+
+ Alias /block /var/lib/cryptpad/${name}/block
+
+ Require all granted
+ AllowOverride None
+
+
+ Header set Cache-Control "max-age=31536000"
+ Header set Access-Control-Allow-Origin "*"
+ Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
+ Header set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length"
+ Header set Access-Control-Expose-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Content-Length"
+
+ RewriteCond %{REQUEST_METHOD} OPTIONS
+ RewriteRule ^(.*)$ $1 [R=204,L]
+
+
+
+ Header set Cache-Control "max-age=0"
+
+
+ RewriteRule ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc)$ $1/ [R=302,L]
+
+ RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI} -f
+ RewriteRule (.*) /www/$1 [L]
+
+ RewriteCond %{DOCUMENT_ROOT}/www/%{REQUEST_URI}/index.html -f
+ RewriteRule (.*) /www/$1/index.html [L]
+
+ RewriteCond %{DOCUMENT_ROOT}/customize.dist/%{REQUEST_URI} -f
+ RewriteRule (.*) /customize.dist/$1 [L]
+
+
+ AllowOverride None
+ Require all granted
+ DirectoryIndex index.html
+
+
+ AllowOverride None
+ Require all granted
+ DirectoryIndex index.html
+
+ '';
+in
+{
+ options.myServices.tools.cryptpad.farm = {
+ hosts = lib.mkOption {
+ default = {};
+ description = "Hosts to install";
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ port = lib.mkOption {
+ type = lib.types.port;
+ };
+ package = lib.mkOption {
+ type = lib.types.package;
+ description = "Cryptpad package to use";
+ default = pkgs.cryptpad;
+ };
+ domain = lib.mkOption {
+ type = lib.types.str;
+ description = "Domain for main host";
+ };
+ config = lib.mkOption {
+ type = lib.types.path;
+ description = "Path to configuration";
+ };
+ };
+ });
+ };
+ vhosts = lib.mkOption {
+ description = "Instance vhosts configs";
+ readOnly = true;
+ type = lib.types.attrsOf lib.types.str;
+ default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhost;
+ };
+ vhostRoots = lib.mkOption {
+ description = "Instance vhosts document roots";
+ readOnly = true;
+ type = lib.types.attrsOf lib.types.path;
+ default = lib.genAttrs (builtins.attrNames cfg.hosts) toVhostRoot;
+ };
+ vhostVarDirs = lib.mkOption {
+ description = "Instance vhosts var dirs";
+ readOnly = true;
+ type = lib.types.attrsOf lib.types.path;
+ default = lib.genAttrs (builtins.attrNames cfg.hosts) (n: "/var/lib/cryptpad/${n}");
+ };
+ };
+ config = {
+ users.users = lib.optionalAttrs (cfg.hosts != {}) {
+ cryptpad = {
+ uid = config.ids.uids.cryptpad;
+ group = "cryptpad";
+ description = "Cryptpad user";
+ };
+ };
+ users.groups = lib.optionalAttrs (cfg.hosts != {}) {
+ cryptpad = {
+ gid = config.ids.gids.cryptpad;
+ };
+ };
+ systemd.services = lib.listToAttrs (map (n: lib.nameValuePair "cryptpad-${n}" (toService n)) (builtins.attrNames cfg.hosts));
+ };
+}
diff --git a/systems/eldiron/websites/dav/davical.nix b/systems/eldiron/websites/dav/davical.nix
new file mode 100644
index 0000000..b418cb8
--- /dev/null
+++ b/systems/eldiron/websites/dav/davical.nix
@@ -0,0 +1,128 @@
+{ stdenv, fetchurl, gettext, writeText, env, awl, davical, config }:
+rec {
+ keys."webapps/dav-davical" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ pg_connect[] = "dbname=${env.postgresql.database} user=${env.postgresql.user} host=${env.postgresql.socket} password=${env.postgresql.password}";
+
+ $c->readonly_webdav_collections = false;
+
+ $c->admin_email ='davical@tools.immae.eu';
+
+ $c->restrict_setup_to_admin = true;
+
+ $c->collections_always_exist = false;
+
+ $c->external_refresh = 60;
+
+ $c->enable_scheduling = true;
+
+ $c->iMIP = (object) array("send_email" => true);
+
+ $c->authenticate_hook['optional'] = false;
+ $c->authenticate_hook['call'] = 'LDAP_check';
+ $c->authenticate_hook['config'] = array(
+ 'host' => '${env.ldap.host}',
+ 'port' => '389',
+ 'startTLS' => 'yes',
+ 'bindDN'=> '${env.ldap.dn}',
+ 'passDN'=> '${env.ldap.password}',
+ 'protocolVersion' => '3',
+ 'baseDNUsers'=> array('ou=users,${env.ldap.base}', 'ou=group_users,${env.ldap.base}'),
+ 'filterUsers' => '${env.ldap.filter}',
+ 'baseDNGroups' => 'ou=groups,${env.ldap.base}',
+ 'filterGroups' => 'memberOf=cn=groups,${env.ldap.dn}',
+ 'mapping_field' => array(
+ "username" => "uid",
+ "fullname" => "cn",
+ "email" => "mail",
+ "modified" => "modifyTimestamp",
+ ),
+ 'format_updated'=> array('Y' => array(0,4),'m' => array(4,2),'d'=> array(6,2),'H' => array(8,2),'M'=>array(10,2),'S' => array(12,2)),
+ /** used to set default value for all users, will be overcharged by ldap if defined also in mapping_field **/
+ // 'default_value' => array("date_format_type" => "E","locale" => "fr_FR"),
+ 'group_mapping_field' => array(
+ "username" => "cn",
+ "updated" => "modifyTimestamp",
+ "fullname" => "givenName",
+ "displayname" => "givenName",
+ "members" => "memberUid",
+ "email" => "mail",
+ ),
+ );
+
+ $c->do_not_sync_from_ldap = array('admin' => true);
+ include('drivers_ldap.php');
+ '';
+ };
+ webapp = davical.override { davical_config = config.secrets.fullPaths."webapps/dav-davical"; };
+ webRoot = "${webapp}/htdocs";
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /davical "${root}"
+ Alias /caldav.php "${root}/caldav.php"
+
+ DirectoryIndex index.php index.html
+ AcceptPathInfo On
+ AllowOverride None
+ Require all granted
+
+
+ CGIPassAuth on
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ RewriteEngine On
+
+ Header unset Access-Control-Allow-Origin
+ Header unset Access-Control-Allow-Methods
+ Header unset Access-Control-Allow-Headers
+ Header unset Access-Control-Allow-Credentials
+ Header unset Access-Control-Expose-Headers
+
+ Header always set Access-Control-Allow-Origin "*"
+ Header always set Access-Control-Allow-Methods "GET,POST,OPTIONS,PROPFIND,PROPPATCH,REPORT,PUT,MOVE,DELETE,LOCK,UNLOCK"
+ Header always set Access-Control-Allow-Headers "User-Agent,Authorization,Content-type,Depth,If-match,If-None-Match,Lock-Token,Timeout,Destination,Overwrite,Prefer,X-client,X-Requested-With"
+ Header always set Access-Control-Allow-Credentials false
+ Header always set Access-Control-Expose-Headers "Etag,Preference-Applied"
+
+ RewriteCond %{HTTP:Access-Control-Request-Method} !^$
+ RewriteCond %{REQUEST_METHOD} OPTIONS
+ RewriteRule ^(.*)$ $1 [R=200,L]
+
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" [ webapp config.secrets.fullPaths."webapps/dav-davical" awl ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "DavicalPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[include_path]" = "${awl}/inc:${webapp}/inc";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Davical:'";
+ "php_flag[magic_quotes_gpc]" = "Off";
+ "php_flag[register_globals]" = "Off";
+ "php_admin_value[error_reporting]" = "E_ALL & ~E_NOTICE";
+ "php_admin_value[default_charset]" = "utf-8";
+ "php_flag[magic_quotes_runtime]" = "Off";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/dav/default.nix b/systems/eldiron/websites/dav/default.nix
new file mode 100644
index 0000000..109715d
--- /dev/null
+++ b/systems/eldiron/websites/dav/default.nix
@@ -0,0 +1,140 @@
+{ lib, pkgs, config, ... }:
+let
+ infcloud = rec {
+ root = pkgs.webapps-infcloud;
+ vhostConf = ''
+ Alias /carddavmate ${root}
+ Alias /caldavzap ${root}
+ Alias /infcloud ${root}
+
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+ DirectoryIndex index.html
+
+ '';
+ };
+ davical = pkgs.callPackage ./davical.nix {
+ env = config.myEnv.tools.davical;
+ davical = pkgs.webapps-davical;
+ awl = pkgs.webapps-awl;
+ inherit config;
+ };
+
+ cfg = config.myServices.websites.tools.dav;
+in {
+ options.myServices.websites.tools.dav = {
+ enable = lib.mkEnableOption "enable dav website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.dav =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services = {
+ davical = {
+ file.datetime = "2022-08-21T01:33:00";
+ service = {
+ name = "Davical";
+ description = "DAViCal is a server for calendar sharing";
+ website = "https://dav.immae.eu";
+ logo = "https://www.davical.org/images/logo.gif";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Davical";
+ website = "https://www.davical.org/";
+ license.url = "https://gitlab.com/davical-project/davical/-/blob/master/COPYING";
+ license.name = "GNU General Public License Version 2";
+ version = pkgs.webapps-davical.version;
+ source.url = "https://gitlab.com/davical-project/davical/";
+ modules = "infcloud";
+ };
+ };
+ #calendar = {
+ # file.datetime = "2022-08-22T00:00:00";
+ # service = {
+ # name = "Calendar";
+ # description = "Opensource CalDAV web client";
+ # website = "https://dav.immae.eu/caldavzap/";
+ # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg";
+ # status.level = "OK";
+ # status.description = "OK";
+ # registration."" = ["MEMBER" "CLIENT"];
+ # registration.load = "OPEN";
+ # install.type = "PACKAGE";
+ # };
+ # software = {
+ # name = "InfCloud";
+ # website = "https://inf-it.com/open-source/clients/infcloud/";
+ # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html";
+ # license.name = "GNU Affero General Public License (version 3.0)";
+ # version = pkgs.webapps-infcloud.version;
+ # source.url = "https://inf-it.com/open-source/clients/infcloud/";
+ # };
+ #};
+ #contacts = {
+ # file.datetime = "2022-08-22T00:00:00";
+ # service = {
+ # name = "Contacts";
+ # description = "Opensource Carddav web client";
+ # website = "https://dav.immae.eu/carddavmate/";
+ # logo = "https://dav.immae.eu/caldavzap/images/infcloud_logo.svg";
+ # status.level = "OK";
+ # status.description = "OK";
+ # registration."" = ["MEMBER" "CLIENT"];
+ # registration.load = "OPEN";
+ # install.type = "PACKAGE";
+ # };
+ # software = {
+ # name = "InfCloud";
+ # website = "https://inf-it.com/open-source/clients/infcloud/";
+ # license.url = "https://www.gnu.org/licenses/agpl-3.0.en.html";
+ # license.name = "GNU Affero General Public License (version 3.0)";
+ # version = pkgs.webapps-infcloud.version;
+ # source.url = "https://inf-it.com/open-source/clients/infcloud/";
+ # };
+ #};
+ };
+ secrets.keys = davical.keys;
+ services.websites.env.tools.modules = davical.apache.modules;
+
+ security.acme.certs.eldiron.extraDomainNames = [ "dav.immae.eu" ];
+ services.websites.env.tools.vhostConfs.dav = {
+ certName = "eldiron";
+ hosts = ["dav.immae.eu" ];
+ root = ./www;
+ extraConfig = [
+ infcloud.vhostConf
+ (davical.apache.vhostConf config.services.phpfpm.pools.davical.socket)
+ ];
+ };
+
+ services.phpfpm.pools = {
+ davical = {
+ user = config.services.websites.env.tools.user;
+ group = config.services.websites.env.tools.group;
+ settings = davical.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "davical website is running on dav.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "dav.immae.eu" "/davical/" "Log On Please"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Davical";
+ _webstatus_url = "https://dav.immae.eu/davical";
+ }
+ ];
+ };
+}
+
diff --git a/systems/eldiron/websites/dav/www/index.html b/systems/eldiron/websites/dav/www/index.html
new file mode 100644
index 0000000..91c25ba
--- /dev/null
+++ b/systems/eldiron/websites/dav/www/index.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Dav configuration
+
+
+
+
+ Dav configuration:
+
+ Server: https://dav.immae.eu/caldav.php
+
+
+
+ Clients:
+
+
+
+
+
diff --git a/systems/eldiron/websites/db/default.nix b/systems/eldiron/websites/db/default.nix
new file mode 100644
index 0000000..339948f
--- /dev/null
+++ b/systems/eldiron/websites/db/default.nix
@@ -0,0 +1,32 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.websites.tools.db;
+in {
+ options.myServices.websites.tools.db = {
+ enable = lib.mkEnableOption "enable database's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.websites.env.tools.modules = [ "proxy_fcgi" ];
+ security.acme.certs.eldiron.extraDomainNames = [ "db-1.immae.eu" ];
+ services.websites.env.tools.vhostConfs.db-1 = {
+ certName = "eldiron";
+ hosts = ["db-1.immae.eu" ];
+ root = null;
+ extraConfig = [ ''
+ Alias /adminer ${pkgs.webapps-adminer}
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.adminer.socket}|fcgi://localhost"
+
+
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu
+ Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu
+
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/default.nix b/systems/eldiron/websites/default.nix
new file mode 100644
index 0000000..68205de
--- /dev/null
+++ b/systems/eldiron/websites/default.nix
@@ -0,0 +1,319 @@
+{ lib, pkgs, config, mypackages-lib, ... }:
+let
+ www_root = ./_www;
+ theme_root = (mypackages-lib.apache-theme {}).theme;
+ apacheConfig = {
+ shutdownconfig = {
+ # Only give 5 seconds to workers to finish their work
+ extraConfig = ''
+ GracefulShutdownTimeout 5
+ '';
+ };
+ cache = {
+ # This setting permits to ignore time-based cache for files in the
+ # nix store:
+ # If a client requires an If-Modified-Since from timestamp 1, then
+ # this header is removed, and if the response contains a
+ # too old Last-Modified tag, then it is removed too
+ extraConfig = ''
+
+ RequestHeader unset If-Modified-Since
+
+ Header unset Last-Modified "expr=%{LAST_MODIFIED} < 19991231235959"
+ '';
+ };
+ gzip = {
+ modules = [ "deflate" "filter" ];
+ extraConfig = ''
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
+ '';
+ };
+ macros = {
+ modules = [ "macro" ];
+ };
+ stats = {
+ extraConfig = ''
+
+ Alias /webstats ${config.services.webstats.dataDir}/%{domain}
+
+ DirectoryIndex index.html
+ AllowOverride None
+ Require all granted
+
+
+ Use LDAPConnect
+ Require ldap-group cn=%{domain},ou=stats,cn=httpd,ou=services,dc=immae,dc=eu
+
+
+ '';
+ };
+ ldap = {
+ modules = [ "ldap" "authnz_ldap" ];
+ extraConfig = ''
+
+ LDAPSharedCacheSize 500000
+ LDAPCacheEntries 1024
+ LDAPCacheTTL 600
+ LDAPOpCacheEntries 1024
+ LDAPOpCacheTTL 600
+
+
+ Include ${config.secrets.fullPaths."apache-ldap"}
+ '';
+ };
+ global = {
+ extraConfig = ''
+ ErrorDocument 500 /maintenance_immae.html
+ ErrorDocument 501 /maintenance_immae.html
+ ErrorDocument 502 /maintenance_immae.html
+ ErrorDocument 503 /maintenance_immae.html
+ ErrorDocument 504 /maintenance_immae.html
+ Alias /maintenance_immae.html ${www_root}/maintenance_immae.html
+ ProxyPass /maintenance_immae.html !
+
+ AliasMatch "(.*)/googleb6d69446ff4ca3e5.html" ${www_root}/googleb6d69446ff4ca3e5.html
+
+ AllowOverride None
+ Require all granted
+
+ '';
+ };
+ apaxy = {
+ extraConfig = (mypackages-lib.apache-theme { inherit theme_root; }).apacheConfig;
+ };
+ http2 = {
+ modules = [ "http2" ];
+ extraConfig = ''
+ Protocols h2 http/1.1
+ '';
+ };
+ customLog = {
+ extraConfig = ''
+ LogFormat "%{Host}i:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedVhost
+ '';
+ };
+ };
+ makeModules = lib.lists.flatten (lib.attrsets.mapAttrsToList (n: v: v.modules or []) apacheConfig);
+ makeExtraConfig = (builtins.filter (x: x != null) (lib.attrsets.mapAttrsToList (n: v: v.extraConfig or null) apacheConfig));
+ moomin = let
+ lines = lib.splitString "\n" (lib.fileContents ./moomin.txt);
+ pad = width: str: let
+ padWidth = width - lib.stringLength str;
+ padding = lib.concatStrings (lib.genList (lib.const "0") padWidth);
+ in lib.optionalString (padWidth > 0) padding + str;
+ in
+ lib.imap0 (i: e: ''Header always set "X-Moomin-${pad 2 (builtins.toString i)}" "${e}"'') lines;
+in
+{
+ imports = [
+ ./immae/production.nix
+ ./immae/release.nix
+
+ # Tools
+ ./assets
+ ./cloud
+ ./cloud/farm.nix
+ ./cryptpad
+ ./cryptpad/farm.nix
+ ./commento
+ ./dav
+ ./vpn
+ ./db
+ ./diaspora
+ ./ether
+ ./git
+ ./im
+ ./mastodon
+ ./mgoblin
+ ./peertube
+ ./performance
+ ./tools
+ ./mail
+ ./stats
+ ./visio
+ ./kanboard/farm.nix
+
+ # Games
+ ./games/codenames
+ ./games/terraforming-mars
+ ];
+
+ options.myServices.websites.enable = lib.mkEnableOption "enable websites";
+
+ config = lib.mkIf config.myServices.websites.enable {
+ myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers;
+ {
+ games = ips servers.eldiron.ips.main;
+ nossl = ips servers.eldiron.ips.main;
+ };
+
+ myServices.chatonsProperties.hostings.web = {
+ file.datetime = "2022-08-22T01:30:00";
+ hosting = {
+ name = "Hébergement Web";
+ description = "Service d'hébergement web avec php/mysql/postgresql";
+ website = "https://www.immae.eu";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Apache Httpd";
+ website = "https://httpd.apache.org/";
+ license.url = "https://www.apache.org/licenses/";
+ license.name = "Apache License Version 2";
+ version = pkgs.apacheHttpd.version;
+ source.url = "https://httpd.apache.org/download.cgi";
+ modules = "openssh,pure-ftpd";
+ };
+ };
+ users.users.wwwrun.extraGroups = [ "keys" ];
+ networking.firewall.allowedTCPPorts = [ 80 443 ];
+
+ secrets.keys."apache-ldap" = {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = ''
+
+
+ AuthLDAPURL ldap://ldap.immae.eu:389/dc=immae,dc=eu STARTTLS
+ AuthLDAPBindDN cn=httpd,ou=services,dc=immae,dc=eu
+ AuthLDAPBindPassword "${config.myEnv.httpd.ldap.password}"
+ AuthType Basic
+ AuthName "Authentification requise (Acces LDAP)"
+ AuthBasicProvider ldap
+
+
+ '';
+ };
+
+ system.activationScripts = {
+ httpd = ''
+ install -d -m 0755 /var/lib/acme/acme-challenges
+ install -d -m 0750 -o wwwrun -g wwwrun /var/lib/php/sessions
+ '';
+ };
+
+ services.phpfpm = {
+ phpOptions = ''
+ session.save_path = "/var/lib/php/sessions"
+ post_max_size = 20M
+ ; 15 days (seconds)
+ session.gc_maxlifetime = 1296000
+ ; 30 days (minutes)
+ session.cache_expire = 43200
+ '';
+ settings = {
+ log_level = "notice";
+ };
+ };
+
+ services.websites.env.production = {
+ enable = true;
+ moduleType = "container";
+ adminAddr = "httpd@immae.eu";
+ bindMounts."/var/lib/ftp" = {};
+ # FIXME: Bind directly the needed files
+ bindMounts."/var/secrets" = {};
+ bindMounts."/var/lib/goaccess" = {};
+ bindMounts."/var/lib/acme" = {};
+ bindMounts."/run/phpfpm" = {};
+ ips =
+ let ips = config.myEnv.servers.eldiron.ips.production;
+ in (ips.ip4 or []) ++ (ips.ip6 or []);
+ modules = makeModules;
+ extraConfig = makeExtraConfig;
+ fallbackVhost = {
+ certName = "eldiron";
+ hosts = ["eldiron.immae.eu" ];
+ root = www_root;
+ extraConfig = [ "DirectoryIndex index.htm" ];
+ };
+ };
+
+ services.websites.env.integration = {
+ enable = true;
+ moduleType = "container";
+ adminAddr = "httpd@immae.eu";
+ bindMounts."/var/lib/ftp" = {};
+ bindMounts."/var/secrets" = {};
+ bindMounts."/var/lib/goaccess" = {};
+ bindMounts."/var/lib/acme" = {};
+ bindMounts."/run/phpfpm" = {};
+ ips =
+ let ips = config.myEnv.servers.eldiron.ips.integration;
+ in (ips.ip4 or []) ++ (ips.ip6 or []);
+ modules = makeModules;
+ extraConfig = makeExtraConfig ++ moomin;
+ fallbackVhost = {
+ certName = "integration";
+ hosts = ["eldiron.immae.eu" ];
+ root = www_root;
+ extraConfig = [ "DirectoryIndex index.htm" ];
+ };
+ watchPaths = [ config.secrets.fullPaths."apache-ldap" ];
+ };
+
+ services.websites.env.tools = {
+ enable = true;
+ moduleType = "main";
+ adminAddr = "httpd@immae.eu";
+ ips =
+ let ips = config.myEnv.servers.eldiron.ips.main;
+ in (ips.ip4 or []) ++ (ips.ip6 or []);
+ modules = makeModules;
+ extraConfig = makeExtraConfig ++
+ [ ''
+ RedirectMatch ^/licen[cs]es?_et_tip(ping)?$ https://www.immae.eu/licences_et_tip.html
+ RedirectMatch ^/licen[cs]es?_and_tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html
+ RedirectMatch ^/licen[cs]es?$ https://www.immae.eu/licenses_and_tipping.html
+ RedirectMatch ^/tip(ping)?$ https://www.immae.eu/licenses_and_tipping.html
+ RedirectMatch ^/(mentions|mentions_legales|legal)$ https://www.immae.eu/mentions.html
+ RedirectMatch ^/CGU$ https://www.immae.eu/CGU
+ ''
+ ];
+ nosslVhost = {
+ enable = true;
+ host = "nossl.immae.eu";
+ root = ./nossl;
+ };
+ fallbackVhost = {
+ certName = "eldiron";
+ hosts = ["eldiron.immae.eu" ];
+ root = www_root;
+ extraConfig = [ "DirectoryIndex index.htm" ];
+ };
+ watchPaths = [ config.secrets.fullPaths."apache-ldap" ];
+ };
+
+ myServices.websites = {
+ immae = {
+ production.enable = true;
+ release.enable = true;
+ };
+
+ tools.assets.enable = true;
+ tools.cloud.enable = true;
+ tools.commento.enable = true;
+ tools.cryptpad.enable = true;
+ tools.dav.enable = true;
+ tools.db.enable = true;
+ tools.diaspora.enable = true;
+ tools.etherpad-lite.enable = true;
+ tools.git.enable = true;
+ tools.mastodon.enable = true;
+ tools.mediagoblin.enable = true;
+ tools.peertube.enable = true;
+ tools.performance.enable = true;
+ tools.tools.enable = true;
+ tools.email.enable = true;
+ tools.stats.enable = false;
+ tools.visio.enable = true;
+
+ games.codenames.enable = true;
+ games.terraforming-mars.enable = true;
+ };
+ };
+}
diff --git a/systems/eldiron/websites/diaspora/default.nix b/systems/eldiron/websites/diaspora/default.nix
new file mode 100644
index 0000000..c536446
--- /dev/null
+++ b/systems/eldiron/websites/diaspora/default.nix
@@ -0,0 +1,224 @@
+{ lib, pkgs, config, ... }:
+let
+ env = config.myEnv.tools.diaspora;
+ root = "${dcfg.workdir}/public/";
+ cfg = config.myServices.websites.tools.diaspora;
+ dcfg = config.services.diaspora;
+in {
+ options.myServices.websites.tools.diaspora = {
+ enable = lib.mkEnableOption "enable diaspora's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.diaspora =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.diaspora = {
+ file.datetime = "2022-08-21T01:39:00";
+ service = {
+ name = "Diaspora";
+ description = "The online social world where you are in control";
+ website = "https://diaspora.immae.eu";
+ logo = "https://diaspora.immae.eu/assets/apple-touch-icon-9f7c9cc3923b4817fbb25bfeb0dd5fd34638827fd9c82b5a03f7b68e6e90806f.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Diaspora*";
+ website = "https://diasporafoundation.org/";
+ license.url = "https://github.com/diaspora/diaspora/blob/develop/LICENSE";
+ license.name = "GNU Affero General Public License v3.0";
+ version = dcfg.package.version;
+ source.url = "https://github.com/diaspora/diaspora";
+ };
+ };
+ users.users.diaspora.extraGroups = [ "keys" ];
+
+ secrets.keys = {
+ "webapps/diaspora" = {
+ isDir = true;
+ user = "diaspora";
+ group = "diaspora";
+ permissions = "0500";
+ };
+ "webapps/diaspora/diaspora.yml" = {
+ user = "diaspora";
+ group = "diaspora";
+ permissions = "0400";
+ keyDependencies = [ pkgs.cacert ];
+ text = ''
+ configuration:
+ environment:
+ url: "https://diaspora.immae.eu/"
+ certificate_authorities: '${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt'
+ redis: 'redis://${env.redis.host}:${env.redis.port}/${env.redis.db}'
+ sidekiq:
+ s3:
+ assets:
+ logging:
+ logrotate:
+ debug:
+ server:
+ listen: '${dcfg.sockets.rails}'
+ rails_environment: 'production'
+ chat:
+ server:
+ bosh:
+ log:
+ map:
+ mapbox:
+ privacy:
+ piwik:
+ statistics:
+ camo:
+ settings:
+ enable_registrations: false
+ welcome_message:
+ invitations:
+ open: false
+ paypal_donations:
+ community_spotlight:
+ captcha:
+ enable: false
+ terms:
+ maintenance:
+ remove_old_users:
+ default_metas:
+ csp:
+ services:
+ twitter:
+ tumblr:
+ wordpress:
+ mail:
+ enable: true
+ sender_address: 'diaspora@tools.immae.eu'
+ method: 'sendmail'
+ smtp:
+ sendmail:
+ location: '/run/wrappers/bin/sendmail'
+ admins:
+ account: "ismael"
+ podmin_email: 'diaspora@tools.immae.eu'
+ relay:
+ outbound:
+ inbound:
+ ldap:
+ enable: true
+ host: ${env.ldap.host}
+ port: 636
+ only_ldap: true
+ mail_attribute: mail
+ skip_email_confirmation: true
+ use_bind_dn: true
+ bind_dn: "${env.ldap.dn}"
+ bind_pw: "${env.ldap.password}"
+ search_base: "${env.ldap.base}"
+ search_filter: "${env.ldap.filter}"
+ production:
+ environment:
+ development:
+ environment:
+ '';
+ };
+ "webapps/diaspora/database.yml" = {
+ user = "diaspora";
+ group = "diaspora";
+ permissions = "0400";
+ text = ''
+ postgresql: &postgresql
+ adapter: postgresql
+ host: "${env.postgresql.socket}"
+ port: "${env.postgresql.port}"
+ username: "${env.postgresql.user}"
+ password: "${env.postgresql.password}"
+ encoding: unicode
+ common: &common
+ <<: *postgresql
+ combined: &combined
+ <<: *common
+ development:
+ <<: *combined
+ database: diaspora_development
+ production:
+ <<: *combined
+ database: ${env.postgresql.database}
+ test:
+ <<: *combined
+ database: "diaspora_test"
+ integration1:
+ <<: *combined
+ database: diaspora_integration1
+ integration2:
+ <<: *combined
+ database: diaspora_integration2
+ '';
+ };
+ "webapps/diaspora/secret_token.rb" = {
+ user = "diaspora";
+ group = "diaspora";
+ permissions = "0400";
+ text = ''
+ Diaspora::Application.config.secret_key_base = '${env.secret_token}'
+ '';
+ };
+ };
+
+ services.diaspora = {
+ enable = true;
+ withLdap = true;
+ dataDir = "/var/lib/diaspora_immae";
+ adminEmail = "diaspora@tools.immae.eu";
+ configDir = config.secrets.fullPaths."webapps/diaspora";
+ };
+
+ services.filesWatcher.diaspora = {
+ restart = true;
+ paths = [ dcfg.configDir ];
+ };
+
+ services.websites.env.tools.modules = [
+ "headers" "proxy" "proxy_http"
+ ];
+ security.acme.certs.eldiron.extraDomainNames = [ "diaspora.immae.eu" ];
+ services.websites.env.tools.vhostConfs.diaspora = {
+ certName = "eldiron";
+ hosts = [ "diaspora.immae.eu" ];
+ root = root;
+ extraConfig = [ ''
+ RewriteEngine On
+ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
+ RewriteRule ^/(.*)$ unix://${dcfg.sockets.rails}|http://diaspora.immae.eu/%{REQUEST_URI} [P,NE,QSA,L]
+
+ ProxyRequests Off
+ ProxyVia On
+ ProxyPreserveHost On
+ RequestHeader set X_FORWARDED_PROTO https
+
+
+ Require all granted
+
+
+
+ Require all granted
+ Options -MultiViews
+
+ '' ];
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "diaspora website is running on diaspora.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "diaspora.immae.eu" "/" "is the online social world where you are in control"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Diaspora";
+ _webstatus_url = "https://diaspora.immae.eu/";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/ether/default.nix b/systems/eldiron/websites/ether/default.nix
new file mode 100644
index 0000000..3993553
--- /dev/null
+++ b/systems/eldiron/websites/ether/default.nix
@@ -0,0 +1,251 @@
+{ lib, pkgs, config, nixpkgsRaw, etherpad-lite, ... }:
+let
+ env = config.myEnv.tools.etherpad-lite;
+ cfg = config.myServices.websites.tools.etherpad-lite;
+ # Make sure we’re not rebuilding whole libreoffice just because of a
+ # dependency
+ libreoffice = nixpkgsRaw.libreoffice-fresh;
+ ecfg = config.services.etherpad-lite;
+in {
+ options.myServices.websites.tools.etherpad-lite = {
+ enable = lib.mkEnableOption "enable etherpad's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.ether =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.etherpad = {
+ file.datetime = "2021-01-04T00:01:00";
+ service = {
+ name = "Etherpad";
+ description = "Éditeur de texte collaboratif en temps réel. on peut y écrire simultanément.";
+ website = "https://ether.immae.eu";
+ logo = "https://ether.immae.eu/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE" "MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Etherpad";
+ website = "https://etherpad.org/";
+ license.url = "https://github.com/ether/etherpad-lite/blob/develop/LICENSE";
+ license.name = "Apache License Version 2.0";
+ version = ecfg.package.version;
+ source.url = "https://github.com/ether/etherpad-lite";
+ modules = ecfg.package.moduleNames;
+ };
+ };
+ secrets.keys = {
+ "webapps/tools-etherpad-apikey" = {
+ permissions = "0400";
+ text = env.api_key;
+ };
+ "webapps/tools-etherpad-sessionkey" = {
+ permissions = "0400";
+ text = env.session_key;
+ };
+ "webapps/tools-etherpad" = {
+ permissions = "0400";
+ keyDependencies = [ libreoffice ];
+ text = ''
+ {
+ "title": "Etherpad",
+ "favicon": "favicon.ico",
+ "skinName": "colibris",
+ "skinVariants": "dark-toolbar light-background super-light-editor full-width-editor",
+
+ "ip": "",
+ "port" : "${ecfg.sockets.node}",
+ "showSettingsInAdminPage" : false,
+ "dbType" : "postgres",
+ "dbSettings" : {
+ "user" : "${env.postgresql.user}",
+ "host" : "${env.postgresql.socket}",
+ "password": "${env.postgresql.password}",
+ "database": "${env.postgresql.database}",
+ "charset" : "utf8mb4"
+ },
+
+ "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
+ "padOptions": {
+ "noColors": false,
+ "showControls": true,
+ "showChat": true,
+ "showLineNumbers": true,
+ "useMonospaceFont": false,
+ "userName": false,
+ "userColor": false,
+ "rtl": false,
+ "alwaysShowChat": false,
+ "chatAndUsers": false,
+ "lang": "fr"
+ },
+
+ "suppressErrorsInPadText" : false,
+ "requireSession" : false,
+ "editOnly" : false,
+ "sessionNoPassword" : false,
+ "minify" : false,
+ "maxAge" : 21600,
+ "abiword" : null,
+ "soffice" : "${libreoffice}/bin/soffice",
+ "tidyHtml" : "",
+ "allowUnknownFileEnds" : true,
+ "requireAuthentication" : false,
+ "requireAuthorization" : false,
+ "trustProxy" : true,
+ "disableIPlogging" : false,
+ "automaticReconnectionTimeout" : 0,
+ "scrollWhenFocusLineIsOutOfViewport": {
+ "percentage": {
+ "editionAboveViewport": 0,
+ "editionBelowViewport": 0
+ },
+ "duration": 0,
+ "scrollWhenCaretIsInTheLastLineOfViewport": false,
+ "percentageToScrollWhenUserPressesArrowUp": 0
+ },
+ "users": {
+ "admin": {
+ "password": "${env.adminPassword}",
+ "is_admin": true
+ },
+ "ldapauth": {
+ "hash": "invalid",
+ "url": "ldaps://${env.ldap.host}",
+ "accountBase": "${env.ldap.base}",
+ "accountPattern": "${env.ldap.filter}",
+ "displayNameAttribute": "cn",
+ "searchDN": "${env.ldap.dn}",
+ "searchPWD": "${env.ldap.password}",
+ "groupSearchBase": "${env.ldap.base}",
+ "groupAttribute": "member",
+ "groupAttributeIsDN": true,
+ "searchScope": "sub",
+ "groupSearch": "${env.ldap.group_filter}",
+ "anonymousReadonly": false
+ }
+ },
+ "ep_mypads": {
+ "warning": "This hash is stored in database, changing anything here will not have any consequence",
+ "ldap": {
+ "url": "ldaps://${env.ldap.host}",
+ "bindDN": "${env.ldap.dn}",
+ "bindCredentials": "${env.ldap.password}",
+ "searchBase": "${env.ldap.base}",
+ "searchFilter": "${env.ldap.filter}",
+ "properties": {
+ "login": "uid",
+ "email": "mail",
+ "firstname": "givenName",
+ "lastname": "sn"
+ },
+ "defaultLang": "fr"
+ }
+ },
+ "ep_comments_page": {
+ "displayCommentAsIcon": true,
+ "highlightSelectedText": true
+ },
+ "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
+ "loadTest": false,
+ "indentationOnNewLine": false,
+ "toolbar": {
+ "left": [
+ ["bold", "italic", "underline", "strikethrough"],
+ ["orderedlist", "unorderedlist", "indent", "outdent"],
+ ["undo", "redo"],
+ ["clearauthorship"]
+ ],
+ "right": [
+ ["importexport", "timeslider", "savedrevision"],
+ ["settings", "embed"],
+ ["showusers"]
+ ],
+ "timeslider": [
+ ["timeslider_export", "timeslider_returnToPad"]
+ ]
+ },
+ "loglevel": "INFO",
+ "logconfig" : { "appenders": [ { "type": "console" } ] }
+ }
+ '';
+ };
+ };
+ services.etherpad-lite = {
+ enable = true;
+ package = etherpad-lite.withModules (p: [
+ p.ep_align p.ep_bookmark p.ep_colors p.ep_comments_page
+ p.ep_cursortrace p.ep_delete_empty_pads p.ep_embedmedia
+ p.ep_font_size p.ep_headings2 p.ep_immae_buttons p.ep_ldapauth
+ p.ep_line_height p.ep_markdown p.ep_mypads p.ep_page_view
+ p.ep_previewimages p.ep_ruler p.ep_scrollto
+ p.ep_set_title_on_pad p.ep_subscript_and_superscript
+ p.ep_timesliderdiff
+ ]);
+ modules = [];
+ sessionKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-sessionkey";
+ apiKeyFile = config.secrets.fullPaths."webapps/tools-etherpad-apikey";
+ configFile = config.secrets.fullPaths."webapps/tools-etherpad";
+ };
+
+ systemd.services.etherpad-lite.serviceConfig.SupplementaryGroups = "keys";
+ systemd.services.etherpad-lite-cleanup.serviceConfig.SupplementaryGroups = "keys";
+ # Needed so that they get in the closure
+ systemd.services.etherpad-lite.path = [ libreoffice pkgs.html-tidy ];
+
+ services.filesWatcher.etherpad-lite = {
+ restart = true;
+ paths = [ ecfg.sessionKeyFile ecfg.apiKeyFile ecfg.configFile ];
+ };
+
+ services.websites.env.tools.modules = [
+ "headers" "proxy" "proxy_http" "proxy_wstunnel"
+ ];
+ security.acme.certs.eldiron.extraDomainNames = [ "ether.immae.eu" ];
+ services.websites.env.tools.vhostConfs.etherpad-lite = {
+ certName = "eldiron";
+ hosts = [ "ether.immae.eu" ];
+ root = null;
+ extraConfig = [ ''
+ Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
+ RequestHeader set X-Forwarded-Proto "https"
+
+ RewriteEngine On
+
+ RewriteCond %{REQUEST_URI} ^/socket.io [NC]
+ RewriteCond %{QUERY_STRING} transport=websocket [NC]
+ RewriteRule /(.*) unix://${ecfg.sockets.node}|ws://ether.immae.eu/$1 [P,NE,QSA,L]
+
+
+ ProxyVia On
+ ProxyRequests Off
+ ProxyPreserveHost On
+ ProxyPass / unix://${ecfg.sockets.node}|http://ether.immae.eu/
+ ProxyPassReverse / unix://${ecfg.sockets.node}|http://ether.immae.eu/
+
+ Options FollowSymLinks MultiViews
+ AllowOverride None
+ Require all granted
+
+
+ '' ];
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "etherpad website is running on ether.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "ether.immae.eu" "/" "Etherpad"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Etherpad";
+ _webstatus_url = "https://ether.immae.eu/";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/games/codenames/codenames.patch b/systems/eldiron/websites/games/codenames/codenames.patch
new file mode 100644
index 0000000..9faf069
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/codenames.patch
@@ -0,0 +1,8306 @@
+diff --git a/elm.json b/elm.json
+index a0d276b..1b73a46 100644
+--- a/elm.json
++++ b/elm.json
+@@ -3,7 +3,7 @@
+ "source-directories": [
+ "src"
+ ],
+- "elm-version": "0.19.0",
++ "elm-version": "0.19.1",
+ "dependencies": {
+ "direct": {
+ "elm/browser": "1.0.1",
+@@ -15,12 +15,11 @@
+ "perzanko/elm-loading": "2.0.4"
+ },
+ "indirect": {
+- "Skinney/murmur3": "2.0.8",
+ "elm/bytes": "1.0.8",
+ "elm/file": "1.0.5",
+ "elm/time": "1.0.0",
+ "elm/virtual-dom": "1.0.2",
+- "rtfeldman/elm-css": "16.0.1",
++ "rtfeldman/elm-css": "16.1.0",
+ "rtfeldman/elm-hex": "1.0.0"
+ }
+ },
+@@ -32,4 +31,4 @@
+ "elm/random": "1.0.0"
+ }
+ }
+-}
+\ No newline at end of file
++}
+diff --git a/package-lock.json b/package-lock.json
+index 778b061..05a22ab 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -4,196 +4,7963 @@
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.0.0",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
++ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.0.0"
++ }
++ },
++ "@babel/core": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz",
++ "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.0.0",
++ "@babel/generator": "^7.3.4",
++ "@babel/helpers": "^7.2.0",
++ "@babel/parser": "^7.3.4",
++ "@babel/template": "^7.2.2",
++ "@babel/traverse": "^7.3.4",
++ "@babel/types": "^7.3.4",
++ "convert-source-map": "^1.1.0",
++ "debug": "^4.1.0",
++ "json5": "^2.1.0",
++ "lodash": "^4.17.11",
++ "resolve": "^1.3.2",
++ "semver": "^5.4.1",
++ "source-map": "^0.5.0"
++ },
++ "dependencies": {
++ "json5": {
++ "version": "2.1.3",
++ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
++ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
++ "dev": true,
++ "requires": {
++ "minimist": "^1.2.5"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/generator": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
++ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.3.4",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.11",
++ "source-map": "^0.5.0",
++ "trim-right": "^1.0.1"
++ },
++ "dependencies": {
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/helper-annotate-as-pure": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
++ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-builder-binary-assignment-operator-visitor": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
++ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-explode-assignable-expression": "^7.8.3",
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-builder-react-jsx": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz",
++ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-annotate-as-pure": "^7.8.3",
++ "@babel/types": "^7.9.0"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-create-regexp-features-plugin": {
++ "version": "7.8.8",
++ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
++ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-annotate-as-pure": "^7.8.3",
++ "@babel/helper-regex": "^7.8.3",
++ "regexpu-core": "^4.7.0"
++ }
++ },
++ "@babel/helper-define-map": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
++ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-function-name": "^7.8.3",
++ "@babel/types": "^7.8.3",
++ "lodash": "^4.17.13"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-explode-assignable-expression": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
++ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
++ "dev": true,
++ "requires": {
++ "@babel/traverse": "^7.8.3",
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/generator": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.9.5",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.13",
++ "source-map": "^0.5.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/traverse": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/generator": "^7.9.5",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/parser": "^7.9.0",
++ "@babel/types": "^7.9.5",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/helper-function-name": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz",
++ "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-get-function-arity": "^7.8.3",
++ "@babel/template": "^7.8.3",
++ "@babel/types": "^7.9.5"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-get-function-arity": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
++ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-hoist-variables": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
++ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-member-expression-to-functions": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
++ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-module-imports": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
++ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-module-transforms": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
++ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-imports": "^7.8.3",
++ "@babel/helper-replace-supers": "^7.8.6",
++ "@babel/helper-simple-access": "^7.8.3",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/template": "^7.8.6",
++ "@babel/types": "^7.9.0",
++ "lodash": "^4.17.13"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-optimise-call-expression": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
++ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-plugin-utils": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
++ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
++ "dev": true
++ },
++ "@babel/helper-regex": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
++ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
++ "dev": true,
++ "requires": {
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/helper-remap-async-to-generator": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
++ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-annotate-as-pure": "^7.8.3",
++ "@babel/helper-wrap-function": "^7.8.3",
++ "@babel/template": "^7.8.3",
++ "@babel/traverse": "^7.8.3",
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/generator": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.9.5",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.13",
++ "source-map": "^0.5.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/traverse": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/generator": "^7.9.5",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/parser": "^7.9.0",
++ "@babel/types": "^7.9.5",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/helper-replace-supers": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
++ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-member-expression-to-functions": "^7.8.3",
++ "@babel/helper-optimise-call-expression": "^7.8.3",
++ "@babel/traverse": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/generator": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.9.5",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.13",
++ "source-map": "^0.5.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/traverse": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/generator": "^7.9.5",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/parser": "^7.9.0",
++ "@babel/types": "^7.9.5",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/helper-simple-access": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
++ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
++ "dev": true,
++ "requires": {
++ "@babel/template": "^7.8.3",
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-split-export-declaration": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
++ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ }
++ }
++ },
++ "@babel/helper-validator-identifier": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz",
++ "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==",
++ "dev": true
++ },
++ "@babel/helper-wrap-function": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
++ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-function-name": "^7.8.3",
++ "@babel/template": "^7.8.3",
++ "@babel/traverse": "^7.8.3",
++ "@babel/types": "^7.8.3"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/generator": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.9.5",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.13",
++ "source-map": "^0.5.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/traverse": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/generator": "^7.9.5",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/parser": "^7.9.0",
++ "@babel/types": "^7.9.5",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/helpers": {
++ "version": "7.9.2",
++ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
++ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
++ "dev": true,
++ "requires": {
++ "@babel/template": "^7.8.3",
++ "@babel/traverse": "^7.9.0",
++ "@babel/types": "^7.9.0"
++ },
++ "dependencies": {
++ "@babel/code-frame": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
++ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
++ "dev": true,
++ "requires": {
++ "@babel/highlight": "^7.8.3"
++ }
++ },
++ "@babel/generator": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz",
++ "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==",
++ "dev": true,
++ "requires": {
++ "@babel/types": "^7.9.5",
++ "jsesc": "^2.5.1",
++ "lodash": "^4.17.13",
++ "source-map": "^0.5.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.9.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
++ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
++ "dev": true
++ },
++ "@babel/template": {
++ "version": "7.8.6",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
++ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/parser": "^7.8.6",
++ "@babel/types": "^7.8.6"
++ }
++ },
++ "@babel/traverse": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz",
++ "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.8.3",
++ "@babel/generator": "^7.9.5",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "@babel/parser": "^7.9.0",
++ "@babel/types": "^7.9.5",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/types": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz",
++ "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.5",
++ "lodash": "^4.17.13",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "@babel/highlight": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz",
++ "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-validator-identifier": "^7.9.0",
++ "chalk": "^2.0.0",
++ "js-tokens": "^4.0.0"
++ }
++ },
++ "@babel/parser": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
++ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
++ "dev": true
++ },
++ "@babel/plugin-proposal-async-generator-functions": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
++ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/helper-remap-async-to-generator": "^7.8.3",
++ "@babel/plugin-syntax-async-generators": "^7.8.0"
++ }
++ },
++ "@babel/plugin-proposal-json-strings": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
++ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/plugin-syntax-json-strings": "^7.8.0"
++ }
++ },
++ "@babel/plugin-proposal-object-rest-spread": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz",
++ "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
++ "@babel/plugin-transform-parameters": "^7.9.5"
++ }
++ },
++ "@babel/plugin-proposal-optional-catch-binding": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
++ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
++ }
++ },
++ "@babel/plugin-proposal-unicode-property-regex": {
++ "version": "7.8.8",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz",
++ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-create-regexp-features-plugin": "^7.8.8",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-syntax-async-generators": {
++ "version": "7.8.4",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
++ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.0"
++ }
++ },
++ "@babel/plugin-syntax-flow": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz",
++ "integrity": "sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-syntax-json-strings": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
++ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.0"
++ }
++ },
++ "@babel/plugin-syntax-jsx": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
++ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-syntax-object-rest-spread": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
++ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.0"
++ }
++ },
++ "@babel/plugin-syntax-optional-catch-binding": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
++ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.0"
++ }
++ },
++ "@babel/plugin-transform-arrow-functions": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
++ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-async-to-generator": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
++ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-imports": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/helper-remap-async-to-generator": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-block-scoped-functions": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
++ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-block-scoping": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
++ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "lodash": "^4.17.13"
++ }
++ },
++ "@babel/plugin-transform-classes": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz",
++ "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-annotate-as-pure": "^7.8.3",
++ "@babel/helper-define-map": "^7.8.3",
++ "@babel/helper-function-name": "^7.9.5",
++ "@babel/helper-optimise-call-expression": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/helper-replace-supers": "^7.8.6",
++ "@babel/helper-split-export-declaration": "^7.8.3",
++ "globals": "^11.1.0"
++ }
++ },
++ "@babel/plugin-transform-computed-properties": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
++ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-destructuring": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz",
++ "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-dotall-regex": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
++ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-duplicate-keys": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
++ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-exponentiation-operator": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
++ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-flow-strip-types": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz",
++ "integrity": "sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.0.0",
++ "@babel/plugin-syntax-flow": "^7.2.0"
++ }
++ },
++ "@babel/plugin-transform-for-of": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
++ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-function-name": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
++ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-function-name": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-literals": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
++ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-modules-amd": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz",
++ "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-transforms": "^7.9.0",
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "babel-plugin-dynamic-import-node": "^2.3.0"
++ }
++ },
++ "@babel/plugin-transform-modules-commonjs": {
++ "version": "7.2.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
++ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-transforms": "^7.1.0",
++ "@babel/helper-plugin-utils": "^7.0.0",
++ "@babel/helper-simple-access": "^7.1.0"
++ }
++ },
++ "@babel/plugin-transform-modules-systemjs": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz",
++ "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-hoist-variables": "^7.8.3",
++ "@babel/helper-module-transforms": "^7.9.0",
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "babel-plugin-dynamic-import-node": "^2.3.0"
++ }
++ },
++ "@babel/plugin-transform-modules-umd": {
++ "version": "7.9.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
++ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-transforms": "^7.9.0",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-named-capturing-groups-regex": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
++ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-new-target": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
++ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-object-super": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
++ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/helper-replace-supers": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-parameters": {
++ "version": "7.9.5",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz",
++ "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-get-function-arity": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-react-jsx": {
++ "version": "7.3.0",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
++ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-builder-react-jsx": "^7.3.0",
++ "@babel/helper-plugin-utils": "^7.0.0",
++ "@babel/plugin-syntax-jsx": "^7.2.0"
++ }
++ },
++ "@babel/plugin-transform-regenerator": {
++ "version": "7.8.7",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
++ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
++ "dev": true,
++ "requires": {
++ "regenerator-transform": "^0.14.2"
++ }
++ },
++ "@babel/plugin-transform-shorthand-properties": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
++ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-spread": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
++ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-sticky-regex": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
++ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3",
++ "@babel/helper-regex": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-template-literals": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
++ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-annotate-as-pure": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-typeof-symbol": {
++ "version": "7.8.4",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
++ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/plugin-transform-unicode-regex": {
++ "version": "7.8.3",
++ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
++ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
++ "@babel/helper-plugin-utils": "^7.8.3"
++ }
++ },
++ "@babel/preset-env": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz",
++ "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==",
++ "dev": true,
++ "requires": {
++ "@babel/helper-module-imports": "^7.0.0",
++ "@babel/helper-plugin-utils": "^7.0.0",
++ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
++ "@babel/plugin-proposal-json-strings": "^7.2.0",
++ "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
++ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
++ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
++ "@babel/plugin-syntax-async-generators": "^7.2.0",
++ "@babel/plugin-syntax-json-strings": "^7.2.0",
++ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
++ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
++ "@babel/plugin-transform-arrow-functions": "^7.2.0",
++ "@babel/plugin-transform-async-to-generator": "^7.3.4",
++ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
++ "@babel/plugin-transform-block-scoping": "^7.3.4",
++ "@babel/plugin-transform-classes": "^7.3.4",
++ "@babel/plugin-transform-computed-properties": "^7.2.0",
++ "@babel/plugin-transform-destructuring": "^7.2.0",
++ "@babel/plugin-transform-dotall-regex": "^7.2.0",
++ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
++ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
++ "@babel/plugin-transform-for-of": "^7.2.0",
++ "@babel/plugin-transform-function-name": "^7.2.0",
++ "@babel/plugin-transform-literals": "^7.2.0",
++ "@babel/plugin-transform-modules-amd": "^7.2.0",
++ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
++ "@babel/plugin-transform-modules-systemjs": "^7.3.4",
++ "@babel/plugin-transform-modules-umd": "^7.2.0",
++ "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
++ "@babel/plugin-transform-new-target": "^7.0.0",
++ "@babel/plugin-transform-object-super": "^7.2.0",
++ "@babel/plugin-transform-parameters": "^7.2.0",
++ "@babel/plugin-transform-regenerator": "^7.3.4",
++ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
++ "@babel/plugin-transform-spread": "^7.2.0",
++ "@babel/plugin-transform-sticky-regex": "^7.2.0",
++ "@babel/plugin-transform-template-literals": "^7.2.0",
++ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
++ "@babel/plugin-transform-unicode-regex": "^7.2.0",
++ "browserslist": "^4.3.4",
++ "invariant": "^2.2.2",
++ "js-levenshtein": "^1.1.3",
++ "semver": "^5.3.0"
++ }
++ },
++ "@babel/runtime": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz",
++ "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==",
++ "dev": true,
++ "requires": {
++ "regenerator-runtime": "^0.12.0"
++ },
++ "dependencies": {
++ "regenerator-runtime": {
++ "version": "0.12.1",
++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
++ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
++ "dev": true
++ }
++ }
++ },
++ "@babel/template": {
++ "version": "7.2.2",
++ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
++ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.0.0",
++ "@babel/parser": "^7.2.2",
++ "@babel/types": "^7.2.2"
++ }
++ },
++ "@babel/traverse": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
++ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.0.0",
++ "@babel/generator": "^7.3.4",
++ "@babel/helper-function-name": "^7.1.0",
++ "@babel/helper-split-export-declaration": "^7.0.0",
++ "@babel/parser": "^7.3.4",
++ "@babel/types": "^7.3.4",
++ "debug": "^4.1.0",
++ "globals": "^11.1.0",
++ "lodash": "^4.17.11"
++ }
++ },
++ "@babel/types": {
++ "version": "7.3.4",
++ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
++ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
++ "dev": true,
++ "requires": {
++ "esutils": "^2.0.2",
++ "lodash": "^4.17.11",
++ "to-fast-properties": "^2.0.0"
++ }
++ },
++ "@iarna/toml": {
++ "version": "2.2.5",
++ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
++ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
++ "dev": true
++ },
++ "@mrmlnc/readdir-enhanced": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
++ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
++ "dev": true,
++ "requires": {
++ "call-me-maybe": "^1.0.1",
++ "glob-to-regexp": "^0.3.0"
++ }
++ },
++ "@nodelib/fs.stat": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
++ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
++ "dev": true
++ },
++ "@parcel/fs": {
++ "version": "1.11.0",
++ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
++ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
++ "dev": true,
++ "requires": {
++ "@parcel/utils": "^1.11.0",
++ "mkdirp": "^0.5.1",
++ "rimraf": "^2.6.2"
++ }
++ },
++ "@parcel/logger": {
++ "version": "1.11.1",
++ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz",
++ "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==",
++ "dev": true,
++ "requires": {
++ "@parcel/workers": "^1.11.0",
++ "chalk": "^2.1.0",
++ "grapheme-breaker": "^0.3.2",
++ "ora": "^2.1.0",
++ "strip-ansi": "^4.0.0"
++ }
++ },
++ "@parcel/utils": {
++ "version": "1.11.0",
++ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
++ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==",
++ "dev": true
++ },
++ "@parcel/watcher": {
++ "version": "1.12.1",
++ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz",
++ "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==",
++ "dev": true,
++ "requires": {
++ "@parcel/utils": "^1.11.0",
++ "chokidar": "^2.1.5"
++ }
++ },
++ "@parcel/workers": {
++ "version": "1.11.0",
++ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
++ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
++ "dev": true,
++ "requires": {
++ "@parcel/utils": "^1.11.0",
++ "physical-cpu-count": "^2.0.0"
++ }
++ },
++ "@types/q": {
++ "version": "1.5.2",
++ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
++ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
++ "dev": true
++ },
++ "abab": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz",
++ "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
++ "dev": true
++ },
++ "abbrev": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
++ "dev": true
++ },
++ "acorn": {
++ "version": "7.1.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
++ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
++ "dev": true
++ },
++ "acorn-globals": {
++ "version": "4.3.4",
++ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
++ "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
++ "dev": true,
++ "requires": {
++ "acorn": "^6.0.1",
++ "acorn-walk": "^6.0.1"
++ },
++ "dependencies": {
++ "acorn": {
++ "version": "6.4.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
++ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
++ "dev": true
++ }
++ }
++ },
++ "acorn-walk": {
++ "version": "6.2.0",
++ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
++ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
++ "dev": true
++ },
++ "ajv": {
++ "version": "6.12.2",
++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
++ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
++ "requires": {
++ "fast-deep-equal": "^3.1.1",
++ "fast-json-stable-stringify": "^2.0.0",
++ "json-schema-traverse": "^0.4.1",
++ "uri-js": "^4.2.2"
++ }
++ },
++ "alphanum-sort": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
++ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
++ "dev": true
++ },
++ "ansi-regex": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
++ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
++ "dev": true
++ },
++ "ansi-styles": {
++ "version": "3.2.1",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
++ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
++ "dev": true,
++ "requires": {
++ "color-convert": "^1.9.0"
++ }
++ },
++ "ansi-to-html": {
++ "version": "0.6.14",
++ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz",
++ "integrity": "sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==",
++ "dev": true,
++ "requires": {
++ "entities": "^1.1.2"
++ },
++ "dependencies": {
++ "entities": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
++ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
++ "dev": true
++ }
++ }
++ },
++ "anymatch": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
++ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
++ "dev": true,
++ "requires": {
++ "micromatch": "^3.1.4",
++ "normalize-path": "^2.1.1"
++ },
++ "dependencies": {
++ "normalize-path": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
++ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
++ "dev": true,
++ "requires": {
++ "remove-trailing-separator": "^1.0.1"
++ }
++ }
++ }
++ },
++ "argparse": {
++ "version": "1.0.10",
++ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
++ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
++ "dev": true,
++ "requires": {
++ "sprintf-js": "~1.0.2"
++ }
++ },
++ "arr-diff": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
++ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
++ "dev": true
++ },
++ "arr-flatten": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
++ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
++ "dev": true
++ },
++ "arr-union": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
++ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
++ "dev": true
++ },
++ "array-equal": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
++ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
++ "dev": true
++ },
++ "array-unique": {
++ "version": "0.3.2",
++ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
++ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
++ "dev": true
++ },
++ "asn1": {
++ "version": "0.2.4",
++ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
++ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
++ "requires": {
++ "safer-buffer": "~2.1.0"
++ }
++ },
++ "asn1.js": {
++ "version": "4.10.1",
++ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
++ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.0.0",
++ "inherits": "^2.0.1",
++ "minimalistic-assert": "^1.0.0"
++ }
++ },
++ "assert": {
++ "version": "1.5.0",
++ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
++ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
++ "dev": true,
++ "requires": {
++ "object-assign": "^4.1.1",
++ "util": "0.10.3"
++ },
++ "dependencies": {
++ "inherits": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
++ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
++ "dev": true
++ },
++ "util": {
++ "version": "0.10.3",
++ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
++ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
++ "dev": true,
++ "requires": {
++ "inherits": "2.0.1"
++ }
++ }
++ }
++ },
++ "assert-plus": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
++ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
++ },
++ "assign-symbols": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
++ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
++ "dev": true
++ },
++ "async-each": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
++ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
++ "dev": true
++ },
++ "async-limiter": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
++ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
++ "dev": true
++ },
++ "asynckit": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
++ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
++ },
++ "atob": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
++ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
++ "dev": true
++ },
++ "aws-sign2": {
++ "version": "0.7.0",
++ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
++ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
++ },
++ "aws4": {
++ "version": "1.9.1",
++ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
++ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
++ },
++ "babel-plugin-dynamic-import-node": {
++ "version": "2.3.3",
++ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
++ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
++ "dev": true,
++ "requires": {
++ "object.assign": "^4.1.0"
++ }
++ },
++ "babel-runtime": {
++ "version": "6.26.0",
++ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
++ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
++ "dev": true,
++ "requires": {
++ "core-js": "^2.4.0",
++ "regenerator-runtime": "^0.11.0"
++ },
++ "dependencies": {
++ "regenerator-runtime": {
++ "version": "0.11.1",
++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
++ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
++ "dev": true
++ }
++ }
++ },
++ "babel-types": {
++ "version": "6.26.0",
++ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
++ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
++ "dev": true,
++ "requires": {
++ "babel-runtime": "^6.26.0",
++ "esutils": "^2.0.2",
++ "lodash": "^4.17.4",
++ "to-fast-properties": "^1.0.3"
++ },
++ "dependencies": {
++ "to-fast-properties": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
++ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
++ "dev": true
++ }
++ }
++ },
++ "babylon-walk": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
++ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
++ "dev": true,
++ "requires": {
++ "babel-runtime": "^6.11.6",
++ "babel-types": "^6.15.0",
++ "lodash.clone": "^4.5.0"
++ }
++ },
+ "balanced-match": {
+ "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
++ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
++ "dev": true
++ },
++ "base": {
++ "version": "0.11.2",
++ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
++ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
++ "dev": true,
++ "requires": {
++ "cache-base": "^1.0.1",
++ "class-utils": "^0.3.5",
++ "component-emitter": "^1.2.1",
++ "define-property": "^1.0.0",
++ "isobject": "^3.0.1",
++ "mixin-deep": "^1.2.0",
++ "pascalcase": "^0.1.1"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^1.0.0"
++ }
++ },
++ "is-accessor-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-data-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-descriptor": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
++ "dev": true,
++ "requires": {
++ "is-accessor-descriptor": "^1.0.0",
++ "is-data-descriptor": "^1.0.0",
++ "kind-of": "^6.0.2"
++ }
++ }
++ }
++ },
++ "base64-js": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
++ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
++ "dev": true
++ },
++ "bcrypt-pbkdf": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
++ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
++ "requires": {
++ "tweetnacl": "^0.14.3"
++ }
++ },
++ "binary-extensions": {
++ "version": "1.13.1",
++ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
++ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
++ "dev": true
++ },
++ "bindings": {
++ "version": "1.5.0",
++ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
++ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
++ "dev": true,
++ "requires": {
++ "file-uri-to-path": "1.0.0"
++ }
++ },
++ "bn.js": {
++ "version": "4.11.8",
++ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
++ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
++ "dev": true
++ },
++ "boolbase": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
++ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
++ "dev": true
++ },
++ "brace-expansion": {
++ "version": "1.1.11",
++ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
++ "dev": true,
++ "requires": {
++ "balanced-match": "^1.0.0",
++ "concat-map": "0.0.1"
++ }
++ },
++ "braces": {
++ "version": "2.3.2",
++ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
++ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
++ "dev": true,
++ "requires": {
++ "arr-flatten": "^1.1.0",
++ "array-unique": "^0.3.2",
++ "extend-shallow": "^2.0.1",
++ "fill-range": "^4.0.0",
++ "isobject": "^3.0.1",
++ "repeat-element": "^1.1.2",
++ "snapdragon": "^0.8.1",
++ "snapdragon-node": "^2.0.1",
++ "split-string": "^3.0.2",
++ "to-regex": "^3.0.1"
++ },
++ "dependencies": {
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ }
++ }
++ },
++ "brfs": {
++ "version": "1.6.1",
++ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
++ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
++ "dev": true,
++ "requires": {
++ "quote-stream": "^1.0.1",
++ "resolve": "^1.1.5",
++ "static-module": "^2.2.0",
++ "through2": "^2.0.0"
++ }
++ },
++ "brorand": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
++ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
++ "dev": true
++ },
++ "browser-process-hrtime": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
++ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
++ "dev": true
++ },
++ "browserify-aes": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
++ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
++ "dev": true,
++ "requires": {
++ "buffer-xor": "^1.0.3",
++ "cipher-base": "^1.0.0",
++ "create-hash": "^1.1.0",
++ "evp_bytestokey": "^1.0.3",
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "browserify-cipher": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
++ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
++ "dev": true,
++ "requires": {
++ "browserify-aes": "^1.0.4",
++ "browserify-des": "^1.0.0",
++ "evp_bytestokey": "^1.0.0"
++ }
++ },
++ "browserify-des": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
++ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
++ "dev": true,
++ "requires": {
++ "cipher-base": "^1.0.1",
++ "des.js": "^1.0.0",
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.1.2"
++ }
++ },
++ "browserify-rsa": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
++ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.1.0",
++ "randombytes": "^2.0.1"
++ }
++ },
++ "browserify-sign": {
++ "version": "4.0.4",
++ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
++ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.1.1",
++ "browserify-rsa": "^4.0.0",
++ "create-hash": "^1.1.0",
++ "create-hmac": "^1.1.2",
++ "elliptic": "^6.0.0",
++ "inherits": "^2.0.1",
++ "parse-asn1": "^5.0.0"
++ }
++ },
++ "browserify-zlib": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
++ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
++ "dev": true,
++ "requires": {
++ "pako": "~1.0.5"
++ },
++ "dependencies": {
++ "pako": {
++ "version": "1.0.11",
++ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
++ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
++ "dev": true
++ }
++ }
++ },
++ "browserslist": {
++ "version": "4.12.0",
++ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz",
++ "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==",
++ "dev": true,
++ "requires": {
++ "caniuse-lite": "^1.0.30001043",
++ "electron-to-chromium": "^1.3.413",
++ "node-releases": "^1.1.53",
++ "pkg-up": "^2.0.0"
++ }
++ },
++ "buffer": {
++ "version": "4.9.2",
++ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
++ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
++ "dev": true,
++ "requires": {
++ "base64-js": "^1.0.2",
++ "ieee754": "^1.1.4",
++ "isarray": "^1.0.0"
++ }
++ },
++ "buffer-equal": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
++ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
++ "dev": true
++ },
++ "buffer-from": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
++ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
++ "dev": true
++ },
++ "buffer-xor": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
++ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
++ "dev": true
++ },
++ "builtin-status-codes": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
++ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
++ "dev": true
++ },
++ "cache-base": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
++ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
++ "dev": true,
++ "requires": {
++ "collection-visit": "^1.0.0",
++ "component-emitter": "^1.2.1",
++ "get-value": "^2.0.6",
++ "has-value": "^1.0.0",
++ "isobject": "^3.0.1",
++ "set-value": "^2.0.0",
++ "to-object-path": "^0.3.0",
++ "union-value": "^1.0.0",
++ "unset-value": "^1.0.0"
++ }
++ },
++ "call-me-maybe": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
++ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
++ "dev": true
++ },
++ "caller-callsite": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
++ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
++ "dev": true,
++ "requires": {
++ "callsites": "^2.0.0"
++ }
++ },
++ "caller-path": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
++ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
++ "dev": true,
++ "requires": {
++ "caller-callsite": "^2.0.0"
++ }
++ },
++ "callsites": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
++ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
++ "dev": true
++ },
++ "camelcase": {
++ "version": "5.3.1",
++ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
++ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
++ "dev": true
++ },
++ "caniuse-api": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
++ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "caniuse-lite": "^1.0.0",
++ "lodash.memoize": "^4.1.2",
++ "lodash.uniq": "^4.5.0"
++ }
++ },
++ "caniuse-lite": {
++ "version": "1.0.30001048",
++ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz",
++ "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==",
++ "dev": true
++ },
++ "caseless": {
++ "version": "0.12.0",
++ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
++ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
++ },
++ "chalk": {
++ "version": "2.4.2",
++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
++ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
++ "dev": true,
++ "requires": {
++ "ansi-styles": "^3.2.1",
++ "escape-string-regexp": "^1.0.5",
++ "supports-color": "^5.3.0"
++ },
++ "dependencies": {
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ }
++ }
++ },
++ "chokidar": {
++ "version": "2.1.8",
++ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
++ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
++ "dev": true,
++ "requires": {
++ "anymatch": "^2.0.0",
++ "async-each": "^1.0.1",
++ "braces": "^2.3.2",
++ "fsevents": "^1.2.7",
++ "glob-parent": "^3.1.0",
++ "inherits": "^2.0.3",
++ "is-binary-path": "^1.0.0",
++ "is-glob": "^4.0.0",
++ "normalize-path": "^3.0.0",
++ "path-is-absolute": "^1.0.0",
++ "readdirp": "^2.2.1",
++ "upath": "^1.1.1"
++ },
++ "dependencies": {
++ "fsevents": {
++ "version": "1.2.12",
++ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
++ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "bindings": "^1.5.0",
++ "nan": "^2.12.1",
++ "node-pre-gyp": "*"
++ },
++ "dependencies": {
++ "abbrev": {
++ "version": "1.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "ansi-regex": {
++ "version": "2.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "aproba": {
++ "version": "1.2.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "are-we-there-yet": {
++ "version": "1.1.5",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "delegates": "^1.0.0",
++ "readable-stream": "^2.0.6"
++ }
++ },
++ "balanced-match": {
++ "version": "1.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "brace-expansion": {
++ "version": "1.1.11",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "balanced-match": "^1.0.0",
++ "concat-map": "0.0.1"
++ }
++ },
++ "chownr": {
++ "version": "1.1.4",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "code-point-at": {
++ "version": "1.1.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "concat-map": {
++ "version": "0.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "console-control-strings": {
++ "version": "1.1.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "core-util-is": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "debug": {
++ "version": "3.2.6",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "ms": "^2.1.1"
++ }
++ },
++ "deep-extend": {
++ "version": "0.6.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "delegates": {
++ "version": "1.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "detect-libc": {
++ "version": "1.0.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "fs-minipass": {
++ "version": "1.2.7",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "minipass": "^2.6.0"
++ }
++ },
++ "fs.realpath": {
++ "version": "1.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "gauge": {
++ "version": "2.7.4",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "aproba": "^1.0.3",
++ "console-control-strings": "^1.0.0",
++ "has-unicode": "^2.0.0",
++ "object-assign": "^4.1.0",
++ "signal-exit": "^3.0.0",
++ "string-width": "^1.0.1",
++ "strip-ansi": "^3.0.1",
++ "wide-align": "^1.1.0"
++ }
++ },
++ "glob": {
++ "version": "7.1.6",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "fs.realpath": "^1.0.0",
++ "inflight": "^1.0.4",
++ "inherits": "2",
++ "minimatch": "^3.0.4",
++ "once": "^1.3.0",
++ "path-is-absolute": "^1.0.0"
++ }
++ },
++ "has-unicode": {
++ "version": "2.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "iconv-lite": {
++ "version": "0.4.24",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "safer-buffer": ">= 2.1.2 < 3"
++ }
++ },
++ "ignore-walk": {
++ "version": "3.0.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "minimatch": "^3.0.4"
++ }
++ },
++ "inflight": {
++ "version": "1.0.6",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "once": "^1.3.0",
++ "wrappy": "1"
++ }
++ },
++ "inherits": {
++ "version": "2.0.4",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "ini": {
++ "version": "1.3.5",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "is-fullwidth-code-point": {
++ "version": "1.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "number-is-nan": "^1.0.0"
++ }
++ },
++ "isarray": {
++ "version": "1.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "minimatch": {
++ "version": "3.0.4",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "brace-expansion": "^1.1.7"
++ }
++ },
++ "minimist": {
++ "version": "1.2.5",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "minipass": {
++ "version": "2.9.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "safe-buffer": "^5.1.2",
++ "yallist": "^3.0.0"
++ }
++ },
++ "minizlib": {
++ "version": "1.3.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "minipass": "^2.9.0"
++ }
++ },
++ "mkdirp": {
++ "version": "0.5.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "minimist": "^1.2.5"
++ }
++ },
++ "ms": {
++ "version": "2.1.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "needle": {
++ "version": "2.3.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "debug": "^3.2.6",
++ "iconv-lite": "^0.4.4",
++ "sax": "^1.2.4"
++ }
++ },
++ "node-pre-gyp": {
++ "version": "0.14.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "detect-libc": "^1.0.2",
++ "mkdirp": "^0.5.1",
++ "needle": "^2.2.1",
++ "nopt": "^4.0.1",
++ "npm-packlist": "^1.1.6",
++ "npmlog": "^4.0.2",
++ "rc": "^1.2.7",
++ "rimraf": "^2.6.1",
++ "semver": "^5.3.0",
++ "tar": "^4.4.2"
++ }
++ },
++ "nopt": {
++ "version": "4.0.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "abbrev": "1",
++ "osenv": "^0.1.4"
++ }
++ },
++ "npm-bundled": {
++ "version": "1.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "npm-normalize-package-bin": "^1.0.1"
++ }
++ },
++ "npm-normalize-package-bin": {
++ "version": "1.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "npm-packlist": {
++ "version": "1.4.8",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "ignore-walk": "^3.0.1",
++ "npm-bundled": "^1.0.1",
++ "npm-normalize-package-bin": "^1.0.1"
++ }
++ },
++ "npmlog": {
++ "version": "4.1.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "are-we-there-yet": "~1.1.2",
++ "console-control-strings": "~1.1.0",
++ "gauge": "~2.7.3",
++ "set-blocking": "~2.0.0"
++ }
++ },
++ "number-is-nan": {
++ "version": "1.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "object-assign": {
++ "version": "4.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "once": {
++ "version": "1.4.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "wrappy": "1"
++ }
++ },
++ "os-homedir": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "os-tmpdir": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "osenv": {
++ "version": "0.1.5",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "os-homedir": "^1.0.0",
++ "os-tmpdir": "^1.0.0"
++ }
++ },
++ "path-is-absolute": {
++ "version": "1.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "process-nextick-args": {
++ "version": "2.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "rc": {
++ "version": "1.2.8",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "deep-extend": "^0.6.0",
++ "ini": "~1.3.0",
++ "minimist": "^1.2.0",
++ "strip-json-comments": "~2.0.1"
++ }
++ },
++ "readable-stream": {
++ "version": "2.3.7",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.3",
++ "isarray": "~1.0.0",
++ "process-nextick-args": "~2.0.0",
++ "safe-buffer": "~5.1.1",
++ "string_decoder": "~1.1.1",
++ "util-deprecate": "~1.0.1"
++ }
++ },
++ "rimraf": {
++ "version": "2.7.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "glob": "^7.1.3"
++ }
++ },
++ "safe-buffer": {
++ "version": "5.1.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "safer-buffer": {
++ "version": "2.1.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "sax": {
++ "version": "1.2.4",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "semver": {
++ "version": "5.7.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "set-blocking": {
++ "version": "2.0.0",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "signal-exit": {
++ "version": "3.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "string-width": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "code-point-at": "^1.0.0",
++ "is-fullwidth-code-point": "^1.0.0",
++ "strip-ansi": "^3.0.0"
++ }
++ },
++ "string_decoder": {
++ "version": "1.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "safe-buffer": "~5.1.0"
++ }
++ },
++ "strip-ansi": {
++ "version": "3.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "ansi-regex": "^2.0.0"
++ }
++ },
++ "strip-json-comments": {
++ "version": "2.0.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "tar": {
++ "version": "4.4.13",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "chownr": "^1.1.1",
++ "fs-minipass": "^1.2.5",
++ "minipass": "^2.8.6",
++ "minizlib": "^1.2.1",
++ "mkdirp": "^0.5.0",
++ "safe-buffer": "^5.1.2",
++ "yallist": "^3.0.3"
++ }
++ },
++ "util-deprecate": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "wide-align": {
++ "version": "1.1.3",
++ "bundled": true,
++ "dev": true,
++ "optional": true,
++ "requires": {
++ "string-width": "^1.0.2 || 2"
++ }
++ },
++ "wrappy": {
++ "version": "1.0.2",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ },
++ "yallist": {
++ "version": "3.1.1",
++ "bundled": true,
++ "dev": true,
++ "optional": true
++ }
++ }
++ }
++ }
++ },
++ "cipher-base": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
++ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "class-utils": {
++ "version": "0.3.6",
++ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
++ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
++ "dev": true,
++ "requires": {
++ "arr-union": "^3.1.0",
++ "define-property": "^0.2.5",
++ "isobject": "^3.0.0",
++ "static-extend": "^0.1.1"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^0.1.0"
++ }
++ }
++ }
++ },
++ "cli-cursor": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
++ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
++ "dev": true,
++ "requires": {
++ "restore-cursor": "^2.0.0"
++ }
++ },
++ "cli-spinners": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
++ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
++ "dev": true
++ },
++ "cliui": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
++ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
++ "dev": true,
++ "requires": {
++ "string-width": "^3.1.0",
++ "strip-ansi": "^5.2.0",
++ "wrap-ansi": "^5.1.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
++ "dev": true
++ },
++ "strip-ansi": {
++ "version": "5.2.0",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^4.1.0"
++ }
++ }
++ }
++ },
++ "clone": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
++ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
++ "dev": true
++ },
++ "clones": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz",
++ "integrity": "sha512-FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==",
++ "dev": true
++ },
++ "coa": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
++ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
++ "dev": true,
++ "requires": {
++ "@types/q": "^1.5.1",
++ "chalk": "^2.4.1",
++ "q": "^1.1.2"
++ }
++ },
++ "collection-visit": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
++ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
++ "dev": true,
++ "requires": {
++ "map-visit": "^1.0.0",
++ "object-visit": "^1.0.0"
++ }
++ },
++ "color": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
++ "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
++ "dev": true,
++ "requires": {
++ "color-convert": "^1.9.1",
++ "color-string": "^1.5.2"
++ }
++ },
++ "color-convert": {
++ "version": "1.9.3",
++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
++ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
++ "dev": true,
++ "requires": {
++ "color-name": "1.1.3"
++ }
++ },
++ "color-name": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
++ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
++ "dev": true
++ },
++ "color-string": {
++ "version": "1.5.3",
++ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
++ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
++ "dev": true,
++ "requires": {
++ "color-name": "^1.0.0",
++ "simple-swizzle": "^0.2.2"
++ }
++ },
++ "combined-stream": {
++ "version": "1.0.8",
++ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
++ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
++ "requires": {
++ "delayed-stream": "~1.0.0"
++ }
++ },
++ "command-exists": {
++ "version": "1.2.9",
++ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
++ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
++ "dev": true
++ },
++ "commander": {
++ "version": "2.20.3",
++ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
++ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
++ "dev": true
++ },
++ "component-emitter": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
++ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
++ "dev": true
++ },
++ "concat-map": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
++ "dev": true
++ },
++ "concat-stream": {
++ "version": "1.6.2",
++ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
++ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
++ "dev": true,
++ "requires": {
++ "buffer-from": "^1.0.0",
++ "inherits": "^2.0.3",
++ "readable-stream": "^2.2.2",
++ "typedarray": "^0.0.6"
++ }
++ },
++ "config-chain": {
++ "version": "1.1.12",
++ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
++ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
++ "dev": true,
++ "requires": {
++ "ini": "^1.3.4",
++ "proto-list": "~1.2.1"
++ }
++ },
++ "console-browserify": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
++ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
++ "dev": true
++ },
++ "constants-browserify": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
++ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
++ "dev": true
++ },
++ "convert-source-map": {
++ "version": "1.7.0",
++ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
++ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
++ "dev": true,
++ "requires": {
++ "safe-buffer": "~5.1.1"
++ }
++ },
++ "copy-descriptor": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
++ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
++ "dev": true
++ },
++ "core-js": {
++ "version": "2.6.11",
++ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
++ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
++ "dev": true
++ },
++ "core-util-is": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
++ },
++ "cosmiconfig": {
++ "version": "5.2.1",
++ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
++ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
++ "dev": true,
++ "requires": {
++ "import-fresh": "^2.0.0",
++ "is-directory": "^0.3.1",
++ "js-yaml": "^3.13.1",
++ "parse-json": "^4.0.0"
++ }
++ },
++ "create-ecdh": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
++ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.1.0",
++ "elliptic": "^6.0.0"
++ }
++ },
++ "create-hash": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
++ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
++ "dev": true,
++ "requires": {
++ "cipher-base": "^1.0.1",
++ "inherits": "^2.0.1",
++ "md5.js": "^1.3.4",
++ "ripemd160": "^2.0.1",
++ "sha.js": "^2.4.0"
++ }
++ },
++ "create-hmac": {
++ "version": "1.1.7",
++ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
++ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
++ "dev": true,
++ "requires": {
++ "cipher-base": "^1.0.3",
++ "create-hash": "^1.1.0",
++ "inherits": "^2.0.1",
++ "ripemd160": "^2.0.0",
++ "safe-buffer": "^5.0.1",
++ "sha.js": "^2.4.8"
++ }
++ },
++ "cross-spawn": {
++ "version": "6.0.5",
++ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
++ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
++ "dev": true,
++ "requires": {
++ "nice-try": "^1.0.4",
++ "path-key": "^2.0.1",
++ "semver": "^5.5.0",
++ "shebang-command": "^1.2.0",
++ "which": "^1.2.9"
++ }
++ },
++ "crypto-browserify": {
++ "version": "3.12.0",
++ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
++ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
++ "dev": true,
++ "requires": {
++ "browserify-cipher": "^1.0.0",
++ "browserify-sign": "^4.0.0",
++ "create-ecdh": "^4.0.0",
++ "create-hash": "^1.1.0",
++ "create-hmac": "^1.1.0",
++ "diffie-hellman": "^5.0.0",
++ "inherits": "^2.0.1",
++ "pbkdf2": "^3.0.3",
++ "public-encrypt": "^4.0.0",
++ "randombytes": "^2.0.0",
++ "randomfill": "^1.0.3"
++ }
++ },
++ "css-color-names": {
++ "version": "0.0.4",
++ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
++ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
++ "dev": true
++ },
++ "css-declaration-sorter": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
++ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.1",
++ "timsort": "^0.3.0"
++ }
++ },
++ "css-modules-loader-core": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz",
++ "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=",
++ "dev": true,
++ "requires": {
++ "icss-replace-symbols": "1.1.0",
++ "postcss": "6.0.1",
++ "postcss-modules-extract-imports": "1.1.0",
++ "postcss-modules-local-by-default": "1.2.0",
++ "postcss-modules-scope": "1.1.0",
++ "postcss-modules-values": "1.3.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
++ "dev": true
++ },
++ "ansi-styles": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
++ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
++ "dev": true
++ },
++ "chalk": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
++ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
++ "dev": true,
++ "requires": {
++ "ansi-styles": "^2.2.1",
++ "escape-string-regexp": "^1.0.2",
++ "has-ansi": "^2.0.0",
++ "strip-ansi": "^3.0.0",
++ "supports-color": "^2.0.0"
++ },
++ "dependencies": {
++ "supports-color": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
++ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
++ "dev": true
++ }
++ }
++ },
++ "has-flag": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
++ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
++ "dev": true
++ },
++ "postcss": {
++ "version": "6.0.1",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
++ "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
++ "dev": true,
++ "requires": {
++ "chalk": "^1.1.3",
++ "source-map": "^0.5.6",
++ "supports-color": "^3.2.3"
++ }
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ },
++ "strip-ansi": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^2.0.0"
++ }
++ },
++ "supports-color": {
++ "version": "3.2.3",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
++ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
++ "dev": true,
++ "requires": {
++ "has-flag": "^1.0.0"
++ }
++ }
++ }
++ },
++ "css-select": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
++ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
++ "dev": true,
++ "requires": {
++ "boolbase": "^1.0.0",
++ "css-what": "^3.2.1",
++ "domutils": "^1.7.0",
++ "nth-check": "^1.0.2"
++ }
++ },
++ "css-select-base-adapter": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
++ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
++ "dev": true
++ },
++ "css-selector-tokenizer": {
++ "version": "0.7.2",
++ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz",
++ "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==",
++ "dev": true,
++ "requires": {
++ "cssesc": "^3.0.0",
++ "fastparse": "^1.1.2",
++ "regexpu-core": "^4.6.0"
++ }
++ },
++ "css-tree": {
++ "version": "1.0.0-alpha.37",
++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
++ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
++ "dev": true,
++ "requires": {
++ "mdn-data": "2.0.4",
++ "source-map": "^0.6.1"
++ }
++ },
++ "css-what": {
++ "version": "3.2.1",
++ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz",
++ "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==",
++ "dev": true
++ },
++ "cssesc": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
++ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
++ "dev": true
++ },
++ "cssnano": {
++ "version": "4.1.10",
++ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
++ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
++ "dev": true,
++ "requires": {
++ "cosmiconfig": "^5.0.0",
++ "cssnano-preset-default": "^4.0.7",
++ "is-resolvable": "^1.0.0",
++ "postcss": "^7.0.0"
++ }
++ },
++ "cssnano-preset-default": {
++ "version": "4.0.7",
++ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
++ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
++ "dev": true,
++ "requires": {
++ "css-declaration-sorter": "^4.0.1",
++ "cssnano-util-raw-cache": "^4.0.1",
++ "postcss": "^7.0.0",
++ "postcss-calc": "^7.0.1",
++ "postcss-colormin": "^4.0.3",
++ "postcss-convert-values": "^4.0.1",
++ "postcss-discard-comments": "^4.0.2",
++ "postcss-discard-duplicates": "^4.0.2",
++ "postcss-discard-empty": "^4.0.1",
++ "postcss-discard-overridden": "^4.0.1",
++ "postcss-merge-longhand": "^4.0.11",
++ "postcss-merge-rules": "^4.0.3",
++ "postcss-minify-font-values": "^4.0.2",
++ "postcss-minify-gradients": "^4.0.2",
++ "postcss-minify-params": "^4.0.2",
++ "postcss-minify-selectors": "^4.0.2",
++ "postcss-normalize-charset": "^4.0.1",
++ "postcss-normalize-display-values": "^4.0.2",
++ "postcss-normalize-positions": "^4.0.2",
++ "postcss-normalize-repeat-style": "^4.0.2",
++ "postcss-normalize-string": "^4.0.2",
++ "postcss-normalize-timing-functions": "^4.0.2",
++ "postcss-normalize-unicode": "^4.0.1",
++ "postcss-normalize-url": "^4.0.1",
++ "postcss-normalize-whitespace": "^4.0.2",
++ "postcss-ordered-values": "^4.1.2",
++ "postcss-reduce-initial": "^4.0.3",
++ "postcss-reduce-transforms": "^4.0.2",
++ "postcss-svgo": "^4.0.2",
++ "postcss-unique-selectors": "^4.0.1"
++ }
++ },
++ "cssnano-util-get-arguments": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
++ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
++ "dev": true
++ },
++ "cssnano-util-get-match": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
++ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
++ "dev": true
++ },
++ "cssnano-util-raw-cache": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
++ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "cssnano-util-same-parent": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
++ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
++ "dev": true
++ },
++ "csso": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
++ "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
++ "dev": true,
++ "requires": {
++ "css-tree": "1.0.0-alpha.39"
++ },
++ "dependencies": {
++ "css-tree": {
++ "version": "1.0.0-alpha.39",
++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
++ "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
++ "dev": true,
++ "requires": {
++ "mdn-data": "2.0.6",
++ "source-map": "^0.6.1"
++ }
++ },
++ "mdn-data": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
++ "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
++ "dev": true
++ }
++ }
++ },
++ "cssom": {
++ "version": "0.3.8",
++ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
++ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
++ "dev": true
++ },
++ "cssstyle": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
++ "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
++ "dev": true,
++ "requires": {
++ "cssom": "0.3.x"
++ }
++ },
++ "dashdash": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
++ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
++ "requires": {
++ "assert-plus": "^1.0.0"
++ }
++ },
++ "data-urls": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
++ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
++ "dev": true,
++ "requires": {
++ "abab": "^2.0.0",
++ "whatwg-mimetype": "^2.2.0",
++ "whatwg-url": "^7.0.0"
++ }
++ },
++ "deasync": {
++ "version": "0.1.19",
++ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz",
++ "integrity": "sha512-oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==",
++ "dev": true,
++ "requires": {
++ "bindings": "^1.5.0",
++ "node-addon-api": "^1.7.1"
++ }
++ },
++ "debug": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
++ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
++ "dev": true,
++ "requires": {
++ "ms": "^2.1.1"
++ }
++ },
++ "decamelize": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
++ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
++ "dev": true
++ },
++ "decode-uri-component": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
++ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
++ "dev": true
++ },
++ "deep-is": {
++ "version": "0.1.3",
++ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
++ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
++ "dev": true
++ },
++ "defaults": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
++ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
++ "dev": true,
++ "requires": {
++ "clone": "^1.0.2"
++ },
++ "dependencies": {
++ "clone": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
++ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
++ "dev": true
++ }
++ }
++ },
++ "define-properties": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
++ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
++ "dev": true,
++ "requires": {
++ "object-keys": "^1.0.12"
++ }
++ },
++ "define-property": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
++ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^1.0.2",
++ "isobject": "^3.0.1"
++ },
++ "dependencies": {
++ "is-accessor-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-data-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-descriptor": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
++ "dev": true,
++ "requires": {
++ "is-accessor-descriptor": "^1.0.0",
++ "is-data-descriptor": "^1.0.0",
++ "kind-of": "^6.0.2"
++ }
++ }
++ }
++ },
++ "delayed-stream": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
++ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
++ },
++ "depd": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
++ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
++ "dev": true
++ },
++ "des.js": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
++ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.1",
++ "minimalistic-assert": "^1.0.0"
++ }
++ },
++ "destroy": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
++ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
++ "dev": true
++ },
++ "diffie-hellman": {
++ "version": "5.0.3",
++ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
++ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.1.0",
++ "miller-rabin": "^4.0.0",
++ "randombytes": "^2.0.0"
++ }
++ },
++ "dom-serializer": {
++ "version": "0.2.2",
++ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
++ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
++ "dev": true,
++ "requires": {
++ "domelementtype": "^2.0.1",
++ "entities": "^2.0.0"
++ },
++ "dependencies": {
++ "domelementtype": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
++ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
++ "dev": true
++ }
++ }
++ },
++ "domain-browser": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
++ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
++ "dev": true
++ },
++ "domelementtype": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
++ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
++ "dev": true
++ },
++ "domexception": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
++ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
++ "dev": true,
++ "requires": {
++ "webidl-conversions": "^4.0.2"
++ }
++ },
++ "domhandler": {
++ "version": "2.4.2",
++ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
++ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
++ "dev": true,
++ "requires": {
++ "domelementtype": "1"
++ }
++ },
++ "domutils": {
++ "version": "1.7.0",
++ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
++ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
++ "dev": true,
++ "requires": {
++ "dom-serializer": "0",
++ "domelementtype": "1"
++ }
++ },
++ "dot-prop": {
++ "version": "5.2.0",
++ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
++ "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
++ "dev": true,
++ "requires": {
++ "is-obj": "^2.0.0"
++ }
++ },
++ "dotenv": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
++ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
++ "dev": true
++ },
++ "dotenv-expand": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
++ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
++ "dev": true
++ },
++ "duplexer2": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
++ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
++ "dev": true,
++ "requires": {
++ "readable-stream": "^2.0.2"
++ }
++ },
++ "ecc-jsbn": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
++ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
++ "requires": {
++ "jsbn": "~0.1.0",
++ "safer-buffer": "^2.1.0"
++ }
++ },
++ "editorconfig": {
++ "version": "0.15.3",
++ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
++ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==",
++ "dev": true,
++ "requires": {
++ "commander": "^2.19.0",
++ "lru-cache": "^4.1.5",
++ "semver": "^5.6.0",
++ "sigmund": "^1.0.1"
++ }
++ },
++ "ee-first": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
++ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
++ "dev": true
++ },
++ "electron-to-chromium": {
++ "version": "1.3.418",
++ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz",
++ "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==",
++ "dev": true
++ },
++ "elliptic": {
++ "version": "6.5.2",
++ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
++ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.4.0",
++ "brorand": "^1.0.1",
++ "hash.js": "^1.0.0",
++ "hmac-drbg": "^1.0.0",
++ "inherits": "^2.0.1",
++ "minimalistic-assert": "^1.0.0",
++ "minimalistic-crypto-utils": "^1.0.0"
++ }
++ },
++ "elm-hot": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz",
++ "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==",
++ "dev": true
++ },
++ "emoji-regex": {
++ "version": "7.0.3",
++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
++ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
++ "dev": true
++ },
++ "encodeurl": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
++ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
++ "dev": true
++ },
++ "entities": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
++ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
++ "dev": true
++ },
++ "error-ex": {
++ "version": "1.3.2",
++ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
++ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
++ "dev": true,
++ "requires": {
++ "is-arrayish": "^0.2.1"
++ }
++ },
++ "es-abstract": {
++ "version": "1.17.5",
++ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
++ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
++ "dev": true,
++ "requires": {
++ "es-to-primitive": "^1.2.1",
++ "function-bind": "^1.1.1",
++ "has": "^1.0.3",
++ "has-symbols": "^1.0.1",
++ "is-callable": "^1.1.5",
++ "is-regex": "^1.0.5",
++ "object-inspect": "^1.7.0",
++ "object-keys": "^1.1.1",
++ "object.assign": "^4.1.0",
++ "string.prototype.trimleft": "^2.1.1",
++ "string.prototype.trimright": "^2.1.1"
++ }
++ },
++ "es-to-primitive": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
++ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
++ "dev": true,
++ "requires": {
++ "is-callable": "^1.1.4",
++ "is-date-object": "^1.0.1",
++ "is-symbol": "^1.0.2"
++ }
++ },
++ "escape-html": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
++ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
++ "dev": true
++ },
++ "escape-string-regexp": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
++ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
++ "dev": true
++ },
++ "escodegen": {
++ "version": "1.9.1",
++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
++ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
++ "dev": true,
++ "requires": {
++ "esprima": "^3.1.3",
++ "estraverse": "^4.2.0",
++ "esutils": "^2.0.2",
++ "optionator": "^0.8.1",
++ "source-map": "~0.6.1"
++ },
++ "dependencies": {
++ "esprima": {
++ "version": "3.1.3",
++ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
++ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
++ "dev": true
++ }
++ }
++ },
++ "esprima": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
++ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
++ "dev": true
++ },
++ "estraverse": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
++ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
++ "dev": true
++ },
++ "esutils": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
++ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
++ "dev": true
++ },
++ "etag": {
++ "version": "1.8.1",
++ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
++ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
++ "dev": true
++ },
++ "events": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
++ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
++ "dev": true
++ },
++ "evp_bytestokey": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
++ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
++ "dev": true,
++ "requires": {
++ "md5.js": "^1.3.4",
++ "safe-buffer": "^5.1.1"
++ }
++ },
++ "expand-brackets": {
++ "version": "2.1.4",
++ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
++ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
++ "dev": true,
++ "requires": {
++ "debug": "^2.3.3",
++ "define-property": "^0.2.5",
++ "extend-shallow": "^2.0.1",
++ "posix-character-classes": "^0.1.0",
++ "regex-not": "^1.0.0",
++ "snapdragon": "^0.8.1",
++ "to-regex": "^3.0.1"
++ },
++ "dependencies": {
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "dev": true,
++ "requires": {
++ "ms": "2.0.0"
++ }
++ },
++ "define-property": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^0.1.0"
++ }
++ },
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
++ "dev": true
++ }
++ }
++ },
++ "extend": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
++ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
++ },
++ "extend-shallow": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
++ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
++ "dev": true,
++ "requires": {
++ "assign-symbols": "^1.0.0",
++ "is-extendable": "^1.0.1"
++ },
++ "dependencies": {
++ "is-extendable": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
++ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
++ "dev": true,
++ "requires": {
++ "is-plain-object": "^2.0.4"
++ }
++ }
++ }
++ },
++ "extglob": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
++ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
++ "dev": true,
++ "requires": {
++ "array-unique": "^0.3.2",
++ "define-property": "^1.0.0",
++ "expand-brackets": "^2.1.4",
++ "extend-shallow": "^2.0.1",
++ "fragment-cache": "^0.2.1",
++ "regex-not": "^1.0.0",
++ "snapdragon": "^0.8.1",
++ "to-regex": "^3.0.1"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^1.0.0"
++ }
++ },
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ },
++ "is-accessor-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-data-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-descriptor": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
++ "dev": true,
++ "requires": {
++ "is-accessor-descriptor": "^1.0.0",
++ "is-data-descriptor": "^1.0.0",
++ "kind-of": "^6.0.2"
++ }
++ }
++ }
++ },
++ "extsprintf": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
++ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
++ },
++ "falafel": {
++ "version": "2.2.4",
++ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz",
++ "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==",
++ "dev": true,
++ "requires": {
++ "acorn": "^7.1.1",
++ "foreach": "^2.0.5",
++ "isarray": "^2.0.1",
++ "object-keys": "^1.0.6"
++ },
++ "dependencies": {
++ "isarray": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
++ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
++ "dev": true
++ }
++ }
++ },
++ "fast-deep-equal": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
++ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
++ },
++ "fast-glob": {
++ "version": "2.2.7",
++ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
++ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
++ "dev": true,
++ "requires": {
++ "@mrmlnc/readdir-enhanced": "^2.2.1",
++ "@nodelib/fs.stat": "^1.1.2",
++ "glob-parent": "^3.1.0",
++ "is-glob": "^4.0.0",
++ "merge2": "^1.2.3",
++ "micromatch": "^3.1.10"
++ }
++ },
++ "fast-json-stable-stringify": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
++ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
++ },
++ "fast-levenshtein": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
++ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
++ "dev": true
++ },
++ "fastparse": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
++ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
++ "dev": true
++ },
++ "file-uri-to-path": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
++ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
++ "dev": true
++ },
++ "filesize": {
++ "version": "3.6.1",
++ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
++ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
++ "dev": true
++ },
++ "fill-range": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
++ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
++ "dev": true,
++ "requires": {
++ "extend-shallow": "^2.0.1",
++ "is-number": "^3.0.0",
++ "repeat-string": "^1.6.1",
++ "to-regex-range": "^2.1.0"
++ },
++ "dependencies": {
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ }
++ }
++ },
++ "find-elm-dependencies": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz",
++ "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==",
++ "dev": true,
++ "requires": {
++ "firstline": "1.2.0",
++ "lodash": "4.17.15"
++ }
++ },
++ "find-up": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
++ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
++ "dev": true,
++ "requires": {
++ "locate-path": "^2.0.0"
++ }
++ },
++ "firstline": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz",
++ "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=",
++ "dev": true
++ },
++ "for-in": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
++ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
++ "dev": true
++ },
++ "foreach": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
++ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
++ "dev": true
++ },
++ "forever-agent": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
++ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
++ },
++ "form-data": {
++ "version": "2.3.3",
++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
++ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
++ "requires": {
++ "asynckit": "^0.4.0",
++ "combined-stream": "^1.0.6",
++ "mime-types": "^2.1.12"
++ }
++ },
++ "fragment-cache": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
++ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
++ "dev": true,
++ "requires": {
++ "map-cache": "^0.2.2"
++ }
++ },
++ "fresh": {
++ "version": "0.5.2",
++ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
++ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
++ "dev": true
++ },
++ "fs.realpath": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
++ "dev": true
++ },
++ "function-bind": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
++ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
++ "dev": true
++ },
++ "get-caller-file": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
++ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
++ "dev": true
++ },
++ "get-port": {
++ "version": "3.2.0",
++ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
++ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
++ "dev": true
++ },
++ "get-value": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
++ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
++ "dev": true
++ },
++ "getpass": {
++ "version": "0.1.7",
++ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
++ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
++ "requires": {
++ "assert-plus": "^1.0.0"
++ }
++ },
++ "glob": {
++ "version": "7.1.4",
++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
++ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
++ "dev": true,
++ "requires": {
++ "fs.realpath": "^1.0.0",
++ "inflight": "^1.0.4",
++ "inherits": "2",
++ "minimatch": "^3.0.4",
++ "once": "^1.3.0",
++ "path-is-absolute": "^1.0.0"
++ }
++ },
++ "glob-parent": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
++ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
++ "dev": true,
++ "requires": {
++ "is-glob": "^3.1.0",
++ "path-dirname": "^1.0.0"
++ },
++ "dependencies": {
++ "is-glob": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
++ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
++ "dev": true,
++ "requires": {
++ "is-extglob": "^2.1.0"
++ }
++ }
++ }
++ },
++ "glob-to-regexp": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
++ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
++ "dev": true
++ },
++ "globals": {
++ "version": "11.12.0",
++ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
++ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
++ "dev": true
++ },
++ "graceful-fs": {
++ "version": "4.2.3",
++ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
++ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
++ "dev": true
++ },
++ "grapheme-breaker": {
++ "version": "0.3.2",
++ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
++ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
++ "dev": true,
++ "requires": {
++ "brfs": "^1.2.0",
++ "unicode-trie": "^0.3.1"
++ }
++ },
++ "har-schema": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
++ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
++ },
++ "har-validator": {
++ "version": "5.1.3",
++ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
++ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
++ "requires": {
++ "ajv": "^6.5.5",
++ "har-schema": "^2.0.0"
++ }
++ },
++ "has": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
++ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
++ "dev": true,
++ "requires": {
++ "function-bind": "^1.1.1"
++ }
++ },
++ "has-ansi": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
++ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^2.0.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
++ "dev": true
++ }
++ }
++ },
++ "has-flag": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
++ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
++ "dev": true
++ },
++ "has-symbols": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
++ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
++ "dev": true
++ },
++ "has-value": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
++ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
++ "dev": true,
++ "requires": {
++ "get-value": "^2.0.6",
++ "has-values": "^1.0.0",
++ "isobject": "^3.0.0"
++ }
++ },
++ "has-values": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
++ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
++ "dev": true,
++ "requires": {
++ "is-number": "^3.0.0",
++ "kind-of": "^4.0.0"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
++ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "hash-base": {
++ "version": "3.0.4",
++ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
++ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "hash.js": {
++ "version": "1.1.7",
++ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
++ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.3",
++ "minimalistic-assert": "^1.0.1"
++ }
++ },
++ "hex-color-regex": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
++ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
++ "dev": true
++ },
++ "hmac-drbg": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
++ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
++ "dev": true,
++ "requires": {
++ "hash.js": "^1.0.3",
++ "minimalistic-assert": "^1.0.0",
++ "minimalistic-crypto-utils": "^1.0.1"
++ }
++ },
++ "hsl-regex": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
++ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
++ "dev": true
++ },
++ "hsla-regex": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
++ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
++ "dev": true
++ },
++ "html-comment-regex": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
++ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
++ "dev": true
++ },
++ "html-encoding-sniffer": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
++ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
++ "dev": true,
++ "requires": {
++ "whatwg-encoding": "^1.0.1"
++ }
++ },
++ "html-tags": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz",
++ "integrity": "sha1-x43mW1Zjqll5id0rerSSANfk25g=",
++ "dev": true
++ },
++ "htmlnano": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz",
++ "integrity": "sha512-X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==",
++ "dev": true,
++ "requires": {
++ "cssnano": "^4.1.10",
++ "normalize-html-whitespace": "^1.0.0",
++ "posthtml": "^0.12.0",
++ "posthtml-render": "^1.1.5",
++ "purgecss": "^1.4.0",
++ "svgo": "^1.3.2",
++ "terser": "^4.3.9",
++ "uncss": "^0.17.2"
++ },
++ "dependencies": {
++ "posthtml": {
++ "version": "0.12.3",
++ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz",
++ "integrity": "sha512-Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==",
++ "dev": true,
++ "requires": {
++ "posthtml-parser": "^0.4.2",
++ "posthtml-render": "^1.2.2"
++ }
++ },
++ "terser": {
++ "version": "4.6.12",
++ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz",
++ "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==",
++ "dev": true,
++ "requires": {
++ "commander": "^2.20.0",
++ "source-map": "~0.6.1",
++ "source-map-support": "~0.5.12"
++ }
++ }
++ }
++ },
++ "htmlparser2": {
++ "version": "3.10.1",
++ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
++ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
++ "dev": true,
++ "requires": {
++ "domelementtype": "^1.3.1",
++ "domhandler": "^2.3.0",
++ "domutils": "^1.5.1",
++ "entities": "^1.1.1",
++ "inherits": "^2.0.1",
++ "readable-stream": "^3.1.1"
++ },
++ "dependencies": {
++ "entities": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
++ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
++ "dev": true
++ },
++ "readable-stream": {
++ "version": "3.6.0",
++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
++ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.3",
++ "string_decoder": "^1.1.1",
++ "util-deprecate": "^1.0.1"
++ }
++ }
++ }
++ },
++ "http-errors": {
++ "version": "1.7.3",
++ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
++ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
++ "dev": true,
++ "requires": {
++ "depd": "~1.1.2",
++ "inherits": "2.0.4",
++ "setprototypeof": "1.1.1",
++ "statuses": ">= 1.5.0 < 2",
++ "toidentifier": "1.0.0"
++ }
++ },
++ "http-signature": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
++ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
++ "requires": {
++ "assert-plus": "^1.0.0",
++ "jsprim": "^1.2.2",
++ "sshpk": "^1.7.0"
++ }
++ },
++ "https-browserify": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
++ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
++ "dev": true
++ },
++ "iconv-lite": {
++ "version": "0.4.24",
++ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
++ "dev": true,
++ "requires": {
++ "safer-buffer": ">= 2.1.2 < 3"
++ }
++ },
++ "icss-replace-symbols": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
++ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
++ "dev": true
++ },
++ "ieee754": {
++ "version": "1.1.13",
++ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
++ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
++ "dev": true
++ },
++ "import-fresh": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
++ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
++ "dev": true,
++ "requires": {
++ "caller-path": "^2.0.0",
++ "resolve-from": "^3.0.0"
++ }
++ },
++ "indexes-of": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
++ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
++ "dev": true
++ },
++ "inflight": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
++ "dev": true,
++ "requires": {
++ "once": "^1.3.0",
++ "wrappy": "1"
++ }
++ },
++ "inherits": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
++ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
++ "dev": true
++ },
++ "ini": {
++ "version": "1.3.5",
++ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
++ "dev": true
++ },
++ "invariant": {
++ "version": "2.2.4",
++ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
++ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
++ "dev": true,
++ "requires": {
++ "loose-envify": "^1.0.0"
++ }
++ },
++ "is-absolute-url": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
++ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
++ "dev": true
++ },
++ "is-accessor-descriptor": {
++ "version": "0.1.6",
++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
++ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.0.2"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "is-arrayish": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
++ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
++ "dev": true
++ },
++ "is-binary-path": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
++ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
++ "dev": true,
++ "requires": {
++ "binary-extensions": "^1.0.0"
++ }
++ },
++ "is-buffer": {
++ "version": "1.1.6",
++ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
++ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
++ "dev": true
++ },
++ "is-callable": {
++ "version": "1.1.5",
++ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
++ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
++ "dev": true
++ },
++ "is-color-stop": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
++ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
++ "dev": true,
++ "requires": {
++ "css-color-names": "^0.0.4",
++ "hex-color-regex": "^1.1.0",
++ "hsl-regex": "^1.0.0",
++ "hsla-regex": "^1.0.0",
++ "rgb-regex": "^1.0.1",
++ "rgba-regex": "^1.0.0"
++ }
++ },
++ "is-data-descriptor": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
++ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.0.2"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "is-date-object": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
++ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
++ "dev": true
++ },
++ "is-descriptor": {
++ "version": "0.1.6",
++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
++ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
++ "dev": true,
++ "requires": {
++ "is-accessor-descriptor": "^0.1.6",
++ "is-data-descriptor": "^0.1.4",
++ "kind-of": "^5.0.0"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
++ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
++ "dev": true
++ }
++ }
++ },
++ "is-directory": {
++ "version": "0.3.1",
++ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
++ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
++ "dev": true
++ },
++ "is-extendable": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
++ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
++ "dev": true
++ },
++ "is-extglob": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
++ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
++ "dev": true
++ },
++ "is-fullwidth-code-point": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
++ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
++ "dev": true
++ },
++ "is-glob": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
++ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
++ "dev": true,
++ "requires": {
++ "is-extglob": "^2.1.1"
++ }
++ },
++ "is-html": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz",
++ "integrity": "sha1-4E8cGNOUhRETlvmgJz6rUa8hhGQ=",
++ "dev": true,
++ "requires": {
++ "html-tags": "^1.0.0"
++ }
++ },
++ "is-number": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
++ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.0.2"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "is-obj": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
++ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
++ "dev": true
++ },
++ "is-plain-object": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
++ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
++ "dev": true,
++ "requires": {
++ "isobject": "^3.0.1"
++ }
++ },
++ "is-regex": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
++ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
++ "dev": true,
++ "requires": {
++ "has": "^1.0.3"
++ }
++ },
++ "is-resolvable": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
++ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
++ "dev": true
++ },
++ "is-svg": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
++ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
++ "dev": true,
++ "requires": {
++ "html-comment-regex": "^1.1.0"
++ }
++ },
++ "is-symbol": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
++ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
++ "dev": true,
++ "requires": {
++ "has-symbols": "^1.0.1"
++ }
++ },
++ "is-typedarray": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
++ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
++ },
++ "is-url": {
++ "version": "1.2.4",
++ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
++ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
++ "dev": true
++ },
++ "is-windows": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
++ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
++ "dev": true
++ },
++ "is-wsl": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
++ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
++ "dev": true
++ },
++ "isarray": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
++ "dev": true
++ },
++ "isexe": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
++ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
++ "dev": true
++ },
++ "isobject": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
++ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
++ "dev": true
++ },
++ "isstream": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
++ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
++ },
++ "js-beautify": {
++ "version": "1.11.0",
++ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz",
++ "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==",
++ "dev": true,
++ "requires": {
++ "config-chain": "^1.1.12",
++ "editorconfig": "^0.15.3",
++ "glob": "^7.1.3",
++ "mkdirp": "~1.0.3",
++ "nopt": "^4.0.3"
++ },
++ "dependencies": {
++ "mkdirp": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
++ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
++ "dev": true
++ }
++ }
++ },
++ "js-levenshtein": {
++ "version": "1.1.6",
++ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
++ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
++ "dev": true
++ },
++ "js-tokens": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
++ "dev": true
++ },
++ "js-yaml": {
++ "version": "3.13.1",
++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
++ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
++ "dev": true,
++ "requires": {
++ "argparse": "^1.0.7",
++ "esprima": "^4.0.0"
++ }
++ },
++ "jsbn": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
++ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
++ },
++ "jsdom": {
++ "version": "14.1.0",
++ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz",
++ "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==",
++ "dev": true,
++ "requires": {
++ "abab": "^2.0.0",
++ "acorn": "^6.0.4",
++ "acorn-globals": "^4.3.0",
++ "array-equal": "^1.0.0",
++ "cssom": "^0.3.4",
++ "cssstyle": "^1.1.1",
++ "data-urls": "^1.1.0",
++ "domexception": "^1.0.1",
++ "escodegen": "^1.11.0",
++ "html-encoding-sniffer": "^1.0.2",
++ "nwsapi": "^2.1.3",
++ "parse5": "5.1.0",
++ "pn": "^1.1.0",
++ "request": "^2.88.0",
++ "request-promise-native": "^1.0.5",
++ "saxes": "^3.1.9",
++ "symbol-tree": "^3.2.2",
++ "tough-cookie": "^2.5.0",
++ "w3c-hr-time": "^1.0.1",
++ "w3c-xmlserializer": "^1.1.2",
++ "webidl-conversions": "^4.0.2",
++ "whatwg-encoding": "^1.0.5",
++ "whatwg-mimetype": "^2.3.0",
++ "whatwg-url": "^7.0.0",
++ "ws": "^6.1.2",
++ "xml-name-validator": "^3.0.0"
++ },
++ "dependencies": {
++ "acorn": {
++ "version": "6.4.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
++ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
++ "dev": true
++ },
++ "escodegen": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
++ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
++ "dev": true,
++ "requires": {
++ "esprima": "^4.0.1",
++ "estraverse": "^4.2.0",
++ "esutils": "^2.0.2",
++ "optionator": "^0.8.1",
++ "source-map": "~0.6.1"
++ }
++ },
++ "ws": {
++ "version": "6.2.1",
++ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
++ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
++ "dev": true,
++ "requires": {
++ "async-limiter": "~1.0.0"
++ }
++ }
++ }
++ },
++ "jsesc": {
++ "version": "2.5.2",
++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
++ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
++ "dev": true
++ },
++ "json-parse-better-errors": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
++ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
++ "dev": true
++ },
++ "json-schema": {
++ "version": "0.2.3",
++ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
++ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
++ },
++ "json-schema-traverse": {
++ "version": "0.4.1",
++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
++ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
++ },
++ "json-stringify-safe": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
++ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
++ },
++ "json5": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
++ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
++ "dev": true,
++ "requires": {
++ "minimist": "^1.2.0"
++ }
++ },
++ "jsprim": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
++ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
++ "requires": {
++ "assert-plus": "1.0.0",
++ "extsprintf": "1.3.0",
++ "json-schema": "0.2.3",
++ "verror": "1.10.0"
++ }
++ },
++ "kind-of": {
++ "version": "6.0.3",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
++ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
++ "dev": true
++ },
++ "levn": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
++ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
++ "dev": true,
++ "requires": {
++ "prelude-ls": "~1.1.2",
++ "type-check": "~0.3.2"
++ }
++ },
++ "locate-path": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
++ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
++ "dev": true,
++ "requires": {
++ "p-locate": "^2.0.0",
++ "path-exists": "^3.0.0"
++ }
++ },
++ "lodash": {
++ "version": "4.17.15",
++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
++ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
++ "dev": true
++ },
++ "lodash.clone": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
++ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=",
++ "dev": true
++ },
++ "lodash.memoize": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
++ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
++ "dev": true
++ },
++ "lodash.sortby": {
++ "version": "4.7.0",
++ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
++ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
++ "dev": true
++ },
++ "lodash.uniq": {
++ "version": "4.5.0",
++ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
++ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
++ "dev": true
++ },
++ "log-symbols": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
++ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.0.1"
++ }
++ },
++ "loose-envify": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
++ "dev": true,
++ "requires": {
++ "js-tokens": "^3.0.0 || ^4.0.0"
++ }
++ },
++ "lru-cache": {
++ "version": "4.1.5",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
++ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
++ "dev": true,
++ "requires": {
++ "pseudomap": "^1.0.2",
++ "yallist": "^2.1.2"
++ }
++ },
++ "magic-string": {
++ "version": "0.22.5",
++ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
++ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
++ "dev": true,
++ "requires": {
++ "vlq": "^0.2.2"
++ }
++ },
++ "map-cache": {
++ "version": "0.2.2",
++ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
++ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
++ "dev": true
++ },
++ "map-visit": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
++ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
++ "dev": true,
++ "requires": {
++ "object-visit": "^1.0.0"
++ }
++ },
++ "md5.js": {
++ "version": "1.3.5",
++ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
++ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
++ "dev": true,
++ "requires": {
++ "hash-base": "^3.0.0",
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.1.2"
++ }
++ },
++ "mdn-data": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
++ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
++ "dev": true
++ },
++ "merge-source-map": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
++ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
++ "dev": true,
++ "requires": {
++ "source-map": "^0.5.6"
++ },
++ "dependencies": {
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "merge2": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
++ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
++ "dev": true
++ },
++ "micromatch": {
++ "version": "3.1.10",
++ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
++ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
++ "dev": true,
++ "requires": {
++ "arr-diff": "^4.0.0",
++ "array-unique": "^0.3.2",
++ "braces": "^2.3.1",
++ "define-property": "^2.0.2",
++ "extend-shallow": "^3.0.2",
++ "extglob": "^2.0.4",
++ "fragment-cache": "^0.2.1",
++ "kind-of": "^6.0.2",
++ "nanomatch": "^1.2.9",
++ "object.pick": "^1.3.0",
++ "regex-not": "^1.0.0",
++ "snapdragon": "^0.8.1",
++ "to-regex": "^3.0.2"
++ }
++ },
++ "miller-rabin": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
++ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.0.0",
++ "brorand": "^1.0.1"
++ }
++ },
++ "mime": {
++ "version": "1.6.0",
++ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
++ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
++ "dev": true
++ },
++ "mime-db": {
++ "version": "1.44.0",
++ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
++ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
++ },
++ "mime-types": {
++ "version": "2.1.27",
++ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
++ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
++ "requires": {
++ "mime-db": "1.44.0"
++ }
++ },
++ "mimic-fn": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
++ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
++ "dev": true
++ },
++ "minimalistic-assert": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
++ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
++ "dev": true
++ },
++ "minimalistic-crypto-utils": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
++ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
++ "dev": true
++ },
++ "minimatch": {
++ "version": "3.0.4",
++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
++ "dev": true,
++ "requires": {
++ "brace-expansion": "^1.1.7"
++ }
++ },
++ "minimist": {
++ "version": "1.2.5",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
++ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
++ "dev": true
++ },
++ "mixin-deep": {
++ "version": "1.3.2",
++ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
++ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
++ "dev": true,
++ "requires": {
++ "for-in": "^1.0.2",
++ "is-extendable": "^1.0.1"
++ },
++ "dependencies": {
++ "is-extendable": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
++ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
++ "dev": true,
++ "requires": {
++ "is-plain-object": "^2.0.4"
++ }
++ }
++ }
++ },
++ "mkdirp": {
++ "version": "0.5.5",
++ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
++ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
++ "dev": true,
++ "requires": {
++ "minimist": "^1.2.5"
++ }
++ },
++ "ms": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
++ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
++ "dev": true
++ },
++ "nan": {
++ "version": "2.14.1",
++ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
++ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
++ "dev": true,
++ "optional": true
++ },
++ "nanomatch": {
++ "version": "1.2.13",
++ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
++ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
++ "dev": true,
++ "requires": {
++ "arr-diff": "^4.0.0",
++ "array-unique": "^0.3.2",
++ "define-property": "^2.0.2",
++ "extend-shallow": "^3.0.2",
++ "fragment-cache": "^0.2.1",
++ "is-windows": "^1.0.2",
++ "kind-of": "^6.0.2",
++ "object.pick": "^1.3.0",
++ "regex-not": "^1.0.0",
++ "snapdragon": "^0.8.1",
++ "to-regex": "^3.0.1"
++ }
++ },
++ "nice-try": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
++ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
++ "dev": true
++ },
++ "node-addon-api": {
++ "version": "1.7.1",
++ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz",
++ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==",
++ "dev": true
++ },
++ "node-elm-compiler": {
++ "version": "5.0.4",
++ "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz",
++ "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==",
++ "dev": true,
++ "requires": {
++ "cross-spawn": "6.0.5",
++ "find-elm-dependencies": "2.0.2",
++ "lodash": "4.17.15",
++ "temp": "^0.9.0"
++ }
++ },
++ "node-forge": {
++ "version": "0.7.6",
++ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
++ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==",
++ "dev": true
++ },
++ "node-libs-browser": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
++ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
++ "dev": true,
++ "requires": {
++ "assert": "^1.1.1",
++ "browserify-zlib": "^0.2.0",
++ "buffer": "^4.3.0",
++ "console-browserify": "^1.1.0",
++ "constants-browserify": "^1.0.0",
++ "crypto-browserify": "^3.11.0",
++ "domain-browser": "^1.1.1",
++ "events": "^3.0.0",
++ "https-browserify": "^1.0.0",
++ "os-browserify": "^0.3.0",
++ "path-browserify": "0.0.1",
++ "process": "^0.11.10",
++ "punycode": "^1.2.4",
++ "querystring-es3": "^0.2.0",
++ "readable-stream": "^2.3.3",
++ "stream-browserify": "^2.0.1",
++ "stream-http": "^2.7.2",
++ "string_decoder": "^1.0.0",
++ "timers-browserify": "^2.0.4",
++ "tty-browserify": "0.0.0",
++ "url": "^0.11.0",
++ "util": "^0.11.0",
++ "vm-browserify": "^1.0.1"
++ },
++ "dependencies": {
++ "punycode": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
++ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
++ "dev": true
++ }
++ }
++ },
++ "node-releases": {
++ "version": "1.1.53",
++ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
++ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
++ "dev": true
++ },
++ "nopt": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
++ "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
++ "dev": true,
++ "requires": {
++ "abbrev": "1",
++ "osenv": "^0.1.4"
++ }
++ },
++ "normalize-html-whitespace": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz",
++ "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==",
++ "dev": true
++ },
++ "normalize-path": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
++ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
++ "dev": true
++ },
++ "normalize-url": {
++ "version": "3.3.0",
++ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
++ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
++ "dev": true
++ },
++ "nth-check": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
++ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
++ "dev": true,
++ "requires": {
++ "boolbase": "~1.0.0"
++ }
++ },
++ "nwsapi": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
++ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
++ "dev": true
++ },
++ "oauth-sign": {
++ "version": "0.9.0",
++ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
++ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
++ },
++ "object-assign": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
++ "dev": true
++ },
++ "object-copy": {
++ "version": "0.1.0",
++ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
++ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
++ "dev": true,
++ "requires": {
++ "copy-descriptor": "^0.1.0",
++ "define-property": "^0.2.5",
++ "kind-of": "^3.0.3"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^0.1.0"
++ }
++ },
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "object-inspect": {
++ "version": "1.7.0",
++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
++ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
++ "dev": true
++ },
++ "object-keys": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
++ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
++ "dev": true
++ },
++ "object-visit": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
++ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
++ "dev": true,
++ "requires": {
++ "isobject": "^3.0.0"
++ }
++ },
++ "object.assign": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
++ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.2",
++ "function-bind": "^1.1.1",
++ "has-symbols": "^1.0.0",
++ "object-keys": "^1.0.11"
++ }
++ },
++ "object.getownpropertydescriptors": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
++ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.0-next.1"
++ }
++ },
++ "object.pick": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
++ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
++ "dev": true,
++ "requires": {
++ "isobject": "^3.0.1"
++ }
++ },
++ "object.values": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
++ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.0-next.1",
++ "function-bind": "^1.1.1",
++ "has": "^1.0.3"
++ }
++ },
++ "on-finished": {
++ "version": "2.3.0",
++ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
++ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
++ "dev": true,
++ "requires": {
++ "ee-first": "1.1.1"
++ }
++ },
++ "once": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
++ "dev": true,
++ "requires": {
++ "wrappy": "1"
++ }
++ },
++ "onetime": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
++ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
++ "dev": true,
++ "requires": {
++ "mimic-fn": "^1.0.0"
++ }
++ },
++ "opn": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
++ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
++ "dev": true,
++ "requires": {
++ "is-wsl": "^1.1.0"
++ }
++ },
++ "optionator": {
++ "version": "0.8.3",
++ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
++ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
++ "dev": true,
++ "requires": {
++ "deep-is": "~0.1.3",
++ "fast-levenshtein": "~2.0.6",
++ "levn": "~0.3.0",
++ "prelude-ls": "~1.1.2",
++ "type-check": "~0.3.2",
++ "word-wrap": "~1.2.3"
++ }
++ },
++ "ora": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
++ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.3.1",
++ "cli-cursor": "^2.1.0",
++ "cli-spinners": "^1.1.0",
++ "log-symbols": "^2.2.0",
++ "strip-ansi": "^4.0.0",
++ "wcwidth": "^1.0.1"
++ }
++ },
++ "os-browserify": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
++ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
++ "dev": true
++ },
++ "os-homedir": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
++ "dev": true
++ },
++ "os-tmpdir": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
++ "dev": true
++ },
++ "osenv": {
++ "version": "0.1.5",
++ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
++ "dev": true,
++ "requires": {
++ "os-homedir": "^1.0.0",
++ "os-tmpdir": "^1.0.0"
++ }
++ },
++ "p-limit": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
++ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
++ "dev": true,
++ "requires": {
++ "p-try": "^1.0.0"
++ }
++ },
++ "p-locate": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
++ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
++ "dev": true,
++ "requires": {
++ "p-limit": "^1.1.0"
++ }
++ },
++ "p-try": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
++ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
++ "dev": true
++ },
++ "pako": {
++ "version": "0.2.9",
++ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
++ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
++ "dev": true
++ },
++ "parcel-bundler": {
++ "version": "1.12.3",
++ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz",
++ "integrity": "sha512-8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==",
++ "dev": true,
++ "requires": {
++ "@babel/code-frame": "^7.0.0 <7.4.0",
++ "@babel/core": "^7.0.0 <7.4.0",
++ "@babel/generator": "^7.0.0 <7.4.0",
++ "@babel/parser": "^7.0.0 <7.4.0",
++ "@babel/plugin-transform-flow-strip-types": "^7.0.0 <7.4.0",
++ "@babel/plugin-transform-modules-commonjs": "^7.0.0 <7.4.0",
++ "@babel/plugin-transform-react-jsx": "^7.0.0 <7.4.0",
++ "@babel/preset-env": "^7.0.0 <7.4.0",
++ "@babel/runtime": "^7.0.0 <7.4.0",
++ "@babel/template": "^7.0.0 <7.4.0",
++ "@babel/traverse": "^7.0.0 <7.4.0",
++ "@babel/types": "^7.0.0 <7.4.0",
++ "@iarna/toml": "^2.2.0",
++ "@parcel/fs": "^1.11.0",
++ "@parcel/logger": "^1.11.0",
++ "@parcel/utils": "^1.11.0",
++ "@parcel/watcher": "^1.12.0",
++ "@parcel/workers": "^1.11.0",
++ "ansi-to-html": "^0.6.4",
++ "babylon-walk": "^1.0.2",
++ "browserslist": "^4.1.0",
++ "chalk": "^2.1.0",
++ "clone": "^2.1.1",
++ "command-exists": "^1.2.6",
++ "commander": "^2.11.0",
++ "cross-spawn": "^6.0.4",
++ "css-modules-loader-core": "^1.1.0",
++ "cssnano": "^4.0.0",
++ "deasync": "^0.1.14",
++ "dotenv": "^5.0.0",
++ "dotenv-expand": "^4.2.0",
++ "fast-glob": "^2.2.2",
++ "filesize": "^3.6.0",
++ "get-port": "^3.2.0",
++ "htmlnano": "^0.2.2",
++ "is-glob": "^4.0.0",
++ "is-url": "^1.2.2",
++ "js-yaml": "^3.10.0",
++ "json5": "^1.0.1",
++ "micromatch": "^3.0.4",
++ "mkdirp": "^0.5.1",
++ "node-forge": "^0.7.1",
++ "node-libs-browser": "^2.0.0",
++ "opn": "^5.1.0",
++ "postcss": "^7.0.11",
++ "postcss-value-parser": "^3.3.1",
++ "posthtml": "^0.11.2",
++ "posthtml-parser": "^0.4.0",
++ "posthtml-render": "^1.1.3",
++ "resolve": "^1.4.0",
++ "semver": "^5.4.1",
++ "serialize-to-js": "^1.1.1",
++ "serve-static": "^1.12.4",
++ "source-map": "0.6.1",
++ "terser": "^3.7.3",
++ "v8-compile-cache": "^2.0.0",
++ "ws": "^5.1.1"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "parse-asn1": {
++ "version": "5.1.5",
++ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
++ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
++ "dev": true,
++ "requires": {
++ "asn1.js": "^4.0.0",
++ "browserify-aes": "^1.0.0",
++ "create-hash": "^1.1.0",
++ "evp_bytestokey": "^1.0.0",
++ "pbkdf2": "^3.0.3",
++ "safe-buffer": "^5.1.1"
++ }
++ },
++ "parse-json": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
++ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
++ "dev": true,
++ "requires": {
++ "error-ex": "^1.3.1",
++ "json-parse-better-errors": "^1.0.1"
++ }
++ },
++ "parse5": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
++ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
++ "dev": true
++ },
++ "parseurl": {
++ "version": "1.3.3",
++ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
++ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
++ "dev": true
++ },
++ "pascalcase": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
++ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
++ "dev": true
++ },
++ "path-browserify": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
++ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
++ "dev": true
++ },
++ "path-dirname": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
++ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
++ "dev": true
++ },
++ "path-exists": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
++ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
++ "dev": true
++ },
++ "path-is-absolute": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
++ "dev": true
++ },
++ "path-key": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
++ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
++ "dev": true
++ },
++ "path-parse": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
++ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
++ "dev": true
++ },
++ "pbkdf2": {
++ "version": "3.0.17",
++ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
++ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
++ "dev": true,
++ "requires": {
++ "create-hash": "^1.1.2",
++ "create-hmac": "^1.1.4",
++ "ripemd160": "^2.0.1",
++ "safe-buffer": "^5.0.1",
++ "sha.js": "^2.4.8"
++ }
++ },
++ "performance-now": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
++ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
++ },
++ "physical-cpu-count": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
++ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=",
++ "dev": true
++ },
++ "pkg-up": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
++ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
++ "dev": true,
++ "requires": {
++ "find-up": "^2.1.0"
++ }
++ },
++ "pn": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
++ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
++ "dev": true
++ },
++ "posix-character-classes": {
++ "version": "0.1.1",
++ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
++ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
++ "dev": true
++ },
++ "postcss": {
++ "version": "7.0.27",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
++ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.2",
++ "source-map": "^0.6.1",
++ "supports-color": "^6.1.0"
++ }
++ },
++ "postcss-calc": {
++ "version": "7.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz",
++ "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.27",
++ "postcss-selector-parser": "^6.0.2",
++ "postcss-value-parser": "^4.0.2"
++ }
++ },
++ "postcss-colormin": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
++ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "color": "^3.0.0",
++ "has": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-convert-values": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
++ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-discard-comments": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
++ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-discard-duplicates": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
++ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-discard-empty": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
++ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-discard-overridden": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
++ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-merge-longhand": {
++ "version": "4.0.11",
++ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
++ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
++ "dev": true,
++ "requires": {
++ "css-color-names": "0.0.4",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0",
++ "stylehacks": "^4.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-merge-rules": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
++ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "caniuse-api": "^3.0.0",
++ "cssnano-util-same-parent": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-selector-parser": "^3.0.0",
++ "vendors": "^1.0.0"
++ },
++ "dependencies": {
++ "postcss-selector-parser": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
++ "dev": true,
++ "requires": {
++ "dot-prop": "^5.2.0",
++ "indexes-of": "^1.0.1",
++ "uniq": "^1.0.1"
++ }
++ }
++ }
++ },
++ "postcss-minify-font-values": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
++ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-minify-gradients": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
++ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-arguments": "^4.0.0",
++ "is-color-stop": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-minify-params": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
++ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
++ "dev": true,
++ "requires": {
++ "alphanum-sort": "^1.0.0",
++ "browserslist": "^4.0.0",
++ "cssnano-util-get-arguments": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0",
++ "uniqs": "^2.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-minify-selectors": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
++ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
++ "dev": true,
++ "requires": {
++ "alphanum-sort": "^1.0.0",
++ "has": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-selector-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-selector-parser": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
++ "dev": true,
++ "requires": {
++ "dot-prop": "^5.2.0",
++ "indexes-of": "^1.0.1",
++ "uniq": "^1.0.1"
++ }
++ }
++ }
++ },
++ "postcss-modules-extract-imports": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
++ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
++ "dev": true,
++ "requires": {
++ "postcss": "^6.0.1"
++ },
++ "dependencies": {
++ "postcss": {
++ "version": "6.0.23",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.1",
++ "source-map": "^0.6.1",
++ "supports-color": "^5.4.0"
++ }
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ }
++ }
++ },
++ "postcss-modules-local-by-default": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
++ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
++ "dev": true,
++ "requires": {
++ "css-selector-tokenizer": "^0.7.0",
++ "postcss": "^6.0.1"
++ },
++ "dependencies": {
++ "postcss": {
++ "version": "6.0.23",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.1",
++ "source-map": "^0.6.1",
++ "supports-color": "^5.4.0"
++ }
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ }
++ }
++ },
++ "postcss-modules-scope": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
++ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
++ "dev": true,
++ "requires": {
++ "css-selector-tokenizer": "^0.7.0",
++ "postcss": "^6.0.1"
++ },
++ "dependencies": {
++ "postcss": {
++ "version": "6.0.23",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.1",
++ "source-map": "^0.6.1",
++ "supports-color": "^5.4.0"
++ }
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ }
++ }
++ },
++ "postcss-modules-values": {
++ "version": "1.3.0",
++ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
++ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
++ "dev": true,
++ "requires": {
++ "icss-replace-symbols": "^1.1.0",
++ "postcss": "^6.0.1"
++ },
++ "dependencies": {
++ "postcss": {
++ "version": "6.0.23",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
++ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.1",
++ "source-map": "^0.6.1",
++ "supports-color": "^5.4.0"
++ }
++ },
++ "supports-color": {
++ "version": "5.5.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ }
++ }
++ },
++ "postcss-normalize-charset": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
++ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-normalize-display-values": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
++ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-match": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-positions": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
++ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-arguments": "^4.0.0",
++ "has": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-repeat-style": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
++ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-arguments": "^4.0.0",
++ "cssnano-util-get-match": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-string": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
++ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
++ "dev": true,
++ "requires": {
++ "has": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-timing-functions": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
++ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-match": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-unicode": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
++ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-url": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
++ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
++ "dev": true,
++ "requires": {
++ "is-absolute-url": "^2.0.0",
++ "normalize-url": "^3.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-normalize-whitespace": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
++ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
++ "dev": true,
++ "requires": {
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-ordered-values": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
++ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-arguments": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-reduce-initial": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
++ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "caniuse-api": "^3.0.0",
++ "has": "^1.0.0",
++ "postcss": "^7.0.0"
++ }
++ },
++ "postcss-reduce-transforms": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
++ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
++ "dev": true,
++ "requires": {
++ "cssnano-util-get-match": "^4.0.0",
++ "has": "^1.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-selector-parser": {
++ "version": "6.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
++ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
++ "dev": true,
++ "requires": {
++ "cssesc": "^3.0.0",
++ "indexes-of": "^1.0.1",
++ "uniq": "^1.0.1"
++ }
++ },
++ "postcss-svgo": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
++ "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
++ "dev": true,
++ "requires": {
++ "is-svg": "^3.0.0",
++ "postcss": "^7.0.0",
++ "postcss-value-parser": "^3.0.0",
++ "svgo": "^1.0.0"
++ },
++ "dependencies": {
++ "postcss-value-parser": {
++ "version": "3.3.1",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
++ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
++ "dev": true
++ }
++ }
++ },
++ "postcss-unique-selectors": {
++ "version": "4.0.1",
++ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
++ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
++ "dev": true,
++ "requires": {
++ "alphanum-sort": "^1.0.0",
++ "postcss": "^7.0.0",
++ "uniqs": "^2.0.0"
++ }
++ },
++ "postcss-value-parser": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
++ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==",
++ "dev": true
++ },
++ "posthtml": {
++ "version": "0.11.6",
++ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz",
++ "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==",
++ "dev": true,
++ "requires": {
++ "posthtml-parser": "^0.4.1",
++ "posthtml-render": "^1.1.5"
++ }
++ },
++ "posthtml-parser": {
++ "version": "0.4.2",
++ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz",
++ "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==",
++ "dev": true,
++ "requires": {
++ "htmlparser2": "^3.9.2"
++ }
++ },
++ "posthtml-render": {
++ "version": "1.2.2",
++ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz",
++ "integrity": "sha512-MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==",
++ "dev": true
++ },
++ "prelude-ls": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
++ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
++ "dev": true
++ },
++ "private": {
++ "version": "0.1.8",
++ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
++ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
++ "dev": true
++ },
++ "process": {
++ "version": "0.11.10",
++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
++ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
++ "dev": true
++ },
++ "process-nextick-args": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
++ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
++ "dev": true
++ },
++ "proto-list": {
++ "version": "1.2.4",
++ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
++ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
++ "dev": true
++ },
++ "pseudomap": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
++ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
++ "dev": true
++ },
++ "psl": {
++ "version": "1.8.0",
++ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
++ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
++ },
++ "public-encrypt": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
++ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
++ "dev": true,
++ "requires": {
++ "bn.js": "^4.1.0",
++ "browserify-rsa": "^4.0.0",
++ "create-hash": "^1.1.0",
++ "parse-asn1": "^5.0.0",
++ "randombytes": "^2.0.1",
++ "safe-buffer": "^5.1.2"
++ }
++ },
++ "punycode": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
++ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
++ },
++ "purgecss": {
++ "version": "1.4.2",
++ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz",
++ "integrity": "sha512-hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==",
++ "dev": true,
++ "requires": {
++ "glob": "^7.1.3",
++ "postcss": "^7.0.14",
++ "postcss-selector-parser": "^6.0.0",
++ "yargs": "^14.0.0"
++ }
++ },
++ "q": {
++ "version": "1.5.1",
++ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
++ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
++ "dev": true
++ },
++ "qs": {
++ "version": "6.5.2",
++ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
++ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
++ },
++ "querystring": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
++ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
++ "dev": true
++ },
++ "querystring-es3": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
++ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
++ "dev": true
++ },
++ "quote-stream": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
++ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
++ "dev": true,
++ "requires": {
++ "buffer-equal": "0.0.1",
++ "minimist": "^1.1.3",
++ "through2": "^2.0.0"
++ }
++ },
++ "randombytes": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
++ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
++ "dev": true,
++ "requires": {
++ "safe-buffer": "^5.1.0"
++ }
++ },
++ "randomfill": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
++ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
++ "dev": true,
++ "requires": {
++ "randombytes": "^2.0.5",
++ "safe-buffer": "^5.1.0"
++ }
++ },
++ "range-parser": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
++ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
++ "dev": true
++ },
++ "readable-stream": {
++ "version": "2.3.7",
++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
++ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
++ "dev": true,
++ "requires": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.3",
++ "isarray": "~1.0.0",
++ "process-nextick-args": "~2.0.0",
++ "safe-buffer": "~5.1.1",
++ "string_decoder": "~1.1.1",
++ "util-deprecate": "~1.0.1"
++ }
++ },
++ "readdirp": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
++ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
++ "dev": true,
++ "requires": {
++ "graceful-fs": "^4.1.11",
++ "micromatch": "^3.1.10",
++ "readable-stream": "^2.0.2"
++ }
++ },
++ "regenerate": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
++ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
++ "dev": true
++ },
++ "regenerate-unicode-properties": {
++ "version": "8.2.0",
++ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
++ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
++ "dev": true,
++ "requires": {
++ "regenerate": "^1.4.0"
++ }
++ },
++ "regenerator-runtime": {
++ "version": "0.13.5",
++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
++ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
++ "dev": true
++ },
++ "regenerator-transform": {
++ "version": "0.14.4",
++ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
++ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==",
++ "dev": true,
++ "requires": {
++ "@babel/runtime": "^7.8.4",
++ "private": "^0.1.8"
++ },
++ "dependencies": {
++ "@babel/runtime": {
++ "version": "7.9.2",
++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
++ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
++ "dev": true,
++ "requires": {
++ "regenerator-runtime": "^0.13.4"
++ }
++ }
++ }
++ },
++ "regex-not": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
++ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
++ "dev": true,
++ "requires": {
++ "extend-shallow": "^3.0.2",
++ "safe-regex": "^1.1.0"
++ }
++ },
++ "regexpu-core": {
++ "version": "4.7.0",
++ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
++ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
++ "dev": true,
++ "requires": {
++ "regenerate": "^1.4.0",
++ "regenerate-unicode-properties": "^8.2.0",
++ "regjsgen": "^0.5.1",
++ "regjsparser": "^0.6.4",
++ "unicode-match-property-ecmascript": "^1.0.4",
++ "unicode-match-property-value-ecmascript": "^1.2.0"
++ }
++ },
++ "regjsgen": {
++ "version": "0.5.1",
++ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
++ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
++ "dev": true
++ },
++ "regjsparser": {
++ "version": "0.6.4",
++ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
++ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
++ "dev": true,
++ "requires": {
++ "jsesc": "~0.5.0"
++ },
++ "dependencies": {
++ "jsesc": {
++ "version": "0.5.0",
++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
++ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
++ "dev": true
++ }
++ }
++ },
++ "remove-trailing-separator": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
++ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
++ "dev": true
++ },
++ "repeat-element": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
++ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
++ "dev": true
++ },
++ "repeat-string": {
++ "version": "1.6.1",
++ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
++ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
++ "dev": true
++ },
++ "request": {
++ "version": "2.88.2",
++ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
++ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
++ "requires": {
++ "aws-sign2": "~0.7.0",
++ "aws4": "^1.8.0",
++ "caseless": "~0.12.0",
++ "combined-stream": "~1.0.6",
++ "extend": "~3.0.2",
++ "forever-agent": "~0.6.1",
++ "form-data": "~2.3.2",
++ "har-validator": "~5.1.3",
++ "http-signature": "~1.2.0",
++ "is-typedarray": "~1.0.0",
++ "isstream": "~0.1.2",
++ "json-stringify-safe": "~5.0.1",
++ "mime-types": "~2.1.19",
++ "oauth-sign": "~0.9.0",
++ "performance-now": "^2.1.0",
++ "qs": "~6.5.2",
++ "safe-buffer": "^5.1.2",
++ "tough-cookie": "~2.5.0",
++ "tunnel-agent": "^0.6.0",
++ "uuid": "^3.3.2"
++ }
++ },
++ "request-promise-core": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
++ "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
++ "dev": true,
++ "requires": {
++ "lodash": "^4.17.15"
++ }
++ },
++ "request-promise-native": {
++ "version": "1.0.8",
++ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
++ "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
++ "dev": true,
++ "requires": {
++ "request-promise-core": "1.1.3",
++ "stealthy-require": "^1.1.1",
++ "tough-cookie": "^2.3.3"
++ }
++ },
++ "require-directory": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
++ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
++ "dev": true
++ },
++ "require-main-filename": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
++ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
++ "dev": true
++ },
++ "resolve": {
++ "version": "1.17.0",
++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
++ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
++ "dev": true,
++ "requires": {
++ "path-parse": "^1.0.6"
++ }
++ },
++ "resolve-from": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
++ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
++ "dev": true
++ },
++ "resolve-url": {
++ "version": "0.2.1",
++ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
++ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
++ "dev": true
++ },
++ "restore-cursor": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
++ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
++ "dev": true,
++ "requires": {
++ "onetime": "^2.0.0",
++ "signal-exit": "^3.0.2"
++ }
++ },
++ "ret": {
++ "version": "0.1.15",
++ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
++ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
++ "dev": true
++ },
++ "rgb-regex": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
++ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
++ "dev": true
++ },
++ "rgba-regex": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
++ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
++ "dev": true
++ },
++ "rimraf": {
++ "version": "2.6.3",
++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
++ "dev": true,
++ "requires": {
++ "glob": "^7.1.3"
++ }
++ },
++ "ripemd160": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
++ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
++ "dev": true,
++ "requires": {
++ "hash-base": "^3.0.0",
++ "inherits": "^2.0.1"
++ }
++ },
++ "safe-buffer": {
++ "version": "5.1.2",
++ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
++ },
++ "safe-regex": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
++ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
++ "dev": true,
++ "requires": {
++ "ret": "~0.1.10"
++ }
++ },
++ "safer-buffer": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
++ },
++ "safer-eval": {
++ "version": "1.3.6",
++ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz",
++ "integrity": "sha512-DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==",
++ "dev": true,
++ "requires": {
++ "clones": "^1.2.0"
++ }
++ },
++ "sax": {
++ "version": "1.2.4",
++ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
++ "dev": true
++ },
++ "saxes": {
++ "version": "3.1.11",
++ "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
++ "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
++ "dev": true,
++ "requires": {
++ "xmlchars": "^2.1.1"
++ }
++ },
++ "semver": {
++ "version": "5.7.1",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
++ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
++ "dev": true
++ },
++ "send": {
++ "version": "0.17.1",
++ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
++ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
++ "dev": true,
++ "requires": {
++ "debug": "2.6.9",
++ "depd": "~1.1.2",
++ "destroy": "~1.0.4",
++ "encodeurl": "~1.0.2",
++ "escape-html": "~1.0.3",
++ "etag": "~1.8.1",
++ "fresh": "0.5.2",
++ "http-errors": "~1.7.2",
++ "mime": "1.6.0",
++ "ms": "2.1.1",
++ "on-finished": "~2.3.0",
++ "range-parser": "~1.2.1",
++ "statuses": "~1.5.0"
++ },
++ "dependencies": {
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "dev": true,
++ "requires": {
++ "ms": "2.0.0"
++ },
++ "dependencies": {
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
++ "dev": true
++ }
++ }
++ },
++ "ms": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
++ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
++ "dev": true
++ }
++ }
++ },
++ "serialize-to-js": {
++ "version": "1.2.2",
++ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz",
++ "integrity": "sha512-mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==",
++ "dev": true,
++ "requires": {
++ "js-beautify": "^1.8.9",
++ "safer-eval": "^1.3.0"
++ }
++ },
++ "serve-static": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
++ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
++ "dev": true,
++ "requires": {
++ "encodeurl": "~1.0.2",
++ "escape-html": "~1.0.3",
++ "parseurl": "~1.3.3",
++ "send": "0.17.1"
++ }
++ },
++ "set-blocking": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
++ "dev": true
++ },
++ "set-value": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
++ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
++ "dev": true,
++ "requires": {
++ "extend-shallow": "^2.0.1",
++ "is-extendable": "^0.1.1",
++ "is-plain-object": "^2.0.3",
++ "split-string": "^3.0.1"
++ },
++ "dependencies": {
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ }
++ }
++ },
++ "setimmediate": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
++ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
++ "dev": true
++ },
++ "setprototypeof": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
++ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
++ "dev": true
++ },
++ "sha.js": {
++ "version": "2.4.11",
++ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
++ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
++ "dev": true,
++ "requires": {
++ "inherits": "^2.0.1",
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "shallow-copy": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
++ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=",
++ "dev": true
++ },
++ "shebang-command": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
++ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
++ "dev": true,
++ "requires": {
++ "shebang-regex": "^1.0.0"
++ }
++ },
++ "shebang-regex": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
++ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
++ "dev": true
++ },
++ "sigmund": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
++ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
++ "dev": true
++ },
++ "signal-exit": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
++ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
++ "dev": true
++ },
++ "simple-swizzle": {
++ "version": "0.2.2",
++ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
++ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
++ "dev": true,
++ "requires": {
++ "is-arrayish": "^0.3.1"
++ },
++ "dependencies": {
++ "is-arrayish": {
++ "version": "0.3.2",
++ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
++ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
++ "dev": true
++ }
++ }
++ },
++ "snapdragon": {
++ "version": "0.8.2",
++ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
++ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
++ "dev": true,
++ "requires": {
++ "base": "^0.11.1",
++ "debug": "^2.2.0",
++ "define-property": "^0.2.5",
++ "extend-shallow": "^2.0.1",
++ "map-cache": "^0.2.2",
++ "source-map": "^0.5.6",
++ "source-map-resolve": "^0.5.0",
++ "use": "^3.1.0"
++ },
++ "dependencies": {
++ "debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "dev": true,
++ "requires": {
++ "ms": "2.0.0"
++ }
++ },
++ "define-property": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^0.1.0"
++ }
++ },
++ "extend-shallow": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
++ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
++ "dev": true,
++ "requires": {
++ "is-extendable": "^0.1.0"
++ }
++ },
++ "ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
++ "dev": true
++ },
++ "source-map": {
++ "version": "0.5.7",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
++ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
++ "dev": true
++ }
++ }
++ },
++ "snapdragon-node": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
++ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
++ "dev": true,
++ "requires": {
++ "define-property": "^1.0.0",
++ "isobject": "^3.0.0",
++ "snapdragon-util": "^3.0.1"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
++ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^1.0.0"
++ }
++ },
++ "is-accessor-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
++ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-data-descriptor": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
++ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^6.0.0"
++ }
++ },
++ "is-descriptor": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
++ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
++ "dev": true,
++ "requires": {
++ "is-accessor-descriptor": "^1.0.0",
++ "is-data-descriptor": "^1.0.0",
++ "kind-of": "^6.0.2"
++ }
++ }
++ }
++ },
++ "snapdragon-util": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
++ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.2.0"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "source-map": {
++ "version": "0.6.1",
++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
++ "dev": true
++ },
++ "source-map-resolve": {
++ "version": "0.5.3",
++ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
++ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
++ "dev": true,
++ "requires": {
++ "atob": "^2.1.2",
++ "decode-uri-component": "^0.2.0",
++ "resolve-url": "^0.2.1",
++ "source-map-url": "^0.4.0",
++ "urix": "^0.1.0"
++ }
++ },
++ "source-map-support": {
++ "version": "0.5.19",
++ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
++ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
++ "dev": true,
++ "requires": {
++ "buffer-from": "^1.0.0",
++ "source-map": "^0.6.0"
++ }
++ },
++ "source-map-url": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
++ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
++ "dev": true
++ },
++ "split-string": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
++ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
++ "dev": true,
++ "requires": {
++ "extend-shallow": "^3.0.0"
++ }
++ },
++ "sprintf-js": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
++ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
++ "dev": true
++ },
++ "sshpk": {
++ "version": "1.16.1",
++ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
++ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
++ "requires": {
++ "asn1": "~0.2.3",
++ "assert-plus": "^1.0.0",
++ "bcrypt-pbkdf": "^1.0.0",
++ "dashdash": "^1.12.0",
++ "ecc-jsbn": "~0.1.1",
++ "getpass": "^0.1.1",
++ "jsbn": "~0.1.0",
++ "safer-buffer": "^2.0.2",
++ "tweetnacl": "~0.14.0"
++ }
++ },
++ "stable": {
++ "version": "0.1.8",
++ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
++ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
++ "dev": true
++ },
++ "static-eval": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz",
++ "integrity": "sha512-nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==",
++ "dev": true,
++ "requires": {
++ "escodegen": "^1.11.1"
++ },
++ "dependencies": {
++ "escodegen": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz",
++ "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==",
++ "dev": true,
++ "requires": {
++ "esprima": "^4.0.1",
++ "estraverse": "^4.2.0",
++ "esutils": "^2.0.2",
++ "optionator": "^0.8.1",
++ "source-map": "~0.6.1"
++ }
++ }
++ }
++ },
++ "static-extend": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
++ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
++ "dev": true,
++ "requires": {
++ "define-property": "^0.2.5",
++ "object-copy": "^0.1.0"
++ },
++ "dependencies": {
++ "define-property": {
++ "version": "0.2.5",
++ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
++ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
++ "dev": true,
++ "requires": {
++ "is-descriptor": "^0.1.0"
++ }
++ }
++ }
++ },
++ "static-module": {
++ "version": "2.2.5",
++ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
++ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
++ "dev": true,
++ "requires": {
++ "concat-stream": "~1.6.0",
++ "convert-source-map": "^1.5.1",
++ "duplexer2": "~0.1.4",
++ "escodegen": "~1.9.0",
++ "falafel": "^2.1.0",
++ "has": "^1.0.1",
++ "magic-string": "^0.22.4",
++ "merge-source-map": "1.0.4",
++ "object-inspect": "~1.4.0",
++ "quote-stream": "~1.0.2",
++ "readable-stream": "~2.3.3",
++ "shallow-copy": "~0.0.1",
++ "static-eval": "^2.0.0",
++ "through2": "~2.0.3"
++ },
++ "dependencies": {
++ "object-inspect": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
++ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==",
++ "dev": true
++ }
++ }
++ },
++ "statuses": {
++ "version": "1.5.0",
++ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
++ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
++ "dev": true
++ },
++ "stealthy-require": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
++ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
++ "dev": true
++ },
++ "stream-browserify": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
++ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
++ "dev": true,
++ "requires": {
++ "inherits": "~2.0.1",
++ "readable-stream": "^2.0.2"
++ }
++ },
++ "stream-http": {
++ "version": "2.8.3",
++ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
++ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
++ "dev": true,
++ "requires": {
++ "builtin-status-codes": "^3.0.0",
++ "inherits": "^2.0.1",
++ "readable-stream": "^2.3.6",
++ "to-arraybuffer": "^1.0.0",
++ "xtend": "^4.0.0"
++ }
++ },
++ "string-width": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
++ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
++ "dev": true,
++ "requires": {
++ "emoji-regex": "^7.0.1",
++ "is-fullwidth-code-point": "^2.0.0",
++ "strip-ansi": "^5.1.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
++ "dev": true
++ },
++ "strip-ansi": {
++ "version": "5.2.0",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^4.1.0"
++ }
++ }
++ }
++ },
++ "string.prototype.trimend": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
++ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.5"
++ }
++ },
++ "string.prototype.trimleft": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
++ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.5",
++ "string.prototype.trimstart": "^1.0.0"
++ }
++ },
++ "string.prototype.trimright": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
++ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.5",
++ "string.prototype.trimend": "^1.0.0"
++ }
++ },
++ "string.prototype.trimstart": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
++ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.5"
++ }
++ },
++ "string_decoder": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
++ "dev": true,
++ "requires": {
++ "safe-buffer": "~5.1.0"
++ }
++ },
++ "strip-ansi": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
++ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^3.0.0"
++ }
++ },
++ "stylehacks": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
++ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
++ "dev": true,
++ "requires": {
++ "browserslist": "^4.0.0",
++ "postcss": "^7.0.0",
++ "postcss-selector-parser": "^3.0.0"
++ },
++ "dependencies": {
++ "postcss-selector-parser": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
++ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
++ "dev": true,
++ "requires": {
++ "dot-prop": "^5.2.0",
++ "indexes-of": "^1.0.1",
++ "uniq": "^1.0.1"
++ }
++ }
++ }
++ },
++ "supports-color": {
++ "version": "6.1.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
++ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
++ "dev": true,
++ "requires": {
++ "has-flag": "^3.0.0"
++ }
++ },
++ "svgo": {
++ "version": "1.3.2",
++ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
++ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
++ "dev": true,
++ "requires": {
++ "chalk": "^2.4.1",
++ "coa": "^2.0.2",
++ "css-select": "^2.0.0",
++ "css-select-base-adapter": "^0.1.1",
++ "css-tree": "1.0.0-alpha.37",
++ "csso": "^4.0.2",
++ "js-yaml": "^3.13.1",
++ "mkdirp": "~0.5.1",
++ "object.values": "^1.1.0",
++ "sax": "~1.2.4",
++ "stable": "^0.1.8",
++ "unquote": "~1.1.1",
++ "util.promisify": "~1.0.0"
++ }
++ },
++ "symbol-tree": {
++ "version": "3.2.4",
++ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
++ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
++ "dev": true
++ },
++ "temp": {
++ "version": "0.9.0",
++ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz",
++ "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==",
++ "dev": true,
++ "requires": {
++ "rimraf": "~2.6.2"
++ }
++ },
++ "terser": {
++ "version": "3.17.0",
++ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
++ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
++ "dev": true,
++ "requires": {
++ "commander": "^2.19.0",
++ "source-map": "~0.6.1",
++ "source-map-support": "~0.5.10"
++ }
++ },
++ "through2": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
++ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
++ "dev": true,
++ "requires": {
++ "readable-stream": "~2.3.6",
++ "xtend": "~4.0.1"
++ }
++ },
++ "timers-browserify": {
++ "version": "2.0.11",
++ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
++ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
++ "dev": true,
++ "requires": {
++ "setimmediate": "^1.0.4"
++ }
++ },
++ "timsort": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
++ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
++ "dev": true
++ },
++ "tiny-inflate": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
++ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
++ "dev": true
++ },
++ "to-arraybuffer": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
++ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
++ "dev": true
++ },
++ "to-fast-properties": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
++ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
++ "dev": true
++ },
++ "to-object-path": {
++ "version": "0.3.0",
++ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
++ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
++ "dev": true,
++ "requires": {
++ "kind-of": "^3.0.2"
++ },
++ "dependencies": {
++ "kind-of": {
++ "version": "3.2.2",
++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
++ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
++ "dev": true,
++ "requires": {
++ "is-buffer": "^1.1.5"
++ }
++ }
++ }
++ },
++ "to-regex": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
++ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
++ "dev": true,
++ "requires": {
++ "define-property": "^2.0.2",
++ "extend-shallow": "^3.0.2",
++ "regex-not": "^1.0.2",
++ "safe-regex": "^1.1.0"
++ }
++ },
++ "to-regex-range": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
++ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
++ "dev": true,
++ "requires": {
++ "is-number": "^3.0.0",
++ "repeat-string": "^1.6.1"
++ }
++ },
++ "toidentifier": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
++ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+- "brace-expansion": {
+- "version": "1.1.11",
+- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
++ "tough-cookie": {
++ "version": "2.5.0",
++ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
++ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
++ "requires": {
++ "psl": "^1.1.28",
++ "punycode": "^2.1.1"
++ }
++ },
++ "tr46": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
++ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+- "balanced-match": "^1.0.0",
+- "concat-map": "0.0.1"
++ "punycode": "^2.1.0"
+ }
+ },
+- "concat-map": {
+- "version": "0.0.1",
+- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
++ "trim-right": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
++ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+- "cross-spawn": {
+- "version": "6.0.5",
+- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
++ "tty-browserify": {
++ "version": "0.0.0",
++ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
++ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
++ "dev": true
++ },
++ "tunnel-agent": {
++ "version": "0.6.0",
++ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
++ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
++ "requires": {
++ "safe-buffer": "^5.0.1"
++ }
++ },
++ "tweetnacl": {
++ "version": "0.14.5",
++ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
++ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
++ },
++ "type-check": {
++ "version": "0.3.2",
++ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
++ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+- "nice-try": "^1.0.4",
+- "path-key": "^2.0.1",
+- "semver": "^5.5.0",
+- "shebang-command": "^1.2.0",
+- "which": "^1.2.9"
++ "prelude-ls": "~1.1.2"
+ }
+ },
+- "elm-hot": {
+- "version": "1.1.1",
+- "resolved": "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz",
+- "integrity": "sha512-ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==",
++ "typedarray": {
++ "version": "0.0.6",
++ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
++ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+- "find-elm-dependencies": {
+- "version": "2.0.2",
+- "resolved": "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz",
+- "integrity": "sha512-nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==",
++ "uncss": {
++ "version": "0.17.3",
++ "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz",
++ "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==",
+ "dev": true,
+ "requires": {
+- "firstline": "1.2.0",
+- "lodash": "4.17.15"
++ "commander": "^2.20.0",
++ "glob": "^7.1.4",
++ "is-absolute-url": "^3.0.1",
++ "is-html": "^1.1.0",
++ "jsdom": "^14.1.0",
++ "lodash": "^4.17.15",
++ "postcss": "^7.0.17",
++ "postcss-selector-parser": "6.0.2",
++ "request": "^2.88.0"
++ },
++ "dependencies": {
++ "is-absolute-url": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
++ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
++ "dev": true
++ }
+ }
+ },
+- "firstline": {
++ "unicode-canonical-property-names-ecmascript": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
++ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
++ "dev": true
++ },
++ "unicode-match-property-ecmascript": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
++ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
++ "dev": true,
++ "requires": {
++ "unicode-canonical-property-names-ecmascript": "^1.0.4",
++ "unicode-property-aliases-ecmascript": "^1.0.4"
++ }
++ },
++ "unicode-match-property-value-ecmascript": {
+ "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz",
+- "integrity": "sha1-yfSIbn9/vwr8EtcZQdzgaxkq6gU=",
++ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
++ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
+ "dev": true
+ },
+- "fs.realpath": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
++ "unicode-property-aliases-ecmascript": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
++ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
+ "dev": true
+ },
+- "glob": {
+- "version": "7.1.4",
+- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
++ "unicode-trie": {
++ "version": "0.3.1",
++ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
++ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
+ "dev": true,
+ "requires": {
+- "fs.realpath": "^1.0.0",
+- "inflight": "^1.0.4",
+- "inherits": "2",
+- "minimatch": "^3.0.4",
+- "once": "^1.3.0",
+- "path-is-absolute": "^1.0.0"
++ "pako": "^0.2.5",
++ "tiny-inflate": "^1.0.0"
+ }
+ },
+- "inflight": {
+- "version": "1.0.6",
+- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
++ "union-value": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
++ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+- "once": "^1.3.0",
+- "wrappy": "1"
++ "arr-union": "^3.1.0",
++ "get-value": "^2.0.6",
++ "is-extendable": "^0.1.1",
++ "set-value": "^2.0.1"
+ }
+ },
+- "inherits": {
+- "version": "2.0.4",
+- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
++ "uniq": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
++ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+- "isexe": {
++ "uniqs": {
+ "version": "2.0.0",
+- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
++ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
++ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+- "lodash": {
+- "version": "4.17.15",
+- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
++ "unquote": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
++ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+- "minimatch": {
+- "version": "3.0.4",
+- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
++ "unset-value": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
++ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+- "brace-expansion": "^1.1.7"
++ "has-value": "^0.3.1",
++ "isobject": "^3.0.0"
++ },
++ "dependencies": {
++ "has-value": {
++ "version": "0.3.1",
++ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
++ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
++ "dev": true,
++ "requires": {
++ "get-value": "^2.0.3",
++ "has-values": "^0.1.4",
++ "isobject": "^2.0.0"
++ },
++ "dependencies": {
++ "isobject": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
++ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
++ "dev": true,
++ "requires": {
++ "isarray": "1.0.0"
++ }
++ }
++ }
++ },
++ "has-values": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
++ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
++ "dev": true
++ }
+ }
+ },
+- "nice-try": {
+- "version": "1.0.5",
+- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
++ "upath": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
++ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
+- "node-elm-compiler": {
+- "version": "5.0.4",
+- "resolved": "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz",
+- "integrity": "sha512-VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==",
++ "uri-js": {
++ "version": "4.2.2",
++ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
++ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
++ "requires": {
++ "punycode": "^2.1.0"
++ }
++ },
++ "urix": {
++ "version": "0.1.0",
++ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
++ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
++ "dev": true
++ },
++ "url": {
++ "version": "0.11.0",
++ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
++ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+- "cross-spawn": "6.0.5",
+- "find-elm-dependencies": "2.0.2",
+- "lodash": "4.17.15",
+- "temp": "^0.9.0"
++ "punycode": "1.3.2",
++ "querystring": "0.2.0"
++ },
++ "dependencies": {
++ "punycode": {
++ "version": "1.3.2",
++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
++ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
++ "dev": true
++ }
+ }
+ },
+- "once": {
+- "version": "1.4.0",
+- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
++ "use": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
++ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
++ "dev": true
++ },
++ "util": {
++ "version": "0.11.1",
++ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
++ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+- "wrappy": "1"
++ "inherits": "2.0.3"
++ },
++ "dependencies": {
++ "inherits": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
++ "dev": true
++ }
+ }
+ },
+- "path-is-absolute": {
++ "util-deprecate": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
++ "dev": true
++ },
++ "util.promisify": {
+ "version": "1.0.1",
+- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
++ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz",
++ "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==",
++ "dev": true,
++ "requires": {
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.17.2",
++ "has-symbols": "^1.0.1",
++ "object.getownpropertydescriptors": "^2.1.0"
++ }
++ },
++ "uuid": {
++ "version": "3.4.0",
++ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
++ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
++ },
++ "v8-compile-cache": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
++ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
+ "dev": true
+ },
+- "path-key": {
+- "version": "2.0.1",
+- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
++ "vendors": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
++ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+- "rimraf": {
+- "version": "2.6.3",
+- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
++ "verror": {
++ "version": "1.10.0",
++ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
++ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
++ "requires": {
++ "assert-plus": "^1.0.0",
++ "core-util-is": "1.0.2",
++ "extsprintf": "^1.2.0"
++ }
++ },
++ "vlq": {
++ "version": "0.2.3",
++ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
++ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
++ "dev": true
++ },
++ "vm-browserify": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
++ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
++ "dev": true
++ },
++ "w3c-hr-time": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
++ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "dev": true,
+ "requires": {
+- "glob": "^7.1.3"
++ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+- "semver": {
+- "version": "5.7.1",
+- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
++ "w3c-xmlserializer": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
++ "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
++ "dev": true,
++ "requires": {
++ "domexception": "^1.0.1",
++ "webidl-conversions": "^4.0.2",
++ "xml-name-validator": "^3.0.0"
++ }
++ },
++ "wcwidth": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
++ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
++ "dev": true,
++ "requires": {
++ "defaults": "^1.0.3"
++ }
++ },
++ "webidl-conversions": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
++ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+- "shebang-command": {
+- "version": "1.2.0",
+- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
++ "whatwg-encoding": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
++ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "dev": true,
+ "requires": {
+- "shebang-regex": "^1.0.0"
++ "iconv-lite": "0.4.24"
+ }
+ },
+- "shebang-regex": {
+- "version": "1.0.0",
+- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
++ "whatwg-mimetype": {
++ "version": "2.3.0",
++ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
++ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+ "dev": true
+ },
+- "temp": {
+- "version": "0.9.0",
+- "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz",
+- "integrity": "sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==",
++ "whatwg-url": {
++ "version": "7.1.0",
++ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
++ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "dev": true,
+ "requires": {
+- "rimraf": "~2.6.2"
++ "lodash.sortby": "^4.7.0",
++ "tr46": "^1.0.1",
++ "webidl-conversions": "^4.0.2"
+ }
+ },
+ "which": {
+@@ -205,11 +7972,164 @@
+ "isexe": "^2.0.0"
+ }
+ },
++ "which-module": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
++ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
++ "dev": true
++ },
++ "word-wrap": {
++ "version": "1.2.3",
++ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
++ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
++ "dev": true
++ },
++ "wrap-ansi": {
++ "version": "5.1.0",
++ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
++ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
++ "dev": true,
++ "requires": {
++ "ansi-styles": "^3.2.0",
++ "string-width": "^3.0.0",
++ "strip-ansi": "^5.0.0"
++ },
++ "dependencies": {
++ "ansi-regex": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
++ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
++ "dev": true
++ },
++ "strip-ansi": {
++ "version": "5.2.0",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
++ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
++ "dev": true,
++ "requires": {
++ "ansi-regex": "^4.1.0"
++ }
++ }
++ }
++ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
++ },
++ "ws": {
++ "version": "5.2.2",
++ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
++ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
++ "dev": true,
++ "requires": {
++ "async-limiter": "~1.0.0"
++ }
++ },
++ "xml-name-validator": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
++ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
++ "dev": true
++ },
++ "xmlchars": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
++ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
++ "dev": true
++ },
++ "xtend": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
++ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
++ "dev": true
++ },
++ "y18n": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
++ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
++ "dev": true
++ },
++ "yallist": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
++ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
++ "dev": true
++ },
++ "yargs": {
++ "version": "14.2.3",
++ "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
++ "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
++ "dev": true,
++ "requires": {
++ "cliui": "^5.0.0",
++ "decamelize": "^1.2.0",
++ "find-up": "^3.0.0",
++ "get-caller-file": "^2.0.1",
++ "require-directory": "^2.1.1",
++ "require-main-filename": "^2.0.0",
++ "set-blocking": "^2.0.0",
++ "string-width": "^3.0.0",
++ "which-module": "^2.0.0",
++ "y18n": "^4.0.0",
++ "yargs-parser": "^15.0.1"
++ },
++ "dependencies": {
++ "find-up": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
++ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
++ "dev": true,
++ "requires": {
++ "locate-path": "^3.0.0"
++ }
++ },
++ "locate-path": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
++ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
++ "dev": true,
++ "requires": {
++ "p-locate": "^3.0.0",
++ "path-exists": "^3.0.0"
++ }
++ },
++ "p-limit": {
++ "version": "2.3.0",
++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
++ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
++ "dev": true,
++ "requires": {
++ "p-try": "^2.0.0"
++ }
++ },
++ "p-locate": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
++ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
++ "dev": true,
++ "requires": {
++ "p-limit": "^2.0.0"
++ }
++ },
++ "p-try": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
++ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
++ "dev": true
++ }
++ }
++ },
++ "yargs-parser": {
++ "version": "15.0.1",
++ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
++ "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
++ "dev": true,
++ "requires": {
++ "camelcase": "^5.0.0",
++ "decamelize": "^1.2.0"
++ }
+ }
+ }
+ }
+diff --git a/src/Api.elm b/src/Api.elm
+index 82e5f6c..bd8c516 100644
+--- a/src/Api.elm
++++ b/src/Api.elm
+@@ -36,7 +36,7 @@ init url =
+ { url | host = "api.codenamesgreen.com", path = "", query = Nothing, fragment = Nothing }
+
+ _ ->
+- { url | host = "api." ++ url.host, path = "", query = Nothing, fragment = Nothing }
++ { url | host = url.host, path = "/api", query = Nothing, fragment = Nothing }
+ in
+ { baseUrl = baseUrl }
+
+@@ -80,7 +80,7 @@ type alias Index =
+
+ endpointUrl : Url.Url -> String -> String
+ endpointUrl baseUrl path =
+- { baseUrl | path = path }
++ { baseUrl | path = baseUrl.path ++ path }
+ |> Url.toString
+
+
diff --git a/systems/eldiron/websites/games/codenames/default.nix b/systems/eldiron/websites/games/codenames/default.nix
new file mode 100644
index 0000000..7f09cc3
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/default.nix
@@ -0,0 +1,76 @@
+{ config, lib, pkgs, ... }:
+let
+ greenapid = pkgs.callPackage ./greenapid.nix {};
+ frontend = pkgs.callPackage ./frontend.nix { nodeEnv = pkgs.callPackage pkgs.mylibs.nodeEnv {}; };
+ wordlists = pkgs.runCommand "wordlists" {} ''
+ mkdir -p $out
+ cp -r ${./wordlists} $out/wordlists
+ '';
+ cfg = config.myServices.websites.games.codenames;
+in
+{
+ options.myServices.websites.games.codenames.enable = lib.mkEnableOption "Enable Codenames game";
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.games.subdomains.codenames = with config.myServices.dns.helpers;
+ ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.codenames = {
+ file.datetime = "2022-08-27T14:08:00";
+ service = {
+ name = "Codenames Green";
+ description = "Co-op codenames app";
+ website = "https://codenames.games.immae.eu/";
+ logo = "https://codenames.games.immae.eu/images/apple-touch-icon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Codenames Green";
+ website = "https://www.codenamesgreen.com/";
+ license.url = "https://github.com/jbowens/codenamesgreen/blob/master/package.json";
+ license.name = "MIT";
+ version = greenapid.version;
+ source.url = "https://github.com/jbowens/codenamesgreen";
+ };
+ };
+ systemd.services.codenames_api = {
+ description = "Api for codenames game";
+ wantedBy = [ "multi-user.target" ];
+ script = "${greenapid}/bin/greenapid";
+ postStart = ''
+ sleep 5;
+ chown :wwwrun /run/codenamesgreen/socket.sock
+ chmod g+w /run/codenamesgreen/socket.sock
+ '';
+ serviceConfig = {
+ User = "codenames";
+ DynamicUser = true;
+ SupplementaryGroups = [ "wwwrun" ];
+ Type = "simple";
+ RuntimeDirectory = "codenamesgreen";
+ WorkingDirectory = builtins.toString wordlists;
+ };
+ };
+
+ security.acme.certs.games.domain = "games.immae.eu";
+ security.acme.certs.games.extraDomainNames = [ "codenames.games.immae.eu" ];
+ services.websites.env.tools.vhostConfs.games_codenames = {
+ certName = "games";
+ hosts = [ "codenames.games.immae.eu" ];
+ root = frontend;
+ extraConfig = [
+ ''
+ ProxyPass /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/
+ ProxyPassReverse /api/ unix:///run/codenamesgreen/socket.sock|http://codenames.games.immae.eu/
+
+
+ FallbackResource index.html
+
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/games/codenames/deps.nix b/systems/eldiron/websites/games/codenames/deps.nix
new file mode 100644
index 0000000..fddec2e
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/deps.nix
@@ -0,0 +1,11 @@
+[
+ {
+ goPackagePath = "github.com/jbowens/dictionary";
+ fetch = {
+ type = "git";
+ url = "https://github.com/jbowens/dictionary";
+ rev = "229cf68df1a675e7a2462c4028d7df4abfd98854";
+ sha256 = "0gyg3xcx4xqx6w8id2dq5s280mdfhs6yc9flg2jbj8jff040s28w";
+ };
+ }
+]
diff --git a/systems/eldiron/websites/games/codenames/elm-srcs.nix b/systems/eldiron/websites/games/codenames/elm-srcs.nix
new file mode 100644
index 0000000..031e7ff
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/elm-srcs.nix
@@ -0,0 +1,77 @@
+{
+
+ "elm/json" = {
+ sha256 = "0kjwrz195z84kwywaxhhlnpl3p251qlbm5iz6byd6jky2crmyqyh";
+ version = "1.1.3";
+ };
+
+ "perzanko/elm-loading" = {
+ sha256 = "0fs7ly4jib4gwhh157g91hgjryqja096i6jhbsq7qb4k4r3c5l80";
+ version = "2.0.4";
+ };
+
+ "elm/html" = {
+ sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
+ version = "1.0.0";
+ };
+
+ "elm/browser" = {
+ sha256 = "1zlmx672glg7fdgkvh5jm47y85pv7pdfr5mkhg6x7ar6k000vyka";
+ version = "1.0.1";
+ };
+
+ "elm/core" = {
+ sha256 = "1l0qdbczw91kzz8sx5d5zwz9x662bspy7p21dsr3f2rigxiix2as";
+ version = "1.0.2";
+ };
+
+ "elm/url" = {
+ sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
+ version = "1.0.0";
+ };
+
+ "elm/http" = {
+ sha256 = "008bs76mnp48b4dw8qwjj4fyvzbxvlrl4xpa2qh1gg2kfwyw56v1";
+ version = "2.0.0";
+ };
+
+ "elm/bytes" = {
+ sha256 = "02ywbf52akvxclpxwj9n04jydajcbsbcbsnjs53yjc5lwck3abwj";
+ version = "1.0.8";
+ };
+
+ "elm/file" = {
+ sha256 = "1rljcb41dl97myidyjih2yliyzddkr2m7n74x7gg46rcw4jl0ny8";
+ version = "1.0.5";
+ };
+
+ "rtfeldman/elm-hex" = {
+ sha256 = "1y0aa16asvwdqmgbskh5iba6psp43lkcjjw9mgzj3gsrg33lp00d";
+ version = "1.0.0";
+ };
+
+ "rtfeldman/elm-css" = {
+ sha256 = "0nxiyxyw3kw55whkpwhrcgc0dr6a8zlm2nqvsaqdw6mzkykg0ba6";
+ version = "16.1.0";
+ };
+
+ "elm/time" = {
+ sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
+ version = "1.0.0";
+ };
+
+ "elm/virtual-dom" = {
+ sha256 = "0q1v5gi4g336bzz1lgwpn5b1639lrn63d8y6k6pimcyismp2i1yg";
+ version = "1.0.2";
+ };
+
+ "elm-explorations/test" = {
+ sha256 = "0rpynrm9irgzyynd1bws0xspww5lnwv7w7998750jb8kcrw39h0n";
+ version = "1.0.0";
+ };
+
+ "elm/random" = {
+ sha256 = "138n2455wdjwa657w6sjq18wx2r0k60ibpc4frhbqr50sncxrfdl";
+ version = "1.0.0";
+ };
+}
diff --git a/systems/eldiron/websites/games/codenames/frontend.nix b/systems/eldiron/websites/games/codenames/frontend.nix
new file mode 100644
index 0000000..0f29070
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/frontend.nix
@@ -0,0 +1,22 @@
+{ callPackage, runCommand, nodejs, utillinux, nodeEnv, nodePackages, elmPackages }:
+let
+ codenamesgreen_packages = callPackage ./node-packages.nix { inherit nodeEnv; };
+in
+runCommand "frontend" {
+ buildInputs = [
+ nodejs utillinux nodePackages.parcel-bundler elmPackages.elm
+ ];
+} ''
+ cp -a ${codenamesgreen_packages.package}/lib/node_modules/codenamesgreen .
+ chmod -R u+w codenamesgreen
+ cd codenamesgreen
+ ${elmPackages.fetchElmDeps {
+ elmPackages = import ./elm-srcs.nix;
+ registryDat = ./registry.dat;
+ elmVersion = elmPackages.elm.version;
+ }}
+ npx parcel build src/index.html
+ cp -a dist $out
+ cp -R src/images $out
+ cp src/robots.txt $out
+''
diff --git a/systems/eldiron/websites/games/codenames/greenapid.nix b/systems/eldiron/websites/games/codenames/greenapid.nix
new file mode 100644
index 0000000..52bda3b
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/greenapid.nix
@@ -0,0 +1,18 @@
+{ buildGoPackage, fetchFromGitHub, socket ? "/run/codenamesgreen/socket.sock" }:
+buildGoPackage rec {
+ pname = "greenapid";
+ version = "master-6d014d0";
+
+ goPackagePath = "github.com/jbowens/codenamesgreen";
+ subPackages = [ "cmd/greenapid" ];
+
+ src = fetchFromGitHub {
+ owner = "jbowens";
+ repo = "codenamesgreen";
+ rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b";
+ sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0";
+ };
+
+ patches = [ ./greenapid.patch ];
+ goDeps = ./deps.nix;
+}
diff --git a/systems/eldiron/websites/games/codenames/greenapid.patch b/systems/eldiron/websites/games/codenames/greenapid.patch
new file mode 100644
index 0000000..21a9fad
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/greenapid.patch
@@ -0,0 +1,39 @@
+diff --git a/cmd/greenapid/main.go b/cmd/greenapid/main.go
+index 86499e9..1589323 100644
+--- a/cmd/greenapid/main.go
++++ b/cmd/greenapid/main.go
+@@ -1,6 +1,7 @@
+ package main
+
+ import (
++ "net"
+ "net/http"
+
+ "github.com/jbowens/codenamesgreen/gameapi"
+@@ -13,6 +14,12 @@ func main() {
+ }
+
+ h := gameapi.Handler(wordLists)
+- err = http.ListenAndServe(":8080", h)
++ server := &http.Server{Handler: h}
++ ln, err := net.Listen("unix", "/run/codenamesgreen/socket.sock")
++ if err != nil {
++ panic(err)
++ }
++
++ err = server.Serve(ln)
+ panic(err)
+ }
+diff --git a/gameapi/handler.go b/gameapi/handler.go
+index d67cf94..108e7e1 100644
+--- a/gameapi/handler.go
++++ b/gameapi/handler.go
+@@ -101,7 +101,7 @@ func (h *handler) handleIndex(rw http.ResponseWriter, req *http.Request) {
+ for {
+ w1 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))])
+ w2 := strings.ToLower(h.allWords[h.rand.Int63n(int64(len(h.allWords)))])
+- id := fmt.Sprintf("%s-%s", w1, w2)
++ id = fmt.Sprintf("%s-%s", w1, w2)
+ if _, ok := h.games[id]; !ok {
+ break
+ }
diff --git a/systems/eldiron/websites/games/codenames/immae-assets.patch b/systems/eldiron/websites/games/codenames/immae-assets.patch
new file mode 100644
index 0000000..c53ab97
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/immae-assets.patch
@@ -0,0 +1,15 @@
+diff --git a/src/index.html b/src/index.html
+index 2559a37..84a0d64 100644
+--- a/src/index.html
++++ b/src/index.html
+@@ -6,8 +6,8 @@
+
+
+
+-
+-
++
++
+
+
+
diff --git a/systems/eldiron/websites/games/codenames/node-packages.nix b/systems/eldiron/websites/games/codenames/node-packages.nix
new file mode 100644
index 0000000..1fb2db3
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/node-packages.nix
@@ -0,0 +1,7622 @@
+# This file has been generated by node2nix 1.8.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, fetchFromGitHub, runCommand, globalBuildInputs ? []}:
+
+let
+ sources = {
+ "@babel/code-frame-7.0.0" = {
+ name = "_at_babel_slash_code-frame";
+ packageName = "@babel/code-frame";
+ version = "7.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz";
+ sha512 = "OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==";
+ };
+ };
+ "@babel/code-frame-7.8.3" = {
+ name = "_at_babel_slash_code-frame";
+ packageName = "@babel/code-frame";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz";
+ sha512 = "a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==";
+ };
+ };
+ "@babel/core-7.3.4" = {
+ name = "_at_babel_slash_core";
+ packageName = "@babel/core";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz";
+ sha512 = "jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==";
+ };
+ };
+ "@babel/generator-7.3.4" = {
+ name = "_at_babel_slash_generator";
+ packageName = "@babel/generator";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz";
+ sha512 = "8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==";
+ };
+ };
+ "@babel/generator-7.9.5" = {
+ name = "_at_babel_slash_generator";
+ packageName = "@babel/generator";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz";
+ sha512 = "GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==";
+ };
+ };
+ "@babel/helper-annotate-as-pure-7.8.3" = {
+ name = "_at_babel_slash_helper-annotate-as-pure";
+ packageName = "@babel/helper-annotate-as-pure";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz";
+ sha512 = "6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==";
+ };
+ };
+ "@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" = {
+ name = "_at_babel_slash_helper-builder-binary-assignment-operator-visitor";
+ packageName = "@babel/helper-builder-binary-assignment-operator-visitor";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz";
+ sha512 = "5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==";
+ };
+ };
+ "@babel/helper-builder-react-jsx-7.9.0" = {
+ name = "_at_babel_slash_helper-builder-react-jsx";
+ packageName = "@babel/helper-builder-react-jsx";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz";
+ sha512 = "weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==";
+ };
+ };
+ "@babel/helper-create-regexp-features-plugin-7.8.8" = {
+ name = "_at_babel_slash_helper-create-regexp-features-plugin";
+ packageName = "@babel/helper-create-regexp-features-plugin";
+ version = "7.8.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz";
+ sha512 = "LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==";
+ };
+ };
+ "@babel/helper-define-map-7.8.3" = {
+ name = "_at_babel_slash_helper-define-map";
+ packageName = "@babel/helper-define-map";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz";
+ sha512 = "PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==";
+ };
+ };
+ "@babel/helper-explode-assignable-expression-7.8.3" = {
+ name = "_at_babel_slash_helper-explode-assignable-expression";
+ packageName = "@babel/helper-explode-assignable-expression";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz";
+ sha512 = "N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==";
+ };
+ };
+ "@babel/helper-function-name-7.9.5" = {
+ name = "_at_babel_slash_helper-function-name";
+ packageName = "@babel/helper-function-name";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz";
+ sha512 = "JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==";
+ };
+ };
+ "@babel/helper-get-function-arity-7.8.3" = {
+ name = "_at_babel_slash_helper-get-function-arity";
+ packageName = "@babel/helper-get-function-arity";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz";
+ sha512 = "FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==";
+ };
+ };
+ "@babel/helper-hoist-variables-7.8.3" = {
+ name = "_at_babel_slash_helper-hoist-variables";
+ packageName = "@babel/helper-hoist-variables";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz";
+ sha512 = "ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==";
+ };
+ };
+ "@babel/helper-member-expression-to-functions-7.8.3" = {
+ name = "_at_babel_slash_helper-member-expression-to-functions";
+ packageName = "@babel/helper-member-expression-to-functions";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz";
+ sha512 = "fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==";
+ };
+ };
+ "@babel/helper-module-imports-7.8.3" = {
+ name = "_at_babel_slash_helper-module-imports";
+ packageName = "@babel/helper-module-imports";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz";
+ sha512 = "R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==";
+ };
+ };
+ "@babel/helper-module-transforms-7.9.0" = {
+ name = "_at_babel_slash_helper-module-transforms";
+ packageName = "@babel/helper-module-transforms";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz";
+ sha512 = "0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==";
+ };
+ };
+ "@babel/helper-optimise-call-expression-7.8.3" = {
+ name = "_at_babel_slash_helper-optimise-call-expression";
+ packageName = "@babel/helper-optimise-call-expression";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz";
+ sha512 = "Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==";
+ };
+ };
+ "@babel/helper-plugin-utils-7.8.3" = {
+ name = "_at_babel_slash_helper-plugin-utils";
+ packageName = "@babel/helper-plugin-utils";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz";
+ sha512 = "j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==";
+ };
+ };
+ "@babel/helper-regex-7.8.3" = {
+ name = "_at_babel_slash_helper-regex";
+ packageName = "@babel/helper-regex";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz";
+ sha512 = "BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==";
+ };
+ };
+ "@babel/helper-remap-async-to-generator-7.8.3" = {
+ name = "_at_babel_slash_helper-remap-async-to-generator";
+ packageName = "@babel/helper-remap-async-to-generator";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz";
+ sha512 = "kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==";
+ };
+ };
+ "@babel/helper-replace-supers-7.8.6" = {
+ name = "_at_babel_slash_helper-replace-supers";
+ packageName = "@babel/helper-replace-supers";
+ version = "7.8.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz";
+ sha512 = "PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==";
+ };
+ };
+ "@babel/helper-simple-access-7.8.3" = {
+ name = "_at_babel_slash_helper-simple-access";
+ packageName = "@babel/helper-simple-access";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz";
+ sha512 = "VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==";
+ };
+ };
+ "@babel/helper-split-export-declaration-7.8.3" = {
+ name = "_at_babel_slash_helper-split-export-declaration";
+ packageName = "@babel/helper-split-export-declaration";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz";
+ sha512 = "3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==";
+ };
+ };
+ "@babel/helper-validator-identifier-7.9.5" = {
+ name = "_at_babel_slash_helper-validator-identifier";
+ packageName = "@babel/helper-validator-identifier";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz";
+ sha512 = "/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==";
+ };
+ };
+ "@babel/helper-wrap-function-7.8.3" = {
+ name = "_at_babel_slash_helper-wrap-function";
+ packageName = "@babel/helper-wrap-function";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz";
+ sha512 = "LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==";
+ };
+ };
+ "@babel/helpers-7.9.2" = {
+ name = "_at_babel_slash_helpers";
+ packageName = "@babel/helpers";
+ version = "7.9.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz";
+ sha512 = "JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==";
+ };
+ };
+ "@babel/highlight-7.9.0" = {
+ name = "_at_babel_slash_highlight";
+ packageName = "@babel/highlight";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz";
+ sha512 = "lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==";
+ };
+ };
+ "@babel/parser-7.3.4" = {
+ name = "_at_babel_slash_parser";
+ packageName = "@babel/parser";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz";
+ sha512 = "tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==";
+ };
+ };
+ "@babel/parser-7.9.4" = {
+ name = "_at_babel_slash_parser";
+ packageName = "@babel/parser";
+ version = "7.9.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz";
+ sha512 = "bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==";
+ };
+ };
+ "@babel/plugin-proposal-async-generator-functions-7.8.3" = {
+ name = "_at_babel_slash_plugin-proposal-async-generator-functions";
+ packageName = "@babel/plugin-proposal-async-generator-functions";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz";
+ sha512 = "NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==";
+ };
+ };
+ "@babel/plugin-proposal-json-strings-7.8.3" = {
+ name = "_at_babel_slash_plugin-proposal-json-strings";
+ packageName = "@babel/plugin-proposal-json-strings";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz";
+ sha512 = "KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==";
+ };
+ };
+ "@babel/plugin-proposal-object-rest-spread-7.9.5" = {
+ name = "_at_babel_slash_plugin-proposal-object-rest-spread";
+ packageName = "@babel/plugin-proposal-object-rest-spread";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz";
+ sha512 = "VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==";
+ };
+ };
+ "@babel/plugin-proposal-optional-catch-binding-7.8.3" = {
+ name = "_at_babel_slash_plugin-proposal-optional-catch-binding";
+ packageName = "@babel/plugin-proposal-optional-catch-binding";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz";
+ sha512 = "0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==";
+ };
+ };
+ "@babel/plugin-proposal-unicode-property-regex-7.8.8" = {
+ name = "_at_babel_slash_plugin-proposal-unicode-property-regex";
+ packageName = "@babel/plugin-proposal-unicode-property-regex";
+ version = "7.8.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz";
+ sha512 = "EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==";
+ };
+ };
+ "@babel/plugin-syntax-async-generators-7.8.4" = {
+ name = "_at_babel_slash_plugin-syntax-async-generators";
+ packageName = "@babel/plugin-syntax-async-generators";
+ version = "7.8.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz";
+ sha512 = "tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==";
+ };
+ };
+ "@babel/plugin-syntax-flow-7.8.3" = {
+ name = "_at_babel_slash_plugin-syntax-flow";
+ packageName = "@babel/plugin-syntax-flow";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz";
+ sha512 = "innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg==";
+ };
+ };
+ "@babel/plugin-syntax-json-strings-7.8.3" = {
+ name = "_at_babel_slash_plugin-syntax-json-strings";
+ packageName = "@babel/plugin-syntax-json-strings";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz";
+ sha512 = "lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==";
+ };
+ };
+ "@babel/plugin-syntax-jsx-7.8.3" = {
+ name = "_at_babel_slash_plugin-syntax-jsx";
+ packageName = "@babel/plugin-syntax-jsx";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz";
+ sha512 = "WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==";
+ };
+ };
+ "@babel/plugin-syntax-object-rest-spread-7.8.3" = {
+ name = "_at_babel_slash_plugin-syntax-object-rest-spread";
+ packageName = "@babel/plugin-syntax-object-rest-spread";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz";
+ sha512 = "XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==";
+ };
+ };
+ "@babel/plugin-syntax-optional-catch-binding-7.8.3" = {
+ name = "_at_babel_slash_plugin-syntax-optional-catch-binding";
+ packageName = "@babel/plugin-syntax-optional-catch-binding";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz";
+ sha512 = "6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==";
+ };
+ };
+ "@babel/plugin-transform-arrow-functions-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-arrow-functions";
+ packageName = "@babel/plugin-transform-arrow-functions";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz";
+ sha512 = "0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==";
+ };
+ };
+ "@babel/plugin-transform-async-to-generator-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-async-to-generator";
+ packageName = "@babel/plugin-transform-async-to-generator";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz";
+ sha512 = "imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==";
+ };
+ };
+ "@babel/plugin-transform-block-scoped-functions-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-block-scoped-functions";
+ packageName = "@babel/plugin-transform-block-scoped-functions";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz";
+ sha512 = "vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==";
+ };
+ };
+ "@babel/plugin-transform-block-scoping-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-block-scoping";
+ packageName = "@babel/plugin-transform-block-scoping";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz";
+ sha512 = "pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==";
+ };
+ };
+ "@babel/plugin-transform-classes-7.9.5" = {
+ name = "_at_babel_slash_plugin-transform-classes";
+ packageName = "@babel/plugin-transform-classes";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz";
+ sha512 = "x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==";
+ };
+ };
+ "@babel/plugin-transform-computed-properties-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-computed-properties";
+ packageName = "@babel/plugin-transform-computed-properties";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz";
+ sha512 = "O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==";
+ };
+ };
+ "@babel/plugin-transform-destructuring-7.9.5" = {
+ name = "_at_babel_slash_plugin-transform-destructuring";
+ packageName = "@babel/plugin-transform-destructuring";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz";
+ sha512 = "j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==";
+ };
+ };
+ "@babel/plugin-transform-dotall-regex-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-dotall-regex";
+ packageName = "@babel/plugin-transform-dotall-regex";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz";
+ sha512 = "kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==";
+ };
+ };
+ "@babel/plugin-transform-duplicate-keys-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-duplicate-keys";
+ packageName = "@babel/plugin-transform-duplicate-keys";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz";
+ sha512 = "s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==";
+ };
+ };
+ "@babel/plugin-transform-exponentiation-operator-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-exponentiation-operator";
+ packageName = "@babel/plugin-transform-exponentiation-operator";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz";
+ sha512 = "zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==";
+ };
+ };
+ "@babel/plugin-transform-flow-strip-types-7.3.4" = {
+ name = "_at_babel_slash_plugin-transform-flow-strip-types";
+ packageName = "@babel/plugin-transform-flow-strip-types";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz";
+ sha512 = "PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA==";
+ };
+ };
+ "@babel/plugin-transform-for-of-7.9.0" = {
+ name = "_at_babel_slash_plugin-transform-for-of";
+ packageName = "@babel/plugin-transform-for-of";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz";
+ sha512 = "lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==";
+ };
+ };
+ "@babel/plugin-transform-function-name-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-function-name";
+ packageName = "@babel/plugin-transform-function-name";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz";
+ sha512 = "rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==";
+ };
+ };
+ "@babel/plugin-transform-literals-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-literals";
+ packageName = "@babel/plugin-transform-literals";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz";
+ sha512 = "3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==";
+ };
+ };
+ "@babel/plugin-transform-modules-amd-7.9.0" = {
+ name = "_at_babel_slash_plugin-transform-modules-amd";
+ packageName = "@babel/plugin-transform-modules-amd";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz";
+ sha512 = "vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==";
+ };
+ };
+ "@babel/plugin-transform-modules-commonjs-7.2.0" = {
+ name = "_at_babel_slash_plugin-transform-modules-commonjs";
+ packageName = "@babel/plugin-transform-modules-commonjs";
+ version = "7.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz";
+ sha512 = "V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==";
+ };
+ };
+ "@babel/plugin-transform-modules-systemjs-7.9.0" = {
+ name = "_at_babel_slash_plugin-transform-modules-systemjs";
+ packageName = "@babel/plugin-transform-modules-systemjs";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz";
+ sha512 = "FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==";
+ };
+ };
+ "@babel/plugin-transform-modules-umd-7.9.0" = {
+ name = "_at_babel_slash_plugin-transform-modules-umd";
+ packageName = "@babel/plugin-transform-modules-umd";
+ version = "7.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz";
+ sha512 = "uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==";
+ };
+ };
+ "@babel/plugin-transform-named-capturing-groups-regex-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-named-capturing-groups-regex";
+ packageName = "@babel/plugin-transform-named-capturing-groups-regex";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz";
+ sha512 = "f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==";
+ };
+ };
+ "@babel/plugin-transform-new-target-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-new-target";
+ packageName = "@babel/plugin-transform-new-target";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz";
+ sha512 = "QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==";
+ };
+ };
+ "@babel/plugin-transform-object-super-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-object-super";
+ packageName = "@babel/plugin-transform-object-super";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz";
+ sha512 = "57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==";
+ };
+ };
+ "@babel/plugin-transform-parameters-7.9.5" = {
+ name = "_at_babel_slash_plugin-transform-parameters";
+ packageName = "@babel/plugin-transform-parameters";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz";
+ sha512 = "0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==";
+ };
+ };
+ "@babel/plugin-transform-react-jsx-7.3.0" = {
+ name = "_at_babel_slash_plugin-transform-react-jsx";
+ packageName = "@babel/plugin-transform-react-jsx";
+ version = "7.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz";
+ sha512 = "a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==";
+ };
+ };
+ "@babel/plugin-transform-regenerator-7.8.7" = {
+ name = "_at_babel_slash_plugin-transform-regenerator";
+ packageName = "@babel/plugin-transform-regenerator";
+ version = "7.8.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz";
+ sha512 = "TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==";
+ };
+ };
+ "@babel/plugin-transform-shorthand-properties-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-shorthand-properties";
+ packageName = "@babel/plugin-transform-shorthand-properties";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz";
+ sha512 = "I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==";
+ };
+ };
+ "@babel/plugin-transform-spread-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-spread";
+ packageName = "@babel/plugin-transform-spread";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz";
+ sha512 = "CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==";
+ };
+ };
+ "@babel/plugin-transform-sticky-regex-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-sticky-regex";
+ packageName = "@babel/plugin-transform-sticky-regex";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz";
+ sha512 = "9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==";
+ };
+ };
+ "@babel/plugin-transform-template-literals-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-template-literals";
+ packageName = "@babel/plugin-transform-template-literals";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz";
+ sha512 = "820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==";
+ };
+ };
+ "@babel/plugin-transform-typeof-symbol-7.8.4" = {
+ name = "_at_babel_slash_plugin-transform-typeof-symbol";
+ packageName = "@babel/plugin-transform-typeof-symbol";
+ version = "7.8.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz";
+ sha512 = "2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==";
+ };
+ };
+ "@babel/plugin-transform-unicode-regex-7.8.3" = {
+ name = "_at_babel_slash_plugin-transform-unicode-regex";
+ packageName = "@babel/plugin-transform-unicode-regex";
+ version = "7.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz";
+ sha512 = "+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==";
+ };
+ };
+ "@babel/preset-env-7.3.4" = {
+ name = "_at_babel_slash_preset-env";
+ packageName = "@babel/preset-env";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz";
+ sha512 = "2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==";
+ };
+ };
+ "@babel/runtime-7.3.4" = {
+ name = "_at_babel_slash_runtime";
+ packageName = "@babel/runtime";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz";
+ sha512 = "IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==";
+ };
+ };
+ "@babel/runtime-7.9.2" = {
+ name = "_at_babel_slash_runtime";
+ packageName = "@babel/runtime";
+ version = "7.9.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz";
+ sha512 = "NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==";
+ };
+ };
+ "@babel/template-7.2.2" = {
+ name = "_at_babel_slash_template";
+ packageName = "@babel/template";
+ version = "7.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz";
+ sha512 = "zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==";
+ };
+ };
+ "@babel/template-7.8.6" = {
+ name = "_at_babel_slash_template";
+ packageName = "@babel/template";
+ version = "7.8.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz";
+ sha512 = "zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==";
+ };
+ };
+ "@babel/traverse-7.3.4" = {
+ name = "_at_babel_slash_traverse";
+ packageName = "@babel/traverse";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz";
+ sha512 = "TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==";
+ };
+ };
+ "@babel/traverse-7.9.5" = {
+ name = "_at_babel_slash_traverse";
+ packageName = "@babel/traverse";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz";
+ sha512 = "c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==";
+ };
+ };
+ "@babel/types-7.3.4" = {
+ name = "_at_babel_slash_types";
+ packageName = "@babel/types";
+ version = "7.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz";
+ sha512 = "WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==";
+ };
+ };
+ "@babel/types-7.9.5" = {
+ name = "_at_babel_slash_types";
+ packageName = "@babel/types";
+ version = "7.9.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz";
+ sha512 = "XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==";
+ };
+ };
+ "@iarna/toml-2.2.5" = {
+ name = "_at_iarna_slash_toml";
+ packageName = "@iarna/toml";
+ version = "2.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz";
+ sha512 = "trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==";
+ };
+ };
+ "@mrmlnc/readdir-enhanced-2.2.1" = {
+ name = "_at_mrmlnc_slash_readdir-enhanced";
+ packageName = "@mrmlnc/readdir-enhanced";
+ version = "2.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz";
+ sha512 = "bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==";
+ };
+ };
+ "@nodelib/fs.stat-1.1.3" = {
+ name = "_at_nodelib_slash_fs.stat";
+ packageName = "@nodelib/fs.stat";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz";
+ sha512 = "shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==";
+ };
+ };
+ "@parcel/fs-1.11.0" = {
+ name = "_at_parcel_slash_fs";
+ packageName = "@parcel/fs";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz";
+ sha512 = "86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==";
+ };
+ };
+ "@parcel/logger-1.11.1" = {
+ name = "_at_parcel_slash_logger";
+ packageName = "@parcel/logger";
+ version = "1.11.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz";
+ sha512 = "9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==";
+ };
+ };
+ "@parcel/utils-1.11.0" = {
+ name = "_at_parcel_slash_utils";
+ packageName = "@parcel/utils";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz";
+ sha512 = "cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==";
+ };
+ };
+ "@parcel/watcher-1.12.1" = {
+ name = "_at_parcel_slash_watcher";
+ packageName = "@parcel/watcher";
+ version = "1.12.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz";
+ sha512 = "od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==";
+ };
+ };
+ "@parcel/workers-1.11.0" = {
+ name = "_at_parcel_slash_workers";
+ packageName = "@parcel/workers";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz";
+ sha512 = "USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==";
+ };
+ };
+ "@types/q-1.5.2" = {
+ name = "_at_types_slash_q";
+ packageName = "@types/q";
+ version = "1.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz";
+ sha512 = "ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==";
+ };
+ };
+ "abab-2.0.3" = {
+ name = "abab";
+ packageName = "abab";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz";
+ sha512 = "tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==";
+ };
+ };
+ "abbrev-1.1.1" = {
+ name = "abbrev";
+ packageName = "abbrev";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+ sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+ };
+ };
+ "acorn-6.4.1" = {
+ name = "acorn";
+ packageName = "acorn";
+ version = "6.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz";
+ sha512 = "ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==";
+ };
+ };
+ "acorn-7.1.1" = {
+ name = "acorn";
+ packageName = "acorn";
+ version = "7.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz";
+ sha512 = "add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==";
+ };
+ };
+ "acorn-globals-4.3.4" = {
+ name = "acorn-globals";
+ packageName = "acorn-globals";
+ version = "4.3.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz";
+ sha512 = "clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==";
+ };
+ };
+ "acorn-walk-6.2.0" = {
+ name = "acorn-walk";
+ packageName = "acorn-walk";
+ version = "6.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz";
+ sha512 = "7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==";
+ };
+ };
+ "ajv-6.12.2" = {
+ name = "ajv";
+ packageName = "ajv";
+ version = "6.12.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz";
+ sha512 = "k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==";
+ };
+ };
+ "alphanum-sort-1.0.2" = {
+ name = "alphanum-sort";
+ packageName = "alphanum-sort";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
+ sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
+ };
+ };
+ "ansi-regex-2.1.1" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+ sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+ };
+ };
+ "ansi-regex-3.0.0" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
+ sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+ };
+ };
+ "ansi-regex-4.1.0" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
+ sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+ };
+ };
+ "ansi-styles-2.2.1" = {
+ name = "ansi-styles";
+ packageName = "ansi-styles";
+ version = "2.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
+ sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+ };
+ };
+ "ansi-styles-3.2.1" = {
+ name = "ansi-styles";
+ packageName = "ansi-styles";
+ version = "3.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+ sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+ };
+ };
+ "ansi-to-html-0.6.14" = {
+ name = "ansi-to-html";
+ packageName = "ansi-to-html";
+ version = "0.6.14";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.14.tgz";
+ sha512 = "7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA==";
+ };
+ };
+ "anymatch-2.0.0" = {
+ name = "anymatch";
+ packageName = "anymatch";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz";
+ sha512 = "5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==";
+ };
+ };
+ "argparse-1.0.10" = {
+ name = "argparse";
+ packageName = "argparse";
+ version = "1.0.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+ sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+ };
+ };
+ "arr-diff-4.0.0" = {
+ name = "arr-diff";
+ packageName = "arr-diff";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz";
+ sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
+ };
+ };
+ "arr-flatten-1.1.0" = {
+ name = "arr-flatten";
+ packageName = "arr-flatten";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz";
+ sha512 = "L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==";
+ };
+ };
+ "arr-union-3.1.0" = {
+ name = "arr-union";
+ packageName = "arr-union";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz";
+ sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
+ };
+ };
+ "array-equal-1.0.0" = {
+ name = "array-equal";
+ packageName = "array-equal";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz";
+ sha1 = "8c2a5ef2472fd9ea742b04c77a75093ba2757c93";
+ };
+ };
+ "array-unique-0.3.2" = {
+ name = "array-unique";
+ packageName = "array-unique";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz";
+ sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
+ };
+ };
+ "asn1-0.2.4" = {
+ name = "asn1";
+ packageName = "asn1";
+ version = "0.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+ sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+ };
+ };
+ "asn1.js-4.10.1" = {
+ name = "asn1.js";
+ packageName = "asn1.js";
+ version = "4.10.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz";
+ sha512 = "p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==";
+ };
+ };
+ "assert-1.5.0" = {
+ name = "assert";
+ packageName = "assert";
+ version = "1.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz";
+ sha512 = "EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==";
+ };
+ };
+ "assert-plus-1.0.0" = {
+ name = "assert-plus";
+ packageName = "assert-plus";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+ sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+ };
+ };
+ "assign-symbols-1.0.0" = {
+ name = "assign-symbols";
+ packageName = "assign-symbols";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz";
+ sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
+ };
+ };
+ "async-each-1.0.3" = {
+ name = "async-each";
+ packageName = "async-each";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz";
+ sha512 = "z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==";
+ };
+ };
+ "async-limiter-1.0.1" = {
+ name = "async-limiter";
+ packageName = "async-limiter";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz";
+ sha512 = "csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==";
+ };
+ };
+ "asynckit-0.4.0" = {
+ name = "asynckit";
+ packageName = "asynckit";
+ version = "0.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+ sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+ };
+ };
+ "atob-2.1.2" = {
+ name = "atob";
+ packageName = "atob";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz";
+ sha512 = "Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==";
+ };
+ };
+ "aws-sign2-0.7.0" = {
+ name = "aws-sign2";
+ packageName = "aws-sign2";
+ version = "0.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+ sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+ };
+ };
+ "aws4-1.9.1" = {
+ name = "aws4";
+ packageName = "aws4";
+ version = "1.9.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz";
+ sha512 = "wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==";
+ };
+ };
+ "babel-plugin-dynamic-import-node-2.3.3" = {
+ name = "babel-plugin-dynamic-import-node";
+ packageName = "babel-plugin-dynamic-import-node";
+ version = "2.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
+ sha512 = "jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==";
+ };
+ };
+ "babel-runtime-6.26.0" = {
+ name = "babel-runtime";
+ packageName = "babel-runtime";
+ version = "6.26.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
+ sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
+ };
+ };
+ "babel-types-6.26.0" = {
+ name = "babel-types";
+ packageName = "babel-types";
+ version = "6.26.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz";
+ sha1 = "a3b073f94ab49eb6fa55cd65227a334380632497";
+ };
+ };
+ "babylon-walk-1.0.2" = {
+ name = "babylon-walk";
+ packageName = "babylon-walk";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz";
+ sha1 = "3b15a5ddbb482a78b4ce9c01c8ba181702d9d6ce";
+ };
+ };
+ "balanced-match-1.0.0" = {
+ name = "balanced-match";
+ packageName = "balanced-match";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+ sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+ };
+ };
+ "base-0.11.2" = {
+ name = "base";
+ packageName = "base";
+ version = "0.11.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/base/-/base-0.11.2.tgz";
+ sha512 = "5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==";
+ };
+ };
+ "base64-js-1.3.1" = {
+ name = "base64-js";
+ packageName = "base64-js";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz";
+ sha512 = "mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==";
+ };
+ };
+ "bcrypt-pbkdf-1.0.2" = {
+ name = "bcrypt-pbkdf";
+ packageName = "bcrypt-pbkdf";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+ sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+ };
+ };
+ "binary-extensions-1.13.1" = {
+ name = "binary-extensions";
+ packageName = "binary-extensions";
+ version = "1.13.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz";
+ sha512 = "Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==";
+ };
+ };
+ "bindings-1.5.0" = {
+ name = "bindings";
+ packageName = "bindings";
+ version = "1.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz";
+ sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==";
+ };
+ };
+ "bn.js-4.11.8" = {
+ name = "bn.js";
+ packageName = "bn.js";
+ version = "4.11.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz";
+ sha512 = "ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==";
+ };
+ };
+ "boolbase-1.0.0" = {
+ name = "boolbase";
+ packageName = "boolbase";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
+ sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
+ };
+ };
+ "brace-expansion-1.1.11" = {
+ name = "brace-expansion";
+ packageName = "brace-expansion";
+ version = "1.1.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+ sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+ };
+ };
+ "braces-2.3.2" = {
+ name = "braces";
+ packageName = "braces";
+ version = "2.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz";
+ sha512 = "aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==";
+ };
+ };
+ "brfs-1.6.1" = {
+ name = "brfs";
+ packageName = "brfs";
+ version = "1.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz";
+ sha512 = "OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==";
+ };
+ };
+ "brorand-1.1.0" = {
+ name = "brorand";
+ packageName = "brorand";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz";
+ sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
+ };
+ };
+ "browser-process-hrtime-1.0.0" = {
+ name = "browser-process-hrtime";
+ packageName = "browser-process-hrtime";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz";
+ sha512 = "9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==";
+ };
+ };
+ "browserify-aes-1.2.0" = {
+ name = "browserify-aes";
+ packageName = "browserify-aes";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz";
+ sha512 = "+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==";
+ };
+ };
+ "browserify-cipher-1.0.1" = {
+ name = "browserify-cipher";
+ packageName = "browserify-cipher";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
+ sha512 = "sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==";
+ };
+ };
+ "browserify-des-1.0.2" = {
+ name = "browserify-des";
+ packageName = "browserify-des";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz";
+ sha512 = "BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==";
+ };
+ };
+ "browserify-rsa-4.0.1" = {
+ name = "browserify-rsa";
+ packageName = "browserify-rsa";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
+ sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
+ };
+ };
+ "browserify-sign-4.0.4" = {
+ name = "browserify-sign";
+ packageName = "browserify-sign";
+ version = "4.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz";
+ sha1 = "aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298";
+ };
+ };
+ "browserify-zlib-0.2.0" = {
+ name = "browserify-zlib";
+ packageName = "browserify-zlib";
+ version = "0.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
+ sha512 = "Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==";
+ };
+ };
+ "browserslist-4.12.0" = {
+ name = "browserslist";
+ packageName = "browserslist";
+ version = "4.12.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz";
+ sha512 = "UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==";
+ };
+ };
+ "buffer-4.9.2" = {
+ name = "buffer";
+ packageName = "buffer";
+ version = "4.9.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz";
+ sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==";
+ };
+ };
+ "buffer-equal-0.0.1" = {
+ name = "buffer-equal";
+ packageName = "buffer-equal";
+ version = "0.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz";
+ sha1 = "91bc74b11ea405bc916bc6aa908faafa5b4aac4b";
+ };
+ };
+ "buffer-from-1.1.1" = {
+ name = "buffer-from";
+ packageName = "buffer-from";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+ sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+ };
+ };
+ "buffer-xor-1.0.3" = {
+ name = "buffer-xor";
+ packageName = "buffer-xor";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz";
+ sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
+ };
+ };
+ "builtin-status-codes-3.0.0" = {
+ name = "builtin-status-codes";
+ packageName = "builtin-status-codes";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
+ sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
+ };
+ };
+ "cache-base-1.0.1" = {
+ name = "cache-base";
+ packageName = "cache-base";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz";
+ sha512 = "AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==";
+ };
+ };
+ "call-me-maybe-1.0.1" = {
+ name = "call-me-maybe";
+ packageName = "call-me-maybe";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz";
+ sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b";
+ };
+ };
+ "caller-callsite-2.0.0" = {
+ name = "caller-callsite";
+ packageName = "caller-callsite";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz";
+ sha1 = "847e0fce0a223750a9a027c54b33731ad3154134";
+ };
+ };
+ "caller-path-2.0.0" = {
+ name = "caller-path";
+ packageName = "caller-path";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz";
+ sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4";
+ };
+ };
+ "callsites-2.0.0" = {
+ name = "callsites";
+ packageName = "callsites";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz";
+ sha1 = "06eb84f00eea413da86affefacbffb36093b3c50";
+ };
+ };
+ "camelcase-5.3.1" = {
+ name = "camelcase";
+ packageName = "camelcase";
+ version = "5.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz";
+ sha512 = "L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==";
+ };
+ };
+ "caniuse-api-3.0.0" = {
+ name = "caniuse-api";
+ packageName = "caniuse-api";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz";
+ sha512 = "bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==";
+ };
+ };
+ "caniuse-lite-1.0.30001048" = {
+ name = "caniuse-lite";
+ packageName = "caniuse-lite";
+ version = "1.0.30001048";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz";
+ sha512 = "g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==";
+ };
+ };
+ "caseless-0.12.0" = {
+ name = "caseless";
+ packageName = "caseless";
+ version = "0.12.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+ sha1 = "1b681c21ff84033c826543090689420d187151dc";
+ };
+ };
+ "chalk-1.1.3" = {
+ name = "chalk";
+ packageName = "chalk";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
+ sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+ };
+ };
+ "chalk-2.4.2" = {
+ name = "chalk";
+ packageName = "chalk";
+ version = "2.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
+ sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+ };
+ };
+ "chokidar-2.1.8" = {
+ name = "chokidar";
+ packageName = "chokidar";
+ version = "2.1.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz";
+ sha512 = "ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==";
+ };
+ };
+ "cipher-base-1.0.4" = {
+ name = "cipher-base";
+ packageName = "cipher-base";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz";
+ sha512 = "Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==";
+ };
+ };
+ "class-utils-0.3.6" = {
+ name = "class-utils";
+ packageName = "class-utils";
+ version = "0.3.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz";
+ sha512 = "qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==";
+ };
+ };
+ "cli-cursor-2.1.0" = {
+ name = "cli-cursor";
+ packageName = "cli-cursor";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz";
+ sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
+ };
+ };
+ "cli-spinners-1.3.1" = {
+ name = "cli-spinners";
+ packageName = "cli-spinners";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz";
+ sha512 = "1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==";
+ };
+ };
+ "cliui-5.0.0" = {
+ name = "cliui";
+ packageName = "cliui";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz";
+ sha512 = "PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==";
+ };
+ };
+ "clone-1.0.4" = {
+ name = "clone";
+ packageName = "clone";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz";
+ sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
+ };
+ };
+ "clone-2.1.2" = {
+ name = "clone";
+ packageName = "clone";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz";
+ sha1 = "1b7f4b9f591f1e8f83670401600345a02887435f";
+ };
+ };
+ "clones-1.2.0" = {
+ name = "clones";
+ packageName = "clones";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/clones/-/clones-1.2.0.tgz";
+ sha512 = "FXDYw4TjR8wgPZYui2LeTqWh1BLpfQ8lB6upMtlpDF6WlOOxghmTTxWyngdKTgozqBgKnHbTVwTE+hOHqAykuQ==";
+ };
+ };
+ "coa-2.0.2" = {
+ name = "coa";
+ packageName = "coa";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz";
+ sha512 = "q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==";
+ };
+ };
+ "collection-visit-1.0.0" = {
+ name = "collection-visit";
+ packageName = "collection-visit";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz";
+ sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
+ };
+ };
+ "color-3.1.2" = {
+ name = "color";
+ packageName = "color";
+ version = "3.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color/-/color-3.1.2.tgz";
+ sha512 = "vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==";
+ };
+ };
+ "color-convert-1.9.3" = {
+ name = "color-convert";
+ packageName = "color-convert";
+ version = "1.9.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+ sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+ };
+ };
+ "color-name-1.1.3" = {
+ name = "color-name";
+ packageName = "color-name";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+ sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+ };
+ };
+ "color-string-1.5.3" = {
+ name = "color-string";
+ packageName = "color-string";
+ version = "1.5.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz";
+ sha512 = "dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==";
+ };
+ };
+ "combined-stream-1.0.8" = {
+ name = "combined-stream";
+ packageName = "combined-stream";
+ version = "1.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+ sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+ };
+ };
+ "command-exists-1.2.9" = {
+ name = "command-exists";
+ packageName = "command-exists";
+ version = "1.2.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz";
+ sha512 = "LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==";
+ };
+ };
+ "commander-2.20.3" = {
+ name = "commander";
+ packageName = "commander";
+ version = "2.20.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+ sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+ };
+ };
+ "component-emitter-1.3.0" = {
+ name = "component-emitter";
+ packageName = "component-emitter";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz";
+ sha512 = "Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==";
+ };
+ };
+ "concat-map-0.0.1" = {
+ name = "concat-map";
+ packageName = "concat-map";
+ version = "0.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+ sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+ };
+ };
+ "concat-stream-1.6.2" = {
+ name = "concat-stream";
+ packageName = "concat-stream";
+ version = "1.6.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+ sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+ };
+ };
+ "config-chain-1.1.12" = {
+ name = "config-chain";
+ packageName = "config-chain";
+ version = "1.1.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz";
+ sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==";
+ };
+ };
+ "console-browserify-1.2.0" = {
+ name = "console-browserify";
+ packageName = "console-browserify";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz";
+ sha512 = "ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==";
+ };
+ };
+ "constants-browserify-1.0.0" = {
+ name = "constants-browserify";
+ packageName = "constants-browserify";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz";
+ sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
+ };
+ };
+ "convert-source-map-1.7.0" = {
+ name = "convert-source-map";
+ packageName = "convert-source-map";
+ version = "1.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz";
+ sha512 = "4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==";
+ };
+ };
+ "copy-descriptor-0.1.1" = {
+ name = "copy-descriptor";
+ packageName = "copy-descriptor";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+ sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
+ };
+ };
+ "core-js-2.6.11" = {
+ name = "core-js";
+ packageName = "core-js";
+ version = "2.6.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz";
+ sha512 = "5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==";
+ };
+ };
+ "core-util-is-1.0.2" = {
+ name = "core-util-is";
+ packageName = "core-util-is";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+ sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+ };
+ };
+ "cosmiconfig-5.2.1" = {
+ name = "cosmiconfig";
+ packageName = "cosmiconfig";
+ version = "5.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
+ sha512 = "H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==";
+ };
+ };
+ "create-ecdh-4.0.3" = {
+ name = "create-ecdh";
+ packageName = "create-ecdh";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz";
+ sha512 = "GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==";
+ };
+ };
+ "create-hash-1.2.0" = {
+ name = "create-hash";
+ packageName = "create-hash";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz";
+ sha512 = "z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==";
+ };
+ };
+ "create-hmac-1.1.7" = {
+ name = "create-hmac";
+ packageName = "create-hmac";
+ version = "1.1.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz";
+ sha512 = "MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==";
+ };
+ };
+ "cross-spawn-6.0.5" = {
+ name = "cross-spawn";
+ packageName = "cross-spawn";
+ version = "6.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
+ sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
+ };
+ };
+ "crypto-browserify-3.12.0" = {
+ name = "crypto-browserify";
+ packageName = "crypto-browserify";
+ version = "3.12.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
+ sha512 = "fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==";
+ };
+ };
+ "css-color-names-0.0.4" = {
+ name = "css-color-names";
+ packageName = "css-color-names";
+ version = "0.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz";
+ sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
+ };
+ };
+ "css-declaration-sorter-4.0.1" = {
+ name = "css-declaration-sorter";
+ packageName = "css-declaration-sorter";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz";
+ sha512 = "BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==";
+ };
+ };
+ "css-modules-loader-core-1.1.0" = {
+ name = "css-modules-loader-core";
+ packageName = "css-modules-loader-core";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz";
+ sha1 = "5908668294a1becd261ae0a4ce21b0b551f21d16";
+ };
+ };
+ "css-select-2.1.0" = {
+ name = "css-select";
+ packageName = "css-select";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz";
+ sha512 = "Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==";
+ };
+ };
+ "css-select-base-adapter-0.1.1" = {
+ name = "css-select-base-adapter";
+ packageName = "css-select-base-adapter";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz";
+ sha512 = "jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==";
+ };
+ };
+ "css-selector-tokenizer-0.7.2" = {
+ name = "css-selector-tokenizer";
+ packageName = "css-selector-tokenizer";
+ version = "0.7.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz";
+ sha512 = "yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==";
+ };
+ };
+ "css-tree-1.0.0-alpha.37" = {
+ name = "css-tree";
+ packageName = "css-tree";
+ version = "1.0.0-alpha.37";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz";
+ sha512 = "DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==";
+ };
+ };
+ "css-tree-1.0.0-alpha.39" = {
+ name = "css-tree";
+ packageName = "css-tree";
+ version = "1.0.0-alpha.39";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz";
+ sha512 = "7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==";
+ };
+ };
+ "css-what-3.2.1" = {
+ name = "css-what";
+ packageName = "css-what";
+ version = "3.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz";
+ sha512 = "WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==";
+ };
+ };
+ "cssesc-3.0.0" = {
+ name = "cssesc";
+ packageName = "cssesc";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz";
+ sha512 = "/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==";
+ };
+ };
+ "cssnano-4.1.10" = {
+ name = "cssnano";
+ packageName = "cssnano";
+ version = "4.1.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz";
+ sha512 = "5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==";
+ };
+ };
+ "cssnano-preset-default-4.0.7" = {
+ name = "cssnano-preset-default";
+ packageName = "cssnano-preset-default";
+ version = "4.0.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz";
+ sha512 = "x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==";
+ };
+ };
+ "cssnano-util-get-arguments-4.0.0" = {
+ name = "cssnano-util-get-arguments";
+ packageName = "cssnano-util-get-arguments";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz";
+ sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f";
+ };
+ };
+ "cssnano-util-get-match-4.0.0" = {
+ name = "cssnano-util-get-match";
+ packageName = "cssnano-util-get-match";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz";
+ sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d";
+ };
+ };
+ "cssnano-util-raw-cache-4.0.1" = {
+ name = "cssnano-util-raw-cache";
+ packageName = "cssnano-util-raw-cache";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz";
+ sha512 = "qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==";
+ };
+ };
+ "cssnano-util-same-parent-4.0.1" = {
+ name = "cssnano-util-same-parent";
+ packageName = "cssnano-util-same-parent";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz";
+ sha512 = "WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==";
+ };
+ };
+ "csso-4.0.3" = {
+ name = "csso";
+ packageName = "csso";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz";
+ sha512 = "NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==";
+ };
+ };
+ "cssom-0.3.8" = {
+ name = "cssom";
+ packageName = "cssom";
+ version = "0.3.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz";
+ sha512 = "b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==";
+ };
+ };
+ "cssstyle-1.4.0" = {
+ name = "cssstyle";
+ packageName = "cssstyle";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz";
+ sha512 = "GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==";
+ };
+ };
+ "dashdash-1.14.1" = {
+ name = "dashdash";
+ packageName = "dashdash";
+ version = "1.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+ sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+ };
+ };
+ "data-urls-1.1.0" = {
+ name = "data-urls";
+ packageName = "data-urls";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz";
+ sha512 = "YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==";
+ };
+ };
+ "deasync-0.1.19" = {
+ name = "deasync";
+ packageName = "deasync";
+ version = "0.1.19";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/deasync/-/deasync-0.1.19.tgz";
+ sha512 = "oh3MRktfnPlLysCPpBpKZZzb4cUC/p0aA3SyRGp15lN30juJBTo/CiD0d4fR+f1kBtUQoJj1NE9RPNWQ7BQ9Mg==";
+ };
+ };
+ "debug-2.6.9" = {
+ name = "debug";
+ packageName = "debug";
+ version = "2.6.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+ sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+ };
+ };
+ "debug-4.1.1" = {
+ name = "debug";
+ packageName = "debug";
+ version = "4.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz";
+ sha512 = "pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==";
+ };
+ };
+ "decamelize-1.2.0" = {
+ name = "decamelize";
+ packageName = "decamelize";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz";
+ sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+ };
+ };
+ "decode-uri-component-0.2.0" = {
+ name = "decode-uri-component";
+ packageName = "decode-uri-component";
+ version = "0.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+ sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+ };
+ };
+ "deep-is-0.1.3" = {
+ name = "deep-is";
+ packageName = "deep-is";
+ version = "0.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+ sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+ };
+ };
+ "defaults-1.0.3" = {
+ name = "defaults";
+ packageName = "defaults";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz";
+ sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
+ };
+ };
+ "define-properties-1.1.3" = {
+ name = "define-properties";
+ packageName = "define-properties";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz";
+ sha512 = "3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==";
+ };
+ };
+ "define-property-0.2.5" = {
+ name = "define-property";
+ packageName = "define-property";
+ version = "0.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";
+ sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
+ };
+ };
+ "define-property-1.0.0" = {
+ name = "define-property";
+ packageName = "define-property";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";
+ sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
+ };
+ };
+ "define-property-2.0.2" = {
+ name = "define-property";
+ packageName = "define-property";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz";
+ sha512 = "jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==";
+ };
+ };
+ "delayed-stream-1.0.0" = {
+ name = "delayed-stream";
+ packageName = "delayed-stream";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+ sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+ };
+ };
+ "depd-1.1.2" = {
+ name = "depd";
+ packageName = "depd";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz";
+ sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
+ };
+ };
+ "des.js-1.0.1" = {
+ name = "des.js";
+ packageName = "des.js";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz";
+ sha512 = "Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==";
+ };
+ };
+ "destroy-1.0.4" = {
+ name = "destroy";
+ packageName = "destroy";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz";
+ sha1 = "978857442c44749e4206613e37946205826abd80";
+ };
+ };
+ "diffie-hellman-5.0.3" = {
+ name = "diffie-hellman";
+ packageName = "diffie-hellman";
+ version = "5.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
+ sha512 = "kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==";
+ };
+ };
+ "dom-serializer-0.2.2" = {
+ name = "dom-serializer";
+ packageName = "dom-serializer";
+ version = "0.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz";
+ sha512 = "2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==";
+ };
+ };
+ "domain-browser-1.2.0" = {
+ name = "domain-browser";
+ packageName = "domain-browser";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz";
+ sha512 = "jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==";
+ };
+ };
+ "domelementtype-1.3.1" = {
+ name = "domelementtype";
+ packageName = "domelementtype";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz";
+ sha512 = "BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==";
+ };
+ };
+ "domelementtype-2.0.1" = {
+ name = "domelementtype";
+ packageName = "domelementtype";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz";
+ sha512 = "5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==";
+ };
+ };
+ "domexception-1.0.1" = {
+ name = "domexception";
+ packageName = "domexception";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz";
+ sha512 = "raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==";
+ };
+ };
+ "domhandler-2.4.2" = {
+ name = "domhandler";
+ packageName = "domhandler";
+ version = "2.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz";
+ sha512 = "JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==";
+ };
+ };
+ "domutils-1.7.0" = {
+ name = "domutils";
+ packageName = "domutils";
+ version = "1.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz";
+ sha512 = "Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==";
+ };
+ };
+ "dot-prop-5.2.0" = {
+ name = "dot-prop";
+ packageName = "dot-prop";
+ version = "5.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz";
+ sha512 = "uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==";
+ };
+ };
+ "dotenv-5.0.1" = {
+ name = "dotenv";
+ packageName = "dotenv";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz";
+ sha512 = "4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==";
+ };
+ };
+ "dotenv-expand-4.2.0" = {
+ name = "dotenv-expand";
+ packageName = "dotenv-expand";
+ version = "4.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz";
+ sha1 = "def1f1ca5d6059d24a766e587942c21106ce1275";
+ };
+ };
+ "duplexer2-0.1.4" = {
+ name = "duplexer2";
+ packageName = "duplexer2";
+ version = "0.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
+ sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
+ };
+ };
+ "ecc-jsbn-0.1.2" = {
+ name = "ecc-jsbn";
+ packageName = "ecc-jsbn";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+ sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+ };
+ };
+ "editorconfig-0.15.3" = {
+ name = "editorconfig";
+ packageName = "editorconfig";
+ version = "0.15.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz";
+ sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==";
+ };
+ };
+ "ee-first-1.1.1" = {
+ name = "ee-first";
+ packageName = "ee-first";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
+ sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
+ };
+ };
+ "electron-to-chromium-1.3.418" = {
+ name = "electron-to-chromium";
+ packageName = "electron-to-chromium";
+ version = "1.3.418";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz";
+ sha512 = "i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==";
+ };
+ };
+ "elliptic-6.5.2" = {
+ name = "elliptic";
+ packageName = "elliptic";
+ version = "6.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz";
+ sha512 = "f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==";
+ };
+ };
+ "elm-hot-1.1.1" = {
+ name = "elm-hot";
+ packageName = "elm-hot";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/elm-hot/-/elm-hot-1.1.1.tgz";
+ sha512 = "ZHjoHd2Ev6riNXNQirj3J+GKKXXwedAUikfFBYzlVL/+3CdGs96cpZ7nhAk4c5l//Qa9ymltrqX36mOlr0pPFA==";
+ };
+ };
+ "emoji-regex-7.0.3" = {
+ name = "emoji-regex";
+ packageName = "emoji-regex";
+ version = "7.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
+ sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+ };
+ };
+ "encodeurl-1.0.2" = {
+ name = "encodeurl";
+ packageName = "encodeurl";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
+ sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
+ };
+ };
+ "entities-1.1.2" = {
+ name = "entities";
+ packageName = "entities";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz";
+ sha512 = "f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==";
+ };
+ };
+ "entities-2.0.0" = {
+ name = "entities";
+ packageName = "entities";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz";
+ sha512 = "D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==";
+ };
+ };
+ "error-ex-1.3.2" = {
+ name = "error-ex";
+ packageName = "error-ex";
+ version = "1.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz";
+ sha512 = "7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==";
+ };
+ };
+ "es-abstract-1.17.5" = {
+ name = "es-abstract";
+ packageName = "es-abstract";
+ version = "1.17.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz";
+ sha512 = "BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==";
+ };
+ };
+ "es-to-primitive-1.2.1" = {
+ name = "es-to-primitive";
+ packageName = "es-to-primitive";
+ version = "1.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+ sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
+ };
+ };
+ "escape-html-1.0.3" = {
+ name = "escape-html";
+ packageName = "escape-html";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
+ sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
+ };
+ };
+ "escape-string-regexp-1.0.5" = {
+ name = "escape-string-regexp";
+ packageName = "escape-string-regexp";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+ sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+ };
+ };
+ "escodegen-1.14.1" = {
+ name = "escodegen";
+ packageName = "escodegen";
+ version = "1.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz";
+ sha512 = "Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==";
+ };
+ };
+ "escodegen-1.9.1" = {
+ name = "escodegen";
+ packageName = "escodegen";
+ version = "1.9.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz";
+ sha512 = "6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==";
+ };
+ };
+ "esprima-3.1.3" = {
+ name = "esprima";
+ packageName = "esprima";
+ version = "3.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";
+ sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633";
+ };
+ };
+ "esprima-4.0.1" = {
+ name = "esprima";
+ packageName = "esprima";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+ sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+ };
+ };
+ "estraverse-4.3.0" = {
+ name = "estraverse";
+ packageName = "estraverse";
+ version = "4.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+ sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+ };
+ };
+ "esutils-2.0.3" = {
+ name = "esutils";
+ packageName = "esutils";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+ sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+ };
+ };
+ "etag-1.8.1" = {
+ name = "etag";
+ packageName = "etag";
+ version = "1.8.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";
+ sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
+ };
+ };
+ "events-3.1.0" = {
+ name = "events";
+ packageName = "events";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/events/-/events-3.1.0.tgz";
+ sha512 = "Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==";
+ };
+ };
+ "evp_bytestokey-1.0.3" = {
+ name = "evp_bytestokey";
+ packageName = "evp_bytestokey";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
+ sha512 = "/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==";
+ };
+ };
+ "expand-brackets-2.1.4" = {
+ name = "expand-brackets";
+ packageName = "expand-brackets";
+ version = "2.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz";
+ sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
+ };
+ };
+ "extend-3.0.2" = {
+ name = "extend";
+ packageName = "extend";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+ sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+ };
+ };
+ "extend-shallow-2.0.1" = {
+ name = "extend-shallow";
+ packageName = "extend-shallow";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
+ sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
+ };
+ };
+ "extend-shallow-3.0.2" = {
+ name = "extend-shallow";
+ packageName = "extend-shallow";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz";
+ sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
+ };
+ };
+ "extglob-2.0.4" = {
+ name = "extglob";
+ packageName = "extglob";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz";
+ sha512 = "Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==";
+ };
+ };
+ "extsprintf-1.3.0" = {
+ name = "extsprintf";
+ packageName = "extsprintf";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+ sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+ };
+ };
+ "falafel-2.2.4" = {
+ name = "falafel";
+ packageName = "falafel";
+ version = "2.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz";
+ sha512 = "0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==";
+ };
+ };
+ "fast-deep-equal-3.1.1" = {
+ name = "fast-deep-equal";
+ packageName = "fast-deep-equal";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
+ sha512 = "8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==";
+ };
+ };
+ "fast-glob-2.2.7" = {
+ name = "fast-glob";
+ packageName = "fast-glob";
+ version = "2.2.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz";
+ sha512 = "g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==";
+ };
+ };
+ "fast-json-stable-stringify-2.1.0" = {
+ name = "fast-json-stable-stringify";
+ packageName = "fast-json-stable-stringify";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+ sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+ };
+ };
+ "fast-levenshtein-2.0.6" = {
+ name = "fast-levenshtein";
+ packageName = "fast-levenshtein";
+ version = "2.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+ sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+ };
+ };
+ "fastparse-1.1.2" = {
+ name = "fastparse";
+ packageName = "fastparse";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz";
+ sha512 = "483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==";
+ };
+ };
+ "file-uri-to-path-1.0.0" = {
+ name = "file-uri-to-path";
+ packageName = "file-uri-to-path";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
+ sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==";
+ };
+ };
+ "filesize-3.6.1" = {
+ name = "filesize";
+ packageName = "filesize";
+ version = "3.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz";
+ sha512 = "7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==";
+ };
+ };
+ "fill-range-4.0.0" = {
+ name = "fill-range";
+ packageName = "fill-range";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz";
+ sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
+ };
+ };
+ "find-elm-dependencies-2.0.2" = {
+ name = "find-elm-dependencies";
+ packageName = "find-elm-dependencies";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/find-elm-dependencies/-/find-elm-dependencies-2.0.2.tgz";
+ sha512 = "nM5UCbccD1G8CGK2GsM7ykG3ksOAl9E+34jiDfl07CAl2OPnLpBVWY2hlxEmIkSBfdJjSopEowWHrO0cI8RhxQ==";
+ };
+ };
+ "find-up-2.1.0" = {
+ name = "find-up";
+ packageName = "find-up";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz";
+ sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+ };
+ };
+ "find-up-3.0.0" = {
+ name = "find-up";
+ packageName = "find-up";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz";
+ sha512 = "1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==";
+ };
+ };
+ "firstline-1.2.0" = {
+ name = "firstline";
+ packageName = "firstline";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/firstline/-/firstline-1.2.0.tgz";
+ sha1 = "c9f4886e7f7fbf0afc12d71941dce06b192aea05";
+ };
+ };
+ "for-in-1.0.2" = {
+ name = "for-in";
+ packageName = "for-in";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz";
+ sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
+ };
+ };
+ "foreach-2.0.5" = {
+ name = "foreach";
+ packageName = "foreach";
+ version = "2.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz";
+ sha1 = "0bee005018aeb260d0a3af3ae658dd0136ec1b99";
+ };
+ };
+ "forever-agent-0.6.1" = {
+ name = "forever-agent";
+ packageName = "forever-agent";
+ version = "0.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+ sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+ };
+ };
+ "form-data-2.3.3" = {
+ name = "form-data";
+ packageName = "form-data";
+ version = "2.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+ sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+ };
+ };
+ "fragment-cache-0.2.1" = {
+ name = "fragment-cache";
+ packageName = "fragment-cache";
+ version = "0.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz";
+ sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
+ };
+ };
+ "fresh-0.5.2" = {
+ name = "fresh";
+ packageName = "fresh";
+ version = "0.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz";
+ sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
+ };
+ };
+ "fs.realpath-1.0.0" = {
+ name = "fs.realpath";
+ packageName = "fs.realpath";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+ sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+ };
+ };
+ "fsevents-1.2.12" = {
+ name = "fsevents";
+ packageName = "fsevents";
+ version = "1.2.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz";
+ sha512 = "Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==";
+ };
+ };
+ "function-bind-1.1.1" = {
+ name = "function-bind";
+ packageName = "function-bind";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+ sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+ };
+ };
+ "get-caller-file-2.0.5" = {
+ name = "get-caller-file";
+ packageName = "get-caller-file";
+ version = "2.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
+ sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
+ };
+ };
+ "get-port-3.2.0" = {
+ name = "get-port";
+ packageName = "get-port";
+ version = "3.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz";
+ sha1 = "dd7ce7de187c06c8bf353796ac71e099f0980ebc";
+ };
+ };
+ "get-value-2.0.6" = {
+ name = "get-value";
+ packageName = "get-value";
+ version = "2.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz";
+ sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
+ };
+ };
+ "getpass-0.1.7" = {
+ name = "getpass";
+ packageName = "getpass";
+ version = "0.1.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+ sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+ };
+ };
+ "glob-7.1.4" = {
+ name = "glob";
+ packageName = "glob";
+ version = "7.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz";
+ sha512 = "hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==";
+ };
+ };
+ "glob-parent-3.1.0" = {
+ name = "glob-parent";
+ packageName = "glob-parent";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz";
+ sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae";
+ };
+ };
+ "glob-to-regexp-0.3.0" = {
+ name = "glob-to-regexp";
+ packageName = "glob-to-regexp";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz";
+ sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab";
+ };
+ };
+ "globals-11.12.0" = {
+ name = "globals";
+ packageName = "globals";
+ version = "11.12.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz";
+ sha512 = "WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==";
+ };
+ };
+ "graceful-fs-4.2.3" = {
+ name = "graceful-fs";
+ packageName = "graceful-fs";
+ version = "4.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz";
+ sha512 = "a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==";
+ };
+ };
+ "grapheme-breaker-0.3.2" = {
+ name = "grapheme-breaker";
+ packageName = "grapheme-breaker";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz";
+ sha1 = "5b9e6b78c3832452d2ba2bb1cb830f96276410ac";
+ };
+ };
+ "har-schema-2.0.0" = {
+ name = "har-schema";
+ packageName = "har-schema";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+ sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+ };
+ };
+ "har-validator-5.1.3" = {
+ name = "har-validator";
+ packageName = "har-validator";
+ version = "5.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
+ sha512 = "sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==";
+ };
+ };
+ "has-1.0.3" = {
+ name = "has";
+ packageName = "has";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+ sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+ };
+ };
+ "has-ansi-2.0.0" = {
+ name = "has-ansi";
+ packageName = "has-ansi";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
+ sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+ };
+ };
+ "has-flag-1.0.0" = {
+ name = "has-flag";
+ packageName = "has-flag";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz";
+ sha1 = "9d9e793165ce017a00f00418c43f942a7b1d11fa";
+ };
+ };
+ "has-flag-3.0.0" = {
+ name = "has-flag";
+ packageName = "has-flag";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+ sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+ };
+ };
+ "has-symbols-1.0.1" = {
+ name = "has-symbols";
+ packageName = "has-symbols";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz";
+ sha512 = "PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==";
+ };
+ };
+ "has-value-0.3.1" = {
+ name = "has-value";
+ packageName = "has-value";
+ version = "0.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz";
+ sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
+ };
+ };
+ "has-value-1.0.0" = {
+ name = "has-value";
+ packageName = "has-value";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz";
+ sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
+ };
+ };
+ "has-values-0.1.4" = {
+ name = "has-values";
+ packageName = "has-values";
+ version = "0.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz";
+ sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
+ };
+ };
+ "has-values-1.0.0" = {
+ name = "has-values";
+ packageName = "has-values";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz";
+ sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
+ };
+ };
+ "hash-base-3.0.4" = {
+ name = "hash-base";
+ packageName = "hash-base";
+ version = "3.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz";
+ sha1 = "5fc8686847ecd73499403319a6b0a3f3f6ae4918";
+ };
+ };
+ "hash.js-1.1.7" = {
+ name = "hash.js";
+ packageName = "hash.js";
+ version = "1.1.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz";
+ sha512 = "taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==";
+ };
+ };
+ "hex-color-regex-1.1.0" = {
+ name = "hex-color-regex";
+ packageName = "hex-color-regex";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz";
+ sha512 = "l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==";
+ };
+ };
+ "hmac-drbg-1.0.1" = {
+ name = "hmac-drbg";
+ packageName = "hmac-drbg";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
+ sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
+ };
+ };
+ "hsl-regex-1.0.0" = {
+ name = "hsl-regex";
+ packageName = "hsl-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz";
+ sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e";
+ };
+ };
+ "hsla-regex-1.0.0" = {
+ name = "hsla-regex";
+ packageName = "hsla-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz";
+ sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38";
+ };
+ };
+ "html-comment-regex-1.1.2" = {
+ name = "html-comment-regex";
+ packageName = "html-comment-regex";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz";
+ sha512 = "P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==";
+ };
+ };
+ "html-encoding-sniffer-1.0.2" = {
+ name = "html-encoding-sniffer";
+ packageName = "html-encoding-sniffer";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz";
+ sha512 = "71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==";
+ };
+ };
+ "html-tags-1.2.0" = {
+ name = "html-tags";
+ packageName = "html-tags";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz";
+ sha1 = "c78de65b5663aa597989dd2b7ab49200d7e4db98";
+ };
+ };
+ "htmlnano-0.2.5" = {
+ name = "htmlnano";
+ packageName = "htmlnano";
+ version = "0.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.5.tgz";
+ sha512 = "X1iPSwXG/iF9bVs+/obt2n6F64uH0ETkA8zp7qFDmLW9/+A6ueHGeb/+qD67T21qUY22owZPMdawljN50ajkqA==";
+ };
+ };
+ "htmlparser2-3.10.1" = {
+ name = "htmlparser2";
+ packageName = "htmlparser2";
+ version = "3.10.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz";
+ sha512 = "IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==";
+ };
+ };
+ "http-errors-1.7.3" = {
+ name = "http-errors";
+ packageName = "http-errors";
+ version = "1.7.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz";
+ sha512 = "ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==";
+ };
+ };
+ "http-signature-1.2.0" = {
+ name = "http-signature";
+ packageName = "http-signature";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+ sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+ };
+ };
+ "https-browserify-1.0.0" = {
+ name = "https-browserify";
+ packageName = "https-browserify";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz";
+ sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
+ };
+ };
+ "iconv-lite-0.4.24" = {
+ name = "iconv-lite";
+ packageName = "iconv-lite";
+ version = "0.4.24";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
+ sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
+ };
+ };
+ "icss-replace-symbols-1.1.0" = {
+ name = "icss-replace-symbols";
+ packageName = "icss-replace-symbols";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz";
+ sha1 = "06ea6f83679a7749e386cfe1fe812ae5db223ded";
+ };
+ };
+ "ieee754-1.1.13" = {
+ name = "ieee754";
+ packageName = "ieee754";
+ version = "1.1.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz";
+ sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==";
+ };
+ };
+ "import-fresh-2.0.0" = {
+ name = "import-fresh";
+ packageName = "import-fresh";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz";
+ sha1 = "d81355c15612d386c61f9ddd3922d4304822a546";
+ };
+ };
+ "indexes-of-1.0.1" = {
+ name = "indexes-of";
+ packageName = "indexes-of";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz";
+ sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
+ };
+ };
+ "inflight-1.0.6" = {
+ name = "inflight";
+ packageName = "inflight";
+ version = "1.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+ sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+ };
+ };
+ "inherits-2.0.1" = {
+ name = "inherits";
+ packageName = "inherits";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
+ sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+ };
+ };
+ "inherits-2.0.3" = {
+ name = "inherits";
+ packageName = "inherits";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
+ sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+ };
+ };
+ "inherits-2.0.4" = {
+ name = "inherits";
+ packageName = "inherits";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+ sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+ };
+ };
+ "ini-1.3.5" = {
+ name = "ini";
+ packageName = "ini";
+ version = "1.3.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
+ sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==";
+ };
+ };
+ "invariant-2.2.4" = {
+ name = "invariant";
+ packageName = "invariant";
+ version = "2.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";
+ sha512 = "phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==";
+ };
+ };
+ "is-absolute-url-2.1.0" = {
+ name = "is-absolute-url";
+ packageName = "is-absolute-url";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
+ sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
+ };
+ };
+ "is-absolute-url-3.0.3" = {
+ name = "is-absolute-url";
+ packageName = "is-absolute-url";
+ version = "3.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz";
+ sha512 = "opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==";
+ };
+ };
+ "is-accessor-descriptor-0.1.6" = {
+ name = "is-accessor-descriptor";
+ packageName = "is-accessor-descriptor";
+ version = "0.1.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+ sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
+ };
+ };
+ "is-accessor-descriptor-1.0.0" = {
+ name = "is-accessor-descriptor";
+ packageName = "is-accessor-descriptor";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+ sha512 = "m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==";
+ };
+ };
+ "is-arrayish-0.2.1" = {
+ name = "is-arrayish";
+ packageName = "is-arrayish";
+ version = "0.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
+ sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+ };
+ };
+ "is-arrayish-0.3.2" = {
+ name = "is-arrayish";
+ packageName = "is-arrayish";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz";
+ sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==";
+ };
+ };
+ "is-binary-path-1.0.1" = {
+ name = "is-binary-path";
+ packageName = "is-binary-path";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz";
+ sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
+ };
+ };
+ "is-buffer-1.1.6" = {
+ name = "is-buffer";
+ packageName = "is-buffer";
+ version = "1.1.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+ sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+ };
+ };
+ "is-callable-1.1.5" = {
+ name = "is-callable";
+ packageName = "is-callable";
+ version = "1.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz";
+ sha512 = "ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==";
+ };
+ };
+ "is-color-stop-1.1.0" = {
+ name = "is-color-stop";
+ packageName = "is-color-stop";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz";
+ sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345";
+ };
+ };
+ "is-data-descriptor-0.1.4" = {
+ name = "is-data-descriptor";
+ packageName = "is-data-descriptor";
+ version = "0.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+ sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
+ };
+ };
+ "is-data-descriptor-1.0.0" = {
+ name = "is-data-descriptor";
+ packageName = "is-data-descriptor";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+ sha512 = "jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==";
+ };
+ };
+ "is-date-object-1.0.2" = {
+ name = "is-date-object";
+ packageName = "is-date-object";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz";
+ sha512 = "USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==";
+ };
+ };
+ "is-descriptor-0.1.6" = {
+ name = "is-descriptor";
+ packageName = "is-descriptor";
+ version = "0.1.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";
+ sha512 = "avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==";
+ };
+ };
+ "is-descriptor-1.0.2" = {
+ name = "is-descriptor";
+ packageName = "is-descriptor";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz";
+ sha512 = "2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==";
+ };
+ };
+ "is-directory-0.3.1" = {
+ name = "is-directory";
+ packageName = "is-directory";
+ version = "0.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz";
+ sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1";
+ };
+ };
+ "is-extendable-0.1.1" = {
+ name = "is-extendable";
+ packageName = "is-extendable";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
+ sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
+ };
+ };
+ "is-extendable-1.0.1" = {
+ name = "is-extendable";
+ packageName = "is-extendable";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";
+ sha512 = "arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==";
+ };
+ };
+ "is-extglob-2.1.1" = {
+ name = "is-extglob";
+ packageName = "is-extglob";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+ sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+ };
+ };
+ "is-fullwidth-code-point-2.0.0" = {
+ name = "is-fullwidth-code-point";
+ packageName = "is-fullwidth-code-point";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+ sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+ };
+ };
+ "is-glob-3.1.0" = {
+ name = "is-glob";
+ packageName = "is-glob";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz";
+ sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
+ };
+ };
+ "is-glob-4.0.1" = {
+ name = "is-glob";
+ packageName = "is-glob";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
+ sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+ };
+ };
+ "is-html-1.1.0" = {
+ name = "is-html";
+ packageName = "is-html";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz";
+ sha1 = "e04f1c18d39485111396f9a0273eab51af218464";
+ };
+ };
+ "is-number-3.0.0" = {
+ name = "is-number";
+ packageName = "is-number";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz";
+ sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
+ };
+ };
+ "is-obj-2.0.0" = {
+ name = "is-obj";
+ packageName = "is-obj";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz";
+ sha512 = "drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==";
+ };
+ };
+ "is-plain-object-2.0.4" = {
+ name = "is-plain-object";
+ packageName = "is-plain-object";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
+ sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+ };
+ };
+ "is-regex-1.0.5" = {
+ name = "is-regex";
+ packageName = "is-regex";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz";
+ sha512 = "vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==";
+ };
+ };
+ "is-resolvable-1.1.0" = {
+ name = "is-resolvable";
+ packageName = "is-resolvable";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz";
+ sha512 = "qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==";
+ };
+ };
+ "is-svg-3.0.0" = {
+ name = "is-svg";
+ packageName = "is-svg";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz";
+ sha512 = "gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==";
+ };
+ };
+ "is-symbol-1.0.3" = {
+ name = "is-symbol";
+ packageName = "is-symbol";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz";
+ sha512 = "OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==";
+ };
+ };
+ "is-typedarray-1.0.0" = {
+ name = "is-typedarray";
+ packageName = "is-typedarray";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+ sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+ };
+ };
+ "is-url-1.2.4" = {
+ name = "is-url";
+ packageName = "is-url";
+ version = "1.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz";
+ sha512 = "ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==";
+ };
+ };
+ "is-windows-1.0.2" = {
+ name = "is-windows";
+ packageName = "is-windows";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz";
+ sha512 = "eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==";
+ };
+ };
+ "is-wsl-1.1.0" = {
+ name = "is-wsl";
+ packageName = "is-wsl";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz";
+ sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d";
+ };
+ };
+ "isarray-1.0.0" = {
+ name = "isarray";
+ packageName = "isarray";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+ sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+ };
+ };
+ "isarray-2.0.5" = {
+ name = "isarray";
+ packageName = "isarray";
+ version = "2.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz";
+ sha512 = "xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==";
+ };
+ };
+ "isexe-2.0.0" = {
+ name = "isexe";
+ packageName = "isexe";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+ sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+ };
+ };
+ "isobject-2.1.0" = {
+ name = "isobject";
+ packageName = "isobject";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz";
+ sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
+ };
+ };
+ "isobject-3.0.1" = {
+ name = "isobject";
+ packageName = "isobject";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
+ sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+ };
+ };
+ "isstream-0.1.2" = {
+ name = "isstream";
+ packageName = "isstream";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+ sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+ };
+ };
+ "js-beautify-1.11.0" = {
+ name = "js-beautify";
+ packageName = "js-beautify";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz";
+ sha512 = "a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==";
+ };
+ };
+ "js-levenshtein-1.1.6" = {
+ name = "js-levenshtein";
+ packageName = "js-levenshtein";
+ version = "1.1.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz";
+ sha512 = "X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==";
+ };
+ };
+ "js-tokens-4.0.0" = {
+ name = "js-tokens";
+ packageName = "js-tokens";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
+ sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
+ };
+ };
+ "js-yaml-3.13.1" = {
+ name = "js-yaml";
+ packageName = "js-yaml";
+ version = "3.13.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz";
+ sha512 = "YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==";
+ };
+ };
+ "jsbn-0.1.1" = {
+ name = "jsbn";
+ packageName = "jsbn";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+ sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+ };
+ };
+ "jsdom-14.1.0" = {
+ name = "jsdom";
+ packageName = "jsdom";
+ version = "14.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz";
+ sha512 = "O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==";
+ };
+ };
+ "jsesc-0.5.0" = {
+ name = "jsesc";
+ packageName = "jsesc";
+ version = "0.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz";
+ sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
+ };
+ };
+ "jsesc-2.5.2" = {
+ name = "jsesc";
+ packageName = "jsesc";
+ version = "2.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz";
+ sha512 = "OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==";
+ };
+ };
+ "json-parse-better-errors-1.0.2" = {
+ name = "json-parse-better-errors";
+ packageName = "json-parse-better-errors";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+ sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+ };
+ };
+ "json-schema-0.2.3" = {
+ name = "json-schema";
+ packageName = "json-schema";
+ version = "0.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+ sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+ };
+ };
+ "json-schema-traverse-0.4.1" = {
+ name = "json-schema-traverse";
+ packageName = "json-schema-traverse";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+ sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+ };
+ };
+ "json-stringify-safe-5.0.1" = {
+ name = "json-stringify-safe";
+ packageName = "json-stringify-safe";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+ sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+ };
+ };
+ "json5-1.0.1" = {
+ name = "json5";
+ packageName = "json5";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz";
+ sha512 = "aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==";
+ };
+ };
+ "json5-2.1.3" = {
+ name = "json5";
+ packageName = "json5";
+ version = "2.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz";
+ sha512 = "KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==";
+ };
+ };
+ "jsprim-1.4.1" = {
+ name = "jsprim";
+ packageName = "jsprim";
+ version = "1.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+ sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+ };
+ };
+ "kind-of-3.2.2" = {
+ name = "kind-of";
+ packageName = "kind-of";
+ version = "3.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";
+ sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+ };
+ };
+ "kind-of-4.0.0" = {
+ name = "kind-of";
+ packageName = "kind-of";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz";
+ sha1 = "20813df3d712928b207378691a45066fae72dd57";
+ };
+ };
+ "kind-of-5.1.0" = {
+ name = "kind-of";
+ packageName = "kind-of";
+ version = "5.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz";
+ sha512 = "NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==";
+ };
+ };
+ "kind-of-6.0.3" = {
+ name = "kind-of";
+ packageName = "kind-of";
+ version = "6.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
+ sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
+ };
+ };
+ "levn-0.3.0" = {
+ name = "levn";
+ packageName = "levn";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+ sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+ };
+ };
+ "locate-path-2.0.0" = {
+ name = "locate-path";
+ packageName = "locate-path";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz";
+ sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+ };
+ };
+ "locate-path-3.0.0" = {
+ name = "locate-path";
+ packageName = "locate-path";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz";
+ sha512 = "7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==";
+ };
+ };
+ "lodash-4.17.15" = {
+ name = "lodash";
+ packageName = "lodash";
+ version = "4.17.15";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz";
+ sha512 = "8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==";
+ };
+ };
+ "lodash.clone-4.5.0" = {
+ name = "lodash.clone";
+ packageName = "lodash.clone";
+ version = "4.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz";
+ sha1 = "195870450f5a13192478df4bc3d23d2dea1907b6";
+ };
+ };
+ "lodash.memoize-4.1.2" = {
+ name = "lodash.memoize";
+ packageName = "lodash.memoize";
+ version = "4.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+ sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
+ };
+ };
+ "lodash.sortby-4.7.0" = {
+ name = "lodash.sortby";
+ packageName = "lodash.sortby";
+ version = "4.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz";
+ sha1 = "edd14c824e2cc9c1e0b0a1b42bb5210516a42438";
+ };
+ };
+ "lodash.uniq-4.5.0" = {
+ name = "lodash.uniq";
+ packageName = "lodash.uniq";
+ version = "4.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+ sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+ };
+ };
+ "log-symbols-2.2.0" = {
+ name = "log-symbols";
+ packageName = "log-symbols";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz";
+ sha512 = "VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==";
+ };
+ };
+ "loose-envify-1.4.0" = {
+ name = "loose-envify";
+ packageName = "loose-envify";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz";
+ sha512 = "lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==";
+ };
+ };
+ "lru-cache-4.1.5" = {
+ name = "lru-cache";
+ packageName = "lru-cache";
+ version = "4.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
+ sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+ };
+ };
+ "magic-string-0.22.5" = {
+ name = "magic-string";
+ packageName = "magic-string";
+ version = "0.22.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz";
+ sha512 = "oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==";
+ };
+ };
+ "map-cache-0.2.2" = {
+ name = "map-cache";
+ packageName = "map-cache";
+ version = "0.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz";
+ sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
+ };
+ };
+ "map-visit-1.0.0" = {
+ name = "map-visit";
+ packageName = "map-visit";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz";
+ sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
+ };
+ };
+ "md5.js-1.3.5" = {
+ name = "md5.js";
+ packageName = "md5.js";
+ version = "1.3.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz";
+ sha512 = "xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==";
+ };
+ };
+ "mdn-data-2.0.4" = {
+ name = "mdn-data";
+ packageName = "mdn-data";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz";
+ sha512 = "iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==";
+ };
+ };
+ "mdn-data-2.0.6" = {
+ name = "mdn-data";
+ packageName = "mdn-data";
+ version = "2.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz";
+ sha512 = "rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==";
+ };
+ };
+ "merge-source-map-1.0.4" = {
+ name = "merge-source-map";
+ packageName = "merge-source-map";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz";
+ sha1 = "a5de46538dae84d4114cc5ea02b4772a6346701f";
+ };
+ };
+ "merge2-1.3.0" = {
+ name = "merge2";
+ packageName = "merge2";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz";
+ sha512 = "2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==";
+ };
+ };
+ "micromatch-3.1.10" = {
+ name = "micromatch";
+ packageName = "micromatch";
+ version = "3.1.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz";
+ sha512 = "MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==";
+ };
+ };
+ "miller-rabin-4.0.1" = {
+ name = "miller-rabin";
+ packageName = "miller-rabin";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz";
+ sha512 = "115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==";
+ };
+ };
+ "mime-1.6.0" = {
+ name = "mime";
+ packageName = "mime";
+ version = "1.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+ sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+ };
+ };
+ "mime-db-1.44.0" = {
+ name = "mime-db";
+ packageName = "mime-db";
+ version = "1.44.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz";
+ sha512 = "/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==";
+ };
+ };
+ "mime-types-2.1.27" = {
+ name = "mime-types";
+ packageName = "mime-types";
+ version = "2.1.27";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz";
+ sha512 = "JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==";
+ };
+ };
+ "mimic-fn-1.2.0" = {
+ name = "mimic-fn";
+ packageName = "mimic-fn";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz";
+ sha512 = "jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==";
+ };
+ };
+ "minimalistic-assert-1.0.1" = {
+ name = "minimalistic-assert";
+ packageName = "minimalistic-assert";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
+ sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==";
+ };
+ };
+ "minimalistic-crypto-utils-1.0.1" = {
+ name = "minimalistic-crypto-utils";
+ packageName = "minimalistic-crypto-utils";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
+ sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
+ };
+ };
+ "minimatch-3.0.4" = {
+ name = "minimatch";
+ packageName = "minimatch";
+ version = "3.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+ sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+ };
+ };
+ "minimist-1.2.5" = {
+ name = "minimist";
+ packageName = "minimist";
+ version = "1.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
+ sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+ };
+ };
+ "mixin-deep-1.3.2" = {
+ name = "mixin-deep";
+ packageName = "mixin-deep";
+ version = "1.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz";
+ sha512 = "WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==";
+ };
+ };
+ "mkdirp-0.5.5" = {
+ name = "mkdirp";
+ packageName = "mkdirp";
+ version = "0.5.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
+ sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+ };
+ };
+ "mkdirp-1.0.4" = {
+ name = "mkdirp";
+ packageName = "mkdirp";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz";
+ sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==";
+ };
+ };
+ "ms-2.0.0" = {
+ name = "ms";
+ packageName = "ms";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+ sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+ };
+ };
+ "ms-2.1.1" = {
+ name = "ms";
+ packageName = "ms";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz";
+ sha512 = "tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==";
+ };
+ };
+ "ms-2.1.2" = {
+ name = "ms";
+ packageName = "ms";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+ sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+ };
+ };
+ "nan-2.14.1" = {
+ name = "nan";
+ packageName = "nan";
+ version = "2.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz";
+ sha512 = "isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==";
+ };
+ };
+ "nanomatch-1.2.13" = {
+ name = "nanomatch";
+ packageName = "nanomatch";
+ version = "1.2.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz";
+ sha512 = "fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==";
+ };
+ };
+ "nice-try-1.0.5" = {
+ name = "nice-try";
+ packageName = "nice-try";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
+ sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
+ };
+ };
+ "node-addon-api-1.7.1" = {
+ name = "node-addon-api";
+ packageName = "node-addon-api";
+ version = "1.7.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz";
+ sha512 = "2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==";
+ };
+ };
+ "node-elm-compiler-5.0.4" = {
+ name = "node-elm-compiler";
+ packageName = "node-elm-compiler";
+ version = "5.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-elm-compiler/-/node-elm-compiler-5.0.4.tgz";
+ sha512 = "VQsT8QSierYGkHzRed+b4MnccQVF1+qPHunE8jBoU7jD6YpuRqCDPzEoC2zfyEJS80qVnlMZrqobLnyjzX9lJg==";
+ };
+ };
+ "node-forge-0.7.6" = {
+ name = "node-forge";
+ packageName = "node-forge";
+ version = "0.7.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz";
+ sha512 = "sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==";
+ };
+ };
+ "node-libs-browser-2.2.1" = {
+ name = "node-libs-browser";
+ packageName = "node-libs-browser";
+ version = "2.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz";
+ sha512 = "h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==";
+ };
+ };
+ "node-releases-1.1.53" = {
+ name = "node-releases";
+ packageName = "node-releases";
+ version = "1.1.53";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz";
+ sha512 = "wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==";
+ };
+ };
+ "nopt-4.0.3" = {
+ name = "nopt";
+ packageName = "nopt";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz";
+ sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==";
+ };
+ };
+ "normalize-html-whitespace-1.0.0" = {
+ name = "normalize-html-whitespace";
+ packageName = "normalize-html-whitespace";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz";
+ sha512 = "9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==";
+ };
+ };
+ "normalize-path-2.1.1" = {
+ name = "normalize-path";
+ packageName = "normalize-path";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz";
+ sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
+ };
+ };
+ "normalize-path-3.0.0" = {
+ name = "normalize-path";
+ packageName = "normalize-path";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+ sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+ };
+ };
+ "normalize-url-3.3.0" = {
+ name = "normalize-url";
+ packageName = "normalize-url";
+ version = "3.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz";
+ sha512 = "U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==";
+ };
+ };
+ "nth-check-1.0.2" = {
+ name = "nth-check";
+ packageName = "nth-check";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz";
+ sha512 = "WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==";
+ };
+ };
+ "nwsapi-2.2.0" = {
+ name = "nwsapi";
+ packageName = "nwsapi";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz";
+ sha512 = "h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==";
+ };
+ };
+ "oauth-sign-0.9.0" = {
+ name = "oauth-sign";
+ packageName = "oauth-sign";
+ version = "0.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+ sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+ };
+ };
+ "object-assign-4.1.1" = {
+ name = "object-assign";
+ packageName = "object-assign";
+ version = "4.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+ sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+ };
+ };
+ "object-copy-0.1.0" = {
+ name = "object-copy";
+ packageName = "object-copy";
+ version = "0.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz";
+ sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
+ };
+ };
+ "object-inspect-1.4.1" = {
+ name = "object-inspect";
+ packageName = "object-inspect";
+ version = "1.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz";
+ sha512 = "wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==";
+ };
+ };
+ "object-inspect-1.7.0" = {
+ name = "object-inspect";
+ packageName = "object-inspect";
+ version = "1.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz";
+ sha512 = "a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==";
+ };
+ };
+ "object-keys-1.1.1" = {
+ name = "object-keys";
+ packageName = "object-keys";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+ sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+ };
+ };
+ "object-visit-1.0.1" = {
+ name = "object-visit";
+ packageName = "object-visit";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz";
+ sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
+ };
+ };
+ "object.assign-4.1.0" = {
+ name = "object.assign";
+ packageName = "object.assign";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz";
+ sha512 = "exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==";
+ };
+ };
+ "object.getownpropertydescriptors-2.1.0" = {
+ name = "object.getownpropertydescriptors";
+ packageName = "object.getownpropertydescriptors";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz";
+ sha512 = "Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==";
+ };
+ };
+ "object.pick-1.3.0" = {
+ name = "object.pick";
+ packageName = "object.pick";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz";
+ sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
+ };
+ };
+ "object.values-1.1.1" = {
+ name = "object.values";
+ packageName = "object.values";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz";
+ sha512 = "WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==";
+ };
+ };
+ "on-finished-2.3.0" = {
+ name = "on-finished";
+ packageName = "on-finished";
+ version = "2.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz";
+ sha1 = "20f1336481b083cd75337992a16971aa2d906947";
+ };
+ };
+ "once-1.4.0" = {
+ name = "once";
+ packageName = "once";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+ sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+ };
+ };
+ "onetime-2.0.1" = {
+ name = "onetime";
+ packageName = "onetime";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz";
+ sha1 = "067428230fd67443b2794b22bba528b6867962d4";
+ };
+ };
+ "opn-5.5.0" = {
+ name = "opn";
+ packageName = "opn";
+ version = "5.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz";
+ sha512 = "PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==";
+ };
+ };
+ "optionator-0.8.3" = {
+ name = "optionator";
+ packageName = "optionator";
+ version = "0.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
+ sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+ };
+ };
+ "ora-2.1.0" = {
+ name = "ora";
+ packageName = "ora";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz";
+ sha512 = "hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==";
+ };
+ };
+ "os-browserify-0.3.0" = {
+ name = "os-browserify";
+ packageName = "os-browserify";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz";
+ sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
+ };
+ };
+ "os-homedir-1.0.2" = {
+ name = "os-homedir";
+ packageName = "os-homedir";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+ sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+ };
+ };
+ "os-tmpdir-1.0.2" = {
+ name = "os-tmpdir";
+ packageName = "os-tmpdir";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+ sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+ };
+ };
+ "osenv-0.1.5" = {
+ name = "osenv";
+ packageName = "osenv";
+ version = "0.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
+ sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
+ };
+ };
+ "p-limit-1.3.0" = {
+ name = "p-limit";
+ packageName = "p-limit";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz";
+ sha512 = "vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==";
+ };
+ };
+ "p-limit-2.3.0" = {
+ name = "p-limit";
+ packageName = "p-limit";
+ version = "2.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
+ sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
+ };
+ };
+ "p-locate-2.0.0" = {
+ name = "p-locate";
+ packageName = "p-locate";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz";
+ sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+ };
+ };
+ "p-locate-3.0.0" = {
+ name = "p-locate";
+ packageName = "p-locate";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz";
+ sha512 = "x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==";
+ };
+ };
+ "p-try-1.0.0" = {
+ name = "p-try";
+ packageName = "p-try";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz";
+ sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+ };
+ };
+ "p-try-2.2.0" = {
+ name = "p-try";
+ packageName = "p-try";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
+ sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+ };
+ };
+ "pako-0.2.9" = {
+ name = "pako";
+ packageName = "pako";
+ version = "0.2.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz";
+ sha1 = "f3f7522f4ef782348da8161bad9ecfd51bf83a75";
+ };
+ };
+ "pako-1.0.11" = {
+ name = "pako";
+ packageName = "pako";
+ version = "1.0.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";
+ sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==";
+ };
+ };
+ "parcel-bundler-1.12.3" = {
+ name = "parcel-bundler";
+ packageName = "parcel-bundler";
+ version = "1.12.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.3.tgz";
+ sha512 = "8bq6lj0hhQeGxD9f9xEkFMXQ3d8TIlf2+isKxoi9bciB0KVEILRGllaPkUgp++5t0anToBh9+tG6ZyInXOC1/A==";
+ };
+ };
+ "parse-asn1-5.1.5" = {
+ name = "parse-asn1";
+ packageName = "parse-asn1";
+ version = "5.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz";
+ sha512 = "jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==";
+ };
+ };
+ "parse-json-4.0.0" = {
+ name = "parse-json";
+ packageName = "parse-json";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz";
+ sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
+ };
+ };
+ "parse5-5.1.0" = {
+ name = "parse5";
+ packageName = "parse5";
+ version = "5.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz";
+ sha512 = "fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==";
+ };
+ };
+ "parseurl-1.3.3" = {
+ name = "parseurl";
+ packageName = "parseurl";
+ version = "1.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz";
+ sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==";
+ };
+ };
+ "pascalcase-0.1.1" = {
+ name = "pascalcase";
+ packageName = "pascalcase";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz";
+ sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
+ };
+ };
+ "path-browserify-0.0.1" = {
+ name = "path-browserify";
+ packageName = "path-browserify";
+ version = "0.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz";
+ sha512 = "BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==";
+ };
+ };
+ "path-dirname-1.0.2" = {
+ name = "path-dirname";
+ packageName = "path-dirname";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz";
+ sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0";
+ };
+ };
+ "path-exists-3.0.0" = {
+ name = "path-exists";
+ packageName = "path-exists";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz";
+ sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+ };
+ };
+ "path-is-absolute-1.0.1" = {
+ name = "path-is-absolute";
+ packageName = "path-is-absolute";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+ sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+ };
+ };
+ "path-key-2.0.1" = {
+ name = "path-key";
+ packageName = "path-key";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
+ sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+ };
+ };
+ "path-parse-1.0.6" = {
+ name = "path-parse";
+ packageName = "path-parse";
+ version = "1.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+ sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+ };
+ };
+ "pbkdf2-3.0.17" = {
+ name = "pbkdf2";
+ packageName = "pbkdf2";
+ version = "3.0.17";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz";
+ sha512 = "U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==";
+ };
+ };
+ "performance-now-2.1.0" = {
+ name = "performance-now";
+ packageName = "performance-now";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+ sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+ };
+ };
+ "physical-cpu-count-2.0.0" = {
+ name = "physical-cpu-count";
+ packageName = "physical-cpu-count";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz";
+ sha1 = "18de2f97e4bf7a9551ad7511942b5496f7aba660";
+ };
+ };
+ "pkg-up-2.0.0" = {
+ name = "pkg-up";
+ packageName = "pkg-up";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz";
+ sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f";
+ };
+ };
+ "pn-1.1.0" = {
+ name = "pn";
+ packageName = "pn";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz";
+ sha512 = "2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==";
+ };
+ };
+ "posix-character-classes-0.1.1" = {
+ name = "posix-character-classes";
+ packageName = "posix-character-classes";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+ sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
+ };
+ };
+ "postcss-6.0.1" = {
+ name = "postcss";
+ packageName = "postcss";
+ version = "6.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz";
+ sha1 = "000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2";
+ };
+ };
+ "postcss-6.0.23" = {
+ name = "postcss";
+ packageName = "postcss";
+ version = "6.0.23";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz";
+ sha512 = "soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==";
+ };
+ };
+ "postcss-7.0.27" = {
+ name = "postcss";
+ packageName = "postcss";
+ version = "7.0.27";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz";
+ sha512 = "WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==";
+ };
+ };
+ "postcss-calc-7.0.2" = {
+ name = "postcss-calc";
+ packageName = "postcss-calc";
+ version = "7.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz";
+ sha512 = "rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==";
+ };
+ };
+ "postcss-colormin-4.0.3" = {
+ name = "postcss-colormin";
+ packageName = "postcss-colormin";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz";
+ sha512 = "WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==";
+ };
+ };
+ "postcss-convert-values-4.0.1" = {
+ name = "postcss-convert-values";
+ packageName = "postcss-convert-values";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz";
+ sha512 = "Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==";
+ };
+ };
+ "postcss-discard-comments-4.0.2" = {
+ name = "postcss-discard-comments";
+ packageName = "postcss-discard-comments";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz";
+ sha512 = "RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==";
+ };
+ };
+ "postcss-discard-duplicates-4.0.2" = {
+ name = "postcss-discard-duplicates";
+ packageName = "postcss-discard-duplicates";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz";
+ sha512 = "ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==";
+ };
+ };
+ "postcss-discard-empty-4.0.1" = {
+ name = "postcss-discard-empty";
+ packageName = "postcss-discard-empty";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz";
+ sha512 = "B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==";
+ };
+ };
+ "postcss-discard-overridden-4.0.1" = {
+ name = "postcss-discard-overridden";
+ packageName = "postcss-discard-overridden";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz";
+ sha512 = "IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==";
+ };
+ };
+ "postcss-merge-longhand-4.0.11" = {
+ name = "postcss-merge-longhand";
+ packageName = "postcss-merge-longhand";
+ version = "4.0.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz";
+ sha512 = "alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==";
+ };
+ };
+ "postcss-merge-rules-4.0.3" = {
+ name = "postcss-merge-rules";
+ packageName = "postcss-merge-rules";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz";
+ sha512 = "U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==";
+ };
+ };
+ "postcss-minify-font-values-4.0.2" = {
+ name = "postcss-minify-font-values";
+ packageName = "postcss-minify-font-values";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz";
+ sha512 = "j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==";
+ };
+ };
+ "postcss-minify-gradients-4.0.2" = {
+ name = "postcss-minify-gradients";
+ packageName = "postcss-minify-gradients";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz";
+ sha512 = "qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==";
+ };
+ };
+ "postcss-minify-params-4.0.2" = {
+ name = "postcss-minify-params";
+ packageName = "postcss-minify-params";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz";
+ sha512 = "G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==";
+ };
+ };
+ "postcss-minify-selectors-4.0.2" = {
+ name = "postcss-minify-selectors";
+ packageName = "postcss-minify-selectors";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz";
+ sha512 = "D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==";
+ };
+ };
+ "postcss-modules-extract-imports-1.1.0" = {
+ name = "postcss-modules-extract-imports";
+ packageName = "postcss-modules-extract-imports";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz";
+ sha1 = "b614c9720be6816eaee35fb3a5faa1dba6a05ddb";
+ };
+ };
+ "postcss-modules-local-by-default-1.2.0" = {
+ name = "postcss-modules-local-by-default";
+ packageName = "postcss-modules-local-by-default";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz";
+ sha1 = "f7d80c398c5a393fa7964466bd19500a7d61c069";
+ };
+ };
+ "postcss-modules-scope-1.1.0" = {
+ name = "postcss-modules-scope";
+ packageName = "postcss-modules-scope";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz";
+ sha1 = "d6ea64994c79f97b62a72b426fbe6056a194bb90";
+ };
+ };
+ "postcss-modules-values-1.3.0" = {
+ name = "postcss-modules-values";
+ packageName = "postcss-modules-values";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz";
+ sha1 = "ecffa9d7e192518389f42ad0e83f72aec456ea20";
+ };
+ };
+ "postcss-normalize-charset-4.0.1" = {
+ name = "postcss-normalize-charset";
+ packageName = "postcss-normalize-charset";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz";
+ sha512 = "gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==";
+ };
+ };
+ "postcss-normalize-display-values-4.0.2" = {
+ name = "postcss-normalize-display-values";
+ packageName = "postcss-normalize-display-values";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz";
+ sha512 = "3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==";
+ };
+ };
+ "postcss-normalize-positions-4.0.2" = {
+ name = "postcss-normalize-positions";
+ packageName = "postcss-normalize-positions";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz";
+ sha512 = "Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==";
+ };
+ };
+ "postcss-normalize-repeat-style-4.0.2" = {
+ name = "postcss-normalize-repeat-style";
+ packageName = "postcss-normalize-repeat-style";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz";
+ sha512 = "qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==";
+ };
+ };
+ "postcss-normalize-string-4.0.2" = {
+ name = "postcss-normalize-string";
+ packageName = "postcss-normalize-string";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz";
+ sha512 = "RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==";
+ };
+ };
+ "postcss-normalize-timing-functions-4.0.2" = {
+ name = "postcss-normalize-timing-functions";
+ packageName = "postcss-normalize-timing-functions";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz";
+ sha512 = "acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==";
+ };
+ };
+ "postcss-normalize-unicode-4.0.1" = {
+ name = "postcss-normalize-unicode";
+ packageName = "postcss-normalize-unicode";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz";
+ sha512 = "od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==";
+ };
+ };
+ "postcss-normalize-url-4.0.1" = {
+ name = "postcss-normalize-url";
+ packageName = "postcss-normalize-url";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz";
+ sha512 = "p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==";
+ };
+ };
+ "postcss-normalize-whitespace-4.0.2" = {
+ name = "postcss-normalize-whitespace";
+ packageName = "postcss-normalize-whitespace";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz";
+ sha512 = "tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==";
+ };
+ };
+ "postcss-ordered-values-4.1.2" = {
+ name = "postcss-ordered-values";
+ packageName = "postcss-ordered-values";
+ version = "4.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz";
+ sha512 = "2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==";
+ };
+ };
+ "postcss-reduce-initial-4.0.3" = {
+ name = "postcss-reduce-initial";
+ packageName = "postcss-reduce-initial";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz";
+ sha512 = "gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==";
+ };
+ };
+ "postcss-reduce-transforms-4.0.2" = {
+ name = "postcss-reduce-transforms";
+ packageName = "postcss-reduce-transforms";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz";
+ sha512 = "EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==";
+ };
+ };
+ "postcss-selector-parser-3.1.2" = {
+ name = "postcss-selector-parser";
+ packageName = "postcss-selector-parser";
+ version = "3.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz";
+ sha512 = "h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==";
+ };
+ };
+ "postcss-selector-parser-6.0.2" = {
+ name = "postcss-selector-parser";
+ packageName = "postcss-selector-parser";
+ version = "6.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz";
+ sha512 = "36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==";
+ };
+ };
+ "postcss-svgo-4.0.2" = {
+ name = "postcss-svgo";
+ packageName = "postcss-svgo";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz";
+ sha512 = "C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==";
+ };
+ };
+ "postcss-unique-selectors-4.0.1" = {
+ name = "postcss-unique-selectors";
+ packageName = "postcss-unique-selectors";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz";
+ sha512 = "+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==";
+ };
+ };
+ "postcss-value-parser-3.3.1" = {
+ name = "postcss-value-parser";
+ packageName = "postcss-value-parser";
+ version = "3.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz";
+ sha512 = "pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==";
+ };
+ };
+ "postcss-value-parser-4.0.3" = {
+ name = "postcss-value-parser";
+ packageName = "postcss-value-parser";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz";
+ sha512 = "N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==";
+ };
+ };
+ "posthtml-0.11.6" = {
+ name = "posthtml";
+ packageName = "posthtml";
+ version = "0.11.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz";
+ sha512 = "C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==";
+ };
+ };
+ "posthtml-0.12.3" = {
+ name = "posthtml";
+ packageName = "posthtml";
+ version = "0.12.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/posthtml/-/posthtml-0.12.3.tgz";
+ sha512 = "Fbpi95+JJyR0tqU7pUy1zTSQFjAsluuwB9pJ1h0jtnGk7n/O2TBtP5nDl9rV0JVACjQ1Lm5wSp4ppChr8u3MhA==";
+ };
+ };
+ "posthtml-parser-0.4.2" = {
+ name = "posthtml-parser";
+ packageName = "posthtml-parser";
+ version = "0.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz";
+ sha512 = "BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==";
+ };
+ };
+ "posthtml-render-1.2.2" = {
+ name = "posthtml-render";
+ packageName = "posthtml-render";
+ version = "1.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.2.2.tgz";
+ sha512 = "MbIXTWwAfJ9qET6Zl29UNwJcDJEEz9Zkr5oDhiujitJa7YBJwEpbkX2cmuklCDxubTMoRWpid3q8DrSyGnUUzQ==";
+ };
+ };
+ "prelude-ls-1.1.2" = {
+ name = "prelude-ls";
+ packageName = "prelude-ls";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+ sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+ };
+ };
+ "private-0.1.8" = {
+ name = "private";
+ packageName = "private";
+ version = "0.1.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/private/-/private-0.1.8.tgz";
+ sha512 = "VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==";
+ };
+ };
+ "process-0.11.10" = {
+ name = "process";
+ packageName = "process";
+ version = "0.11.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
+ sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
+ };
+ };
+ "process-nextick-args-2.0.1" = {
+ name = "process-nextick-args";
+ packageName = "process-nextick-args";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+ sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+ };
+ };
+ "proto-list-1.2.4" = {
+ name = "proto-list";
+ packageName = "proto-list";
+ version = "1.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
+ sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
+ };
+ };
+ "pseudomap-1.0.2" = {
+ name = "pseudomap";
+ packageName = "pseudomap";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+ sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+ };
+ };
+ "psl-1.8.0" = {
+ name = "psl";
+ packageName = "psl";
+ version = "1.8.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
+ sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
+ };
+ };
+ "public-encrypt-4.0.3" = {
+ name = "public-encrypt";
+ packageName = "public-encrypt";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz";
+ sha512 = "zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==";
+ };
+ };
+ "punycode-1.3.2" = {
+ name = "punycode";
+ packageName = "punycode";
+ version = "1.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
+ sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
+ };
+ };
+ "punycode-1.4.1" = {
+ name = "punycode";
+ packageName = "punycode";
+ version = "1.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+ sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+ };
+ };
+ "punycode-2.1.1" = {
+ name = "punycode";
+ packageName = "punycode";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+ sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+ };
+ };
+ "purgecss-1.4.2" = {
+ name = "purgecss";
+ packageName = "purgecss";
+ version = "1.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/purgecss/-/purgecss-1.4.2.tgz";
+ sha512 = "hkOreFTgiyMHMmC2BxzdIw5DuC6kxAbP/gGOGd3MEsF3+5m69rIvUEPaxrnoUtfODTFKe9hcXjGwC6jcjoyhOw==";
+ };
+ };
+ "q-1.5.1" = {
+ name = "q";
+ packageName = "q";
+ version = "1.5.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
+ sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
+ };
+ };
+ "qs-6.5.2" = {
+ name = "qs";
+ packageName = "qs";
+ version = "6.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+ sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+ };
+ };
+ "querystring-0.2.0" = {
+ name = "querystring";
+ packageName = "querystring";
+ version = "0.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
+ sha1 = "b209849203bb25df820da756e747005878521620";
+ };
+ };
+ "querystring-es3-0.2.1" = {
+ name = "querystring-es3";
+ packageName = "querystring-es3";
+ version = "0.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz";
+ sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
+ };
+ };
+ "quote-stream-1.0.2" = {
+ name = "quote-stream";
+ packageName = "quote-stream";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz";
+ sha1 = "84963f8c9c26b942e153feeb53aae74652b7e0b2";
+ };
+ };
+ "randombytes-2.1.0" = {
+ name = "randombytes";
+ packageName = "randombytes";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+ sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+ };
+ };
+ "randomfill-1.0.4" = {
+ name = "randomfill";
+ packageName = "randomfill";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz";
+ sha512 = "87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==";
+ };
+ };
+ "range-parser-1.2.1" = {
+ name = "range-parser";
+ packageName = "range-parser";
+ version = "1.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz";
+ sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==";
+ };
+ };
+ "readable-stream-2.3.7" = {
+ name = "readable-stream";
+ packageName = "readable-stream";
+ version = "2.3.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
+ sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
+ };
+ };
+ "readable-stream-3.6.0" = {
+ name = "readable-stream";
+ packageName = "readable-stream";
+ version = "3.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
+ sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+ };
+ };
+ "readdirp-2.2.1" = {
+ name = "readdirp";
+ packageName = "readdirp";
+ version = "2.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz";
+ sha512 = "1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==";
+ };
+ };
+ "regenerate-1.4.0" = {
+ name = "regenerate";
+ packageName = "regenerate";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz";
+ sha512 = "1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==";
+ };
+ };
+ "regenerate-unicode-properties-8.2.0" = {
+ name = "regenerate-unicode-properties";
+ packageName = "regenerate-unicode-properties";
+ version = "8.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz";
+ sha512 = "F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==";
+ };
+ };
+ "regenerator-runtime-0.11.1" = {
+ name = "regenerator-runtime";
+ packageName = "regenerator-runtime";
+ version = "0.11.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
+ sha512 = "MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==";
+ };
+ };
+ "regenerator-runtime-0.12.1" = {
+ name = "regenerator-runtime";
+ packageName = "regenerator-runtime";
+ version = "0.12.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz";
+ sha512 = "odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==";
+ };
+ };
+ "regenerator-runtime-0.13.5" = {
+ name = "regenerator-runtime";
+ packageName = "regenerator-runtime";
+ version = "0.13.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
+ sha512 = "ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==";
+ };
+ };
+ "regenerator-transform-0.14.4" = {
+ name = "regenerator-transform";
+ packageName = "regenerator-transform";
+ version = "0.14.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz";
+ sha512 = "EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==";
+ };
+ };
+ "regex-not-1.0.2" = {
+ name = "regex-not";
+ packageName = "regex-not";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz";
+ sha512 = "J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==";
+ };
+ };
+ "regexpu-core-4.7.0" = {
+ name = "regexpu-core";
+ packageName = "regexpu-core";
+ version = "4.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz";
+ sha512 = "TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==";
+ };
+ };
+ "regjsgen-0.5.1" = {
+ name = "regjsgen";
+ packageName = "regjsgen";
+ version = "0.5.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz";
+ sha512 = "5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==";
+ };
+ };
+ "regjsparser-0.6.4" = {
+ name = "regjsparser";
+ packageName = "regjsparser";
+ version = "0.6.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz";
+ sha512 = "64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==";
+ };
+ };
+ "remove-trailing-separator-1.1.0" = {
+ name = "remove-trailing-separator";
+ packageName = "remove-trailing-separator";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
+ sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
+ };
+ };
+ "repeat-element-1.1.3" = {
+ name = "repeat-element";
+ packageName = "repeat-element";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz";
+ sha512 = "ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==";
+ };
+ };
+ "repeat-string-1.6.1" = {
+ name = "repeat-string";
+ packageName = "repeat-string";
+ version = "1.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz";
+ sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+ };
+ };
+ "request-2.88.2" = {
+ name = "request";
+ packageName = "request";
+ version = "2.88.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+ sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+ };
+ };
+ "request-promise-core-1.1.3" = {
+ name = "request-promise-core";
+ packageName = "request-promise-core";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz";
+ sha512 = "QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==";
+ };
+ };
+ "request-promise-native-1.0.8" = {
+ name = "request-promise-native";
+ packageName = "request-promise-native";
+ version = "1.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz";
+ sha512 = "dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==";
+ };
+ };
+ "require-directory-2.1.1" = {
+ name = "require-directory";
+ packageName = "require-directory";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+ sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+ };
+ };
+ "require-main-filename-2.0.0" = {
+ name = "require-main-filename";
+ packageName = "require-main-filename";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz";
+ sha512 = "NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==";
+ };
+ };
+ "resolve-1.17.0" = {
+ name = "resolve";
+ packageName = "resolve";
+ version = "1.17.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz";
+ sha512 = "ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==";
+ };
+ };
+ "resolve-from-3.0.0" = {
+ name = "resolve-from";
+ packageName = "resolve-from";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz";
+ sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
+ };
+ };
+ "resolve-url-0.2.1" = {
+ name = "resolve-url";
+ packageName = "resolve-url";
+ version = "0.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz";
+ sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
+ };
+ };
+ "restore-cursor-2.0.0" = {
+ name = "restore-cursor";
+ packageName = "restore-cursor";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz";
+ sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
+ };
+ };
+ "ret-0.1.15" = {
+ name = "ret";
+ packageName = "ret";
+ version = "0.1.15";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz";
+ sha512 = "TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==";
+ };
+ };
+ "rgb-regex-1.0.1" = {
+ name = "rgb-regex";
+ packageName = "rgb-regex";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz";
+ sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1";
+ };
+ };
+ "rgba-regex-1.0.0" = {
+ name = "rgba-regex";
+ packageName = "rgba-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz";
+ sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3";
+ };
+ };
+ "rimraf-2.6.3" = {
+ name = "rimraf";
+ packageName = "rimraf";
+ version = "2.6.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
+ sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
+ };
+ };
+ "ripemd160-2.0.2" = {
+ name = "ripemd160";
+ packageName = "ripemd160";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz";
+ sha512 = "ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==";
+ };
+ };
+ "safe-buffer-5.1.2" = {
+ name = "safe-buffer";
+ packageName = "safe-buffer";
+ version = "5.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+ sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+ };
+ };
+ "safe-regex-1.1.0" = {
+ name = "safe-regex";
+ packageName = "safe-regex";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz";
+ sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
+ };
+ };
+ "safer-buffer-2.1.2" = {
+ name = "safer-buffer";
+ packageName = "safer-buffer";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+ sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+ };
+ };
+ "safer-eval-1.3.6" = {
+ name = "safer-eval";
+ packageName = "safer-eval";
+ version = "1.3.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safer-eval/-/safer-eval-1.3.6.tgz";
+ sha512 = "DN9tBsZgtUOHODzSfO1nGCLhZtxc7Qq/d8/2SNxQZ9muYXZspSh1fO7HOsrf4lcelBNviAJLCxB/ggmG+jV1aw==";
+ };
+ };
+ "sax-1.2.4" = {
+ name = "sax";
+ packageName = "sax";
+ version = "1.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+ sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
+ };
+ };
+ "saxes-3.1.11" = {
+ name = "saxes";
+ packageName = "saxes";
+ version = "3.1.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz";
+ sha512 = "Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==";
+ };
+ };
+ "semver-5.7.1" = {
+ name = "semver";
+ packageName = "semver";
+ version = "5.7.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+ sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+ };
+ };
+ "send-0.17.1" = {
+ name = "send";
+ packageName = "send";
+ version = "0.17.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/send/-/send-0.17.1.tgz";
+ sha512 = "BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==";
+ };
+ };
+ "serialize-to-js-1.2.2" = {
+ name = "serialize-to-js";
+ packageName = "serialize-to-js";
+ version = "1.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.2.tgz";
+ sha512 = "mUc8vA5iJghe+O+3s0YDGFLMJcqitVFk787YKiv8a4sf6RX5W0u81b+gcHrp15O0fFa010dRBVZvwcKXOWsL9Q==";
+ };
+ };
+ "serve-static-1.14.1" = {
+ name = "serve-static";
+ packageName = "serve-static";
+ version = "1.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz";
+ sha512 = "JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==";
+ };
+ };
+ "set-blocking-2.0.0" = {
+ name = "set-blocking";
+ packageName = "set-blocking";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+ sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+ };
+ };
+ "set-value-2.0.1" = {
+ name = "set-value";
+ packageName = "set-value";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz";
+ sha512 = "JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==";
+ };
+ };
+ "setimmediate-1.0.5" = {
+ name = "setimmediate";
+ packageName = "setimmediate";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz";
+ sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
+ };
+ };
+ "setprototypeof-1.1.1" = {
+ name = "setprototypeof";
+ packageName = "setprototypeof";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz";
+ sha512 = "JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==";
+ };
+ };
+ "sha.js-2.4.11" = {
+ name = "sha.js";
+ packageName = "sha.js";
+ version = "2.4.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz";
+ sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==";
+ };
+ };
+ "shallow-copy-0.0.1" = {
+ name = "shallow-copy";
+ packageName = "shallow-copy";
+ version = "0.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz";
+ sha1 = "415f42702d73d810330292cc5ee86eae1a11a170";
+ };
+ };
+ "shebang-command-1.2.0" = {
+ name = "shebang-command";
+ packageName = "shebang-command";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
+ sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+ };
+ };
+ "shebang-regex-1.0.0" = {
+ name = "shebang-regex";
+ packageName = "shebang-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
+ sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+ };
+ };
+ "sigmund-1.0.1" = {
+ name = "sigmund";
+ packageName = "sigmund";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
+ sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
+ };
+ };
+ "signal-exit-3.0.3" = {
+ name = "signal-exit";
+ packageName = "signal-exit";
+ version = "3.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz";
+ sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
+ };
+ };
+ "simple-swizzle-0.2.2" = {
+ name = "simple-swizzle";
+ packageName = "simple-swizzle";
+ version = "0.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz";
+ sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a";
+ };
+ };
+ "snapdragon-0.8.2" = {
+ name = "snapdragon";
+ packageName = "snapdragon";
+ version = "0.8.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz";
+ sha512 = "FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==";
+ };
+ };
+ "snapdragon-node-2.1.1" = {
+ name = "snapdragon-node";
+ packageName = "snapdragon-node";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+ sha512 = "O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==";
+ };
+ };
+ "snapdragon-util-3.0.1" = {
+ name = "snapdragon-util";
+ packageName = "snapdragon-util";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+ sha512 = "mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==";
+ };
+ };
+ "source-map-0.5.7" = {
+ name = "source-map";
+ packageName = "source-map";
+ version = "0.5.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
+ sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+ };
+ };
+ "source-map-0.6.1" = {
+ name = "source-map";
+ packageName = "source-map";
+ version = "0.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+ sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+ };
+ };
+ "source-map-resolve-0.5.3" = {
+ name = "source-map-resolve";
+ packageName = "source-map-resolve";
+ version = "0.5.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+ sha512 = "Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==";
+ };
+ };
+ "source-map-support-0.5.19" = {
+ name = "source-map-support";
+ packageName = "source-map-support";
+ version = "0.5.19";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz";
+ sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==";
+ };
+ };
+ "source-map-url-0.4.0" = {
+ name = "source-map-url";
+ packageName = "source-map-url";
+ version = "0.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz";
+ sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
+ };
+ };
+ "split-string-3.1.0" = {
+ name = "split-string";
+ packageName = "split-string";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz";
+ sha512 = "NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==";
+ };
+ };
+ "sprintf-js-1.0.3" = {
+ name = "sprintf-js";
+ packageName = "sprintf-js";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+ sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+ };
+ };
+ "sshpk-1.16.1" = {
+ name = "sshpk";
+ packageName = "sshpk";
+ version = "1.16.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+ sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
+ };
+ };
+ "stable-0.1.8" = {
+ name = "stable";
+ packageName = "stable";
+ version = "0.1.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz";
+ sha512 = "ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==";
+ };
+ };
+ "static-eval-2.0.5" = {
+ name = "static-eval";
+ packageName = "static-eval";
+ version = "2.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/static-eval/-/static-eval-2.0.5.tgz";
+ sha512 = "nNbV6LbGtMBgv7e9LFkt5JV8RVlRsyJrphfAt9tOtBBW/SfnzZDf2KnS72an8e434A+9e/BmJuTxeGPvrAK7KA==";
+ };
+ };
+ "static-extend-0.1.2" = {
+ name = "static-extend";
+ packageName = "static-extend";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz";
+ sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
+ };
+ };
+ "static-module-2.2.5" = {
+ name = "static-module";
+ packageName = "static-module";
+ version = "2.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz";
+ sha512 = "D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==";
+ };
+ };
+ "statuses-1.5.0" = {
+ name = "statuses";
+ packageName = "statuses";
+ version = "1.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
+ sha1 = "161c7dac177659fd9811f43771fa99381478628c";
+ };
+ };
+ "stealthy-require-1.1.1" = {
+ name = "stealthy-require";
+ packageName = "stealthy-require";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz";
+ sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b";
+ };
+ };
+ "stream-browserify-2.0.2" = {
+ name = "stream-browserify";
+ packageName = "stream-browserify";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz";
+ sha512 = "nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==";
+ };
+ };
+ "stream-http-2.8.3" = {
+ name = "stream-http";
+ packageName = "stream-http";
+ version = "2.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz";
+ sha512 = "+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==";
+ };
+ };
+ "string-width-3.1.0" = {
+ name = "string-width";
+ packageName = "string-width";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
+ sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+ };
+ };
+ "string.prototype.trimend-1.0.1" = {
+ name = "string.prototype.trimend";
+ packageName = "string.prototype.trimend";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+ sha512 = "LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==";
+ };
+ };
+ "string.prototype.trimleft-2.1.2" = {
+ name = "string.prototype.trimleft";
+ packageName = "string.prototype.trimleft";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz";
+ sha512 = "gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==";
+ };
+ };
+ "string.prototype.trimright-2.1.2" = {
+ name = "string.prototype.trimright";
+ packageName = "string.prototype.trimright";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz";
+ sha512 = "ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==";
+ };
+ };
+ "string.prototype.trimstart-1.0.1" = {
+ name = "string.prototype.trimstart";
+ packageName = "string.prototype.trimstart";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+ sha512 = "XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==";
+ };
+ };
+ "string_decoder-1.1.1" = {
+ name = "string_decoder";
+ packageName = "string_decoder";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+ sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+ };
+ };
+ "strip-ansi-3.0.1" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+ sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+ };
+ };
+ "strip-ansi-4.0.0" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
+ sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+ };
+ };
+ "strip-ansi-5.2.0" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "5.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
+ sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+ };
+ };
+ "stylehacks-4.0.3" = {
+ name = "stylehacks";
+ packageName = "stylehacks";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz";
+ sha512 = "7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==";
+ };
+ };
+ "supports-color-2.0.0" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
+ sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+ };
+ };
+ "supports-color-3.2.3" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "3.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz";
+ sha1 = "65ac0504b3954171d8a64946b2ae3cbb8a5f54f6";
+ };
+ };
+ "supports-color-5.5.0" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "5.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
+ sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+ };
+ };
+ "supports-color-6.1.0" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "6.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz";
+ sha512 = "qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==";
+ };
+ };
+ "svgo-1.3.2" = {
+ name = "svgo";
+ packageName = "svgo";
+ version = "1.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz";
+ sha512 = "yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==";
+ };
+ };
+ "symbol-tree-3.2.4" = {
+ name = "symbol-tree";
+ packageName = "symbol-tree";
+ version = "3.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz";
+ sha512 = "9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==";
+ };
+ };
+ "temp-0.9.0" = {
+ name = "temp";
+ packageName = "temp";
+ version = "0.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz";
+ sha512 = "YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ==";
+ };
+ };
+ "terser-3.17.0" = {
+ name = "terser";
+ packageName = "terser";
+ version = "3.17.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz";
+ sha512 = "/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==";
+ };
+ };
+ "terser-4.6.12" = {
+ name = "terser";
+ packageName = "terser";
+ version = "4.6.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz";
+ sha512 = "fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==";
+ };
+ };
+ "through2-2.0.5" = {
+ name = "through2";
+ packageName = "through2";
+ version = "2.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
+ sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
+ };
+ };
+ "timers-browserify-2.0.11" = {
+ name = "timers-browserify";
+ packageName = "timers-browserify";
+ version = "2.0.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz";
+ sha512 = "60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==";
+ };
+ };
+ "timsort-0.3.0" = {
+ name = "timsort";
+ packageName = "timsort";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz";
+ sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4";
+ };
+ };
+ "tiny-inflate-1.0.3" = {
+ name = "tiny-inflate";
+ packageName = "tiny-inflate";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz";
+ sha512 = "pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==";
+ };
+ };
+ "to-arraybuffer-1.0.1" = {
+ name = "to-arraybuffer";
+ packageName = "to-arraybuffer";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
+ sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
+ };
+ };
+ "to-fast-properties-1.0.3" = {
+ name = "to-fast-properties";
+ packageName = "to-fast-properties";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz";
+ sha1 = "b83571fa4d8c25b82e231b06e3a3055de4ca1a47";
+ };
+ };
+ "to-fast-properties-2.0.0" = {
+ name = "to-fast-properties";
+ packageName = "to-fast-properties";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+ sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+ };
+ };
+ "to-object-path-0.3.0" = {
+ name = "to-object-path";
+ packageName = "to-object-path";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz";
+ sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
+ };
+ };
+ "to-regex-3.0.2" = {
+ name = "to-regex";
+ packageName = "to-regex";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz";
+ sha512 = "FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==";
+ };
+ };
+ "to-regex-range-2.1.1" = {
+ name = "to-regex-range";
+ packageName = "to-regex-range";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz";
+ sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
+ };
+ };
+ "toidentifier-1.0.0" = {
+ name = "toidentifier";
+ packageName = "toidentifier";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz";
+ sha512 = "yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==";
+ };
+ };
+ "tough-cookie-2.5.0" = {
+ name = "tough-cookie";
+ packageName = "tough-cookie";
+ version = "2.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+ sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+ };
+ };
+ "tr46-1.0.1" = {
+ name = "tr46";
+ packageName = "tr46";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz";
+ sha1 = "a8b13fd6bfd2489519674ccde55ba3693b706d09";
+ };
+ };
+ "trim-right-1.0.1" = {
+ name = "trim-right";
+ packageName = "trim-right";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz";
+ sha1 = "cb2e1203067e0c8de1f614094b9fe45704ea6003";
+ };
+ };
+ "tty-browserify-0.0.0" = {
+ name = "tty-browserify";
+ packageName = "tty-browserify";
+ version = "0.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz";
+ sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
+ };
+ };
+ "tunnel-agent-0.6.0" = {
+ name = "tunnel-agent";
+ packageName = "tunnel-agent";
+ version = "0.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+ sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+ };
+ };
+ "tweetnacl-0.14.5" = {
+ name = "tweetnacl";
+ packageName = "tweetnacl";
+ version = "0.14.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+ sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+ };
+ };
+ "type-check-0.3.2" = {
+ name = "type-check";
+ packageName = "type-check";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+ sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+ };
+ };
+ "typedarray-0.0.6" = {
+ name = "typedarray";
+ packageName = "typedarray";
+ version = "0.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+ sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+ };
+ };
+ "uncss-0.17.3" = {
+ name = "uncss";
+ packageName = "uncss";
+ version = "0.17.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz";
+ sha512 = "ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==";
+ };
+ };
+ "unicode-canonical-property-names-ecmascript-1.0.4" = {
+ name = "unicode-canonical-property-names-ecmascript";
+ packageName = "unicode-canonical-property-names-ecmascript";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz";
+ sha512 = "jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==";
+ };
+ };
+ "unicode-match-property-ecmascript-1.0.4" = {
+ name = "unicode-match-property-ecmascript";
+ packageName = "unicode-match-property-ecmascript";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz";
+ sha512 = "L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==";
+ };
+ };
+ "unicode-match-property-value-ecmascript-1.2.0" = {
+ name = "unicode-match-property-value-ecmascript";
+ packageName = "unicode-match-property-value-ecmascript";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz";
+ sha512 = "wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==";
+ };
+ };
+ "unicode-property-aliases-ecmascript-1.1.0" = {
+ name = "unicode-property-aliases-ecmascript";
+ packageName = "unicode-property-aliases-ecmascript";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz";
+ sha512 = "PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==";
+ };
+ };
+ "unicode-trie-0.3.1" = {
+ name = "unicode-trie";
+ packageName = "unicode-trie";
+ version = "0.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz";
+ sha1 = "d671dddd89101a08bac37b6a5161010602052085";
+ };
+ };
+ "union-value-1.0.1" = {
+ name = "union-value";
+ packageName = "union-value";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz";
+ sha512 = "tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==";
+ };
+ };
+ "uniq-1.0.1" = {
+ name = "uniq";
+ packageName = "uniq";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz";
+ sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
+ };
+ };
+ "uniqs-2.0.0" = {
+ name = "uniqs";
+ packageName = "uniqs";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz";
+ sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
+ };
+ };
+ "unquote-1.1.1" = {
+ name = "unquote";
+ packageName = "unquote";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz";
+ sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544";
+ };
+ };
+ "unset-value-1.0.0" = {
+ name = "unset-value";
+ packageName = "unset-value";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz";
+ sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
+ };
+ };
+ "upath-1.2.0" = {
+ name = "upath";
+ packageName = "upath";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz";
+ sha512 = "aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==";
+ };
+ };
+ "uri-js-4.2.2" = {
+ name = "uri-js";
+ packageName = "uri-js";
+ version = "4.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+ sha512 = "KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==";
+ };
+ };
+ "urix-0.1.0" = {
+ name = "urix";
+ packageName = "urix";
+ version = "0.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";
+ sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
+ };
+ };
+ "url-0.11.0" = {
+ name = "url";
+ packageName = "url";
+ version = "0.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/url/-/url-0.11.0.tgz";
+ sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
+ };
+ };
+ "use-3.1.1" = {
+ name = "use";
+ packageName = "use";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/use/-/use-3.1.1.tgz";
+ sha512 = "cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==";
+ };
+ };
+ "util-0.10.3" = {
+ name = "util";
+ packageName = "util";
+ version = "0.10.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util/-/util-0.10.3.tgz";
+ sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+ };
+ };
+ "util-0.11.1" = {
+ name = "util";
+ packageName = "util";
+ version = "0.11.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util/-/util-0.11.1.tgz";
+ sha512 = "HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==";
+ };
+ };
+ "util-deprecate-1.0.2" = {
+ name = "util-deprecate";
+ packageName = "util-deprecate";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+ sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+ };
+ };
+ "util.promisify-1.0.1" = {
+ name = "util.promisify";
+ packageName = "util.promisify";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz";
+ sha512 = "g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==";
+ };
+ };
+ "uuid-3.4.0" = {
+ name = "uuid";
+ packageName = "uuid";
+ version = "3.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+ sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+ };
+ };
+ "v8-compile-cache-2.1.0" = {
+ name = "v8-compile-cache";
+ packageName = "v8-compile-cache";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz";
+ sha512 = "usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==";
+ };
+ };
+ "vendors-1.0.4" = {
+ name = "vendors";
+ packageName = "vendors";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz";
+ sha512 = "/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==";
+ };
+ };
+ "verror-1.10.0" = {
+ name = "verror";
+ packageName = "verror";
+ version = "1.10.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+ sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+ };
+ };
+ "vlq-0.2.3" = {
+ name = "vlq";
+ packageName = "vlq";
+ version = "0.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz";
+ sha512 = "DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==";
+ };
+ };
+ "vm-browserify-1.1.2" = {
+ name = "vm-browserify";
+ packageName = "vm-browserify";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz";
+ sha512 = "2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==";
+ };
+ };
+ "w3c-hr-time-1.0.2" = {
+ name = "w3c-hr-time";
+ packageName = "w3c-hr-time";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz";
+ sha512 = "z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==";
+ };
+ };
+ "w3c-xmlserializer-1.1.2" = {
+ name = "w3c-xmlserializer";
+ packageName = "w3c-xmlserializer";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz";
+ sha512 = "p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==";
+ };
+ };
+ "wcwidth-1.0.1" = {
+ name = "wcwidth";
+ packageName = "wcwidth";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz";
+ sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8";
+ };
+ };
+ "webidl-conversions-4.0.2" = {
+ name = "webidl-conversions";
+ packageName = "webidl-conversions";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz";
+ sha512 = "YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==";
+ };
+ };
+ "whatwg-encoding-1.0.5" = {
+ name = "whatwg-encoding";
+ packageName = "whatwg-encoding";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz";
+ sha512 = "b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==";
+ };
+ };
+ "whatwg-mimetype-2.3.0" = {
+ name = "whatwg-mimetype";
+ packageName = "whatwg-mimetype";
+ version = "2.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz";
+ sha512 = "M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==";
+ };
+ };
+ "whatwg-url-7.1.0" = {
+ name = "whatwg-url";
+ packageName = "whatwg-url";
+ version = "7.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz";
+ sha512 = "WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==";
+ };
+ };
+ "which-1.3.1" = {
+ name = "which";
+ packageName = "which";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+ sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+ };
+ };
+ "which-module-2.0.0" = {
+ name = "which-module";
+ packageName = "which-module";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";
+ sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+ };
+ };
+ "word-wrap-1.2.3" = {
+ name = "word-wrap";
+ packageName = "word-wrap";
+ version = "1.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+ sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+ };
+ };
+ "wrap-ansi-5.1.0" = {
+ name = "wrap-ansi";
+ packageName = "wrap-ansi";
+ version = "5.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
+ sha512 = "QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==";
+ };
+ };
+ "wrappy-1.0.2" = {
+ name = "wrappy";
+ packageName = "wrappy";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+ sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+ };
+ };
+ "ws-5.2.2" = {
+ name = "ws";
+ packageName = "ws";
+ version = "5.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz";
+ sha512 = "jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==";
+ };
+ };
+ "ws-6.2.1" = {
+ name = "ws";
+ packageName = "ws";
+ version = "6.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz";
+ sha512 = "GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==";
+ };
+ };
+ "xml-name-validator-3.0.0" = {
+ name = "xml-name-validator";
+ packageName = "xml-name-validator";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz";
+ sha512 = "A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==";
+ };
+ };
+ "xmlchars-2.2.0" = {
+ name = "xmlchars";
+ packageName = "xmlchars";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz";
+ sha512 = "JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==";
+ };
+ };
+ "xtend-4.0.2" = {
+ name = "xtend";
+ packageName = "xtend";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+ sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+ };
+ };
+ "y18n-4.0.0" = {
+ name = "y18n";
+ packageName = "y18n";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz";
+ sha512 = "r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==";
+ };
+ };
+ "yallist-2.1.2" = {
+ name = "yallist";
+ packageName = "yallist";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+ sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+ };
+ };
+ "yargs-14.2.3" = {
+ name = "yargs";
+ packageName = "yargs";
+ version = "14.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz";
+ sha512 = "ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==";
+ };
+ };
+ "yargs-parser-15.0.1" = {
+ name = "yargs-parser";
+ packageName = "yargs-parser";
+ version = "15.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz";
+ sha512 = "0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==";
+ };
+ };
+ };
+ args = {
+ name = "codenamesgreen";
+ packageName = "codenamesgreen";
+ version = "1.0.0";
+ src = let
+ upstream = fetchFromGitHub {
+ owner = "jbowens";
+ repo = "codenamesgreen";
+ rev = "6d014d0df14bee72495e01f12885ef31cba3bd6b";
+ sha256 = "0bkaf52rnjw792q0755in4k5jbcrmgq06cl03fdl6zdr8kq2mhm0";
+ };
+ in
+ runCommand "codenamesgreen-src" {} ''
+ cp -a ${upstream} $out
+ chmod -R u+w $out
+ cd $out
+ patch -p1 < ${./codenames.patch}
+ patch -p1 < ${./immae-assets.patch}
+ '';
+ dependencies = [
+ sources."@babel/code-frame-7.0.0"
+ (sources."@babel/core-7.3.4" // {
+ dependencies = [
+ sources."json5-2.1.3"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/generator-7.3.4" // {
+ dependencies = [
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/helper-annotate-as-pure-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-builder-binary-assignment-operator-visitor-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-builder-react-jsx-7.9.0" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ sources."@babel/helper-create-regexp-features-plugin-7.8.8"
+ (sources."@babel/helper-define-map-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-explode-assignable-expression-7.8.3" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/generator-7.9.5"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/traverse-7.9.5"
+ sources."@babel/types-7.9.5"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/helper-function-name-7.9.5" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-get-function-arity-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-hoist-variables-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-member-expression-to-functions-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-module-imports-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-module-transforms-7.9.0" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-optimise-call-expression-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ sources."@babel/helper-plugin-utils-7.8.3"
+ sources."@babel/helper-regex-7.8.3"
+ (sources."@babel/helper-remap-async-to-generator-7.8.3" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/generator-7.9.5"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/traverse-7.9.5"
+ sources."@babel/types-7.9.5"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/helper-replace-supers-7.8.6" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/generator-7.9.5"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/traverse-7.9.5"
+ sources."@babel/types-7.9.5"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/helper-simple-access-7.8.3" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ (sources."@babel/helper-split-export-declaration-7.8.3" // {
+ dependencies = [
+ sources."@babel/types-7.9.5"
+ ];
+ })
+ sources."@babel/helper-validator-identifier-7.9.5"
+ (sources."@babel/helper-wrap-function-7.8.3" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/generator-7.9.5"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/traverse-7.9.5"
+ sources."@babel/types-7.9.5"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."@babel/helpers-7.9.2" // {
+ dependencies = [
+ sources."@babel/code-frame-7.8.3"
+ sources."@babel/generator-7.9.5"
+ sources."@babel/parser-7.9.4"
+ sources."@babel/template-7.8.6"
+ sources."@babel/traverse-7.9.5"
+ sources."@babel/types-7.9.5"
+ sources."source-map-0.5.7"
+ ];
+ })
+ sources."@babel/highlight-7.9.0"
+ sources."@babel/parser-7.3.4"
+ sources."@babel/plugin-proposal-async-generator-functions-7.8.3"
+ sources."@babel/plugin-proposal-json-strings-7.8.3"
+ sources."@babel/plugin-proposal-object-rest-spread-7.9.5"
+ sources."@babel/plugin-proposal-optional-catch-binding-7.8.3"
+ sources."@babel/plugin-proposal-unicode-property-regex-7.8.8"
+ sources."@babel/plugin-syntax-async-generators-7.8.4"
+ sources."@babel/plugin-syntax-flow-7.8.3"
+ sources."@babel/plugin-syntax-json-strings-7.8.3"
+ sources."@babel/plugin-syntax-jsx-7.8.3"
+ sources."@babel/plugin-syntax-object-rest-spread-7.8.3"
+ sources."@babel/plugin-syntax-optional-catch-binding-7.8.3"
+ sources."@babel/plugin-transform-arrow-functions-7.8.3"
+ sources."@babel/plugin-transform-async-to-generator-7.8.3"
+ sources."@babel/plugin-transform-block-scoped-functions-7.8.3"
+ sources."@babel/plugin-transform-block-scoping-7.8.3"
+ sources."@babel/plugin-transform-classes-7.9.5"
+ sources."@babel/plugin-transform-computed-properties-7.8.3"
+ sources."@babel/plugin-transform-destructuring-7.9.5"
+ sources."@babel/plugin-transform-dotall-regex-7.8.3"
+ sources."@babel/plugin-transform-duplicate-keys-7.8.3"
+ sources."@babel/plugin-transform-exponentiation-operator-7.8.3"
+ sources."@babel/plugin-transform-flow-strip-types-7.3.4"
+ sources."@babel/plugin-transform-for-of-7.9.0"
+ sources."@babel/plugin-transform-function-name-7.8.3"
+ sources."@babel/plugin-transform-literals-7.8.3"
+ sources."@babel/plugin-transform-modules-amd-7.9.0"
+ sources."@babel/plugin-transform-modules-commonjs-7.2.0"
+ sources."@babel/plugin-transform-modules-systemjs-7.9.0"
+ sources."@babel/plugin-transform-modules-umd-7.9.0"
+ sources."@babel/plugin-transform-named-capturing-groups-regex-7.8.3"
+ sources."@babel/plugin-transform-new-target-7.8.3"
+ sources."@babel/plugin-transform-object-super-7.8.3"
+ sources."@babel/plugin-transform-parameters-7.9.5"
+ sources."@babel/plugin-transform-react-jsx-7.3.0"
+ sources."@babel/plugin-transform-regenerator-7.8.7"
+ sources."@babel/plugin-transform-shorthand-properties-7.8.3"
+ sources."@babel/plugin-transform-spread-7.8.3"
+ sources."@babel/plugin-transform-sticky-regex-7.8.3"
+ sources."@babel/plugin-transform-template-literals-7.8.3"
+ sources."@babel/plugin-transform-typeof-symbol-7.8.4"
+ sources."@babel/plugin-transform-unicode-regex-7.8.3"
+ sources."@babel/preset-env-7.3.4"
+ (sources."@babel/runtime-7.3.4" // {
+ dependencies = [
+ sources."regenerator-runtime-0.12.1"
+ ];
+ })
+ sources."@babel/template-7.2.2"
+ sources."@babel/traverse-7.3.4"
+ sources."@babel/types-7.3.4"
+ sources."@iarna/toml-2.2.5"
+ sources."@mrmlnc/readdir-enhanced-2.2.1"
+ sources."@nodelib/fs.stat-1.1.3"
+ sources."@parcel/fs-1.11.0"
+ sources."@parcel/logger-1.11.1"
+ sources."@parcel/utils-1.11.0"
+ sources."@parcel/watcher-1.12.1"
+ sources."@parcel/workers-1.11.0"
+ sources."@types/q-1.5.2"
+ sources."abab-2.0.3"
+ sources."abbrev-1.1.1"
+ sources."acorn-7.1.1"
+ (sources."acorn-globals-4.3.4" // {
+ dependencies = [
+ sources."acorn-6.4.1"
+ ];
+ })
+ sources."acorn-walk-6.2.0"
+ sources."ajv-6.12.2"
+ sources."alphanum-sort-1.0.2"
+ sources."ansi-regex-3.0.0"
+ sources."ansi-styles-3.2.1"
+ (sources."ansi-to-html-0.6.14" // {
+ dependencies = [
+ sources."entities-1.1.2"
+ ];
+ })
+ (sources."anymatch-2.0.0" // {
+ dependencies = [
+ sources."normalize-path-2.1.1"
+ ];
+ })
+ sources."argparse-1.0.10"
+ sources."arr-diff-4.0.0"
+ sources."arr-flatten-1.1.0"
+ sources."arr-union-3.1.0"
+ sources."array-equal-1.0.0"
+ sources."array-unique-0.3.2"
+ sources."asn1-0.2.4"
+ sources."asn1.js-4.10.1"
+ (sources."assert-1.5.0" // {
+ dependencies = [
+ sources."inherits-2.0.1"
+ sources."util-0.10.3"
+ ];
+ })
+ sources."assert-plus-1.0.0"
+ sources."assign-symbols-1.0.0"
+ sources."async-each-1.0.3"
+ sources."async-limiter-1.0.1"
+ sources."asynckit-0.4.0"
+ sources."atob-2.1.2"
+ sources."aws-sign2-0.7.0"
+ sources."aws4-1.9.1"
+ sources."babel-plugin-dynamic-import-node-2.3.3"
+ (sources."babel-runtime-6.26.0" // {
+ dependencies = [
+ sources."regenerator-runtime-0.11.1"
+ ];
+ })
+ (sources."babel-types-6.26.0" // {
+ dependencies = [
+ sources."to-fast-properties-1.0.3"
+ ];
+ })
+ sources."babylon-walk-1.0.2"
+ sources."balanced-match-1.0.0"
+ (sources."base-0.11.2" // {
+ dependencies = [
+ sources."define-property-1.0.0"
+ sources."is-accessor-descriptor-1.0.0"
+ sources."is-data-descriptor-1.0.0"
+ sources."is-descriptor-1.0.2"
+ ];
+ })
+ sources."base64-js-1.3.1"
+ sources."bcrypt-pbkdf-1.0.2"
+ sources."binary-extensions-1.13.1"
+ sources."bindings-1.5.0"
+ sources."bn.js-4.11.8"
+ sources."boolbase-1.0.0"
+ sources."brace-expansion-1.1.11"
+ (sources."braces-2.3.2" // {
+ dependencies = [
+ sources."extend-shallow-2.0.1"
+ ];
+ })
+ sources."brfs-1.6.1"
+ sources."brorand-1.1.0"
+ sources."browser-process-hrtime-1.0.0"
+ sources."browserify-aes-1.2.0"
+ sources."browserify-cipher-1.0.1"
+ sources."browserify-des-1.0.2"
+ sources."browserify-rsa-4.0.1"
+ sources."browserify-sign-4.0.4"
+ (sources."browserify-zlib-0.2.0" // {
+ dependencies = [
+ sources."pako-1.0.11"
+ ];
+ })
+ sources."browserslist-4.12.0"
+ sources."buffer-4.9.2"
+ sources."buffer-equal-0.0.1"
+ sources."buffer-from-1.1.1"
+ sources."buffer-xor-1.0.3"
+ sources."builtin-status-codes-3.0.0"
+ sources."cache-base-1.0.1"
+ sources."call-me-maybe-1.0.1"
+ sources."caller-callsite-2.0.0"
+ sources."caller-path-2.0.0"
+ sources."callsites-2.0.0"
+ sources."camelcase-5.3.1"
+ sources."caniuse-api-3.0.0"
+ sources."caniuse-lite-1.0.30001048"
+ sources."caseless-0.12.0"
+ (sources."chalk-2.4.2" // {
+ dependencies = [
+ sources."supports-color-5.5.0"
+ ];
+ })
+ (sources."chokidar-2.1.8" // {
+ dependencies = [
+ sources."fsevents-1.2.12"
+ ];
+ })
+ sources."cipher-base-1.0.4"
+ (sources."class-utils-0.3.6" // {
+ dependencies = [
+ sources."define-property-0.2.5"
+ ];
+ })
+ sources."cli-cursor-2.1.0"
+ sources."cli-spinners-1.3.1"
+ (sources."cliui-5.0.0" // {
+ dependencies = [
+ sources."ansi-regex-4.1.0"
+ sources."strip-ansi-5.2.0"
+ ];
+ })
+ sources."clone-2.1.2"
+ sources."clones-1.2.0"
+ sources."coa-2.0.2"
+ sources."collection-visit-1.0.0"
+ sources."color-3.1.2"
+ sources."color-convert-1.9.3"
+ sources."color-name-1.1.3"
+ sources."color-string-1.5.3"
+ sources."combined-stream-1.0.8"
+ sources."command-exists-1.2.9"
+ sources."commander-2.20.3"
+ sources."component-emitter-1.3.0"
+ sources."concat-map-0.0.1"
+ sources."concat-stream-1.6.2"
+ sources."config-chain-1.1.12"
+ sources."console-browserify-1.2.0"
+ sources."constants-browserify-1.0.0"
+ sources."convert-source-map-1.7.0"
+ sources."copy-descriptor-0.1.1"
+ sources."core-js-2.6.11"
+ sources."core-util-is-1.0.2"
+ sources."cosmiconfig-5.2.1"
+ sources."create-ecdh-4.0.3"
+ sources."create-hash-1.2.0"
+ sources."create-hmac-1.1.7"
+ sources."cross-spawn-6.0.5"
+ sources."crypto-browserify-3.12.0"
+ sources."css-color-names-0.0.4"
+ sources."css-declaration-sorter-4.0.1"
+ (sources."css-modules-loader-core-1.1.0" // {
+ dependencies = [
+ sources."ansi-regex-2.1.1"
+ sources."ansi-styles-2.2.1"
+ (sources."chalk-1.1.3" // {
+ dependencies = [
+ sources."supports-color-2.0.0"
+ ];
+ })
+ sources."has-flag-1.0.0"
+ sources."postcss-6.0.1"
+ sources."source-map-0.5.7"
+ sources."strip-ansi-3.0.1"
+ sources."supports-color-3.2.3"
+ ];
+ })
+ sources."css-select-2.1.0"
+ sources."css-select-base-adapter-0.1.1"
+ sources."css-selector-tokenizer-0.7.2"
+ sources."css-tree-1.0.0-alpha.37"
+ sources."css-what-3.2.1"
+ sources."cssesc-3.0.0"
+ sources."cssnano-4.1.10"
+ sources."cssnano-preset-default-4.0.7"
+ sources."cssnano-util-get-arguments-4.0.0"
+ sources."cssnano-util-get-match-4.0.0"
+ sources."cssnano-util-raw-cache-4.0.1"
+ sources."cssnano-util-same-parent-4.0.1"
+ (sources."csso-4.0.3" // {
+ dependencies = [
+ sources."css-tree-1.0.0-alpha.39"
+ sources."mdn-data-2.0.6"
+ ];
+ })
+ sources."cssom-0.3.8"
+ sources."cssstyle-1.4.0"
+ sources."dashdash-1.14.1"
+ sources."data-urls-1.1.0"
+ sources."deasync-0.1.19"
+ sources."debug-4.1.1"
+ sources."decamelize-1.2.0"
+ sources."decode-uri-component-0.2.0"
+ sources."deep-is-0.1.3"
+ (sources."defaults-1.0.3" // {
+ dependencies = [
+ sources."clone-1.0.4"
+ ];
+ })
+ sources."define-properties-1.1.3"
+ (sources."define-property-2.0.2" // {
+ dependencies = [
+ sources."is-accessor-descriptor-1.0.0"
+ sources."is-data-descriptor-1.0.0"
+ sources."is-descriptor-1.0.2"
+ ];
+ })
+ sources."delayed-stream-1.0.0"
+ sources."depd-1.1.2"
+ sources."des.js-1.0.1"
+ sources."destroy-1.0.4"
+ sources."diffie-hellman-5.0.3"
+ (sources."dom-serializer-0.2.2" // {
+ dependencies = [
+ sources."domelementtype-2.0.1"
+ ];
+ })
+ sources."domain-browser-1.2.0"
+ sources."domelementtype-1.3.1"
+ sources."domexception-1.0.1"
+ sources."domhandler-2.4.2"
+ sources."domutils-1.7.0"
+ sources."dot-prop-5.2.0"
+ sources."dotenv-5.0.1"
+ sources."dotenv-expand-4.2.0"
+ sources."duplexer2-0.1.4"
+ sources."ecc-jsbn-0.1.2"
+ sources."editorconfig-0.15.3"
+ sources."ee-first-1.1.1"
+ sources."electron-to-chromium-1.3.418"
+ sources."elliptic-6.5.2"
+ sources."elm-hot-1.1.1"
+ sources."emoji-regex-7.0.3"
+ sources."encodeurl-1.0.2"
+ sources."entities-2.0.0"
+ sources."error-ex-1.3.2"
+ sources."es-abstract-1.17.5"
+ sources."es-to-primitive-1.2.1"
+ sources."escape-html-1.0.3"
+ sources."escape-string-regexp-1.0.5"
+ (sources."escodegen-1.9.1" // {
+ dependencies = [
+ sources."esprima-3.1.3"
+ ];
+ })
+ sources."esprima-4.0.1"
+ sources."estraverse-4.3.0"
+ sources."esutils-2.0.3"
+ sources."etag-1.8.1"
+ sources."events-3.1.0"
+ sources."evp_bytestokey-1.0.3"
+ (sources."expand-brackets-2.1.4" // {
+ dependencies = [
+ sources."debug-2.6.9"
+ sources."define-property-0.2.5"
+ sources."extend-shallow-2.0.1"
+ sources."ms-2.0.0"
+ ];
+ })
+ sources."extend-3.0.2"
+ (sources."extend-shallow-3.0.2" // {
+ dependencies = [
+ sources."is-extendable-1.0.1"
+ ];
+ })
+ (sources."extglob-2.0.4" // {
+ dependencies = [
+ sources."define-property-1.0.0"
+ sources."extend-shallow-2.0.1"
+ sources."is-accessor-descriptor-1.0.0"
+ sources."is-data-descriptor-1.0.0"
+ sources."is-descriptor-1.0.2"
+ ];
+ })
+ sources."extsprintf-1.3.0"
+ (sources."falafel-2.2.4" // {
+ dependencies = [
+ sources."isarray-2.0.5"
+ ];
+ })
+ sources."fast-deep-equal-3.1.1"
+ sources."fast-glob-2.2.7"
+ sources."fast-json-stable-stringify-2.1.0"
+ sources."fast-levenshtein-2.0.6"
+ sources."fastparse-1.1.2"
+ sources."file-uri-to-path-1.0.0"
+ sources."filesize-3.6.1"
+ (sources."fill-range-4.0.0" // {
+ dependencies = [
+ sources."extend-shallow-2.0.1"
+ ];
+ })
+ sources."find-elm-dependencies-2.0.2"
+ sources."find-up-2.1.0"
+ sources."firstline-1.2.0"
+ sources."for-in-1.0.2"
+ sources."foreach-2.0.5"
+ sources."forever-agent-0.6.1"
+ sources."form-data-2.3.3"
+ sources."fragment-cache-0.2.1"
+ sources."fresh-0.5.2"
+ sources."fs.realpath-1.0.0"
+ sources."function-bind-1.1.1"
+ sources."get-caller-file-2.0.5"
+ sources."get-port-3.2.0"
+ sources."get-value-2.0.6"
+ sources."getpass-0.1.7"
+ sources."glob-7.1.4"
+ (sources."glob-parent-3.1.0" // {
+ dependencies = [
+ sources."is-glob-3.1.0"
+ ];
+ })
+ sources."glob-to-regexp-0.3.0"
+ sources."globals-11.12.0"
+ sources."graceful-fs-4.2.3"
+ sources."grapheme-breaker-0.3.2"
+ sources."har-schema-2.0.0"
+ sources."har-validator-5.1.3"
+ sources."has-1.0.3"
+ (sources."has-ansi-2.0.0" // {
+ dependencies = [
+ sources."ansi-regex-2.1.1"
+ ];
+ })
+ sources."has-flag-3.0.0"
+ sources."has-symbols-1.0.1"
+ sources."has-value-1.0.0"
+ (sources."has-values-1.0.0" // {
+ dependencies = [
+ sources."kind-of-4.0.0"
+ ];
+ })
+ sources."hash-base-3.0.4"
+ sources."hash.js-1.1.7"
+ sources."hex-color-regex-1.1.0"
+ sources."hmac-drbg-1.0.1"
+ sources."hsl-regex-1.0.0"
+ sources."hsla-regex-1.0.0"
+ sources."html-comment-regex-1.1.2"
+ sources."html-encoding-sniffer-1.0.2"
+ sources."html-tags-1.2.0"
+ (sources."htmlnano-0.2.5" // {
+ dependencies = [
+ sources."posthtml-0.12.3"
+ sources."terser-4.6.12"
+ ];
+ })
+ (sources."htmlparser2-3.10.1" // {
+ dependencies = [
+ sources."entities-1.1.2"
+ sources."readable-stream-3.6.0"
+ ];
+ })
+ sources."http-errors-1.7.3"
+ sources."http-signature-1.2.0"
+ sources."https-browserify-1.0.0"
+ sources."iconv-lite-0.4.24"
+ sources."icss-replace-symbols-1.1.0"
+ sources."ieee754-1.1.13"
+ sources."import-fresh-2.0.0"
+ sources."indexes-of-1.0.1"
+ sources."inflight-1.0.6"
+ sources."inherits-2.0.4"
+ sources."ini-1.3.5"
+ sources."invariant-2.2.4"
+ sources."is-absolute-url-2.1.0"
+ (sources."is-accessor-descriptor-0.1.6" // {
+ dependencies = [
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."is-arrayish-0.2.1"
+ sources."is-binary-path-1.0.1"
+ sources."is-buffer-1.1.6"
+ sources."is-callable-1.1.5"
+ sources."is-color-stop-1.1.0"
+ (sources."is-data-descriptor-0.1.4" // {
+ dependencies = [
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."is-date-object-1.0.2"
+ (sources."is-descriptor-0.1.6" // {
+ dependencies = [
+ sources."kind-of-5.1.0"
+ ];
+ })
+ sources."is-directory-0.3.1"
+ sources."is-extendable-0.1.1"
+ sources."is-extglob-2.1.1"
+ sources."is-fullwidth-code-point-2.0.0"
+ sources."is-glob-4.0.1"
+ sources."is-html-1.1.0"
+ (sources."is-number-3.0.0" // {
+ dependencies = [
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."is-obj-2.0.0"
+ sources."is-plain-object-2.0.4"
+ sources."is-regex-1.0.5"
+ sources."is-resolvable-1.1.0"
+ sources."is-svg-3.0.0"
+ sources."is-symbol-1.0.3"
+ sources."is-typedarray-1.0.0"
+ sources."is-url-1.2.4"
+ sources."is-windows-1.0.2"
+ sources."is-wsl-1.1.0"
+ sources."isarray-1.0.0"
+ sources."isexe-2.0.0"
+ sources."isobject-3.0.1"
+ sources."isstream-0.1.2"
+ (sources."js-beautify-1.11.0" // {
+ dependencies = [
+ sources."mkdirp-1.0.4"
+ ];
+ })
+ sources."js-levenshtein-1.1.6"
+ sources."js-tokens-4.0.0"
+ sources."js-yaml-3.13.1"
+ sources."jsbn-0.1.1"
+ (sources."jsdom-14.1.0" // {
+ dependencies = [
+ sources."acorn-6.4.1"
+ sources."escodegen-1.14.1"
+ sources."ws-6.2.1"
+ ];
+ })
+ sources."jsesc-2.5.2"
+ sources."json-parse-better-errors-1.0.2"
+ sources."json-schema-0.2.3"
+ sources."json-schema-traverse-0.4.1"
+ sources."json-stringify-safe-5.0.1"
+ sources."json5-1.0.1"
+ sources."jsprim-1.4.1"
+ sources."kind-of-6.0.3"
+ sources."levn-0.3.0"
+ sources."locate-path-2.0.0"
+ sources."lodash-4.17.15"
+ sources."lodash.clone-4.5.0"
+ sources."lodash.memoize-4.1.2"
+ sources."lodash.sortby-4.7.0"
+ sources."lodash.uniq-4.5.0"
+ sources."log-symbols-2.2.0"
+ sources."loose-envify-1.4.0"
+ sources."lru-cache-4.1.5"
+ sources."magic-string-0.22.5"
+ sources."map-cache-0.2.2"
+ sources."map-visit-1.0.0"
+ sources."md5.js-1.3.5"
+ sources."mdn-data-2.0.4"
+ (sources."merge-source-map-1.0.4" // {
+ dependencies = [
+ sources."source-map-0.5.7"
+ ];
+ })
+ sources."merge2-1.3.0"
+ sources."micromatch-3.1.10"
+ sources."miller-rabin-4.0.1"
+ sources."mime-1.6.0"
+ sources."mime-db-1.44.0"
+ sources."mime-types-2.1.27"
+ sources."mimic-fn-1.2.0"
+ sources."minimalistic-assert-1.0.1"
+ sources."minimalistic-crypto-utils-1.0.1"
+ sources."minimatch-3.0.4"
+ sources."minimist-1.2.5"
+ (sources."mixin-deep-1.3.2" // {
+ dependencies = [
+ sources."is-extendable-1.0.1"
+ ];
+ })
+ sources."mkdirp-0.5.5"
+ sources."ms-2.1.2"
+ sources."nan-2.14.1"
+ sources."nanomatch-1.2.13"
+ sources."nice-try-1.0.5"
+ sources."node-addon-api-1.7.1"
+ sources."node-elm-compiler-5.0.4"
+ sources."node-forge-0.7.6"
+ (sources."node-libs-browser-2.2.1" // {
+ dependencies = [
+ sources."punycode-1.4.1"
+ ];
+ })
+ sources."node-releases-1.1.53"
+ sources."nopt-4.0.3"
+ sources."normalize-html-whitespace-1.0.0"
+ sources."normalize-path-3.0.0"
+ sources."normalize-url-3.3.0"
+ sources."nth-check-1.0.2"
+ sources."nwsapi-2.2.0"
+ sources."oauth-sign-0.9.0"
+ sources."object-assign-4.1.1"
+ (sources."object-copy-0.1.0" // {
+ dependencies = [
+ sources."define-property-0.2.5"
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."object-inspect-1.7.0"
+ sources."object-keys-1.1.1"
+ sources."object-visit-1.0.1"
+ sources."object.assign-4.1.0"
+ sources."object.getownpropertydescriptors-2.1.0"
+ sources."object.pick-1.3.0"
+ sources."object.values-1.1.1"
+ sources."on-finished-2.3.0"
+ sources."once-1.4.0"
+ sources."onetime-2.0.1"
+ sources."opn-5.5.0"
+ sources."optionator-0.8.3"
+ sources."ora-2.1.0"
+ sources."os-browserify-0.3.0"
+ sources."os-homedir-1.0.2"
+ sources."os-tmpdir-1.0.2"
+ sources."osenv-0.1.5"
+ sources."p-limit-1.3.0"
+ sources."p-locate-2.0.0"
+ sources."p-try-1.0.0"
+ sources."pako-0.2.9"
+ (sources."parcel-bundler-1.12.3" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ sources."parse-asn1-5.1.5"
+ sources."parse-json-4.0.0"
+ sources."parse5-5.1.0"
+ sources."parseurl-1.3.3"
+ sources."pascalcase-0.1.1"
+ sources."path-browserify-0.0.1"
+ sources."path-dirname-1.0.2"
+ sources."path-exists-3.0.0"
+ sources."path-is-absolute-1.0.1"
+ sources."path-key-2.0.1"
+ sources."path-parse-1.0.6"
+ sources."pbkdf2-3.0.17"
+ sources."performance-now-2.1.0"
+ sources."physical-cpu-count-2.0.0"
+ sources."pkg-up-2.0.0"
+ sources."pn-1.1.0"
+ sources."posix-character-classes-0.1.1"
+ sources."postcss-7.0.27"
+ sources."postcss-calc-7.0.2"
+ (sources."postcss-colormin-4.0.3" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-convert-values-4.0.1" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ sources."postcss-discard-comments-4.0.2"
+ sources."postcss-discard-duplicates-4.0.2"
+ sources."postcss-discard-empty-4.0.1"
+ sources."postcss-discard-overridden-4.0.1"
+ (sources."postcss-merge-longhand-4.0.11" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-merge-rules-4.0.3" // {
+ dependencies = [
+ sources."postcss-selector-parser-3.1.2"
+ ];
+ })
+ (sources."postcss-minify-font-values-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-minify-gradients-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-minify-params-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-minify-selectors-4.0.2" // {
+ dependencies = [
+ sources."postcss-selector-parser-3.1.2"
+ ];
+ })
+ (sources."postcss-modules-extract-imports-1.1.0" // {
+ dependencies = [
+ sources."postcss-6.0.23"
+ sources."supports-color-5.5.0"
+ ];
+ })
+ (sources."postcss-modules-local-by-default-1.2.0" // {
+ dependencies = [
+ sources."postcss-6.0.23"
+ sources."supports-color-5.5.0"
+ ];
+ })
+ (sources."postcss-modules-scope-1.1.0" // {
+ dependencies = [
+ sources."postcss-6.0.23"
+ sources."supports-color-5.5.0"
+ ];
+ })
+ (sources."postcss-modules-values-1.3.0" // {
+ dependencies = [
+ sources."postcss-6.0.23"
+ sources."supports-color-5.5.0"
+ ];
+ })
+ sources."postcss-normalize-charset-4.0.1"
+ (sources."postcss-normalize-display-values-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-positions-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-repeat-style-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-string-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-timing-functions-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-unicode-4.0.1" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-url-4.0.1" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-normalize-whitespace-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ (sources."postcss-ordered-values-4.1.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ sources."postcss-reduce-initial-4.0.3"
+ (sources."postcss-reduce-transforms-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ sources."postcss-selector-parser-6.0.2"
+ (sources."postcss-svgo-4.0.2" // {
+ dependencies = [
+ sources."postcss-value-parser-3.3.1"
+ ];
+ })
+ sources."postcss-unique-selectors-4.0.1"
+ sources."postcss-value-parser-4.0.3"
+ sources."posthtml-0.11.6"
+ sources."posthtml-parser-0.4.2"
+ sources."posthtml-render-1.2.2"
+ sources."prelude-ls-1.1.2"
+ sources."private-0.1.8"
+ sources."process-0.11.10"
+ sources."process-nextick-args-2.0.1"
+ sources."proto-list-1.2.4"
+ sources."pseudomap-1.0.2"
+ sources."psl-1.8.0"
+ sources."public-encrypt-4.0.3"
+ sources."punycode-2.1.1"
+ sources."purgecss-1.4.2"
+ sources."q-1.5.1"
+ sources."qs-6.5.2"
+ sources."querystring-0.2.0"
+ sources."querystring-es3-0.2.1"
+ sources."quote-stream-1.0.2"
+ sources."randombytes-2.1.0"
+ sources."randomfill-1.0.4"
+ sources."range-parser-1.2.1"
+ sources."readable-stream-2.3.7"
+ sources."readdirp-2.2.1"
+ sources."regenerate-1.4.0"
+ sources."regenerate-unicode-properties-8.2.0"
+ sources."regenerator-runtime-0.13.5"
+ (sources."regenerator-transform-0.14.4" // {
+ dependencies = [
+ sources."@babel/runtime-7.9.2"
+ ];
+ })
+ sources."regex-not-1.0.2"
+ sources."regexpu-core-4.7.0"
+ sources."regjsgen-0.5.1"
+ (sources."regjsparser-0.6.4" // {
+ dependencies = [
+ sources."jsesc-0.5.0"
+ ];
+ })
+ sources."remove-trailing-separator-1.1.0"
+ sources."repeat-element-1.1.3"
+ sources."repeat-string-1.6.1"
+ sources."request-2.88.2"
+ sources."request-promise-core-1.1.3"
+ sources."request-promise-native-1.0.8"
+ sources."require-directory-2.1.1"
+ sources."require-main-filename-2.0.0"
+ sources."resolve-1.17.0"
+ sources."resolve-from-3.0.0"
+ sources."resolve-url-0.2.1"
+ sources."restore-cursor-2.0.0"
+ sources."ret-0.1.15"
+ sources."rgb-regex-1.0.1"
+ sources."rgba-regex-1.0.0"
+ sources."rimraf-2.6.3"
+ sources."ripemd160-2.0.2"
+ sources."safe-buffer-5.1.2"
+ sources."safe-regex-1.1.0"
+ sources."safer-buffer-2.1.2"
+ sources."safer-eval-1.3.6"
+ sources."sax-1.2.4"
+ sources."saxes-3.1.11"
+ sources."semver-5.7.1"
+ (sources."send-0.17.1" // {
+ dependencies = [
+ (sources."debug-2.6.9" // {
+ dependencies = [
+ sources."ms-2.0.0"
+ ];
+ })
+ sources."ms-2.1.1"
+ ];
+ })
+ sources."serialize-to-js-1.2.2"
+ sources."serve-static-1.14.1"
+ sources."set-blocking-2.0.0"
+ (sources."set-value-2.0.1" // {
+ dependencies = [
+ sources."extend-shallow-2.0.1"
+ ];
+ })
+ sources."setimmediate-1.0.5"
+ sources."setprototypeof-1.1.1"
+ sources."sha.js-2.4.11"
+ sources."shallow-copy-0.0.1"
+ sources."shebang-command-1.2.0"
+ sources."shebang-regex-1.0.0"
+ sources."sigmund-1.0.1"
+ sources."signal-exit-3.0.3"
+ (sources."simple-swizzle-0.2.2" // {
+ dependencies = [
+ sources."is-arrayish-0.3.2"
+ ];
+ })
+ (sources."snapdragon-0.8.2" // {
+ dependencies = [
+ sources."debug-2.6.9"
+ sources."define-property-0.2.5"
+ sources."extend-shallow-2.0.1"
+ sources."ms-2.0.0"
+ sources."source-map-0.5.7"
+ ];
+ })
+ (sources."snapdragon-node-2.1.1" // {
+ dependencies = [
+ sources."define-property-1.0.0"
+ sources."is-accessor-descriptor-1.0.0"
+ sources."is-data-descriptor-1.0.0"
+ sources."is-descriptor-1.0.2"
+ ];
+ })
+ (sources."snapdragon-util-3.0.1" // {
+ dependencies = [
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."source-map-0.6.1"
+ sources."source-map-resolve-0.5.3"
+ sources."source-map-support-0.5.19"
+ sources."source-map-url-0.4.0"
+ sources."split-string-3.1.0"
+ sources."sprintf-js-1.0.3"
+ sources."sshpk-1.16.1"
+ sources."stable-0.1.8"
+ (sources."static-eval-2.0.5" // {
+ dependencies = [
+ sources."escodegen-1.14.1"
+ ];
+ })
+ (sources."static-extend-0.1.2" // {
+ dependencies = [
+ sources."define-property-0.2.5"
+ ];
+ })
+ (sources."static-module-2.2.5" // {
+ dependencies = [
+ sources."object-inspect-1.4.1"
+ ];
+ })
+ sources."statuses-1.5.0"
+ sources."stealthy-require-1.1.1"
+ sources."stream-browserify-2.0.2"
+ sources."stream-http-2.8.3"
+ (sources."string-width-3.1.0" // {
+ dependencies = [
+ sources."ansi-regex-4.1.0"
+ sources."strip-ansi-5.2.0"
+ ];
+ })
+ sources."string.prototype.trimend-1.0.1"
+ sources."string.prototype.trimleft-2.1.2"
+ sources."string.prototype.trimright-2.1.2"
+ sources."string.prototype.trimstart-1.0.1"
+ sources."string_decoder-1.1.1"
+ sources."strip-ansi-4.0.0"
+ (sources."stylehacks-4.0.3" // {
+ dependencies = [
+ sources."postcss-selector-parser-3.1.2"
+ ];
+ })
+ sources."supports-color-6.1.0"
+ sources."svgo-1.3.2"
+ sources."symbol-tree-3.2.4"
+ sources."temp-0.9.0"
+ sources."terser-3.17.0"
+ sources."through2-2.0.5"
+ sources."timers-browserify-2.0.11"
+ sources."timsort-0.3.0"
+ sources."tiny-inflate-1.0.3"
+ sources."to-arraybuffer-1.0.1"
+ sources."to-fast-properties-2.0.0"
+ (sources."to-object-path-0.3.0" // {
+ dependencies = [
+ sources."kind-of-3.2.2"
+ ];
+ })
+ sources."to-regex-3.0.2"
+ sources."to-regex-range-2.1.1"
+ sources."toidentifier-1.0.0"
+ sources."tough-cookie-2.5.0"
+ sources."tr46-1.0.1"
+ sources."trim-right-1.0.1"
+ sources."tty-browserify-0.0.0"
+ sources."tunnel-agent-0.6.0"
+ sources."tweetnacl-0.14.5"
+ sources."type-check-0.3.2"
+ sources."typedarray-0.0.6"
+ (sources."uncss-0.17.3" // {
+ dependencies = [
+ sources."is-absolute-url-3.0.3"
+ ];
+ })
+ sources."unicode-canonical-property-names-ecmascript-1.0.4"
+ sources."unicode-match-property-ecmascript-1.0.4"
+ sources."unicode-match-property-value-ecmascript-1.2.0"
+ sources."unicode-property-aliases-ecmascript-1.1.0"
+ sources."unicode-trie-0.3.1"
+ sources."union-value-1.0.1"
+ sources."uniq-1.0.1"
+ sources."uniqs-2.0.0"
+ sources."unquote-1.1.1"
+ (sources."unset-value-1.0.0" // {
+ dependencies = [
+ (sources."has-value-0.3.1" // {
+ dependencies = [
+ sources."isobject-2.1.0"
+ ];
+ })
+ sources."has-values-0.1.4"
+ ];
+ })
+ sources."upath-1.2.0"
+ sources."uri-js-4.2.2"
+ sources."urix-0.1.0"
+ (sources."url-0.11.0" // {
+ dependencies = [
+ sources."punycode-1.3.2"
+ ];
+ })
+ sources."use-3.1.1"
+ (sources."util-0.11.1" // {
+ dependencies = [
+ sources."inherits-2.0.3"
+ ];
+ })
+ sources."util-deprecate-1.0.2"
+ sources."util.promisify-1.0.1"
+ sources."uuid-3.4.0"
+ sources."v8-compile-cache-2.1.0"
+ sources."vendors-1.0.4"
+ sources."verror-1.10.0"
+ sources."vlq-0.2.3"
+ sources."vm-browserify-1.1.2"
+ sources."w3c-hr-time-1.0.2"
+ sources."w3c-xmlserializer-1.1.2"
+ sources."wcwidth-1.0.1"
+ sources."webidl-conversions-4.0.2"
+ sources."whatwg-encoding-1.0.5"
+ sources."whatwg-mimetype-2.3.0"
+ sources."whatwg-url-7.1.0"
+ sources."which-1.3.1"
+ sources."which-module-2.0.0"
+ sources."word-wrap-1.2.3"
+ (sources."wrap-ansi-5.1.0" // {
+ dependencies = [
+ sources."ansi-regex-4.1.0"
+ sources."strip-ansi-5.2.0"
+ ];
+ })
+ sources."wrappy-1.0.2"
+ sources."ws-5.2.2"
+ sources."xml-name-validator-3.0.0"
+ sources."xmlchars-2.2.0"
+ sources."xtend-4.0.2"
+ sources."y18n-4.0.0"
+ sources."yallist-2.1.2"
+ (sources."yargs-14.2.3" // {
+ dependencies = [
+ sources."find-up-3.0.0"
+ sources."locate-path-3.0.0"
+ sources."p-limit-2.3.0"
+ sources."p-locate-3.0.0"
+ sources."p-try-2.2.0"
+ ];
+ })
+ sources."yargs-parser-15.0.1"
+ ];
+ buildInputs = globalBuildInputs;
+ meta = {
+ license = "MIT";
+ };
+ production = false;
+ bypassCache = true;
+ reconstructLock = false;
+ };
+in
+{
+ args = args;
+ sources = sources;
+ tarball = nodeEnv.buildNodeSourceDist args;
+ package = nodeEnv.buildNodePackage args;
+ shell = nodeEnv.buildNodeShell args;
+}
diff --git a/systems/eldiron/websites/games/codenames/registry.dat b/systems/eldiron/websites/games/codenames/registry.dat
new file mode 100644
index 0000000..a8585a8
Binary files /dev/null and b/systems/eldiron/websites/games/codenames/registry.dat differ
diff --git a/systems/eldiron/websites/games/codenames/shell.nix b/systems/eldiron/websites/games/codenames/shell.nix
new file mode 100644
index 0000000..053696b
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/shell.nix
@@ -0,0 +1,50 @@
+{ pkgs ? import {} }: with pkgs;
+let
+ greenapid = callPackage ./greenapid.nix {};
+ frontend = callPackage ./frontend.nix {};
+ nginx_conf = writeText "nginx.conf" ''
+ pid ./nginx.pid;
+ error_log stderr;
+ daemon off;
+ events {
+ }
+ http {
+ include ${mailcap}/etc/nginx/mime.types;
+ server {
+ listen 0.0.0.0:8081;
+ listen [::]:8081;
+ location /api/ {
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://127.0.0.1:8080/;
+ }
+ location / {
+ root ${frontend};
+ try_files $uri $uri/ /index.html;
+ }
+ }
+ }
+ '';
+in
+pkgs.mkShell {
+ buildInputs = [
+ greenapid
+ frontend
+ python2
+ nginx
+ ];
+ shellHook = ''
+ greenapid &
+ pid=$!
+
+ finish() {
+ kill $pid;
+ }
+
+ trap finish EXIT
+
+ nginx -c ${nginx_conf} -p ./nginx/
+ exit
+ '';
+}
diff --git a/systems/eldiron/websites/games/codenames/wordlists/french.txt b/systems/eldiron/websites/games/codenames/wordlists/french.txt
new file mode 100644
index 0000000..462ddc4
--- /dev/null
+++ b/systems/eldiron/websites/games/codenames/wordlists/french.txt
@@ -0,0 +1,694 @@
+ACCIDENT
+ACHAT
+ACNÉ
+ACTION
+ADOLESCENT
+AFRIQUE
+AIGUILLE
+ALLUMER
+ALPES
+ALPHABET
+ALTITUDE
+AMÉRIQUE
+AMI
+AMOUR
+AMPOULE
+ANNIVERSAIRE
+APPÉTIT
+ARAIGNÉE
+ARBRE
+ARC
+ARC-EN-CIEL
+ARGENT
+ARME
+ARMÉE
+ASCENSEUR
+ASIE
+ASSIS
+ASTRONAUTE
+ATCHOUM
+ATHLÈTE
+ATLANTIDE
+AUBE
+AUSTRALIE
+AVEC
+AVENTURE
+AVION
+AVOCAT
+BAC
+BAGUETTE
+BAIN
+BAISER
+BALAI
+BALLE
+BALLON
+BAMBOU
+BANANE
+BANNIR
+BARBE
+BARRIÈRE
+BAS
+BASKET
+BATEAU
+BÂTON
+BATTERIE
+BÉBÉ
+BEETHOVEN
+BÊTE
+BIBERON
+BIÈRE
+BLANC
+BLÉ
+BLEU
+BOB
+BOISSON
+BOÎTE
+BOMBE
+BONBON
+BONNET
+BORD
+BORDEAUX
+BOTTE
+BOUE
+BOUGIE
+BOULE
+BOUTEILLE
+BOUTON
+BRANCHE
+BRAS
+BRAVO
+BRETAGNE
+BRISE
+BROSSE
+BRUIT
+BRUME
+BRUN
+BÛCHE
+BULLE
+BUREAU
+BUT
+CABANE
+CABINE
+CACHER
+CADEAU
+CAFARD
+CAFÉ
+CAISSE
+CALCULER
+CALME
+CAMÉRA
+CAMION
+CAMPING
+CANADA
+CANARD
+CANETTE
+CANINE
+CAP
+CAPITALISME
+CAR
+CAROTTE
+CARRÉ
+CARTE
+CARTON
+CASQUE
+CASSER
+CASSETTE
+CAUCHEMAR
+CAUSE
+CEINTURE
+CELLULE
+CERCLE
+CHAÎNE
+CHAIR
+CHAISE
+CHAMP
+CHAMPION
+CHANT
+CHAPEAU
+CHARBON
+CHARGE
+CHASSE
+CHAT
+CHÂTEAU
+CHAUD
+CHAUSSURE
+CHAUVE
+CHEF
+CHEMISE
+CHÊNE
+CHER
+CHEVAL
+CHEVALIER
+CHEVEU
+CHIEN
+CHIFFRE
+CHINE
+CHOCOLAT
+CHÔMAGE
+CIEL
+CIL
+CINÉMA
+CIRE
+CIRQUE
+CITRON
+CLÉ
+CLOU
+CLOWN
+COACH
+COCCINELLE
+CODE
+CŒUR
+COL
+COLLE
+COLLINE
+COLONNE
+CÔNE
+CONFORT
+CONTINU
+CONTRE
+CONVERSATION
+COPAIN
+COQ
+COQUILLAGE
+CORBEAU
+CORDE
+CORPS
+CÔTE
+COUDE
+COULOIR
+COUP
+COUR
+COURANT
+COURRIER
+COURS
+COURSE
+COURT
+COUTEAU
+COUVERT
+COUVERTURE
+COWBOY
+CRAC
+CRAYON
+CRÈME
+CRITIQUE
+CROCHET
+CROIX
+CROÛTE
+CUILLÈRE
+CUIR
+CUISINE
+CULOTTE
+CYCLE
+DARD
+DÉ
+DEBOUT
+DÉFAUT
+DEHORS
+DÉMOCRATIE
+DENT
+DENTISTE
+DESSIN
+DEVOIR
+DIAMANT
+DICTIONNAIRE
+DIEU
+DINOSAURE
+DISCOURS
+DISQUE
+DIX
+DOCTEUR
+DOIGT
+DOMINO
+DORMIR
+DROIT
+EAU
+ÉCHEC
+ÉCHELLE
+ÉCLAIR
+ÉCOLE
+ÉCRAN
+ÉCRASER
+ÉCRIT
+ÉGLISE
+ÉGOUT
+ÉLECTRICITÉ
+ÉLÉPHANT
+ÉLÈVE
+ELFE
+EMPREINTE
+ENCEINTE
+ÉPICE
+ÉPINE
+ERREUR
+ESPACE
+ESPION
+ESSENCE
+ÉTAT
+ÉTÉ
+ÉTOILE
+ÉTRANGER
+ÉVENTAIL
+ÉVOLUTION
+EXPLOSION
+EXTENSION
+FACE
+FAN
+FARCE
+FATIGUE
+FAUTEUIL
+FEMME
+FENÊTRE
+FER
+FÊTE
+FEU
+FEUILLE
+FIDÈLE
+FIL
+FILLE
+FLAMME
+FLÈCHE
+FLEUR
+FLEUVE
+FOND
+FOOTBALL
+FORÊT
+FORGER
+FOUDRE
+FOUET
+FOUR
+FOURMI
+FROID
+FROMAGE
+FRONT
+FRUIT
+FUIR
+FUTUR
+GARÇON
+GÂTEAU
+GAUCHE
+GAZ
+GAZON
+GEL
+GENOU
+GLACE
+GOMME
+GORGE
+GOUTTE
+GRAND
+GRÈCE
+GRENOUILLE
+GRIPPE
+GRIS
+GROS
+GROUPE
+GUITARE
+HASARD
+HAUT
+HÉLICOPTÈRE
+HERBE
+HEUREUX
+HISTOIRE
+HIVER
+HÔTEL
+HUGO
+HUILE
+HUMIDE
+HUMOUR
+INDICE
+INTERNET
+INVITER
+ITALIE
+JACQUES
+JAMBE
+JAMBON
+JARDIN
+JAUNE
+JEAN
+JEANNE
+JET
+JEU
+JOGGING
+JOUR
+JOURNAL
+JUPITER
+KILO
+KIWI
+LAINE
+LAIT
+LANGUE
+LAPIN
+LATIN
+LAVER
+LECTEUR
+LÉGER
+LENT
+LETTRE
+LIEN
+LIGNE
+LINGE
+LION
+LIT
+LIVRE
+LOI
+LONG
+LOUIS
+LOUP
+LUMIÈRE
+LUNDI
+LUNE
+LUNETTE
+MACHINE
+MACHO
+MAIN
+MAISON
+MAÎTRESSE
+MAL
+MALADIE
+MAMAN
+MAMMOUTH
+MANGER
+MARAIS
+MARC
+MARCHE
+MARIAGE
+MARIE
+MARIÉE
+MARQUE
+MARSEILLE
+MASSE
+MER
+MESSE
+MÈTRE
+MÉTRO
+MIAOU
+MICRO
+MIEUX
+MILLE
+MINE
+MIROIR
+MODERNE
+MOITIÉ
+MONDE
+MONSTRE
+MONTAGNE
+MONTRE
+MORT
+MOTEUR
+MOTO
+MOU
+MOUCHE
+MOULIN
+MOUSTACHE
+MOUTON
+MUR
+MUSCLE
+MUSIQUE
+MYSTÈRE
+NAGE
+NATURE
+NEIGE
+NEUTRE
+NEW YORK
+NEZ
+NID
+NINJA
+NIVEAU
+NOËL
+NŒUD
+NOIR
+NOUS
+NUAGE
+NUIT
+NUMÉRO
+ŒIL
+ŒUF
+OISEAU
+OLYMPIQUE
+OMBRE
+ONGLE
+OR
+ORAL
+ORANGE
+ORDINATEUR
+ORDRE
+ORDURE
+OREILLE
+ORGANE
+ORGUEIL
+OURS
+OUTIL
+OUVERT
+OVALE
+PAIN
+PALAIS
+PANNEAU
+PANTALON
+PANTIN
+PAPA
+PAPIER
+PAPILLON
+PARADIS
+PARC
+PARIS
+PAROLE
+PARTIE
+PASSE
+PÂTE
+PATIN
+PATTE
+PAUL
+PAYER
+PÊCHE
+PEINTURE
+PENDULE
+PENSER
+PERSONNE
+PETIT
+PEUR
+PHILOSOPHE
+PHOTO
+PHRASE
+PIANO
+PIÈCE
+PIED
+PIERRE
+PILE
+PILOTE
+PINCE
+PIOCHE
+PION
+PIRATE
+PIRE
+PISCINE
+PLACE
+PLAFOND
+PLAGE
+PLAIE
+PLAN
+PLANCHE
+PLANÈTE
+PLANTE
+PLASTIQUE
+PLAT
+PLOMB
+PLONGER
+PLUIE
+POCHE
+POÈTE
+POIDS
+POING
+POINT
+POIVRE
+POLICE
+POLITIQUE
+POLLEN
+POLO
+POMME
+POMPE
+PONT
+POPULATION
+PORT
+PORTE
+PORTEFEUILLE
+POSITIF
+POSTE
+POUBELLE
+POULE
+POUPÉE
+POUSSER
+POUSSIÈRE
+POUVOIR
+PRÉHISTOIRE
+PREMIER
+PRÉSENT
+PRESSE
+PRIER
+PRINCESSE
+PRISE
+PRIVÉ
+PROFESSEUR
+PSYCHOLOGIE
+PUBLIC
+PULL
+PUNK
+PUZZLE
+PYJAMA
+QUATRE
+QUINZE
+RACE
+RADIO
+RAISIN
+RAP
+RAYÉ
+RAYON
+RÉFLÉCHIR
+REINE
+REPAS
+REPTILE
+REQUIN
+RÊVE
+RICHE
+RIDEAU
+RIEN
+RIRE
+ROBINET
+ROCHE
+ROI
+ROND
+ROSE
+ROUE
+ROUGE
+ROUILLE
+ROUX
+RUSSIE
+SABLE
+SABRE
+SAC
+SAIN
+SAISON
+SALE
+SALLE
+SALUT
+SAMU
+SANDWICH
+SANG
+SAPIN
+SATELLITE
+SAUMON
+SAUT
+SAVOIR
+SCHTROUMPF
+SCIENCE
+SCOUT
+SEC
+SEINE
+SEL
+SEPT
+SERPENT
+SERRER
+SEXE
+SHAMPOOING
+SIÈCLE
+SIÈGE
+SIESTE
+SILHOUETTE
+SIRÈNE
+SKI
+SOLEIL
+SOMMEIL
+SON
+SONNER
+SORCIÈRE
+SOURD
+SOURIS
+SPORT
+STAR
+STATION
+STYLO
+SUR
+SURFACE
+SUSHI
+SWING
+TABLEAU
+TACHE
+TAILLE
+TANTE
+TAPIS
+TARD
+TAXI
+TÉLÉPHONE
+TÉLÉVISION
+TEMPLE
+TEMPS
+TENNIS
+TÊTE
+THÉ
+TIGRE
+TINTIN
+TISSU
+TITRE
+TOAST
+TOILETTE
+TOKYO
+TOMBE
+TON
+TOP
+TOUCHE
+TOUJOURS
+TOUR
+TOURNOI
+TOUT
+TRACE
+TRAIN
+TRAÎNER
+TRANSPORT
+TRAVAIL
+TRÉSOR
+TRIANGLE
+TRISTE
+TRÔNE
+TROUPEAU
+TSAR
+TUBE
+TUER
+TUPPERWARE
+TUYAU
+TWITTER
+TYPE
+UNIVERSITÉ
+VACHE
+VAGUE
+VAISSELLE
+VALEUR
+VER
+VERDICT
+VERRE
+VERS
+VERT
+VESTE
+VIANDE
+VIDE
+VIE
+VIEUX
+VILLE
+VIN
+VINGT
+VIOLON
+VIPÈRE
+VISION
+VITE
+VIVE
+VŒU
+VOILE
+VOISIN
+VOITURE
+VOL
+VOLUME
+VOTE
+VOULOIR
+VOYAGE
+ZEN
+ZÉRO
+ZODIAQUE
+ZONE
+ZOO
diff --git a/systems/eldiron/websites/games/terraforming-mars/default.nix b/systems/eldiron/websites/games/terraforming-mars/default.nix
new file mode 100644
index 0000000..e90e72f
--- /dev/null
+++ b/systems/eldiron/websites/games/terraforming-mars/default.nix
@@ -0,0 +1,75 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.myServices.websites.games.terraforming-mars;
+ terraforming-mars = pkgs.callPackage ./terraforming-mars.nix {};
+in
+{
+ options.myServices.websites.games.terraforming-mars.enable = lib.mkEnableOption "Enable Terraforming mars game";
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.games.subdomains.terraforming-mars = with config.myServices.dns.helpers;
+ ips servers.eldiron.ips.main;
+ myServices.chatonsProperties.services.terraforming-mars = {
+ file.datetime = "2022-08-27T14:20:00";
+ service = {
+ name = "Terraforming Mars";
+ description = "Terraforming Mars Boardgame";
+ website = "https://terraforming-mars.games.immae.eu/";
+ logo = "https://terraforming-mars.games.immae.eu/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Terraforming Mars";
+ website = "https://github.com/terraforming-mars/terraforming-mars";
+ license.url = "https://github.com/terraforming-mars/terraforming-mars/blob/main/LICENSE";
+ license.name = "GNU General Public License v3.0";
+ version = "unversionned";
+ source.url = "https://github.com/terraforming-mars/terraforming-mars";
+ };
+ };
+ systemd.services.terraforming-mars = {
+ path = [ pkgs.nodejs_16 pkgs.bashInteractive ];
+ description = "Terraforming mars game";
+ wantedBy = [ "multi-user.target" ];
+ script = ''
+ export PORT=/run/terraforming-mars/socket.sock
+ export NODE_ENV=production
+ mkdir -p /var/lib/terraforming-mars/db
+ npm run start
+ '';
+ postStart = ''
+ sleep 5;
+ chown :wwwrun /run/terraforming-mars/socket.sock
+ chmod g+w /run/terraforming-mars/socket.sock
+ '';
+ environment.NPM_CONFIG_LOGS_DIR = "%S/terraforming-mars/npm_logs";
+ environment.NPM_CONFIG_CACHE = "%S/terraforming-mars/npm_cache";
+ serviceConfig = {
+ User = "terraformingmars";
+ DynamicUser = true;
+ SupplementaryGroups = [ "wwwrun" ];
+ Type = "simple";
+ WorkingDirectory = terraforming-mars;
+ RuntimeDirectory = "terraforming-mars";
+ StateDirectory = "terraforming-mars";
+ };
+ };
+
+ security.acme.certs.games.extraDomainNames = [ "terraforming-mars.games.immae.eu" ];
+ security.acme.certs.games.domain = "games.immae.eu";
+ services.websites.env.tools.vhostConfs.games_terraforming-mars = {
+ certName = "games";
+ hosts = [ "terraforming-mars.games.immae.eu" ];
+ root = null;
+ extraConfig = [
+ ''
+ ProxyPass / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/
+ ProxyPassReverse / unix:///run/terraforming-mars/socket.sock|http://terraforming-mars.games.immae.eu/
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch
new file mode 100644
index 0000000..684a7df
--- /dev/null
+++ b/systems/eldiron/websites/games/terraforming-mars/immae-assets.patch
@@ -0,0 +1,13 @@
+diff --git a/assets/index.html b/assets/index.html
+index 220192834..d77a0fc80 100644
+--- a/assets/index.html
++++ b/assets/index.html
+@@ -2,7 +2,7 @@
+
+
+
+
diff --git a/systems/eldiron/websites/games/terraforming-mars/node-packages.nix b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix
new file mode 100644
index 0000000..e5fac49
--- /dev/null
+++ b/systems/eldiron/websites/games/terraforming-mars/node-packages.nix
@@ -0,0 +1,4353 @@
+# This file has been generated by node2nix 1.8.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? [], src}:
+
+let
+ sources = {
+ "@babel/code-frame-7.12.13" = {
+ name = "_at_babel_slash_code-frame";
+ packageName = "@babel/code-frame";
+ version = "7.12.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz";
+ sha512 = "HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==";
+ };
+ };
+ "@babel/helper-validator-identifier-7.12.11" = {
+ name = "_at_babel_slash_helper-validator-identifier";
+ packageName = "@babel/helper-validator-identifier";
+ version = "7.12.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz";
+ sha512 = "np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==";
+ };
+ };
+ "@babel/highlight-7.13.10" = {
+ name = "_at_babel_slash_highlight";
+ packageName = "@babel/highlight";
+ version = "7.13.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz";
+ sha512 = "5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==";
+ };
+ };
+ "@discoveryjs/json-ext-0.5.2" = {
+ name = "_at_discoveryjs_slash_json-ext";
+ packageName = "@discoveryjs/json-ext";
+ version = "0.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz";
+ sha512 = "HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==";
+ };
+ };
+ "@nodelib/fs.scandir-2.1.4" = {
+ name = "_at_nodelib_slash_fs.scandir";
+ packageName = "@nodelib/fs.scandir";
+ version = "2.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz";
+ sha512 = "33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==";
+ };
+ };
+ "@nodelib/fs.stat-2.0.4" = {
+ name = "_at_nodelib_slash_fs.stat";
+ packageName = "@nodelib/fs.stat";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz";
+ sha512 = "IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==";
+ };
+ };
+ "@nodelib/fs.walk-1.2.6" = {
+ name = "_at_nodelib_slash_fs.walk";
+ packageName = "@nodelib/fs.walk";
+ version = "1.2.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz";
+ sha512 = "8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==";
+ };
+ };
+ "@types/eslint-7.2.10" = {
+ name = "_at_types_slash_eslint";
+ packageName = "@types/eslint";
+ version = "7.2.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz";
+ sha512 = "kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==";
+ };
+ };
+ "@types/eslint-scope-3.7.0" = {
+ name = "_at_types_slash_eslint-scope";
+ packageName = "@types/eslint-scope";
+ version = "3.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz";
+ sha512 = "O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==";
+ };
+ };
+ "@types/estree-0.0.46" = {
+ name = "_at_types_slash_estree";
+ packageName = "@types/estree";
+ version = "0.0.46";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz";
+ sha512 = "laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==";
+ };
+ };
+ "@types/json-schema-7.0.7" = {
+ name = "_at_types_slash_json-schema";
+ packageName = "@types/json-schema";
+ version = "7.0.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz";
+ sha512 = "cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==";
+ };
+ };
+ "@types/node-10.17.58" = {
+ name = "_at_types_slash_node";
+ packageName = "@types/node";
+ version = "10.17.58";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/node/-/node-10.17.58.tgz";
+ sha512 = "Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w==";
+ };
+ };
+ "@types/pg-7.14.11" = {
+ name = "_at_types_slash_pg";
+ packageName = "@types/pg";
+ version = "7.14.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/pg/-/pg-7.14.11.tgz";
+ sha512 = "EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA==";
+ };
+ };
+ "@types/sqlite3-3.1.7" = {
+ name = "_at_types_slash_sqlite3";
+ packageName = "@types/sqlite3";
+ version = "3.1.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.7.tgz";
+ sha512 = "8FHV/8Uzd7IwdHm5mvmF2Aif4aC/gjrt4axWD9SmfaxITnOjtOhCbOSTuqv/VbH1uq0QrwlaTj9aTz3gmR6u4w==";
+ };
+ };
+ "@typescript-eslint/eslint-plugin-4.22.0" = {
+ name = "_at_typescript-eslint_slash_eslint-plugin";
+ packageName = "@typescript-eslint/eslint-plugin";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz";
+ sha512 = "U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA==";
+ };
+ };
+ "@typescript-eslint/experimental-utils-4.22.0" = {
+ name = "_at_typescript-eslint_slash_experimental-utils";
+ packageName = "@typescript-eslint/experimental-utils";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz";
+ sha512 = "xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==";
+ };
+ };
+ "@typescript-eslint/parser-4.22.0" = {
+ name = "_at_typescript-eslint_slash_parser";
+ packageName = "@typescript-eslint/parser";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.22.0.tgz";
+ sha512 = "z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q==";
+ };
+ };
+ "@typescript-eslint/scope-manager-4.22.0" = {
+ name = "_at_typescript-eslint_slash_scope-manager";
+ packageName = "@typescript-eslint/scope-manager";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz";
+ sha512 = "OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==";
+ };
+ };
+ "@typescript-eslint/types-4.22.0" = {
+ name = "_at_typescript-eslint_slash_types";
+ packageName = "@typescript-eslint/types";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.22.0.tgz";
+ sha512 = "sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==";
+ };
+ };
+ "@typescript-eslint/typescript-estree-4.22.0" = {
+ name = "_at_typescript-eslint_slash_typescript-estree";
+ packageName = "@typescript-eslint/typescript-estree";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz";
+ sha512 = "TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==";
+ };
+ };
+ "@typescript-eslint/visitor-keys-4.22.0" = {
+ name = "_at_typescript-eslint_slash_visitor-keys";
+ packageName = "@typescript-eslint/visitor-keys";
+ version = "4.22.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz";
+ sha512 = "nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==";
+ };
+ };
+ "@webassemblyjs/ast-1.11.0" = {
+ name = "_at_webassemblyjs_slash_ast";
+ packageName = "@webassemblyjs/ast";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz";
+ sha512 = "kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==";
+ };
+ };
+ "@webassemblyjs/floating-point-hex-parser-1.11.0" = {
+ name = "_at_webassemblyjs_slash_floating-point-hex-parser";
+ packageName = "@webassemblyjs/floating-point-hex-parser";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz";
+ sha512 = "Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==";
+ };
+ };
+ "@webassemblyjs/helper-api-error-1.11.0" = {
+ name = "_at_webassemblyjs_slash_helper-api-error";
+ packageName = "@webassemblyjs/helper-api-error";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz";
+ sha512 = "baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==";
+ };
+ };
+ "@webassemblyjs/helper-buffer-1.11.0" = {
+ name = "_at_webassemblyjs_slash_helper-buffer";
+ packageName = "@webassemblyjs/helper-buffer";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz";
+ sha512 = "u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==";
+ };
+ };
+ "@webassemblyjs/helper-numbers-1.11.0" = {
+ name = "_at_webassemblyjs_slash_helper-numbers";
+ packageName = "@webassemblyjs/helper-numbers";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz";
+ sha512 = "DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==";
+ };
+ };
+ "@webassemblyjs/helper-wasm-bytecode-1.11.0" = {
+ name = "_at_webassemblyjs_slash_helper-wasm-bytecode";
+ packageName = "@webassemblyjs/helper-wasm-bytecode";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz";
+ sha512 = "MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==";
+ };
+ };
+ "@webassemblyjs/helper-wasm-section-1.11.0" = {
+ name = "_at_webassemblyjs_slash_helper-wasm-section";
+ packageName = "@webassemblyjs/helper-wasm-section";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz";
+ sha512 = "3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==";
+ };
+ };
+ "@webassemblyjs/ieee754-1.11.0" = {
+ name = "_at_webassemblyjs_slash_ieee754";
+ packageName = "@webassemblyjs/ieee754";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz";
+ sha512 = "KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==";
+ };
+ };
+ "@webassemblyjs/leb128-1.11.0" = {
+ name = "_at_webassemblyjs_slash_leb128";
+ packageName = "@webassemblyjs/leb128";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz";
+ sha512 = "aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==";
+ };
+ };
+ "@webassemblyjs/utf8-1.11.0" = {
+ name = "_at_webassemblyjs_slash_utf8";
+ packageName = "@webassemblyjs/utf8";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz";
+ sha512 = "A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==";
+ };
+ };
+ "@webassemblyjs/wasm-edit-1.11.0" = {
+ name = "_at_webassemblyjs_slash_wasm-edit";
+ packageName = "@webassemblyjs/wasm-edit";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz";
+ sha512 = "JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==";
+ };
+ };
+ "@webassemblyjs/wasm-gen-1.11.0" = {
+ name = "_at_webassemblyjs_slash_wasm-gen";
+ packageName = "@webassemblyjs/wasm-gen";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz";
+ sha512 = "BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==";
+ };
+ };
+ "@webassemblyjs/wasm-opt-1.11.0" = {
+ name = "_at_webassemblyjs_slash_wasm-opt";
+ packageName = "@webassemblyjs/wasm-opt";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz";
+ sha512 = "tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==";
+ };
+ };
+ "@webassemblyjs/wasm-parser-1.11.0" = {
+ name = "_at_webassemblyjs_slash_wasm-parser";
+ packageName = "@webassemblyjs/wasm-parser";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz";
+ sha512 = "6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==";
+ };
+ };
+ "@webassemblyjs/wast-printer-1.11.0" = {
+ name = "_at_webassemblyjs_slash_wast-printer";
+ packageName = "@webassemblyjs/wast-printer";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz";
+ sha512 = "Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==";
+ };
+ };
+ "@webpack-cli/configtest-1.0.2" = {
+ name = "_at_webpack-cli_slash_configtest";
+ packageName = "@webpack-cli/configtest";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz";
+ sha512 = "3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==";
+ };
+ };
+ "@webpack-cli/info-1.2.3" = {
+ name = "_at_webpack-cli_slash_info";
+ packageName = "@webpack-cli/info";
+ version = "1.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz";
+ sha512 = "lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==";
+ };
+ };
+ "@webpack-cli/serve-1.3.1" = {
+ name = "_at_webpack-cli_slash_serve";
+ packageName = "@webpack-cli/serve";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz";
+ sha512 = "0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==";
+ };
+ };
+ "@xtuc/ieee754-1.2.0" = {
+ name = "_at_xtuc_slash_ieee754";
+ packageName = "@xtuc/ieee754";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
+ sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==";
+ };
+ };
+ "@xtuc/long-4.2.2" = {
+ name = "_at_xtuc_slash_long";
+ packageName = "@xtuc/long";
+ version = "4.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz";
+ sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==";
+ };
+ };
+ "abbrev-1.1.1" = {
+ name = "abbrev";
+ packageName = "abbrev";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+ sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+ };
+ };
+ "acorn-7.4.1" = {
+ name = "acorn";
+ packageName = "acorn";
+ version = "7.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz";
+ sha512 = "nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==";
+ };
+ };
+ "acorn-8.1.1" = {
+ name = "acorn";
+ packageName = "acorn";
+ version = "8.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz";
+ sha512 = "xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==";
+ };
+ };
+ "acorn-jsx-5.3.1" = {
+ name = "acorn-jsx";
+ packageName = "acorn-jsx";
+ version = "5.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz";
+ sha512 = "K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==";
+ };
+ };
+ "ajv-6.12.6" = {
+ name = "ajv";
+ packageName = "ajv";
+ version = "6.12.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+ sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+ };
+ };
+ "ajv-keywords-3.5.2" = {
+ name = "ajv-keywords";
+ packageName = "ajv-keywords";
+ version = "3.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz";
+ sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==";
+ };
+ };
+ "ansi-colors-4.1.1" = {
+ name = "ansi-colors";
+ packageName = "ansi-colors";
+ version = "4.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz";
+ sha512 = "JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==";
+ };
+ };
+ "ansi-escapes-4.3.2" = {
+ name = "ansi-escapes";
+ packageName = "ansi-escapes";
+ version = "4.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz";
+ sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==";
+ };
+ };
+ "ansi-regex-2.1.1" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+ sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+ };
+ };
+ "ansi-regex-3.0.0" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz";
+ sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+ };
+ };
+ "ansi-regex-4.1.0" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz";
+ sha512 = "1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==";
+ };
+ };
+ "ansi-regex-5.0.0" = {
+ name = "ansi-regex";
+ packageName = "ansi-regex";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz";
+ sha512 = "bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==";
+ };
+ };
+ "ansi-styles-3.2.1" = {
+ name = "ansi-styles";
+ packageName = "ansi-styles";
+ version = "3.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";
+ sha512 = "VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==";
+ };
+ };
+ "ansi-styles-4.3.0" = {
+ name = "ansi-styles";
+ packageName = "ansi-styles";
+ version = "4.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+ sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+ };
+ };
+ "aproba-1.2.0" = {
+ name = "aproba";
+ packageName = "aproba";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
+ sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==";
+ };
+ };
+ "are-we-there-yet-1.1.5" = {
+ name = "are-we-there-yet";
+ packageName = "are-we-there-yet";
+ version = "1.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
+ sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==";
+ };
+ };
+ "argparse-1.0.10" = {
+ name = "argparse";
+ packageName = "argparse";
+ version = "1.0.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+ sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+ };
+ };
+ "array-union-2.1.0" = {
+ name = "array-union";
+ packageName = "array-union";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";
+ sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==";
+ };
+ };
+ "asn1-0.2.4" = {
+ name = "asn1";
+ packageName = "asn1";
+ version = "0.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+ sha512 = "jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==";
+ };
+ };
+ "assert-plus-1.0.0" = {
+ name = "assert-plus";
+ packageName = "assert-plus";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+ sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+ };
+ };
+ "astral-regex-1.0.0" = {
+ name = "astral-regex";
+ packageName = "astral-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz";
+ sha512 = "+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==";
+ };
+ };
+ "asynckit-0.4.0" = {
+ name = "asynckit";
+ packageName = "asynckit";
+ version = "0.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+ sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+ };
+ };
+ "aws-sign2-0.7.0" = {
+ name = "aws-sign2";
+ packageName = "aws-sign2";
+ version = "0.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+ sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+ };
+ };
+ "aws4-1.11.0" = {
+ name = "aws4";
+ packageName = "aws4";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz";
+ sha512 = "xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==";
+ };
+ };
+ "balanced-match-1.0.2" = {
+ name = "balanced-match";
+ packageName = "balanced-match";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
+ sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
+ };
+ };
+ "bcrypt-pbkdf-1.0.2" = {
+ name = "bcrypt-pbkdf";
+ packageName = "bcrypt-pbkdf";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+ sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+ };
+ };
+ "block-stream-0.0.9" = {
+ name = "block-stream";
+ packageName = "block-stream";
+ version = "0.0.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz";
+ sha1 = "13ebfe778a03205cfe03751481ebb4b3300c126a";
+ };
+ };
+ "brace-expansion-1.1.11" = {
+ name = "brace-expansion";
+ packageName = "brace-expansion";
+ version = "1.1.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+ sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+ };
+ };
+ "braces-3.0.2" = {
+ name = "braces";
+ packageName = "braces";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+ sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+ };
+ };
+ "browserslist-4.16.4" = {
+ name = "browserslist";
+ packageName = "browserslist";
+ version = "4.16.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz";
+ sha512 = "d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==";
+ };
+ };
+ "buffer-from-1.1.1" = {
+ name = "buffer-from";
+ packageName = "buffer-from";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz";
+ sha512 = "MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==";
+ };
+ };
+ "buffer-writer-2.0.0" = {
+ name = "buffer-writer";
+ packageName = "buffer-writer";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz";
+ sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==";
+ };
+ };
+ "callsites-3.1.0" = {
+ name = "callsites";
+ packageName = "callsites";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+ sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+ };
+ };
+ "caniuse-lite-1.0.30001209" = {
+ name = "caniuse-lite";
+ packageName = "caniuse-lite";
+ version = "1.0.30001209";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001209.tgz";
+ sha512 = "2Ktt4OeRM7EM/JaOZjuLzPYAIqmbwQMNnYbgooT+icoRGrKOyAxA1xhlnotBD1KArRSPsuJp3TdYcZYrL7qNxA==";
+ };
+ };
+ "caseless-0.12.0" = {
+ name = "caseless";
+ packageName = "caseless";
+ version = "0.12.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+ sha1 = "1b681c21ff84033c826543090689420d187151dc";
+ };
+ };
+ "chalk-2.4.2" = {
+ name = "chalk";
+ packageName = "chalk";
+ version = "2.4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz";
+ sha512 = "Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==";
+ };
+ };
+ "chalk-4.1.0" = {
+ name = "chalk";
+ packageName = "chalk";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz";
+ sha512 = "qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==";
+ };
+ };
+ "chardet-0.7.0" = {
+ name = "chardet";
+ packageName = "chardet";
+ version = "0.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz";
+ sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==";
+ };
+ };
+ "chownr-1.1.4" = {
+ name = "chownr";
+ packageName = "chownr";
+ version = "1.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz";
+ sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==";
+ };
+ };
+ "chrome-trace-event-1.0.3" = {
+ name = "chrome-trace-event";
+ packageName = "chrome-trace-event";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz";
+ sha512 = "p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==";
+ };
+ };
+ "cli-cursor-3.1.0" = {
+ name = "cli-cursor";
+ packageName = "cli-cursor";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz";
+ sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==";
+ };
+ };
+ "cli-width-3.0.0" = {
+ name = "cli-width";
+ packageName = "cli-width";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz";
+ sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==";
+ };
+ };
+ "clone-deep-4.0.1" = {
+ name = "clone-deep";
+ packageName = "clone-deep";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz";
+ sha512 = "neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==";
+ };
+ };
+ "code-point-at-1.1.0" = {
+ name = "code-point-at";
+ packageName = "code-point-at";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+ sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+ };
+ };
+ "color-convert-1.9.3" = {
+ name = "color-convert";
+ packageName = "color-convert";
+ version = "1.9.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+ sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+ };
+ };
+ "color-convert-2.0.1" = {
+ name = "color-convert";
+ packageName = "color-convert";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+ sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+ };
+ };
+ "color-name-1.1.3" = {
+ name = "color-name";
+ packageName = "color-name";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+ sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+ };
+ };
+ "color-name-1.1.4" = {
+ name = "color-name";
+ packageName = "color-name";
+ version = "1.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+ sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+ };
+ };
+ "colorette-1.2.2" = {
+ name = "colorette";
+ packageName = "colorette";
+ version = "1.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz";
+ sha512 = "MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==";
+ };
+ };
+ "combined-stream-1.0.8" = {
+ name = "combined-stream";
+ packageName = "combined-stream";
+ version = "1.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+ sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+ };
+ };
+ "commander-2.20.3" = {
+ name = "commander";
+ packageName = "commander";
+ version = "2.20.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+ sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+ };
+ };
+ "commander-7.2.0" = {
+ name = "commander";
+ packageName = "commander";
+ version = "7.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz";
+ sha512 = "QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==";
+ };
+ };
+ "compression-webpack-plugin-7.1.2" = {
+ name = "compression-webpack-plugin";
+ packageName = "compression-webpack-plugin";
+ version = "7.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-7.1.2.tgz";
+ sha512 = "9DKNW6ILLjx+bNBoviHDgLx6swBhWWH9ApClC9sTH2NoFfQM47BapQfovCm9zjD9v1uZwInF5a925FB9ErGQeQ==";
+ };
+ };
+ "concat-map-0.0.1" = {
+ name = "concat-map";
+ packageName = "concat-map";
+ version = "0.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+ sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+ };
+ };
+ "config-chain-1.1.12" = {
+ name = "config-chain";
+ packageName = "config-chain";
+ version = "1.1.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz";
+ sha512 = "a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==";
+ };
+ };
+ "console-control-strings-1.1.0" = {
+ name = "console-control-strings";
+ packageName = "console-control-strings";
+ version = "1.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
+ sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
+ };
+ };
+ "console-stamp-3.0.0-rc4.2" = {
+ name = "console-stamp";
+ packageName = "console-stamp";
+ version = "3.0.0-rc4.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/console-stamp/-/console-stamp-3.0.0-rc4.2.tgz";
+ sha512 = "ncGYdZsfDbBYYiaPXr9NHfZbSSkoVzYyh8nHji9/3ovw35Jn4ozo0btcirtfIznXT4xNgBQW+IyTVLISnNumdQ==";
+ };
+ };
+ "copy-anything-2.0.3" = {
+ name = "copy-anything";
+ packageName = "copy-anything";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz";
+ sha512 = "GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==";
+ };
+ };
+ "core-util-is-1.0.2" = {
+ name = "core-util-is";
+ packageName = "core-util-is";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+ sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+ };
+ };
+ "cross-spawn-6.0.5" = {
+ name = "cross-spawn";
+ packageName = "cross-spawn";
+ version = "6.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz";
+ sha512 = "eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==";
+ };
+ };
+ "cross-spawn-7.0.3" = {
+ name = "cross-spawn";
+ packageName = "cross-spawn";
+ version = "7.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+ sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+ };
+ };
+ "dashdash-1.14.1" = {
+ name = "dashdash";
+ packageName = "dashdash";
+ version = "1.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+ sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+ };
+ };
+ "dateformat-3.0.3" = {
+ name = "dateformat";
+ packageName = "dateformat";
+ version = "3.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz";
+ sha512 = "jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==";
+ };
+ };
+ "de-indent-1.0.2" = {
+ name = "de-indent";
+ packageName = "de-indent";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz";
+ sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d";
+ };
+ };
+ "debug-3.2.7" = {
+ name = "debug";
+ packageName = "debug";
+ version = "3.2.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";
+ sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==";
+ };
+ };
+ "debug-4.3.1" = {
+ name = "debug";
+ packageName = "debug";
+ version = "4.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz";
+ sha512 = "doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==";
+ };
+ };
+ "deep-extend-0.6.0" = {
+ name = "deep-extend";
+ packageName = "deep-extend";
+ version = "0.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
+ sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
+ };
+ };
+ "deep-is-0.1.3" = {
+ name = "deep-is";
+ packageName = "deep-is";
+ version = "0.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
+ sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+ };
+ };
+ "delayed-stream-1.0.0" = {
+ name = "delayed-stream";
+ packageName = "delayed-stream";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+ sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+ };
+ };
+ "delegates-1.0.0" = {
+ name = "delegates";
+ packageName = "delegates";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
+ sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
+ };
+ };
+ "detect-libc-1.0.3" = {
+ name = "detect-libc";
+ packageName = "detect-libc";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";
+ sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
+ };
+ };
+ "dialog-polyfill-0.5.6" = {
+ name = "dialog-polyfill";
+ packageName = "dialog-polyfill";
+ version = "0.5.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dialog-polyfill/-/dialog-polyfill-0.5.6.tgz";
+ sha512 = "ZbVDJI9uvxPAKze6z146rmfUZjBqNEwcnFTVamQzXH+svluiV7swmVIGr7miwADgfgt1G2JQIytypM9fbyhX4w==";
+ };
+ };
+ "dir-glob-3.0.1" = {
+ name = "dir-glob";
+ packageName = "dir-glob";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";
+ sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==";
+ };
+ };
+ "doctrine-3.0.0" = {
+ name = "doctrine";
+ packageName = "doctrine";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";
+ sha512 = "yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==";
+ };
+ };
+ "dotenv-8.2.0" = {
+ name = "dotenv";
+ packageName = "dotenv";
+ version = "8.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz";
+ sha512 = "8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==";
+ };
+ };
+ "ecc-jsbn-0.1.2" = {
+ name = "ecc-jsbn";
+ packageName = "ecc-jsbn";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+ sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+ };
+ };
+ "editorconfig-0.15.3" = {
+ name = "editorconfig";
+ packageName = "editorconfig";
+ version = "0.15.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz";
+ sha512 = "M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==";
+ };
+ };
+ "electron-to-chromium-1.3.717" = {
+ name = "electron-to-chromium";
+ packageName = "electron-to-chromium";
+ version = "1.3.717";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz";
+ sha512 = "OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==";
+ };
+ };
+ "emoji-regex-7.0.3" = {
+ name = "emoji-regex";
+ packageName = "emoji-regex";
+ version = "7.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz";
+ sha512 = "CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==";
+ };
+ };
+ "emoji-regex-8.0.0" = {
+ name = "emoji-regex";
+ packageName = "emoji-regex";
+ version = "8.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
+ sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
+ };
+ };
+ "enhanced-resolve-5.7.0" = {
+ name = "enhanced-resolve";
+ packageName = "enhanced-resolve";
+ version = "5.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz";
+ sha512 = "6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==";
+ };
+ };
+ "enquirer-2.3.6" = {
+ name = "enquirer";
+ packageName = "enquirer";
+ version = "2.3.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz";
+ sha512 = "yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==";
+ };
+ };
+ "envinfo-7.8.1" = {
+ name = "envinfo";
+ packageName = "envinfo";
+ version = "7.8.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz";
+ sha512 = "/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==";
+ };
+ };
+ "errno-0.1.8" = {
+ name = "errno";
+ packageName = "errno";
+ version = "0.1.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz";
+ sha512 = "dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==";
+ };
+ };
+ "es-module-lexer-0.4.1" = {
+ name = "es-module-lexer";
+ packageName = "es-module-lexer";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz";
+ sha512 = "ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==";
+ };
+ };
+ "escalade-3.1.1" = {
+ name = "escalade";
+ packageName = "escalade";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
+ sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
+ };
+ };
+ "escape-string-regexp-1.0.5" = {
+ name = "escape-string-regexp";
+ packageName = "escape-string-regexp";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+ sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+ };
+ };
+ "eslint-6.8.0" = {
+ name = "eslint";
+ packageName = "eslint";
+ version = "6.8.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz";
+ sha512 = "K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==";
+ };
+ };
+ "eslint-config-google-0.14.0" = {
+ name = "eslint-config-google";
+ packageName = "eslint-config-google";
+ version = "0.14.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz";
+ sha512 = "WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==";
+ };
+ };
+ "eslint-plugin-vue-6.2.2" = {
+ name = "eslint-plugin-vue";
+ packageName = "eslint-plugin-vue";
+ version = "6.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz";
+ sha512 = "Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==";
+ };
+ };
+ "eslint-scope-5.1.1" = {
+ name = "eslint-scope";
+ packageName = "eslint-scope";
+ version = "5.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz";
+ sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==";
+ };
+ };
+ "eslint-utils-1.4.3" = {
+ name = "eslint-utils";
+ packageName = "eslint-utils";
+ version = "1.4.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz";
+ sha512 = "fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==";
+ };
+ };
+ "eslint-utils-2.1.0" = {
+ name = "eslint-utils";
+ packageName = "eslint-utils";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz";
+ sha512 = "w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==";
+ };
+ };
+ "eslint-visitor-keys-1.3.0" = {
+ name = "eslint-visitor-keys";
+ packageName = "eslint-visitor-keys";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz";
+ sha512 = "6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==";
+ };
+ };
+ "eslint-visitor-keys-2.0.0" = {
+ name = "eslint-visitor-keys";
+ packageName = "eslint-visitor-keys";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz";
+ sha512 = "QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==";
+ };
+ };
+ "espree-6.2.1" = {
+ name = "espree";
+ packageName = "espree";
+ version = "6.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz";
+ sha512 = "ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==";
+ };
+ };
+ "esprima-4.0.1" = {
+ name = "esprima";
+ packageName = "esprima";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+ sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+ };
+ };
+ "esquery-1.4.0" = {
+ name = "esquery";
+ packageName = "esquery";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz";
+ sha512 = "cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==";
+ };
+ };
+ "esrecurse-4.3.0" = {
+ name = "esrecurse";
+ packageName = "esrecurse";
+ version = "4.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
+ sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
+ };
+ };
+ "estraverse-4.3.0" = {
+ name = "estraverse";
+ packageName = "estraverse";
+ version = "4.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+ sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+ };
+ };
+ "estraverse-5.2.0" = {
+ name = "estraverse";
+ packageName = "estraverse";
+ version = "5.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz";
+ sha512 = "BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==";
+ };
+ };
+ "esutils-2.0.3" = {
+ name = "esutils";
+ packageName = "esutils";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+ sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+ };
+ };
+ "events-3.3.0" = {
+ name = "events";
+ packageName = "events";
+ version = "3.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/events/-/events-3.3.0.tgz";
+ sha512 = "mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==";
+ };
+ };
+ "execa-5.0.0" = {
+ name = "execa";
+ packageName = "execa";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz";
+ sha512 = "ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==";
+ };
+ };
+ "extend-3.0.2" = {
+ name = "extend";
+ packageName = "extend";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+ sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+ };
+ };
+ "external-editor-3.1.0" = {
+ name = "external-editor";
+ packageName = "external-editor";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz";
+ sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==";
+ };
+ };
+ "extsprintf-1.3.0" = {
+ name = "extsprintf";
+ packageName = "extsprintf";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+ sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+ };
+ };
+ "fast-deep-equal-3.1.3" = {
+ name = "fast-deep-equal";
+ packageName = "fast-deep-equal";
+ version = "3.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+ sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+ };
+ };
+ "fast-glob-3.2.5" = {
+ name = "fast-glob";
+ packageName = "fast-glob";
+ version = "3.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz";
+ sha512 = "2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==";
+ };
+ };
+ "fast-json-stable-stringify-2.1.0" = {
+ name = "fast-json-stable-stringify";
+ packageName = "fast-json-stable-stringify";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+ sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+ };
+ };
+ "fast-levenshtein-2.0.6" = {
+ name = "fast-levenshtein";
+ packageName = "fast-levenshtein";
+ version = "2.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+ sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+ };
+ };
+ "fastest-levenshtein-1.0.12" = {
+ name = "fastest-levenshtein";
+ packageName = "fastest-levenshtein";
+ version = "1.0.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz";
+ sha512 = "On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==";
+ };
+ };
+ "fastq-1.11.0" = {
+ name = "fastq";
+ packageName = "fastq";
+ version = "1.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz";
+ sha512 = "7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==";
+ };
+ };
+ "figures-3.2.0" = {
+ name = "figures";
+ packageName = "figures";
+ version = "3.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz";
+ sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==";
+ };
+ };
+ "file-entry-cache-5.0.1" = {
+ name = "file-entry-cache";
+ packageName = "file-entry-cache";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+ sha512 = "bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==";
+ };
+ };
+ "fill-range-7.0.1" = {
+ name = "fill-range";
+ packageName = "fill-range";
+ version = "7.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+ sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+ };
+ };
+ "find-up-4.1.0" = {
+ name = "find-up";
+ packageName = "find-up";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz";
+ sha512 = "PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==";
+ };
+ };
+ "flat-cache-2.0.1" = {
+ name = "flat-cache";
+ packageName = "flat-cache";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz";
+ sha512 = "LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==";
+ };
+ };
+ "flatted-2.0.2" = {
+ name = "flatted";
+ packageName = "flatted";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz";
+ sha512 = "r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==";
+ };
+ };
+ "forever-agent-0.6.1" = {
+ name = "forever-agent";
+ packageName = "forever-agent";
+ version = "0.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+ sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+ };
+ };
+ "form-data-2.3.3" = {
+ name = "form-data";
+ packageName = "form-data";
+ version = "2.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+ sha512 = "1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==";
+ };
+ };
+ "fs-minipass-1.2.7" = {
+ name = "fs-minipass";
+ packageName = "fs-minipass";
+ version = "1.2.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz";
+ sha512 = "GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==";
+ };
+ };
+ "fs.realpath-1.0.0" = {
+ name = "fs.realpath";
+ packageName = "fs.realpath";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+ sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+ };
+ };
+ "fstream-1.0.12" = {
+ name = "fstream";
+ packageName = "fstream";
+ version = "1.0.12";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz";
+ sha512 = "WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==";
+ };
+ };
+ "function-bind-1.1.1" = {
+ name = "function-bind";
+ packageName = "function-bind";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+ sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+ };
+ };
+ "functional-red-black-tree-1.0.1" = {
+ name = "functional-red-black-tree";
+ packageName = "functional-red-black-tree";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+ sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+ };
+ };
+ "gauge-2.7.4" = {
+ name = "gauge";
+ packageName = "gauge";
+ version = "2.7.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
+ sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
+ };
+ };
+ "get-stream-6.0.1" = {
+ name = "get-stream";
+ packageName = "get-stream";
+ version = "6.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz";
+ sha512 = "ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==";
+ };
+ };
+ "getpass-0.1.7" = {
+ name = "getpass";
+ packageName = "getpass";
+ version = "0.1.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+ sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+ };
+ };
+ "glob-7.1.6" = {
+ name = "glob";
+ packageName = "glob";
+ version = "7.1.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
+ sha512 = "LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==";
+ };
+ };
+ "glob-parent-5.1.2" = {
+ name = "glob-parent";
+ packageName = "glob-parent";
+ version = "5.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
+ sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
+ };
+ };
+ "glob-to-regexp-0.4.1" = {
+ name = "glob-to-regexp";
+ packageName = "glob-to-regexp";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz";
+ sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==";
+ };
+ };
+ "globals-12.4.0" = {
+ name = "globals";
+ packageName = "globals";
+ version = "12.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz";
+ sha512 = "BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==";
+ };
+ };
+ "globby-11.0.3" = {
+ name = "globby";
+ packageName = "globby";
+ version = "11.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz";
+ sha512 = "ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==";
+ };
+ };
+ "graceful-fs-4.2.6" = {
+ name = "graceful-fs";
+ packageName = "graceful-fs";
+ version = "4.2.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz";
+ sha512 = "nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==";
+ };
+ };
+ "har-schema-2.0.0" = {
+ name = "har-schema";
+ packageName = "har-schema";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+ sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+ };
+ };
+ "har-validator-5.1.5" = {
+ name = "har-validator";
+ packageName = "har-validator";
+ version = "5.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";
+ sha512 = "nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==";
+ };
+ };
+ "has-1.0.3" = {
+ name = "has";
+ packageName = "has";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+ sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+ };
+ };
+ "has-flag-3.0.0" = {
+ name = "has-flag";
+ packageName = "has-flag";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";
+ sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+ };
+ };
+ "has-flag-4.0.0" = {
+ name = "has-flag";
+ packageName = "has-flag";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+ sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+ };
+ };
+ "has-unicode-2.0.1" = {
+ name = "has-unicode";
+ packageName = "has-unicode";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
+ sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
+ };
+ };
+ "he-1.2.0" = {
+ name = "he";
+ packageName = "he";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+ sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+ };
+ };
+ "http-signature-1.2.0" = {
+ name = "http-signature";
+ packageName = "http-signature";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+ sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+ };
+ };
+ "human-signals-2.1.0" = {
+ name = "human-signals";
+ packageName = "human-signals";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz";
+ sha512 = "B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==";
+ };
+ };
+ "iconv-lite-0.4.24" = {
+ name = "iconv-lite";
+ packageName = "iconv-lite";
+ version = "0.4.24";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
+ sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
+ };
+ };
+ "ignore-4.0.6" = {
+ name = "ignore";
+ packageName = "ignore";
+ version = "4.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz";
+ sha512 = "cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==";
+ };
+ };
+ "ignore-5.1.8" = {
+ name = "ignore";
+ packageName = "ignore";
+ version = "5.1.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz";
+ sha512 = "BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==";
+ };
+ };
+ "ignore-walk-3.0.3" = {
+ name = "ignore-walk";
+ packageName = "ignore-walk";
+ version = "3.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz";
+ sha512 = "m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==";
+ };
+ };
+ "image-size-0.5.5" = {
+ name = "image-size";
+ packageName = "image-size";
+ version = "0.5.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
+ sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
+ };
+ };
+ "import-fresh-3.3.0" = {
+ name = "import-fresh";
+ packageName = "import-fresh";
+ version = "3.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz";
+ sha512 = "veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==";
+ };
+ };
+ "import-local-3.0.2" = {
+ name = "import-local";
+ packageName = "import-local";
+ version = "3.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz";
+ sha512 = "vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==";
+ };
+ };
+ "imurmurhash-0.1.4" = {
+ name = "imurmurhash";
+ packageName = "imurmurhash";
+ version = "0.1.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+ sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+ };
+ };
+ "inflight-1.0.6" = {
+ name = "inflight";
+ packageName = "inflight";
+ version = "1.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+ sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+ };
+ };
+ "inherits-2.0.4" = {
+ name = "inherits";
+ packageName = "inherits";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+ sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+ };
+ };
+ "ini-1.3.8" = {
+ name = "ini";
+ packageName = "ini";
+ version = "1.3.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz";
+ sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==";
+ };
+ };
+ "inquirer-7.3.3" = {
+ name = "inquirer";
+ packageName = "inquirer";
+ version = "7.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz";
+ sha512 = "JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==";
+ };
+ };
+ "interpret-2.2.0" = {
+ name = "interpret";
+ packageName = "interpret";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz";
+ sha512 = "Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==";
+ };
+ };
+ "is-core-module-2.2.0" = {
+ name = "is-core-module";
+ packageName = "is-core-module";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz";
+ sha512 = "XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==";
+ };
+ };
+ "is-extglob-2.1.1" = {
+ name = "is-extglob";
+ packageName = "is-extglob";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+ sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+ };
+ };
+ "is-fullwidth-code-point-1.0.0" = {
+ name = "is-fullwidth-code-point";
+ packageName = "is-fullwidth-code-point";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+ sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+ };
+ };
+ "is-fullwidth-code-point-2.0.0" = {
+ name = "is-fullwidth-code-point";
+ packageName = "is-fullwidth-code-point";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+ sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+ };
+ };
+ "is-fullwidth-code-point-3.0.0" = {
+ name = "is-fullwidth-code-point";
+ packageName = "is-fullwidth-code-point";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+ sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
+ };
+ };
+ "is-glob-4.0.1" = {
+ name = "is-glob";
+ packageName = "is-glob";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz";
+ sha512 = "5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==";
+ };
+ };
+ "is-number-7.0.0" = {
+ name = "is-number";
+ packageName = "is-number";
+ version = "7.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+ sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+ };
+ };
+ "is-plain-object-2.0.4" = {
+ name = "is-plain-object";
+ packageName = "is-plain-object";
+ version = "2.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz";
+ sha512 = "h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==";
+ };
+ };
+ "is-stream-2.0.0" = {
+ name = "is-stream";
+ packageName = "is-stream";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz";
+ sha512 = "XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==";
+ };
+ };
+ "is-typedarray-1.0.0" = {
+ name = "is-typedarray";
+ packageName = "is-typedarray";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+ sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+ };
+ };
+ "is-what-3.14.1" = {
+ name = "is-what";
+ packageName = "is-what";
+ version = "3.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz";
+ sha512 = "sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==";
+ };
+ };
+ "isarray-1.0.0" = {
+ name = "isarray";
+ packageName = "isarray";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+ sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+ };
+ };
+ "isexe-2.0.0" = {
+ name = "isexe";
+ packageName = "isexe";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+ sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+ };
+ };
+ "isobject-3.0.1" = {
+ name = "isobject";
+ packageName = "isobject";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz";
+ sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+ };
+ };
+ "isstream-0.1.2" = {
+ name = "isstream";
+ packageName = "isstream";
+ version = "0.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+ sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+ };
+ };
+ "jest-worker-26.6.2" = {
+ name = "jest-worker";
+ packageName = "jest-worker";
+ version = "26.6.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz";
+ sha512 = "KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==";
+ };
+ };
+ "js-beautify-1.13.13" = {
+ name = "js-beautify";
+ packageName = "js-beautify";
+ version = "1.13.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.13.tgz";
+ sha512 = "oH+nc0U5mOAqX8M5JO1J0Pw/7Q35sAdOsM5W3i87pir9Ntx6P/5Gx1xLNoK+MGyvHk4rqqRCE4Oq58H6xl2W7A==";
+ };
+ };
+ "js-tokens-4.0.0" = {
+ name = "js-tokens";
+ packageName = "js-tokens";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz";
+ sha512 = "RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==";
+ };
+ };
+ "js-yaml-3.14.1" = {
+ name = "js-yaml";
+ packageName = "js-yaml";
+ version = "3.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz";
+ sha512 = "okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==";
+ };
+ };
+ "jsbn-0.1.1" = {
+ name = "jsbn";
+ packageName = "jsbn";
+ version = "0.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+ sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+ };
+ };
+ "json-parse-better-errors-1.0.2" = {
+ name = "json-parse-better-errors";
+ packageName = "json-parse-better-errors";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+ sha512 = "mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==";
+ };
+ };
+ "json-schema-0.2.3" = {
+ name = "json-schema";
+ packageName = "json-schema";
+ version = "0.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+ sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+ };
+ };
+ "json-schema-traverse-0.4.1" = {
+ name = "json-schema-traverse";
+ packageName = "json-schema-traverse";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+ sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+ };
+ };
+ "json-stable-stringify-without-jsonify-1.0.1" = {
+ name = "json-stable-stringify-without-jsonify";
+ packageName = "json-stable-stringify-without-jsonify";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+ sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+ };
+ };
+ "json-stringify-safe-5.0.1" = {
+ name = "json-stringify-safe";
+ packageName = "json-stringify-safe";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+ sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+ };
+ };
+ "jsprim-1.4.1" = {
+ name = "jsprim";
+ packageName = "jsprim";
+ version = "1.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+ sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+ };
+ };
+ "kind-of-6.0.3" = {
+ name = "kind-of";
+ packageName = "kind-of";
+ version = "6.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";
+ sha512 = "dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==";
+ };
+ };
+ "less-3.13.1" = {
+ name = "less";
+ packageName = "less";
+ version = "3.13.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/less/-/less-3.13.1.tgz";
+ sha512 = "SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==";
+ };
+ };
+ "levn-0.3.0" = {
+ name = "levn";
+ packageName = "levn";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+ sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+ };
+ };
+ "loader-runner-4.2.0" = {
+ name = "loader-runner";
+ packageName = "loader-runner";
+ version = "4.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz";
+ sha512 = "92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==";
+ };
+ };
+ "locate-path-5.0.0" = {
+ name = "locate-path";
+ packageName = "locate-path";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz";
+ sha512 = "t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==";
+ };
+ };
+ "lodash-4.17.21" = {
+ name = "lodash";
+ packageName = "lodash";
+ version = "4.17.21";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";
+ sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==";
+ };
+ };
+ "lru-cache-4.1.5" = {
+ name = "lru-cache";
+ packageName = "lru-cache";
+ version = "4.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
+ sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+ };
+ };
+ "lru-cache-6.0.0" = {
+ name = "lru-cache";
+ packageName = "lru-cache";
+ version = "6.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz";
+ sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==";
+ };
+ };
+ "make-dir-2.1.0" = {
+ name = "make-dir";
+ packageName = "make-dir";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz";
+ sha512 = "LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==";
+ };
+ };
+ "merge-stream-2.0.0" = {
+ name = "merge-stream";
+ packageName = "merge-stream";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
+ sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
+ };
+ };
+ "merge2-1.4.1" = {
+ name = "merge2";
+ packageName = "merge2";
+ version = "1.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";
+ sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==";
+ };
+ };
+ "micromatch-4.0.4" = {
+ name = "micromatch";
+ packageName = "micromatch";
+ version = "4.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz";
+ sha512 = "pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==";
+ };
+ };
+ "mime-1.6.0" = {
+ name = "mime";
+ packageName = "mime";
+ version = "1.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+ sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+ };
+ };
+ "mime-db-1.47.0" = {
+ name = "mime-db";
+ packageName = "mime-db";
+ version = "1.47.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz";
+ sha512 = "QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==";
+ };
+ };
+ "mime-types-2.1.30" = {
+ name = "mime-types";
+ packageName = "mime-types";
+ version = "2.1.30";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz";
+ sha512 = "crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==";
+ };
+ };
+ "mimic-fn-2.1.0" = {
+ name = "mimic-fn";
+ packageName = "mimic-fn";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
+ sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
+ };
+ };
+ "minimatch-3.0.4" = {
+ name = "minimatch";
+ packageName = "minimatch";
+ version = "3.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+ sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
+ };
+ };
+ "minimist-1.2.5" = {
+ name = "minimist";
+ packageName = "minimist";
+ version = "1.2.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz";
+ sha512 = "FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==";
+ };
+ };
+ "minipass-2.9.0" = {
+ name = "minipass";
+ packageName = "minipass";
+ version = "2.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz";
+ sha512 = "wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==";
+ };
+ };
+ "minizlib-1.3.3" = {
+ name = "minizlib";
+ packageName = "minizlib";
+ version = "1.3.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz";
+ sha512 = "6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==";
+ };
+ };
+ "mkdirp-0.5.5" = {
+ name = "mkdirp";
+ packageName = "mkdirp";
+ version = "0.5.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";
+ sha512 = "NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==";
+ };
+ };
+ "mkdirp-1.0.4" = {
+ name = "mkdirp";
+ packageName = "mkdirp";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz";
+ sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==";
+ };
+ };
+ "mnemonist-0.38.3" = {
+ name = "mnemonist";
+ packageName = "mnemonist";
+ version = "0.38.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz";
+ sha512 = "2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==";
+ };
+ };
+ "ms-2.1.2" = {
+ name = "ms";
+ packageName = "ms";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+ sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+ };
+ };
+ "mute-stream-0.0.8" = {
+ name = "mute-stream";
+ packageName = "mute-stream";
+ version = "0.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz";
+ sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==";
+ };
+ };
+ "native-request-1.0.8" = {
+ name = "native-request";
+ packageName = "native-request";
+ version = "1.0.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz";
+ sha512 = "vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==";
+ };
+ };
+ "natural-compare-1.4.0" = {
+ name = "natural-compare";
+ packageName = "natural-compare";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz";
+ sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+ };
+ };
+ "needle-2.6.0" = {
+ name = "needle";
+ packageName = "needle";
+ version = "2.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz";
+ sha512 = "KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==";
+ };
+ };
+ "neo-async-2.6.2" = {
+ name = "neo-async";
+ packageName = "neo-async";
+ version = "2.6.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz";
+ sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==";
+ };
+ };
+ "nice-try-1.0.5" = {
+ name = "nice-try";
+ packageName = "nice-try";
+ version = "1.0.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz";
+ sha512 = "1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==";
+ };
+ };
+ "node-addon-api-3.1.0" = {
+ name = "node-addon-api";
+ packageName = "node-addon-api";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz";
+ sha512 = "flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==";
+ };
+ };
+ "node-gyp-3.8.0" = {
+ name = "node-gyp";
+ packageName = "node-gyp";
+ version = "3.8.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz";
+ sha512 = "3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==";
+ };
+ };
+ "node-pre-gyp-0.11.0" = {
+ name = "node-pre-gyp";
+ packageName = "node-pre-gyp";
+ version = "0.11.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz";
+ sha512 = "TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==";
+ };
+ };
+ "node-releases-1.1.71" = {
+ name = "node-releases";
+ packageName = "node-releases";
+ version = "1.1.71";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz";
+ sha512 = "zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==";
+ };
+ };
+ "nopt-3.0.6" = {
+ name = "nopt";
+ packageName = "nopt";
+ version = "3.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
+ sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
+ };
+ };
+ "nopt-4.0.3" = {
+ name = "nopt";
+ packageName = "nopt";
+ version = "4.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz";
+ sha512 = "CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==";
+ };
+ };
+ "nopt-5.0.0" = {
+ name = "nopt";
+ packageName = "nopt";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz";
+ sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==";
+ };
+ };
+ "npm-bundled-1.1.1" = {
+ name = "npm-bundled";
+ packageName = "npm-bundled";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz";
+ sha512 = "gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==";
+ };
+ };
+ "npm-normalize-package-bin-1.0.1" = {
+ name = "npm-normalize-package-bin";
+ packageName = "npm-normalize-package-bin";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz";
+ sha512 = "EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==";
+ };
+ };
+ "npm-packlist-1.4.8" = {
+ name = "npm-packlist";
+ packageName = "npm-packlist";
+ version = "1.4.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz";
+ sha512 = "5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==";
+ };
+ };
+ "npm-run-path-4.0.1" = {
+ name = "npm-run-path";
+ packageName = "npm-run-path";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz";
+ sha512 = "S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==";
+ };
+ };
+ "npmlog-4.1.2" = {
+ name = "npmlog";
+ packageName = "npmlog";
+ version = "4.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
+ sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==";
+ };
+ };
+ "number-is-nan-1.0.1" = {
+ name = "number-is-nan";
+ packageName = "number-is-nan";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+ sha1 = "097b602b53422a522c1afb8790318336941a011d";
+ };
+ };
+ "oauth-sign-0.9.0" = {
+ name = "oauth-sign";
+ packageName = "oauth-sign";
+ version = "0.9.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+ sha512 = "fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==";
+ };
+ };
+ "object-assign-4.1.1" = {
+ name = "object-assign";
+ packageName = "object-assign";
+ version = "4.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+ sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+ };
+ };
+ "obliterator-1.6.1" = {
+ name = "obliterator";
+ packageName = "obliterator";
+ version = "1.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz";
+ sha512 = "9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==";
+ };
+ };
+ "once-1.4.0" = {
+ name = "once";
+ packageName = "once";
+ version = "1.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+ sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+ };
+ };
+ "onetime-5.1.2" = {
+ name = "onetime";
+ packageName = "onetime";
+ version = "5.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz";
+ sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==";
+ };
+ };
+ "optionator-0.8.3" = {
+ name = "optionator";
+ packageName = "optionator";
+ version = "0.8.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
+ sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+ };
+ };
+ "os-homedir-1.0.2" = {
+ name = "os-homedir";
+ packageName = "os-homedir";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+ sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+ };
+ };
+ "os-tmpdir-1.0.2" = {
+ name = "os-tmpdir";
+ packageName = "os-tmpdir";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+ sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+ };
+ };
+ "osenv-0.1.5" = {
+ name = "osenv";
+ packageName = "osenv";
+ version = "0.1.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
+ sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
+ };
+ };
+ "p-limit-2.3.0" = {
+ name = "p-limit";
+ packageName = "p-limit";
+ version = "2.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz";
+ sha512 = "//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==";
+ };
+ };
+ "p-limit-3.1.0" = {
+ name = "p-limit";
+ packageName = "p-limit";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
+ sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
+ };
+ };
+ "p-locate-4.1.0" = {
+ name = "p-locate";
+ packageName = "p-locate";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz";
+ sha512 = "R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==";
+ };
+ };
+ "p-try-2.2.0" = {
+ name = "p-try";
+ packageName = "p-try";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz";
+ sha512 = "R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==";
+ };
+ };
+ "packet-reader-1.0.0" = {
+ name = "packet-reader";
+ packageName = "packet-reader";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz";
+ sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==";
+ };
+ };
+ "parent-module-1.0.1" = {
+ name = "parent-module";
+ packageName = "parent-module";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz";
+ sha512 = "GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==";
+ };
+ };
+ "path-exists-4.0.0" = {
+ name = "path-exists";
+ packageName = "path-exists";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";
+ sha512 = "ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==";
+ };
+ };
+ "path-is-absolute-1.0.1" = {
+ name = "path-is-absolute";
+ packageName = "path-is-absolute";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+ sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+ };
+ };
+ "path-key-2.0.1" = {
+ name = "path-key";
+ packageName = "path-key";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz";
+ sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+ };
+ };
+ "path-key-3.1.1" = {
+ name = "path-key";
+ packageName = "path-key";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+ sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+ };
+ };
+ "path-parse-1.0.6" = {
+ name = "path-parse";
+ packageName = "path-parse";
+ version = "1.0.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz";
+ sha512 = "GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==";
+ };
+ };
+ "path-type-4.0.0" = {
+ name = "path-type";
+ packageName = "path-type";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
+ sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
+ };
+ };
+ "performance-now-2.1.0" = {
+ name = "performance-now";
+ packageName = "performance-now";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+ sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+ };
+ };
+ "pg-8.6.0" = {
+ name = "pg";
+ packageName = "pg";
+ version = "8.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz";
+ sha512 = "qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==";
+ };
+ };
+ "pg-connection-string-2.5.0" = {
+ name = "pg-connection-string";
+ packageName = "pg-connection-string";
+ version = "2.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz";
+ sha512 = "r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==";
+ };
+ };
+ "pg-int8-1.0.1" = {
+ name = "pg-int8";
+ packageName = "pg-int8";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz";
+ sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
+ };
+ };
+ "pg-pool-3.3.0" = {
+ name = "pg-pool";
+ packageName = "pg-pool";
+ version = "3.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz";
+ sha512 = "0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==";
+ };
+ };
+ "pg-protocol-1.5.0" = {
+ name = "pg-protocol";
+ packageName = "pg-protocol";
+ version = "1.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz";
+ sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==";
+ };
+ };
+ "pg-types-2.2.0" = {
+ name = "pg-types";
+ packageName = "pg-types";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz";
+ sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==";
+ };
+ };
+ "pgpass-1.0.4" = {
+ name = "pgpass";
+ packageName = "pgpass";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz";
+ sha512 = "YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==";
+ };
+ };
+ "picomatch-2.2.3" = {
+ name = "picomatch";
+ packageName = "picomatch";
+ version = "2.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz";
+ sha512 = "KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==";
+ };
+ };
+ "pify-4.0.1" = {
+ name = "pify";
+ packageName = "pify";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";
+ sha512 = "uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==";
+ };
+ };
+ "pkg-dir-4.2.0" = {
+ name = "pkg-dir";
+ packageName = "pkg-dir";
+ version = "4.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz";
+ sha512 = "HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==";
+ };
+ };
+ "postgres-array-2.0.0" = {
+ name = "postgres-array";
+ packageName = "postgres-array";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz";
+ sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==";
+ };
+ };
+ "postgres-bytea-1.0.0" = {
+ name = "postgres-bytea";
+ packageName = "postgres-bytea";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz";
+ sha1 = "027b533c0aa890e26d172d47cf9ccecc521acd35";
+ };
+ };
+ "postgres-date-1.0.7" = {
+ name = "postgres-date";
+ packageName = "postgres-date";
+ version = "1.0.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz";
+ sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==";
+ };
+ };
+ "postgres-interval-1.2.0" = {
+ name = "postgres-interval";
+ packageName = "postgres-interval";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz";
+ sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==";
+ };
+ };
+ "prelude-ls-1.1.2" = {
+ name = "prelude-ls";
+ packageName = "prelude-ls";
+ version = "1.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+ sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+ };
+ };
+ "process-nextick-args-2.0.1" = {
+ name = "process-nextick-args";
+ packageName = "process-nextick-args";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+ sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+ };
+ };
+ "progress-2.0.3" = {
+ name = "progress";
+ packageName = "progress";
+ version = "2.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz";
+ sha512 = "7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==";
+ };
+ };
+ "proto-list-1.2.4" = {
+ name = "proto-list";
+ packageName = "proto-list";
+ version = "1.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz";
+ sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
+ };
+ };
+ "prr-1.0.1" = {
+ name = "prr";
+ packageName = "prr";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz";
+ sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+ };
+ };
+ "pseudomap-1.0.2" = {
+ name = "pseudomap";
+ packageName = "pseudomap";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+ sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+ };
+ };
+ "psl-1.8.0" = {
+ name = "psl";
+ packageName = "psl";
+ version = "1.8.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";
+ sha512 = "RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==";
+ };
+ };
+ "punycode-2.1.1" = {
+ name = "punycode";
+ packageName = "punycode";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+ sha512 = "XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==";
+ };
+ };
+ "qs-6.5.2" = {
+ name = "qs";
+ packageName = "qs";
+ version = "6.5.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+ sha512 = "N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==";
+ };
+ };
+ "queue-microtask-1.2.3" = {
+ name = "queue-microtask";
+ packageName = "queue-microtask";
+ version = "1.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";
+ sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==";
+ };
+ };
+ "randombytes-2.1.0" = {
+ name = "randombytes";
+ packageName = "randombytes";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+ sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+ };
+ };
+ "rc-1.2.8" = {
+ name = "rc";
+ packageName = "rc";
+ version = "1.2.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
+ sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==";
+ };
+ };
+ "readable-stream-2.3.7" = {
+ name = "readable-stream";
+ packageName = "readable-stream";
+ version = "2.3.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";
+ sha512 = "Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==";
+ };
+ };
+ "readable-stream-3.6.0" = {
+ name = "readable-stream";
+ packageName = "readable-stream";
+ version = "3.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
+ sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+ };
+ };
+ "rechoir-0.7.0" = {
+ name = "rechoir";
+ packageName = "rechoir";
+ version = "0.7.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz";
+ sha512 = "ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==";
+ };
+ };
+ "regexpp-2.0.1" = {
+ name = "regexpp";
+ packageName = "regexpp";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz";
+ sha512 = "lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==";
+ };
+ };
+ "regexpp-3.1.0" = {
+ name = "regexpp";
+ packageName = "regexpp";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz";
+ sha512 = "ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==";
+ };
+ };
+ "request-2.88.2" = {
+ name = "request";
+ packageName = "request";
+ version = "2.88.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/request/-/request-2.88.2.tgz";
+ sha512 = "MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==";
+ };
+ };
+ "resolve-1.20.0" = {
+ name = "resolve";
+ packageName = "resolve";
+ version = "1.20.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz";
+ sha512 = "wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==";
+ };
+ };
+ "resolve-cwd-3.0.0" = {
+ name = "resolve-cwd";
+ packageName = "resolve-cwd";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz";
+ sha512 = "OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==";
+ };
+ };
+ "resolve-from-4.0.0" = {
+ name = "resolve-from";
+ packageName = "resolve-from";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz";
+ sha512 = "pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==";
+ };
+ };
+ "resolve-from-5.0.0" = {
+ name = "resolve-from";
+ packageName = "resolve-from";
+ version = "5.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz";
+ sha512 = "qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==";
+ };
+ };
+ "restore-cursor-3.1.0" = {
+ name = "restore-cursor";
+ packageName = "restore-cursor";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz";
+ sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==";
+ };
+ };
+ "reusify-1.0.4" = {
+ name = "reusify";
+ packageName = "reusify";
+ version = "1.0.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
+ sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
+ };
+ };
+ "rimraf-2.6.3" = {
+ name = "rimraf";
+ packageName = "rimraf";
+ version = "2.6.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
+ sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
+ };
+ };
+ "run-async-2.4.1" = {
+ name = "run-async";
+ packageName = "run-async";
+ version = "2.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz";
+ sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==";
+ };
+ };
+ "run-parallel-1.2.0" = {
+ name = "run-parallel";
+ packageName = "run-parallel";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";
+ sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==";
+ };
+ };
+ "rxjs-6.6.7" = {
+ name = "rxjs";
+ packageName = "rxjs";
+ version = "6.6.7";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz";
+ sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==";
+ };
+ };
+ "safe-buffer-5.1.2" = {
+ name = "safe-buffer";
+ packageName = "safe-buffer";
+ version = "5.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+ sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+ };
+ };
+ "safe-buffer-5.2.1" = {
+ name = "safe-buffer";
+ packageName = "safe-buffer";
+ version = "5.2.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+ sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+ };
+ };
+ "safer-buffer-2.1.2" = {
+ name = "safer-buffer";
+ packageName = "safer-buffer";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+ sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+ };
+ };
+ "sax-1.2.4" = {
+ name = "sax";
+ packageName = "sax";
+ version = "1.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+ sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
+ };
+ };
+ "schema-utils-3.0.0" = {
+ name = "schema-utils";
+ packageName = "schema-utils";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz";
+ sha512 = "6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==";
+ };
+ };
+ "semver-5.3.0" = {
+ name = "semver";
+ packageName = "semver";
+ version = "5.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
+ sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
+ };
+ };
+ "semver-5.7.1" = {
+ name = "semver";
+ packageName = "semver";
+ version = "5.7.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+ sha512 = "sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==";
+ };
+ };
+ "semver-6.3.0" = {
+ name = "semver";
+ packageName = "semver";
+ version = "6.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz";
+ sha512 = "b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==";
+ };
+ };
+ "semver-7.3.5" = {
+ name = "semver";
+ packageName = "semver";
+ version = "7.3.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz";
+ sha512 = "PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==";
+ };
+ };
+ "serialize-javascript-5.0.1" = {
+ name = "serialize-javascript";
+ packageName = "serialize-javascript";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz";
+ sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==";
+ };
+ };
+ "set-blocking-2.0.0" = {
+ name = "set-blocking";
+ packageName = "set-blocking";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+ sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+ };
+ };
+ "shallow-clone-3.0.1" = {
+ name = "shallow-clone";
+ packageName = "shallow-clone";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz";
+ sha512 = "/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==";
+ };
+ };
+ "shebang-command-1.2.0" = {
+ name = "shebang-command";
+ packageName = "shebang-command";
+ version = "1.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz";
+ sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+ };
+ };
+ "shebang-command-2.0.0" = {
+ name = "shebang-command";
+ packageName = "shebang-command";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+ sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+ };
+ };
+ "shebang-regex-1.0.0" = {
+ name = "shebang-regex";
+ packageName = "shebang-regex";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz";
+ sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+ };
+ };
+ "shebang-regex-3.0.0" = {
+ name = "shebang-regex";
+ packageName = "shebang-regex";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+ sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+ };
+ };
+ "sigmund-1.0.1" = {
+ name = "sigmund";
+ packageName = "sigmund";
+ version = "1.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
+ sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
+ };
+ };
+ "signal-exit-3.0.3" = {
+ name = "signal-exit";
+ packageName = "signal-exit";
+ version = "3.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz";
+ sha512 = "VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==";
+ };
+ };
+ "slash-3.0.0" = {
+ name = "slash";
+ packageName = "slash";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";
+ sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==";
+ };
+ };
+ "slice-ansi-2.1.0" = {
+ name = "slice-ansi";
+ packageName = "slice-ansi";
+ version = "2.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz";
+ sha512 = "Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==";
+ };
+ };
+ "source-list-map-2.0.1" = {
+ name = "source-list-map";
+ packageName = "source-list-map";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz";
+ sha512 = "qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==";
+ };
+ };
+ "source-map-0.6.1" = {
+ name = "source-map";
+ packageName = "source-map";
+ version = "0.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+ sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+ };
+ };
+ "source-map-0.7.3" = {
+ name = "source-map";
+ packageName = "source-map";
+ version = "0.7.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz";
+ sha512 = "CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==";
+ };
+ };
+ "source-map-support-0.5.19" = {
+ name = "source-map-support";
+ packageName = "source-map-support";
+ version = "0.5.19";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz";
+ sha512 = "Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==";
+ };
+ };
+ "spectre.css-0.5.9" = {
+ name = "spectre.css";
+ packageName = "spectre.css";
+ version = "0.5.9";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/spectre.css/-/spectre.css-0.5.9.tgz";
+ sha512 = "9jUqwZmCnvflrxFGcK+ize43TvjwDjqMwZPVubEtSIHzvinH0TBUESm1LcOJx3Ur7bdPaeOHQIjOqBl1Y5kLFw==";
+ };
+ };
+ "split2-3.2.2" = {
+ name = "split2";
+ packageName = "split2";
+ version = "3.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz";
+ sha512 = "9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==";
+ };
+ };
+ "sprintf-js-1.0.3" = {
+ name = "sprintf-js";
+ packageName = "sprintf-js";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+ sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+ };
+ };
+ "sqlite3-5.0.2" = {
+ name = "sqlite3";
+ packageName = "sqlite3";
+ version = "5.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz";
+ sha512 = "1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==";
+ };
+ };
+ "sshpk-1.16.1" = {
+ name = "sshpk";
+ packageName = "sshpk";
+ version = "1.16.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+ sha512 = "HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==";
+ };
+ };
+ "string-width-1.0.2" = {
+ name = "string-width";
+ packageName = "string-width";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+ sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+ };
+ };
+ "string-width-2.1.1" = {
+ name = "string-width";
+ packageName = "string-width";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz";
+ sha512 = "nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==";
+ };
+ };
+ "string-width-3.1.0" = {
+ name = "string-width";
+ packageName = "string-width";
+ version = "3.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz";
+ sha512 = "vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==";
+ };
+ };
+ "string-width-4.2.2" = {
+ name = "string-width";
+ packageName = "string-width";
+ version = "4.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz";
+ sha512 = "XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==";
+ };
+ };
+ "string_decoder-1.1.1" = {
+ name = "string_decoder";
+ packageName = "string_decoder";
+ version = "1.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+ sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+ };
+ };
+ "string_decoder-1.3.0" = {
+ name = "string_decoder";
+ packageName = "string_decoder";
+ version = "1.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
+ sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
+ };
+ };
+ "strip-ansi-3.0.1" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "3.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+ sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+ };
+ };
+ "strip-ansi-4.0.0" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz";
+ sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+ };
+ };
+ "strip-ansi-5.2.0" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "5.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz";
+ sha512 = "DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==";
+ };
+ };
+ "strip-ansi-6.0.0" = {
+ name = "strip-ansi";
+ packageName = "strip-ansi";
+ version = "6.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz";
+ sha512 = "AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==";
+ };
+ };
+ "strip-final-newline-2.0.0" = {
+ name = "strip-final-newline";
+ packageName = "strip-final-newline";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz";
+ sha512 = "BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==";
+ };
+ };
+ "strip-json-comments-2.0.1" = {
+ name = "strip-json-comments";
+ packageName = "strip-json-comments";
+ version = "2.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+ sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+ };
+ };
+ "strip-json-comments-3.1.1" = {
+ name = "strip-json-comments";
+ packageName = "strip-json-comments";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+ sha512 = "6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==";
+ };
+ };
+ "supports-color-5.5.0" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "5.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz";
+ sha512 = "QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==";
+ };
+ };
+ "supports-color-7.2.0" = {
+ name = "supports-color";
+ packageName = "supports-color";
+ version = "7.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+ sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+ };
+ };
+ "table-5.4.6" = {
+ name = "table";
+ packageName = "table";
+ version = "5.4.6";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/table/-/table-5.4.6.tgz";
+ sha512 = "wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==";
+ };
+ };
+ "tapable-2.2.0" = {
+ name = "tapable";
+ packageName = "tapable";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz";
+ sha512 = "FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==";
+ };
+ };
+ "tar-2.2.2" = {
+ name = "tar";
+ packageName = "tar";
+ version = "2.2.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz";
+ sha512 = "FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==";
+ };
+ };
+ "tar-4.4.13" = {
+ name = "tar";
+ packageName = "tar";
+ version = "4.4.13";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz";
+ sha512 = "w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==";
+ };
+ };
+ "terser-5.6.1" = {
+ name = "terser";
+ packageName = "terser";
+ version = "5.6.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz";
+ sha512 = "yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==";
+ };
+ };
+ "terser-webpack-plugin-5.1.1" = {
+ name = "terser-webpack-plugin";
+ packageName = "terser-webpack-plugin";
+ version = "5.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz";
+ sha512 = "5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==";
+ };
+ };
+ "text-table-0.2.0" = {
+ name = "text-table";
+ packageName = "text-table";
+ version = "0.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz";
+ sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+ };
+ };
+ "through-2.3.8" = {
+ name = "through";
+ packageName = "through";
+ version = "2.3.8";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+ sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+ };
+ };
+ "tmp-0.0.33" = {
+ name = "tmp";
+ packageName = "tmp";
+ version = "0.0.33";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
+ sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
+ };
+ };
+ "to-regex-range-5.0.1" = {
+ name = "to-regex-range";
+ packageName = "to-regex-range";
+ version = "5.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+ sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+ };
+ };
+ "tough-cookie-2.5.0" = {
+ name = "tough-cookie";
+ packageName = "tough-cookie";
+ version = "2.5.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";
+ sha512 = "nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==";
+ };
+ };
+ "tslib-1.14.1" = {
+ name = "tslib";
+ packageName = "tslib";
+ version = "1.14.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz";
+ sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==";
+ };
+ };
+ "tsutils-3.21.0" = {
+ name = "tsutils";
+ packageName = "tsutils";
+ version = "3.21.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz";
+ sha512 = "mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==";
+ };
+ };
+ "tunnel-agent-0.6.0" = {
+ name = "tunnel-agent";
+ packageName = "tunnel-agent";
+ version = "0.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+ sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+ };
+ };
+ "tweetnacl-0.14.5" = {
+ name = "tweetnacl";
+ packageName = "tweetnacl";
+ version = "0.14.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+ sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+ };
+ };
+ "type-check-0.3.2" = {
+ name = "type-check";
+ packageName = "type-check";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+ sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+ };
+ };
+ "type-fest-0.21.3" = {
+ name = "type-fest";
+ packageName = "type-fest";
+ version = "0.21.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz";
+ sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==";
+ };
+ };
+ "type-fest-0.8.1" = {
+ name = "type-fest";
+ packageName = "type-fest";
+ version = "0.8.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz";
+ sha512 = "4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==";
+ };
+ };
+ "typescript-4.2.4" = {
+ name = "typescript";
+ packageName = "typescript";
+ version = "4.2.4";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz";
+ sha512 = "V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==";
+ };
+ };
+ "uri-js-4.4.1" = {
+ name = "uri-js";
+ packageName = "uri-js";
+ version = "4.4.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+ sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
+ };
+ };
+ "util-deprecate-1.0.2" = {
+ name = "util-deprecate";
+ packageName = "util-deprecate";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+ sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+ };
+ };
+ "uuid-3.4.0" = {
+ name = "uuid";
+ packageName = "uuid";
+ version = "3.4.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+ sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+ };
+ };
+ "v8-compile-cache-2.3.0" = {
+ name = "v8-compile-cache";
+ packageName = "v8-compile-cache";
+ version = "2.3.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz";
+ sha512 = "l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==";
+ };
+ };
+ "verror-1.10.0" = {
+ name = "verror";
+ packageName = "verror";
+ version = "1.10.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+ sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+ };
+ };
+ "vue-2.6.10" = {
+ name = "vue";
+ packageName = "vue";
+ version = "2.6.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz";
+ sha512 = "ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==";
+ };
+ };
+ "vue-eslint-parser-7.6.0" = {
+ name = "vue-eslint-parser";
+ packageName = "vue-eslint-parser";
+ version = "7.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz";
+ sha512 = "QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==";
+ };
+ };
+ "vue-template-compiler-2.6.10" = {
+ name = "vue-template-compiler";
+ packageName = "vue-template-compiler";
+ version = "2.6.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz";
+ sha512 = "jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==";
+ };
+ };
+ "watchpack-2.1.1" = {
+ name = "watchpack";
+ packageName = "watchpack";
+ version = "2.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz";
+ sha512 = "Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==";
+ };
+ };
+ "webpack-5.33.2" = {
+ name = "webpack";
+ packageName = "webpack";
+ version = "5.33.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/webpack/-/webpack-5.33.2.tgz";
+ sha512 = "X4b7F1sYBmJx8mlh2B7mV5szEkE0jYNJ2y3akgAP0ERi0vLCG1VvdsIxt8lFd4st6SUy0lf7W0CCQS566MBpJg==";
+ };
+ };
+ "webpack-cli-4.6.0" = {
+ name = "webpack-cli";
+ packageName = "webpack-cli";
+ version = "4.6.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz";
+ sha512 = "9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==";
+ };
+ };
+ "webpack-merge-5.7.3" = {
+ name = "webpack-merge";
+ packageName = "webpack-merge";
+ version = "5.7.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz";
+ sha512 = "6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==";
+ };
+ };
+ "webpack-sources-2.2.0" = {
+ name = "webpack-sources";
+ packageName = "webpack-sources";
+ version = "2.2.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz";
+ sha512 = "bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==";
+ };
+ };
+ "which-1.3.1" = {
+ name = "which";
+ packageName = "which";
+ version = "1.3.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+ sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+ };
+ };
+ "which-2.0.2" = {
+ name = "which";
+ packageName = "which";
+ version = "2.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+ sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+ };
+ };
+ "wide-align-1.1.3" = {
+ name = "wide-align";
+ packageName = "wide-align";
+ version = "1.1.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
+ sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
+ };
+ };
+ "wildcard-2.0.0" = {
+ name = "wildcard";
+ packageName = "wildcard";
+ version = "2.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz";
+ sha512 = "JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==";
+ };
+ };
+ "word-wrap-1.2.3" = {
+ name = "word-wrap";
+ packageName = "word-wrap";
+ version = "1.2.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz";
+ sha512 = "Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==";
+ };
+ };
+ "wrappy-1.0.2" = {
+ name = "wrappy";
+ packageName = "wrappy";
+ version = "1.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+ sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+ };
+ };
+ "write-1.0.3" = {
+ name = "write";
+ packageName = "write";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/write/-/write-1.0.3.tgz";
+ sha512 = "/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==";
+ };
+ };
+ "xtend-4.0.2" = {
+ name = "xtend";
+ packageName = "xtend";
+ version = "4.0.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+ sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+ };
+ };
+ "yallist-2.1.2" = {
+ name = "yallist";
+ packageName = "yallist";
+ version = "2.1.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+ sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+ };
+ };
+ "yallist-3.1.1" = {
+ name = "yallist";
+ packageName = "yallist";
+ version = "3.1.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";
+ sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==";
+ };
+ };
+ "yallist-4.0.0" = {
+ name = "yallist";
+ packageName = "yallist";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz";
+ sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==";
+ };
+ };
+ "yocto-queue-0.1.0" = {
+ name = "yocto-queue";
+ packageName = "yocto-queue";
+ version = "0.1.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
+ sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
+ };
+ };
+ };
+ args = {
+ name = "terraforming-mars";
+ packageName = "terraforming-mars";
+ version = "1.0.0";
+ inherit src;
+ dependencies = [
+ sources."@babel/code-frame-7.12.13"
+ sources."@babel/helper-validator-identifier-7.12.11"
+ sources."@babel/highlight-7.13.10"
+ sources."@discoveryjs/json-ext-0.5.2"
+ sources."@nodelib/fs.scandir-2.1.4"
+ sources."@nodelib/fs.stat-2.0.4"
+ sources."@nodelib/fs.walk-1.2.6"
+ sources."@types/eslint-7.2.10"
+ sources."@types/eslint-scope-3.7.0"
+ sources."@types/estree-0.0.46"
+ sources."@types/json-schema-7.0.7"
+ sources."@types/node-10.17.58"
+ sources."@types/pg-7.14.11"
+ sources."@types/sqlite3-3.1.7"
+ sources."@typescript-eslint/eslint-plugin-4.22.0"
+ sources."@typescript-eslint/experimental-utils-4.22.0"
+ sources."@typescript-eslint/parser-4.22.0"
+ sources."@typescript-eslint/scope-manager-4.22.0"
+ sources."@typescript-eslint/types-4.22.0"
+ sources."@typescript-eslint/typescript-estree-4.22.0"
+ sources."@typescript-eslint/visitor-keys-4.22.0"
+ sources."@webassemblyjs/ast-1.11.0"
+ sources."@webassemblyjs/floating-point-hex-parser-1.11.0"
+ sources."@webassemblyjs/helper-api-error-1.11.0"
+ sources."@webassemblyjs/helper-buffer-1.11.0"
+ sources."@webassemblyjs/helper-numbers-1.11.0"
+ sources."@webassemblyjs/helper-wasm-bytecode-1.11.0"
+ sources."@webassemblyjs/helper-wasm-section-1.11.0"
+ sources."@webassemblyjs/ieee754-1.11.0"
+ sources."@webassemblyjs/leb128-1.11.0"
+ sources."@webassemblyjs/utf8-1.11.0"
+ sources."@webassemblyjs/wasm-edit-1.11.0"
+ sources."@webassemblyjs/wasm-gen-1.11.0"
+ sources."@webassemblyjs/wasm-opt-1.11.0"
+ sources."@webassemblyjs/wasm-parser-1.11.0"
+ sources."@webassemblyjs/wast-printer-1.11.0"
+ sources."@webpack-cli/configtest-1.0.2"
+ sources."@webpack-cli/info-1.2.3"
+ sources."@webpack-cli/serve-1.3.1"
+ sources."@xtuc/ieee754-1.2.0"
+ sources."@xtuc/long-4.2.2"
+ sources."abbrev-1.1.1"
+ sources."acorn-7.4.1"
+ sources."acorn-jsx-5.3.1"
+ sources."ajv-6.12.6"
+ sources."ajv-keywords-3.5.2"
+ sources."ansi-colors-4.1.1"
+ (sources."ansi-escapes-4.3.2" // {
+ dependencies = [
+ sources."type-fest-0.21.3"
+ ];
+ })
+ sources."ansi-regex-4.1.0"
+ sources."ansi-styles-3.2.1"
+ sources."aproba-1.2.0"
+ (sources."are-we-there-yet-1.1.5" // {
+ dependencies = [
+ sources."readable-stream-2.3.7"
+ sources."string_decoder-1.1.1"
+ ];
+ })
+ sources."argparse-1.0.10"
+ sources."array-union-2.1.0"
+ sources."asn1-0.2.4"
+ sources."assert-plus-1.0.0"
+ sources."astral-regex-1.0.0"
+ sources."asynckit-0.4.0"
+ sources."aws-sign2-0.7.0"
+ sources."aws4-1.11.0"
+ sources."balanced-match-1.0.2"
+ sources."bcrypt-pbkdf-1.0.2"
+ sources."block-stream-0.0.9"
+ sources."brace-expansion-1.1.11"
+ sources."braces-3.0.2"
+ sources."browserslist-4.16.4"
+ sources."buffer-from-1.1.1"
+ sources."buffer-writer-2.0.0"
+ sources."callsites-3.1.0"
+ sources."caniuse-lite-1.0.30001209"
+ sources."caseless-0.12.0"
+ sources."chalk-2.4.2"
+ sources."chardet-0.7.0"
+ sources."chownr-1.1.4"
+ sources."chrome-trace-event-1.0.3"
+ sources."cli-cursor-3.1.0"
+ sources."cli-width-3.0.0"
+ (sources."clone-deep-4.0.1" // {
+ dependencies = [
+ sources."kind-of-6.0.3"
+ ];
+ })
+ sources."code-point-at-1.1.0"
+ sources."color-convert-1.9.3"
+ sources."color-name-1.1.3"
+ sources."colorette-1.2.2"
+ sources."combined-stream-1.0.8"
+ sources."commander-2.20.3"
+ sources."compression-webpack-plugin-7.1.2"
+ sources."concat-map-0.0.1"
+ sources."config-chain-1.1.12"
+ sources."console-control-strings-1.1.0"
+ sources."console-stamp-3.0.0-rc4.2"
+ sources."copy-anything-2.0.3"
+ sources."core-util-is-1.0.2"
+ (sources."cross-spawn-6.0.5" // {
+ dependencies = [
+ sources."semver-5.7.1"
+ ];
+ })
+ sources."dashdash-1.14.1"
+ sources."dateformat-3.0.3"
+ sources."de-indent-1.0.2"
+ sources."debug-4.3.1"
+ sources."deep-extend-0.6.0"
+ sources."deep-is-0.1.3"
+ sources."delayed-stream-1.0.0"
+ sources."delegates-1.0.0"
+ sources."detect-libc-1.0.3"
+ sources."dialog-polyfill-0.5.6"
+ sources."dir-glob-3.0.1"
+ sources."doctrine-3.0.0"
+ sources."dotenv-8.2.0"
+ sources."ecc-jsbn-0.1.2"
+ (sources."editorconfig-0.15.3" // {
+ dependencies = [
+ sources."semver-5.7.1"
+ ];
+ })
+ sources."electron-to-chromium-1.3.717"
+ sources."emoji-regex-8.0.0"
+ sources."enhanced-resolve-5.7.0"
+ sources."enquirer-2.3.6"
+ sources."envinfo-7.8.1"
+ sources."errno-0.1.8"
+ sources."es-module-lexer-0.4.1"
+ sources."escalade-3.1.1"
+ sources."escape-string-regexp-1.0.5"
+ (sources."eslint-6.8.0" // {
+ dependencies = [
+ sources."eslint-utils-1.4.3"
+ sources."eslint-visitor-keys-1.3.0"
+ sources."regexpp-2.0.1"
+ sources."semver-6.3.0"
+ ];
+ })
+ sources."eslint-config-google-0.14.0"
+ (sources."eslint-plugin-vue-6.2.2" // {
+ dependencies = [
+ sources."semver-5.7.1"
+ ];
+ })
+ sources."eslint-scope-5.1.1"
+ (sources."eslint-utils-2.1.0" // {
+ dependencies = [
+ sources."eslint-visitor-keys-1.3.0"
+ ];
+ })
+ sources."eslint-visitor-keys-2.0.0"
+ (sources."espree-6.2.1" // {
+ dependencies = [
+ sources."eslint-visitor-keys-1.3.0"
+ ];
+ })
+ sources."esprima-4.0.1"
+ (sources."esquery-1.4.0" // {
+ dependencies = [
+ sources."estraverse-5.2.0"
+ ];
+ })
+ (sources."esrecurse-4.3.0" // {
+ dependencies = [
+ sources."estraverse-5.2.0"
+ ];
+ })
+ sources."estraverse-4.3.0"
+ sources."esutils-2.0.3"
+ sources."events-3.3.0"
+ (sources."execa-5.0.0" // {
+ dependencies = [
+ sources."cross-spawn-7.0.3"
+ sources."is-stream-2.0.0"
+ sources."path-key-3.1.1"
+ sources."shebang-command-2.0.0"
+ sources."shebang-regex-3.0.0"
+ sources."which-2.0.2"
+ ];
+ })
+ sources."extend-3.0.2"
+ sources."external-editor-3.1.0"
+ sources."extsprintf-1.3.0"
+ sources."fast-deep-equal-3.1.3"
+ sources."fast-glob-3.2.5"
+ sources."fast-json-stable-stringify-2.1.0"
+ sources."fast-levenshtein-2.0.6"
+ sources."fastest-levenshtein-1.0.12"
+ sources."fastq-1.11.0"
+ sources."figures-3.2.0"
+ sources."file-entry-cache-5.0.1"
+ sources."fill-range-7.0.1"
+ sources."flat-cache-2.0.1"
+ sources."flatted-2.0.2"
+ sources."forever-agent-0.6.1"
+ sources."form-data-2.3.3"
+ sources."fs-minipass-1.2.7"
+ sources."fs.realpath-1.0.0"
+ sources."fstream-1.0.12"
+ sources."function-bind-1.1.1"
+ sources."functional-red-black-tree-1.0.1"
+ (sources."gauge-2.7.4" // {
+ dependencies = [
+ sources."ansi-regex-2.1.1"
+ sources."is-fullwidth-code-point-1.0.0"
+ sources."string-width-1.0.2"
+ sources."strip-ansi-3.0.1"
+ ];
+ })
+ sources."get-stream-6.0.1"
+ sources."getpass-0.1.7"
+ sources."glob-7.1.6"
+ sources."glob-parent-5.1.2"
+ sources."glob-to-regexp-0.4.1"
+ sources."globals-12.4.0"
+ (sources."globby-11.0.3" // {
+ dependencies = [
+ sources."ignore-5.1.8"
+ ];
+ })
+ sources."graceful-fs-4.2.6"
+ sources."har-schema-2.0.0"
+ sources."har-validator-5.1.5"
+ sources."has-1.0.3"
+ sources."has-flag-3.0.0"
+ sources."has-unicode-2.0.1"
+ sources."he-1.2.0"
+ sources."http-signature-1.2.0"
+ sources."human-signals-2.1.0"
+ sources."iconv-lite-0.4.24"
+ sources."ignore-4.0.6"
+ sources."ignore-walk-3.0.3"
+ sources."image-size-0.5.5"
+ sources."import-fresh-3.3.0"
+ (sources."import-local-3.0.2" // {
+ dependencies = [
+ sources."find-up-4.1.0"
+ sources."locate-path-5.0.0"
+ sources."p-limit-2.3.0"
+ sources."p-locate-4.1.0"
+ sources."pkg-dir-4.2.0"
+ ];
+ })
+ sources."imurmurhash-0.1.4"
+ sources."inflight-1.0.6"
+ sources."inherits-2.0.4"
+ sources."ini-1.3.8"
+ (sources."inquirer-7.3.3" // {
+ dependencies = [
+ sources."ansi-regex-5.0.0"
+ sources."ansi-styles-4.3.0"
+ sources."chalk-4.1.0"
+ sources."color-convert-2.0.1"
+ sources."color-name-1.1.4"
+ sources."has-flag-4.0.0"
+ sources."strip-ansi-6.0.0"
+ sources."supports-color-7.2.0"
+ ];
+ })
+ sources."interpret-2.2.0"
+ sources."is-core-module-2.2.0"
+ sources."is-extglob-2.1.1"
+ sources."is-fullwidth-code-point-3.0.0"
+ sources."is-glob-4.0.1"
+ sources."is-number-7.0.0"
+ sources."is-plain-object-2.0.4"
+ sources."is-typedarray-1.0.0"
+ sources."is-what-3.14.1"
+ sources."isarray-1.0.0"
+ sources."isexe-2.0.0"
+ sources."isobject-3.0.1"
+ sources."isstream-0.1.2"
+ (sources."jest-worker-26.6.2" // {
+ dependencies = [
+ sources."has-flag-4.0.0"
+ sources."supports-color-7.2.0"
+ ];
+ })
+ (sources."js-beautify-1.13.13" // {
+ dependencies = [
+ sources."mkdirp-1.0.4"
+ ];
+ })
+ sources."js-tokens-4.0.0"
+ sources."js-yaml-3.14.1"
+ sources."jsbn-0.1.1"
+ sources."json-parse-better-errors-1.0.2"
+ sources."json-schema-0.2.3"
+ sources."json-schema-traverse-0.4.1"
+ sources."json-stable-stringify-without-jsonify-1.0.1"
+ sources."json-stringify-safe-5.0.1"
+ sources."jsprim-1.4.1"
+ sources."less-3.13.1"
+ sources."levn-0.3.0"
+ sources."loader-runner-4.2.0"
+ sources."lodash-4.17.21"
+ sources."lru-cache-4.1.5"
+ (sources."make-dir-2.1.0" // {
+ dependencies = [
+ sources."semver-5.7.1"
+ ];
+ })
+ sources."merge-stream-2.0.0"
+ sources."merge2-1.4.1"
+ sources."micromatch-4.0.4"
+ sources."mime-1.6.0"
+ sources."mime-db-1.47.0"
+ sources."mime-types-2.1.30"
+ sources."mimic-fn-2.1.0"
+ sources."minimatch-3.0.4"
+ sources."minimist-1.2.5"
+ (sources."minipass-2.9.0" // {
+ dependencies = [
+ sources."yallist-3.1.1"
+ ];
+ })
+ sources."minizlib-1.3.3"
+ sources."mkdirp-0.5.5"
+ sources."mnemonist-0.38.3"
+ sources."ms-2.1.2"
+ sources."mute-stream-0.0.8"
+ sources."native-request-1.0.8"
+ sources."natural-compare-1.4.0"
+ (sources."needle-2.6.0" // {
+ dependencies = [
+ sources."debug-3.2.7"
+ ];
+ })
+ sources."neo-async-2.6.2"
+ sources."nice-try-1.0.5"
+ sources."node-addon-api-3.1.0"
+ (sources."node-gyp-3.8.0" // {
+ dependencies = [
+ sources."nopt-3.0.6"
+ sources."semver-5.3.0"
+ ];
+ })
+ (sources."node-pre-gyp-0.11.0" // {
+ dependencies = [
+ sources."nopt-4.0.3"
+ sources."semver-5.7.1"
+ sources."tar-4.4.13"
+ sources."yallist-3.1.1"
+ ];
+ })
+ sources."node-releases-1.1.71"
+ sources."nopt-5.0.0"
+ sources."npm-bundled-1.1.1"
+ sources."npm-normalize-package-bin-1.0.1"
+ sources."npm-packlist-1.4.8"
+ (sources."npm-run-path-4.0.1" // {
+ dependencies = [
+ sources."path-key-3.1.1"
+ ];
+ })
+ sources."npmlog-4.1.2"
+ sources."number-is-nan-1.0.1"
+ sources."oauth-sign-0.9.0"
+ sources."object-assign-4.1.1"
+ sources."obliterator-1.6.1"
+ sources."once-1.4.0"
+ sources."onetime-5.1.2"
+ sources."optionator-0.8.3"
+ sources."os-homedir-1.0.2"
+ sources."os-tmpdir-1.0.2"
+ sources."osenv-0.1.5"
+ sources."p-limit-3.1.0"
+ sources."p-try-2.2.0"
+ sources."packet-reader-1.0.0"
+ sources."parent-module-1.0.1"
+ sources."path-exists-4.0.0"
+ sources."path-is-absolute-1.0.1"
+ sources."path-key-2.0.1"
+ sources."path-parse-1.0.6"
+ sources."path-type-4.0.0"
+ sources."performance-now-2.1.0"
+ sources."pg-8.6.0"
+ sources."pg-connection-string-2.5.0"
+ sources."pg-int8-1.0.1"
+ sources."pg-pool-3.3.0"
+ sources."pg-protocol-1.5.0"
+ sources."pg-types-2.2.0"
+ sources."pgpass-1.0.4"
+ sources."picomatch-2.2.3"
+ sources."pify-4.0.1"
+ sources."postgres-array-2.0.0"
+ sources."postgres-bytea-1.0.0"
+ sources."postgres-date-1.0.7"
+ sources."postgres-interval-1.2.0"
+ sources."prelude-ls-1.1.2"
+ sources."process-nextick-args-2.0.1"
+ sources."progress-2.0.3"
+ sources."proto-list-1.2.4"
+ sources."prr-1.0.1"
+ sources."pseudomap-1.0.2"
+ sources."psl-1.8.0"
+ sources."punycode-2.1.1"
+ sources."qs-6.5.2"
+ sources."queue-microtask-1.2.3"
+ sources."randombytes-2.1.0"
+ (sources."rc-1.2.8" // {
+ dependencies = [
+ sources."strip-json-comments-2.0.1"
+ ];
+ })
+ sources."readable-stream-3.6.0"
+ sources."rechoir-0.7.0"
+ sources."regexpp-3.1.0"
+ (sources."request-2.88.2" // {
+ dependencies = [
+ sources."tough-cookie-2.5.0"
+ ];
+ })
+ sources."resolve-1.20.0"
+ (sources."resolve-cwd-3.0.0" // {
+ dependencies = [
+ sources."resolve-from-5.0.0"
+ ];
+ })
+ sources."resolve-from-4.0.0"
+ sources."restore-cursor-3.1.0"
+ sources."reusify-1.0.4"
+ sources."rimraf-2.6.3"
+ sources."run-async-2.4.1"
+ sources."run-parallel-1.2.0"
+ sources."rxjs-6.6.7"
+ sources."safe-buffer-5.1.2"
+ sources."safer-buffer-2.1.2"
+ sources."sax-1.2.4"
+ sources."schema-utils-3.0.0"
+ (sources."semver-7.3.5" // {
+ dependencies = [
+ sources."lru-cache-6.0.0"
+ sources."yallist-4.0.0"
+ ];
+ })
+ sources."serialize-javascript-5.0.1"
+ sources."set-blocking-2.0.0"
+ (sources."shallow-clone-3.0.1" // {
+ dependencies = [
+ sources."kind-of-6.0.3"
+ ];
+ })
+ sources."shebang-command-1.2.0"
+ sources."shebang-regex-1.0.0"
+ sources."sigmund-1.0.1"
+ sources."signal-exit-3.0.3"
+ sources."slash-3.0.0"
+ (sources."slice-ansi-2.1.0" // {
+ dependencies = [
+ sources."is-fullwidth-code-point-2.0.0"
+ ];
+ })
+ sources."source-list-map-2.0.1"
+ sources."source-map-0.6.1"
+ sources."source-map-support-0.5.19"
+ sources."spectre.css-0.5.9"
+ sources."split2-3.2.2"
+ sources."sprintf-js-1.0.3"
+ sources."sqlite3-5.0.2"
+ sources."sshpk-1.16.1"
+ (sources."string-width-4.2.2" // {
+ dependencies = [
+ sources."ansi-regex-5.0.0"
+ sources."strip-ansi-6.0.0"
+ ];
+ })
+ (sources."string_decoder-1.3.0" // {
+ dependencies = [
+ sources."safe-buffer-5.2.1"
+ ];
+ })
+ sources."strip-ansi-5.2.0"
+ sources."strip-final-newline-2.0.0"
+ sources."strip-json-comments-3.1.1"
+ sources."supports-color-5.5.0"
+ (sources."table-5.4.6" // {
+ dependencies = [
+ sources."emoji-regex-7.0.3"
+ sources."is-fullwidth-code-point-2.0.0"
+ sources."string-width-3.1.0"
+ ];
+ })
+ sources."tapable-2.2.0"
+ sources."tar-2.2.2"
+ (sources."terser-5.6.1" // {
+ dependencies = [
+ sources."source-map-0.7.3"
+ ];
+ })
+ sources."terser-webpack-plugin-5.1.1"
+ sources."text-table-0.2.0"
+ sources."through-2.3.8"
+ sources."tmp-0.0.33"
+ sources."to-regex-range-5.0.1"
+ sources."tslib-1.14.1"
+ sources."tsutils-3.21.0"
+ sources."tunnel-agent-0.6.0"
+ sources."tweetnacl-0.14.5"
+ sources."type-check-0.3.2"
+ sources."type-fest-0.8.1"
+ sources."typescript-4.2.4"
+ sources."uri-js-4.4.1"
+ sources."util-deprecate-1.0.2"
+ sources."uuid-3.4.0"
+ sources."v8-compile-cache-2.3.0"
+ sources."verror-1.10.0"
+ sources."vue-2.6.10"
+ (sources."vue-eslint-parser-7.6.0" // {
+ dependencies = [
+ sources."eslint-visitor-keys-1.3.0"
+ ];
+ })
+ sources."vue-template-compiler-2.6.10"
+ sources."watchpack-2.1.1"
+ (sources."webpack-5.33.2" // {
+ dependencies = [
+ sources."acorn-8.1.1"
+ ];
+ })
+ (sources."webpack-cli-4.6.0" // {
+ dependencies = [
+ sources."commander-7.2.0"
+ ];
+ })
+ sources."webpack-merge-5.7.3"
+ sources."webpack-sources-2.2.0"
+ sources."which-1.3.1"
+ (sources."wide-align-1.1.3" // {
+ dependencies = [
+ sources."ansi-regex-3.0.0"
+ sources."is-fullwidth-code-point-2.0.0"
+ sources."string-width-2.1.1"
+ sources."strip-ansi-4.0.0"
+ ];
+ })
+ sources."wildcard-2.0.0"
+ sources."word-wrap-1.2.3"
+ sources."wrappy-1.0.2"
+ sources."write-1.0.3"
+ sources."xtend-4.0.2"
+ sources."yallist-2.1.2"
+ sources."yocto-queue-0.1.0"
+ ];
+ buildInputs = globalBuildInputs;
+ meta = {
+ description = "Terraforming Mars Game";
+ homepage = "https://github.com/bafolts/terraforming-mars#readme";
+ license = "ISC";
+ };
+ production = true;
+ bypassCache = true;
+ reconstructLock = false;
+ };
+in
+{
+ args = args;
+ sources = sources;
+ tarball = nodeEnv.buildNodeSourceDist args;
+ package = nodeEnv.buildNodePackage args;
+ shell = nodeEnv.buildNodeShell args;
+}
diff --git a/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix
new file mode 100644
index 0000000..f190221
--- /dev/null
+++ b/systems/eldiron/websites/games/terraforming-mars/terraforming-mars.nix
@@ -0,0 +1,39 @@
+{ fetchgit, runCommand, callPackage, mylibs, nodePackages, nodejs_16, git }:
+let
+ source = fetchgit {
+ url = "https://github.com/bafolts/terraforming-mars";
+ rev = "25b3f80e276cc0c1fc283a78b6ae94b13c545ab6";
+ sha256 = "03xcwvxv2mlmswngklzqp3lf30hgkvdilqq7p1z4h8xmy50cy12k";
+ leaveDotGit = true;
+ fetchSubmodules = true;
+ };
+ patchedSource = runCommand "patch-source" {} ''
+ cp -r ${source} $out
+ chmod -R u+w $out
+ sed -i -e 's/"lockfileVersion": 2,/"lockfileVersion": 1,/' $out/package-lock.json
+ '';
+ packages = callPackage ./node-packages.nix {
+ src = patchedSource;
+ nodeEnv = callPackage mylibs.nodeEnv { nodejs = nodejs_16; };
+ globalBuildInputs = [ nodejs_16.pkgs.node-pre-gyp ];
+ };
+ terraforming-mars = runCommand "terraforming-mars" {
+ buildInputs = [ nodejs_16 git ];
+ } ''
+ cp -r ${source} ./source
+ chmod -R u+w source
+ cd source
+ patch -p1 < ${./immae-assets.patch}
+ ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules .
+ # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no
+ export NODE_OPTIONS=--openssl-legacy-provider
+ npm run build
+ mkdir $out
+ cp -a build $out/
+ cp -a assets $out/
+ cp package.json $out/
+ ln -s ${packages.package}/lib/node_modules/terraforming-mars/node_modules $out
+ ln -s /var/lib/terraforming-mars/db $out/db
+ '';
+in
+ terraforming-mars
diff --git a/systems/eldiron/websites/git/cgit_js.html b/systems/eldiron/websites/git/cgit_js.html
new file mode 100644
index 0000000..4101071
--- /dev/null
+++ b/systems/eldiron/websites/git/cgit_js.html
@@ -0,0 +1,16 @@
+
+
diff --git a/systems/eldiron/websites/git/default.nix b/systems/eldiron/websites/git/default.nix
new file mode 100644
index 0000000..46ba34d
--- /dev/null
+++ b/systems/eldiron/websites/git/default.nix
@@ -0,0 +1,98 @@
+{ lib, pkgs, config, ... }:
+let
+ mantisbt = pkgs.callPackage ./mantisbt.nix {
+ mantisbt_2 = pkgs.webapps-mantisbt_2;
+ mantisbt_2-plugins = pkgs.webapps-mantisbt_2-plugins;
+ env = config.myEnv.tools.mantisbt;
+ inherit config;
+ };
+ gitweb = pkgs.callPackage ./gitweb.nix {
+ gitoliteDir = config.myServices.gitolite.gitoliteDir;
+ };
+
+ cfg = config.myServices.websites.tools.git;
+in {
+ options.myServices.websites.tools.git = {
+ enable = lib.mkEnableOption "enable git's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.chatonsProperties.services.mantisbt = {
+ file.datetime = "2022-08-21T10:08:00";
+ service = {
+ name = "MantisBT";
+ description = "Mantis Bug Tracker";
+ website = "https://git.immae.eu/mantisbt";
+ logo = "https://git.immae.eu/mantisbt/images/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ guide.user = "https://www.immae.eu/docs/forge-logicielle.html";
+ };
+ software = {
+ name = "MantisBT";
+ website = "https://mantisbt.org/";
+ license.url = "https://opensource.org/licenses/gpl-license";
+ license.name = "GNU General Public License";
+ version = mantisbt.webRoot.version;
+ source.url = "https://github.com/mantisbt/mantisbt";
+ modules = mantisbt.webRoot.pluginNames;
+ };
+ };
+ secrets.keys = mantisbt.keys;
+ services.websites.env.tools.modules =
+ gitweb.apache.modules ++
+ mantisbt.apache.modules;
+
+ security.acme.certs.eldiron.extraDomainNames = [ "git.immae.eu" ];
+ services.websites.env.tools.vhostConfs.git = {
+ certName = "eldiron";
+ hosts = ["git.immae.eu" ];
+ root = gitweb.apache.root;
+ extraConfig = [
+ gitweb.apache.vhostConf
+ (mantisbt.apache.vhostConf config.services.phpfpm.pools.mantisbt.socket)
+ ''
+ RewriteEngine on
+ RewriteCond %{REQUEST_URI} ^/releases
+ RewriteRule /releases(.*) https://release.immae.eu$1 [P,L]
+ ''
+ ];
+ };
+ services.phpfpm.pools = {
+ mantisbt = {
+ user = config.services.websites.env.tools.user;
+ group = config.services.websites.env.tools.group;
+ settings = mantisbt.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ };
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "gitweb website is running on git.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "git.immae.eu" "/cgit" "Immae’s git"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Git";
+ _webstatus_url = "https://git.immae.eu/";
+ }
+
+ {
+ service_description = "mantisbt website is running on git.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "git.immae.eu" "/mantisbt/" "My View - MantisBT"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Mantisbt";
+ _webstatus_url = "https://git.immae.eu/mantisbt";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/git/gitweb.nix b/systems/eldiron/websites/git/gitweb.nix
new file mode 100644
index 0000000..40f99e0
--- /dev/null
+++ b/systems/eldiron/websites/git/gitweb.nix
@@ -0,0 +1,124 @@
+{ gitweb, writeText, stdenv, coreutils, writeScript, gitolite, git, cgit, gitoliteDir, mailcap, highlight }:
+rec {
+ varDir = gitoliteDir;
+ config = writeText "gitweb.conf" ''
+ $git_temp = "/tmp";
+
+ # The directories where your projects are. Must not end with a
+ # slash.
+ $projectroot = "${varDir}/repositories";
+
+ $projects_list = "${varDir}/projects.list";
+ $strict_export = "true";
+
+ # Base URLs for links displayed in the web interface.
+ our @git_base_url_list = qw(ssh://gitolite@git.immae.eu https://git.immae.eu);
+
+ $feature{'blame'}{'default'} = [1];
+ $feature{'avatar'}{'default'} = ['gravatar'];
+ $feature{'highlight'}{'default'} = [1];
+
+ @stylesheets = ("gitweb-theme/gitweb.css");
+ $logo = "gitweb-theme/git-logo.png";
+ $favicon = "gitweb-theme/git-favicon.png";
+ $javascript = "gitweb-theme/gitweb.js";
+ $logo_url = "https://git.immae.eu/";
+ $projects_list_group_categories = "true";
+ $projects_list_description_width = 60;
+ $project_list_default_category = "__Others__";
+ $highlight_bin = "${highlight}/bin/highlight";
+ '';
+ aboutFilter = writeScript "about-filter.sh" ''
+ #!${stdenv.shell}
+
+ if [ -f "$CGIT_REPO_PATH/README.html" ]; then
+ cat "$CGIT_REPO_PATH/README.html"
+ else
+ ${cgit}/lib/cgit/filters/about-formatting.sh "$@"
+ fi
+ '';
+ cgitConfig = writeText "cgitrc" ''
+ css=/cgit-css/cgit.css
+ logo=/cgit-css/cgit.png
+ favicon=/cgit-css/favicon.ico
+ head-include=${./cgit_js.html}
+
+ root-title=Immae’s git
+ root-desc=To go back to the old interface: https://git.immae.eu/?old
+ readme=:README.md
+ readme=:readme.md
+ readme=:README
+ readme=:DOCUMENTATION.md
+ about-filter=${aboutFilter}
+ #${cgit}/lib/cgit/filters/about-formatting.sh
+ source-filter=${cgit}/lib/cgit/filters/syntax-highlighting.py
+
+ enable-blame=1
+ enable-index-links=1
+ enable-commit-graph=1
+ enable-log-filecount=1
+ enable-log-linecount=1
+
+ enable-html-serving=1
+ # Allow using gitweb.* keys
+ enable-git-config=1
+
+ side-by-side-diffs=1
+ snapshots=tar.gz tar.zst zip
+ mimetype-file=${mailcap}/etc/mime.types
+
+ section=__Others__
+ clone-url=ssh://gitolite@git.immae.eu/$CGIT_REPO_URL https://git.immae.eu/$CGIT_REPO_URL
+ #section-from-path=1
+ project-list=${varDir}/projects.list
+ scan-path=${varDir}/repositories
+ '';
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "cgid" ];
+ root = gitweb;
+ vhostConf = ''
+ SetEnv GIT_PROJECT_ROOT ${varDir}/repositories/
+ ScriptAliasMatch \
+ "(?x)^/(.*/(HEAD | \
+ info/refs | \
+ objects/(info/[^/]+ | \
+ [0-9a-f]{2}/[0-9a-f]{38} | \
+ pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
+ git-(upload|receive)-pack))$" \
+ ${git}/libexec/git-core/git-http-backend/$1
+
+
+ Require all granted
+
+
+ DirectoryIndex gitweb.cgi
+ Require all granted
+ AllowOverride None
+ Options ExecCGI FollowSymLinks
+
+ SetHandler cgi-script
+ SetEnv GITWEB_CONFIG "${config}"
+
+
+
+ SetEnv CGIT_CONFIG ${cgitConfig}
+ ScriptAlias /cgit "${cgit}/cgit/cgit.cgi/"
+ Alias /cgit-css "${cgit}/cgit"
+
+ AllowOverride None
+ Options ExecCGI FollowSymlinks
+ Require all granted
+
+
+ RewriteEngine On
+ RewriteCond %{QUERY_STRING} ^$
+ RewriteRule ^/?$ /cgit [L,R=302]
+
+ RewriteCond %{REQUEST_URI} ^(.*)(\.git)?/?$
+ RewriteCond ${varDir}/repositories/%1.git/HEAD -f
+ RewriteRule ^(.+)$ /cgit$1 [L,R=302]
+ '';
+ };
+}
diff --git a/systems/eldiron/websites/git/mantisbt.nix b/systems/eldiron/websites/git/mantisbt.nix
new file mode 100644
index 0000000..3bd78e1
--- /dev/null
+++ b/systems/eldiron/websites/git/mantisbt.nix
@@ -0,0 +1,86 @@
+{ env, mantisbt_2, mantisbt_2-plugins, config }:
+rec {
+ keys."webapps/tools-mantisbt" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride All
+ SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
+ Options FollowSymlinks
+ Require all granted
+
+
+ #Reenable during upgrade
+ Require all denied
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" (
+ [ webRoot config.secrets.fullPaths."webapps/tools-mantisbt" ]
+ ++ webRoot.plugins);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ "php_admin_value[upload_max_filesize]" = "5000000";
+
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:MantisBT:'";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/im/default.nix b/systems/eldiron/websites/im/default.nix
new file mode 100644
index 0000000..7755a5c
--- /dev/null
+++ b/systems/eldiron/websites/im/default.nix
@@ -0,0 +1,118 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.myServices.websites.tools.im;
+ converseVersion = "9.1.1";
+ www = pkgs.runCommand "www" {} ''
+ cp -a ${./www} $out
+ substituteInPlace $out/converse.html --replace {{converseVersion}} ${converseVersion}
+ '';
+in
+{
+ options.myServices.websites.tools.im = {
+ enable = lib.mkEnableOption "enable im website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.chatonsProperties.services.converse = {
+ file.datetime = "2022-08-21T19:20:00";
+ service = {
+ name = "Converse";
+ description = "A free and open-source XMPP chat client in your browser";
+ website = "https://im.immae.fr/converse";
+ logo = "https://conversejs.org/docs/html/_static/favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE" "FREE"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Converse";
+ website = "https://conversejs.org/";
+ license.name = "Mozilla Public License 2.0";
+ license.url = "https://github.com/conversejs/converse.js/blob/master/LICENSE";
+ version = "9.1.1";
+ source.url = "https://github.com/conversejs/converse.js";
+ };
+ };
+ myServices.chatonsProperties.services.weechat-bridge = {
+ file.datetime = "2022-08-21T19:20:00";
+ service = {
+ name = "Weechat bridge";
+ description = "WeeChat web frontend";
+ website = "https://im.immae.fr/glowing-bear";
+ logo = "https://im.immae.fr/glowing-bear/assets/img/glowing_bear_128x128.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE" "FREE"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Glowing bear";
+ website = "https://www.ejabberd.im/";
+ license.name = "GNU General Public License v3.0";
+ license.url = "https://github.com/processone/ejabberd";
+ version = pkgs.glowing-bear.version;
+ source.url = "https://github.com/glowing-bear/glowing-bear";
+ };
+ };
+ myServices.chatonsProperties.services.xmpp = {
+ file.datetime = "2022-08-21T19:20:00";
+ service = {
+ name = "XMPP";
+ description = "Universal messaging standard";
+ website = "https://im.immae.fr/";
+ logo = "https://xmpp.org/favicon-32x32.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "ejabberd";
+ website = "https://www.ejabberd.im/";
+ license.url = "https://github.com/processone/ejabberd/blob/master/COPYING";
+ license.name = "GNU GENERAL PUBLIC LICENSE Version 2";
+ version = pkgs.ejabberd.version;
+ source.url = "https://github.com/processone/ejabberd";
+ modules = "converse";
+ };
+ };
+ security.acme.certs.eldiron.extraDomainNames = [ "im.immae.fr" ];
+ services.websites.env.tools.vhostConfs.im = {
+ certName = "eldiron";
+ hosts = ["im.immae.fr"];
+ root = www;
+ extraConfig = [
+ ''
+ Alias /glowing-bear ${pkgs.glowing-bear}
+ Alias /converse ${www}/converse.html
+ ProxyPreserveHost On
+
+ ProxyPass http://localhost:5280/bosh
+ ProxyPassReverse http://localhost:5280/bosh
+
+
+ ProxyPass ws://localhost:5280/ws
+
+ ProxyPass /upload http://localhost:5280/upload
+ ProxyPassReverse /upload http://localhost:5280/upload
+ ProxyPass /admin http://localhost:5280/admin
+ ProxyPassReverse /admin http://localhost:5280/admin
+ ProxyPass /api http://localhost:5280/api
+ ProxyPassReverse /api http://localhost:5280/api
+
+ AllowOverride none
+ Require all granted
+
+
+ Require all granted
+ AllowOverride none
+
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/im/www/converse.html b/systems/eldiron/websites/im/www/converse.html
new file mode 100644
index 0000000..4ca451d
--- /dev/null
+++ b/systems/eldiron/websites/im/www/converse.html
@@ -0,0 +1,57 @@
+
+
+
+ Converse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/systems/eldiron/websites/im/www/index.html b/systems/eldiron/websites/im/www/index.html
new file mode 100644
index 0000000..90c5458
--- /dev/null
+++ b/systems/eldiron/websites/im/www/index.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+ Instant messaging configuration (Jabber/XMPP)
+
+
+
+
+ Pre-configured clients:
+
+
+
+ Technical details:
+
+ HTTP-bind/BOSH access (XEP-0124 / XEP-0206): https://im.immae.fr/bosh
+ WS access (RFC 7395): wss://im.immae.fr/ws
+
+
+
+
diff --git a/systems/eldiron/websites/immae/matrix/client b/systems/eldiron/websites/immae/matrix/client
new file mode 100644
index 0000000..89136a0
--- /dev/null
+++ b/systems/eldiron/websites/immae/matrix/client
@@ -0,0 +1,11 @@
+{
+ "m.homeserver": {
+ "base_url": "https://immae.ems.host"
+ },
+ "m.identity_server": {
+ "base_url": "https://vector.im"
+ },
+ "org.matrix.msc3575.proxy": {
+ "url": "https://immae.ems.host"
+ }
+}
diff --git a/systems/eldiron/websites/immae/matrix/server b/systems/eldiron/websites/immae/matrix/server
new file mode 100644
index 0000000..449155a
--- /dev/null
+++ b/systems/eldiron/websites/immae/matrix/server
@@ -0,0 +1,3 @@
+{
+ "m.server": "immae.ems.host:443"
+}
diff --git a/systems/eldiron/websites/immae/production.nix b/systems/eldiron/websites/immae/production.nix
new file mode 100644
index 0000000..e4060ba
--- /dev/null
+++ b/systems/eldiron/websites/immae/production.nix
@@ -0,0 +1,107 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.websites.immae.production;
+ varDir = "/var/lib/buildbot/outputs/immae/blog";
+ historyDir = "/var/lib/buildbot/outputs/immae/history";
+ docsDir = "/var/lib/buildbot/outputs/immae/docs/";
+in {
+ options.myServices.websites.immae.production.enable = lib.mkEnableOption "enable Immae's website";
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains = with config.myServices.dns.helpers;
+ {
+ www = ips servers.eldiron.ips.production;
+ matrix.CNAME = [ "immae.element.io." ];
+ };
+ services.webstats.sites = [ { name = "www.immae.eu"; } ];
+
+ security.acme.certs.immae.domain = "www.immae.eu";
+ security.acme.certs.immae.extraDomainNames = [ "immae.eu" ];
+ services.websites.env.production.bindMounts."${varDir}" = {};
+ services.websites.env.production.bindMounts."${docsDir}" = {};
+ services.websites.env.production.bindMounts."${historyDir}" = {};
+ services.websites.env.production.vhostConfs.immae_production = {
+ certName = "immae";
+ hosts = [ "www.immae.eu" "immae.eu" ];
+ root = varDir;
+ extraConfig = [
+ ''
+ Use Stats www.immae.eu
+ Header always set Strict-Transport-Security "max-age=31536000"
+
+
+ Header always set Referrer-Policy "strict-origin-when-cross-origin"
+ RequestHeader set X-Forwarded-Proto "https"
+
+ RewriteRule ^(.*)$ https://mastodon.immae.eu%{REQUEST_URI} [QSA,L]
+
+
+ RewriteEngine On
+ RewriteCond "%{REQUEST_URI}" "!^/.well-known/(webfinger|host-meta)"
+ RewriteCond "%{HTTP_HOST}" "!^www\.immae\.eu$" [NC]
+ RewriteRule ^(.+)$ https://www.immae.eu$1 [R=302,L]
+
+
+ DirectoryIndex index.htm index.html
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride All
+ Require all granted
+
+
+ Alias /.well-known/matrix ${./matrix}
+
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride None
+ Require all granted
+ Header always set Access-Control-Allow-Origin "*"
+
+
+ Alias /docs ${docsDir}
+
+ DirectoryIndex index.htm index.html
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride All
+ Require all granted
+
+
+ Alias /eurl ${./sarl}
+ Alias /eurl ${./sarl}
+
+ DirectoryIndex index.htm index.html
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride None
+ Require all granted
+
+
+ Alias /history ${historyDir}
+
+ DirectoryIndex index.html
+ AllowOverride None
+ Require all granted
+
+
+ Alias /.well-known/chatonsinfos ${config.myServices.chatonsProperties.propertiesPath}
+
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride None
+ Require all granted
+
+ ''
+ ];
+ };
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "blog website is running on immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "www.immae.eu" "/blog/" "egrep -ri TODO /etc"];
+
+ servicegroups = "webstatus-websites";
+ _webstatus_name = "Immae’s Blog";
+ _webstatus_url = "https://www.immae.eu/blog";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/immae/release.nix b/systems/eldiron/websites/immae/release.nix
new file mode 100644
index 0000000..4882bac
--- /dev/null
+++ b/systems/eldiron/websites/immae/release.nix
@@ -0,0 +1,40 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.websites.immae.release;
+ varDir = "/var/lib/ftp/release.immae.eu";
+in {
+ options.myServices.websites.immae.release.enable = lib.mkEnableOption "enable Release' website";
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.release = with config.myServices.dns.helpers;
+ ips servers.eldiron.ips.production;
+ services.webstats.sites = [ { name = "release.immae.eu"; } ];
+
+ security.acme.certs.immae.extraDomainNames = [ "release.immae.eu" ];
+ services.websites.env.production.vhostConfs.immae_release = {
+ certName = "immae";
+ hosts = [ "release.immae.eu" ];
+ root = varDir;
+ extraConfig = [
+ ''
+ Use Stats release.immae.eu
+
+ Use Apaxy "${varDir}" "title .duplicity-ignore"
+
+ Use LDAPConnect
+ Options Indexes
+ AllowOverride All
+ Require all granted
+
+
+
+ Use LDAPConnect
+ Options Indexes FollowSymlinks
+ AllowOverride None
+ Require all granted
+
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt
new file mode 100644
index 0000000..671534c
--- /dev/null
+++ b/systems/eldiron/websites/immae/sarl/certificates/2021-certificate.crt
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDyzCCArOgAwIBAgIUXNW7Lmte+fa5YxI7Gdznl7ZaLPIwDQYJKoZIhvcNAQEL
+BQAwdTELMAkGA1UEBhMCRlIxGDAWBgNVBAgMD0FscGVzLU1hcml0aW1lczEPMA0G
+A1UEBwwGR3Jhc3NlMRUwEwYDVQQKDAxJbW1hZUV1IEVVUkwxJDAiBgkqhkiG9w0B
+CQEWFWNvbnRhY3RAbWFpbC5pbW1hZS5ldTAeFw0yMTAxMTkwMDI5MDlaFw0yMjAx
+MTkwMDI5MDlaMHUxCzAJBgNVBAYTAkZSMRgwFgYDVQQIDA9BbHBlcy1NYXJpdGlt
+ZXMxDzANBgNVBAcMBkdyYXNzZTEVMBMGA1UECgwMSW1tYWVFdSBFVVJMMSQwIgYJ
+KoZIhvcNAQkBFhVjb250YWN0QG1haWwuaW1tYWUuZXUwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDeyWKvTu2kuJ2HSgRzZZL6yFNHUXGgcl/q8vlRKFI4
+P0yHwcEwDCaCXquqS09WN99H55aNTjHfnu70dZXogyWHGk4vlaUkGiUoCAYK5tFU
+34fzpZuInhBL8nRY0pRV4H2t02jQMyiYowZXTqR86BRocbXZ4TY5EwD/hlrH6iDc
+pIlC7cVnWV4J5qXX9fXALbpXseD9PF0/y2tP5dM658jBL9KdW1PqlPGudvB44Z+a
+pE8XCXF9PGrVBNN7aPmizOb42scx/2XghX1DYCikiUf8m+FGjidxGlXmj4B6Dukp
+b7RxdkY7p97svH91uMQuUvDW5d93ZiatHNeYuAl8yI39AgMBAAGjUzBRMB0GA1Ud
+DgQWBBSgsFwzEybKyLF/Bkuz7FA5SwfwPTAfBgNVHSMEGDAWgBSgsFwzEybKyLF/
+Bkuz7FA5SwfwPTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDX
+Wij/gDT+7N/pSSVWImiYoe+/KsAJd0TLs39GJkvW0114RXKINYNU8exNY7rKMVCl
+TKePEevSo5CCartNfLXGIr3uqPlR+V3XF6KmyMSiB6k+GukoUtUg2Bp7ESGlpZXi
+wkHYclk0NIzxWyUrzNdflxu3gPU278qFMbUIlbdWNsHtrLbpHypelPQ+IaEbNoWV
+Q+M8Vg6ifsDmhp7TqFXpIoGa6CIxXuknDOidBpeE9kPjVu0kKrjXQULirNl3eEe6
+H1XUQ7lSdt/l3N1cHTj70x2xIi6fdwPQRqhXILrIuST+C0wpPiqPCv1rfcwh0PvU
+mZVZ/+83y3Zuo9lVqkbB
+-----END CERTIFICATE-----
diff --git a/systems/eldiron/websites/kanboard/farm.nix b/systems/eldiron/websites/kanboard/farm.nix
new file mode 100644
index 0000000..a70d0d6
--- /dev/null
+++ b/systems/eldiron/websites/kanboard/farm.nix
@@ -0,0 +1,183 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.tools.kanboard.farm;
+ apacheUser = config.services.websites.env.tools.user;
+ apacheGroup = config.services.websites.env.tools.group;
+ toVardir = name: "/var/lib/kanboard_farm/${name}";
+ varDirs = lib.mapAttrsToList (name: v: toVardir name) cfg.instances;
+ toPhpBaseDir = name: [ rootDir (toVardir name) ];
+ phpBaseDir = builtins.concatStringsSep ":" (lib.unique (lib.flatten (lib.mapAttrsToList (name: v: toPhpBaseDir name) cfg.instances)));
+ rootDir = pkgs.kanboard;
+
+ toVhost = name: ''
+ Alias /${name} "${rootDir}"
+
+ SetEnv DATA_DIR "${toVardir name}"
+ SetEnv MAIL_FROM "kanboard@tools.immae.eu"
+
+ '';
+ toCustomVhost = name: lib.optionalAttrs (cfg.instances."${name}".customHost != null) {
+ "kanboard_farm_${name}" = {
+ certName = "eldiron";
+ hosts = [cfg.instances."${name}".customHost];
+ root = null;
+ extraConfig = [
+ ''
+ Alias / "${rootDir}"
+
+ SetEnv DATA_DIR "${toVardir name}"
+ SetEnv MAIL_FROM "kanboard@tools.immae.eu"
+
+
+ DirectoryIndex index.php
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost"
+
+
+
+ Require all denied
+
+ ''
+ ];
+ };
+ };
+ customHosts = lib.filter (n: n != null) (map (n: cfg.instances."${n}".customHost) (builtins.attrNames cfg.instances));
+ customVhosts = lib.foldl (o: n: o // n) {} (map toCustomVhost (builtins.attrNames cfg.instances));
+ phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+in
+{
+ options.myServices.tools.kanboard.farm = {
+ instances = lib.mkOption {
+ description = "Instances names for the kanboard Farm";
+ default = {};
+ type = lib.types.attrsOf (lib.types.submodule {
+ options = {
+ customHost = lib.mkOption {
+ description = "Custom host to use for the kanboard instance";
+ default = null;
+ type = lib.types.nullOr lib.types.str;
+ };
+ };
+ });
+ };
+ vhosts = lib.mkOption {
+ description = "Instance vhosts configs";
+ readOnly = true;
+ type = lib.types.attrsOf lib.types.str;
+ default = lib.mapAttrs (name: v: toVhost name) cfg.instances;
+ };
+ };
+
+ config = lib.mkIf (builtins.length (builtins.attrNames cfg.instances) > 0) {
+ myServices.dns.zones."immae.eu".subdomains.kanboard =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.hostings.kanboard = {
+ file.datetime = "2022-08-21T19:40:00";
+ hosting = {
+ name = "Kanboard";
+ description = "Kanban project management software";
+ website = "https://tools.immae.eu/kanboard";
+ logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ myServices.chatonsProperties.services.kanboard = {
+ file.datetime = "2022-08-21T19:40:00";
+ service = {
+ name = "Kanboard";
+ description = "Kanban project management software";
+ website = "https://tools.immae.eu/kanboard";
+ logo = "https://tools.immae.eu/kanboard/assets/img/favicon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Kanboard";
+ website = "https://kanboard.org/";
+ license.url = "https://github.com/kanboard/kanboard/blob/main/LICENSE";
+ license.name = "MIT License";
+ version = pkgs.kanboard.version;
+ source.url = "https://github.com/kanboard/kanboard";
+ };
+ };
+ system.activationScripts.kanboard_farm_vardirs = {
+ deps = [ "httpd" ];
+ text = ''
+ install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs}
+ '';
+ };
+ services.phpfpm.pools.kanboard_farm = {
+ user = apacheUser;
+ group = apacheGroup;
+ settings = let
+ instanceNb = builtins.length (builtins.attrNames cfg.instances);
+ in {
+ "listen.owner" = apacheUser;
+ "listen.group" = apacheGroup;
+ "pm" = "dynamic";
+ "pm.max_children" = builtins.toString (60 * instanceNb);
+ "pm.start_servers" = builtins.toString (2 * instanceNb);
+ "pm.min_spare_servers" = builtins.toString (2 * instanceNb);
+ "pm.max_spare_servers" = builtins.toString (3 * instanceNb);
+ "pm.process_idle_timeout" = "60";
+
+ "php_admin_value[output_buffering]" = "0";
+ "php_admin_value[max_execution_time]" = "1800";
+ "php_admin_value[zend_extension]" = "opcache";
+ "php_value[apcu.enable_cli]" = "1";
+ "php_value[apcu.enabled]" = "1";
+ #already enabled by default?
+ #"php_value[opcache.enable]" = "1";
+ "php_value[opcache.enable_cli]" = "1";
+ "php_value[opcache.interned_strings_buffer]" = "8";
+ "php_value[opcache.max_accelerated_files]" = "10000";
+ "php_value[opcache.memory_consumption]" = "128";
+ "php_value[opcache.save_comments]" = "1";
+ "php_value[opcache.revalidate_freq]" = "1";
+ "php_admin_value[memory_limit]" = "512M";
+
+ "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${phpBaseDir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:KanboardFarm:'";
+ };
+ inherit phpPackage;
+ };
+ security.acme.certs.eldiron.extraDomainNames = customHosts ++ [ "kanboard.immae.eu" ];
+ services.websites.env.tools.vhostConfs = {
+ kanboard = {
+ certName = "eldiron";
+ hosts = ["kanboard.immae.eu"];
+ root = null;
+ extraConfig = [
+ ''
+
+ DirectoryIndex index.php
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.kanboard_farm.socket}|fcgi://localhost"
+
+
+
+ Require all denied
+
+ ''
+ ] ++ builtins.attrValues cfg.vhosts;
+ };
+ } // customVhosts;
+ };
+}
diff --git a/systems/eldiron/websites/mail/default.nix b/systems/eldiron/websites/mail/default.nix
new file mode 100644
index 0000000..0a0342b
--- /dev/null
+++ b/systems/eldiron/websites/mail/default.nix
@@ -0,0 +1,141 @@
+{ lib, pkgs, config, ... }:
+let
+ roundcubemail = pkgs.callPackage ./roundcubemail.nix {
+ roundcubemail = pkgs.webapps-roundcubemail;
+ env = config.myEnv.tools.roundcubemail;
+ inherit config;
+ };
+ rainloop = pkgs.callPackage ./rainloop.nix {
+ rainloop = pkgs.rainloop-community;
+ };
+ cfg = config.myServices.websites.tools.email;
+ pcfg = config.services.phpfpm.pools;
+in
+{
+ options.myServices.websites.tools.email = {
+ enable = lib.mkEnableOption "enable email website";
+ };
+
+ imports = [
+ ./mta-sts.nix
+ ];
+
+ config = lib.mkIf cfg.enable {
+ #myServices.chatonsProperties.services.mail-rainloop = {
+ # file.datetime = "2022-08-22T00:30:00";
+ # service = {
+ # name = "Rainloop";
+ # description = "Simple, modern & fast web-based email client";
+ # website = "https://mail.immae.eu/rainloop";
+ # logo = "https://www.rainloop.net/static/img/logo-16x16.png";
+ # status.level = "ERROR";
+ # status.description = "Stopped due to CVE-2022-29360";
+ # registration."" = ["MEMBER" "CLIENT"];
+ # registration.load = "OPEN";
+ # install.type = "PACKAGE";
+ # };
+ # software = {
+ # name = "Rainloop";
+ # website = "https://www.rainloop.net/";
+ # license.url = "https://www.rainloop.net/licensing/";
+ # license.name = "GNU Affero General Public License v3.0";
+ # version = rainloop.webRoot.version;
+ # source.url = "https://github.com/RainLoop/rainloop-webmail";
+ # };
+ #};
+ #myServices.chatonsProperties.services.mail-roundcube = {
+ # file.datetime = "2022-08-22T00:30:00";
+ # service = {
+ # name = "Roundcube";
+ # description = "The Roundcube Webmail suite";
+ # website = "https://mail.immae.eu/roundcube";
+ # logo = "https://mail.immae.eu/roundcube/skins/elastic/images/favicon.ico";
+ # status.level = "OK";
+ # status.description = "OK";
+ # registration."" = ["MEMBER" "CLIENT"];
+ # registration.load = "OPEN";
+ # install.type = "PACKAGE";
+ # };
+ # software = {
+ # name = "Roundcube";
+ # website = "https://roundcube.net/";
+ # license.url = "https://github.com/roundcube/roundcubemail/blob/master/LICENSE";
+ # license.name = "GNU General Public License v3.0";
+ # version = roundcubemail.webRoot.version;
+ # source.url = "https://github.com/roundcube/roundcubemail";
+ # modules = map (a: a.pluginName) roundcubemail.webRoot.plugins ++ map (a: a.skinName) roundcubemail.webRoot.skins;
+ # };
+ #};
+
+ myServices.dns.zones."immae.eu".subdomains.mail =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ secrets.keys = roundcubemail.keys;
+
+ services.websites.env.tools.modules =
+ [ "proxy_fcgi" ]
+ ++ rainloop.apache.modules
+ ++ roundcubemail.apache.modules;
+
+ security.acme.certs.mail.extraDomainNames = [ "mail.immae.eu" ];
+ services.websites.env.tools.vhostConfs.mail = {
+ certName = "mail";
+ hosts = ["mail.immae.eu"];
+ root = ./www;
+ extraConfig = [
+ (rainloop.apache.vhostConf pcfg.rainloop.socket)
+ (roundcubemail.apache.vhostConf pcfg.roundcubemail.socket)
+ ''
+
+ Require all granted
+ Options -Indexes
+
+ ''
+ ];
+ };
+ systemd.services = {
+ phpfpm-rainloop = {
+ after = lib.mkAfter rainloop.phpFpm.serviceDeps;
+ wants = rainloop.phpFpm.serviceDeps;
+ };
+ phpfpm-roundcubemail = {
+ after = lib.mkAfter roundcubemail.phpFpm.serviceDeps;
+ wants = roundcubemail.phpFpm.serviceDeps;
+ };
+ };
+
+ services.phpfpm.pools.roundcubemail = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = roundcubemail.phpFpm.pool;
+ phpOptions = config.services.phpfpm.phpOptions + ''
+ date.timezone = 'CET'
+ '';
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.imagick all.redis ]);
+ };
+ services.phpfpm.pools.rainloop = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = rainloop.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]);
+ };
+ system.activationScripts = {
+ roundcubemail = roundcubemail.activationScript;
+ rainloop = rainloop.activationScript;
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "roundcube website is running on mail.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "mail.immae.eu" "/roundcube/" "Roundcube"];
+
+ servicegroups = "webstatus-webapps,webstatus-email";
+ _webstatus_name = "Roundcube";
+ _webstatus_url = "https://mail.immae.eu/roundcube/";
+ }
+ ];
+ };
+
+}
diff --git a/systems/eldiron/websites/mail/mta-sts.nix b/systems/eldiron/websites/mail/mta-sts.nix
new file mode 100644
index 0000000..2438702
--- /dev/null
+++ b/systems/eldiron/websites/mail/mta-sts.nix
@@ -0,0 +1,42 @@
+{ lib, pkgs, config, ... }:
+let
+ getDomains = p: lib.mapAttrsToList (n: v: v) (lib.filterAttrs (n: v: v.receive) p.emailPolicies);
+ bydomain = builtins.mapAttrs (n: getDomains) config.myServices.dns.zones;
+ domains = lib.flatten (builtins.attrValues bydomain);
+ mxes = lib.mapAttrsToList
+ (n: v: v.mx.subdomain)
+ (lib.attrsets.filterAttrs (n: v: v.mx.enable) config.myEnv.servers);
+ file = d: pkgs.writeText "mta-sts-${d.fqdn}.txt" (
+ builtins.concatStringsSep "\r\n" ([ "version: STSv1" "mode: testing" ]
+ ++ (map (v: "mx: ${v}.${d.domain}") mxes)
+ ++ [ "max_age: 604800" ]
+ ));
+ root = pkgs.runCommand "mta-sts_root" {} ''
+ mkdir -p $out
+ ${builtins.concatStringsSep "\n" (map (d:
+ "cp ${file d} $out/${d.fqdn}.txt"
+ ) domains)}
+ '';
+ cfg = config.myServices.websites.tools.email;
+in
+{
+ config = lib.mkIf cfg.enable {
+ security.acme.certs.mail.extraDomainNames = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains;
+ services.websites.env.tools.vhostConfs.mta_sts = {
+ certName = "mail";
+ hosts = ["mta-sts.mail.immae.eu"] ++ map (v: "mta-sts.${v.fqdn}") domains;
+ root = root;
+ extraConfig = [
+ ''
+ RewriteEngine on
+ RewriteCond %{HTTP_HOST} ^mta-sts.(.*)$
+ RewriteRule ^/.well-known/mta-sts.txt$ %{DOCUMENT_ROOT}/%1.txt [L]
+
+ Require all granted
+ Options -Indexes
+
+ ''
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/websites/mail/rainloop.nix b/systems/eldiron/websites/mail/rainloop.nix
new file mode 100644
index 0000000..f821005
--- /dev/null
+++ b/systems/eldiron/websites/mail/rainloop.nix
@@ -0,0 +1,54 @@
+{ lib, rainloop, writeText, stdenv, fetchurl }:
+rec {
+ varDir = "/var/lib/rainloop";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}
+ install -m 0750 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
+ '';
+ };
+ webRoot = rainloop.override { dataPath = "${varDir}/data"; };
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /rainloop "${root}"
+
+ DirectoryIndex index.php
+ AllowOverride All
+ Options -FollowSymlinks
+ Require all denied
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+
+
+ Require all denied
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" ];
+ basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "RainloopPHPSESSID";
+ "php_admin_value[upload_max_filesize]" = "200M";
+ "php_admin_value[post_max_size]" = "200M";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rainloop:'";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/mail/roundcubemail.nix b/systems/eldiron/websites/mail/roundcubemail.nix
new file mode 100644
index 0000000..21a10fe
--- /dev/null
+++ b/systems/eldiron/websites/mail/roundcubemail.nix
@@ -0,0 +1,119 @@
+{ env, roundcubemail, apacheHttpd, config }:
+rec {
+ varDir = "/var/lib/roundcubemail";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/cache ${varDir}/logs
+ '';
+ };
+ keys."webapps/tools-roundcube" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text =
+ let
+ psql_url = with env.postgresql; "pgsql://${user}:${password}@unix(${socket}:${port})/${database}";
+ in ''
+ "mail.immae.eu"
+ );
+ $config['imap_conn_options'] = array("ssl" => array("verify_peer" => false));
+ $config['smtp_server'] = 'tls://smtp.immae.eu';
+ $config['smtp_port'] = '587';
+ $config['managesieve_host'] = 'imap.immae.eu';
+ $config['managesieve_port'] = '4190';
+ $config['managesieve_usetls'] = true;
+ $config['managesieve_conn_options'] = array("ssl" => array("verify_peer" => false));
+
+ $config['imap_cache'] = 'db';
+ $config['messages_cache'] = 'db';
+
+ $config['support_url'] = ''';
+
+ $config['des_key'] = '${env.secret}';
+
+ $config['skin'] = 'elastic';
+ $config['plugins'] = array(
+ 'attachment_reminder',
+ 'emoticons',
+ 'filesystem_attachments',
+ 'hide_blockquote',
+ 'identicon',
+ 'identity_select',
+ 'jqueryui',
+ 'markasjunk',
+ 'managesieve',
+ 'newmail_notifier',
+ 'vcard_attachments',
+ 'zipdownload',
+
+ 'automatic_addressbook',
+ 'message_highlight',
+ 'carddav',
+ // Ne marche pas ?: 'ident_switch',
+ // Ne marche pas ?: 'thunderbird_labels',
+ );
+
+ $config['language'] = 'fr_FR';
+
+ $config['drafts_mbox'] = 'Drafts';
+ $config['junk_mbox'] = 'Junk';
+ $config['sent_mbox'] = 'Sent';
+ $config['trash_mbox'] = 'Trash';
+ $config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Junk', 'Trash');
+ $config['draft_autosave'] = 60;
+ $config['enable_installer'] = false;
+ $config['log_driver'] = 'file';
+ $config['temp_dir'] = '${varDir}/cache';
+ $config['mime_types'] = '${apacheHttpd}/conf/mime.types';
+ '';
+ keyDependencies = [ apacheHttpd ];
+ };
+ webRoot = (roundcubemail.override { roundcube_config = config.secrets.fullPaths."webapps/tools-roundcube"; }).withPlugins (p: [ p.automatic_addressbook p.carddav p.contextmenu p.contextmenu_folder p.html5_notifier p.ident_switch p.message_highlight p.thunderbird_labels ]);
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /roundcube "${root}"
+
+ DirectoryIndex index.php
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" ];
+ basedir = builtins.concatStringsSep ":" (
+ [ webRoot config.secrets.fullPaths."webapps/tools-roundcube" varDir ]
+ ++ webRoot.plugins
+ ++ webRoot.skins);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "RoundcubemailPHPSESSID";
+ "php_admin_value[upload_max_filesize]" = "200M";
+ "php_admin_value[post_max_size]" = "200M";
+ "php_admin_value[open_basedir]" = "${basedir}:${apacheHttpd}/conf/mime.types:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Roundcubemail:'";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/mail/www/index.html b/systems/eldiron/websites/mail/www/index.html
new file mode 100644
index 0000000..88b0ebd
--- /dev/null
+++ b/systems/eldiron/websites/mail/www/index.html
@@ -0,0 +1,74 @@
+
+
+
+
+
+ E-mail configuration
+
+
+
+
+ Email configuration. For automatic configuration in your smart e-mail
+ client, use login@mail.immae.eu . If it
+ doesn’t work, the details are there:
+
+ IMAP: imap.immae.eu
+
+ No unencrypted access
+ STARTTLS: 143
+ SSL: 993
+
+
+ POP3: pop3.immae.eu
+
+ No unencrypted access
+ STARTTLS: 110
+ SSL: 995
+
+
+ SMTP: smtp.immae.eu
+
+ No unencrypted access
+ STARTTLS: 587
+ SSL: 465
+
+
+ Sieve: imap.immae.eu
+
+ No unencrypted access
+ STARTTLS: 4190
+
+
+
+
+ Webmails:
+
+
+
+
+
diff --git a/systems/eldiron/websites/mastodon/default.nix b/systems/eldiron/websites/mastodon/default.nix
new file mode 100644
index 0000000..603fc9e
--- /dev/null
+++ b/systems/eldiron/websites/mastodon/default.nix
@@ -0,0 +1,174 @@
+{ lib, pkgs, config, ... }:
+let
+ env = config.myEnv.tools.mastodon;
+ root = "${mcfg.workdir}/public/";
+ cfg = config.myServices.websites.tools.mastodon;
+ mcfg = config.immaeServices.mastodon;
+in {
+ options.myServices.websites.tools.mastodon = {
+ enable = lib.mkEnableOption "enable mastodon's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.mastodon =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.mastodon = {
+ file.datetime = "2022-08-21T19:50:00";
+ service = {
+ name = "Mastodon";
+ description = "Your self-hosted, globally interconnected microblogging community";
+ website = "https://mastodon.immae.eu/";
+ logo = "https://mastodon.immae.eu/apple-touch-icon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Mastodon";
+ website = "https://joinmastodon.org/";
+ license.url = "https://github.com/tootsuite/mastodon/blob/master/LICENSE";
+ license.name = "GNU General Public License v3.0";
+ version = mcfg.package.version;
+ source.url = "https://github.com/tootsuite/mastodon";
+ };
+ };
+ secrets.keys."webapps/tools-mastodon" = {
+ user = "mastodon";
+ group = "mastodon";
+ permissions = "0400";
+ text = ''
+ REDIS_HOST=${env.redis.host}
+ REDIS_PORT=${env.redis.port}
+ REDIS_DB=${env.redis.db}
+ DB_HOST=${env.postgresql.socket}
+ DB_USER=${env.postgresql.user}
+ DB_NAME=${env.postgresql.database}
+ DB_PASS=${env.postgresql.password}
+ DB_PORT=${env.postgresql.port}
+
+ LOCAL_DOMAIN=mastodon.immae.eu
+ LOCAL_HTTPS=true
+ ALTERNATE_DOMAINS=immae.eu
+
+ PAPERCLIP_SECRET=${env.paperclip_secret}
+ SECRET_KEY_BASE=${env.secret_key_base}
+ OTP_SECRET=${env.otp_secret}
+
+ VAPID_PRIVATE_KEY=${env.vapid.private}
+ VAPID_PUBLIC_KEY=${env.vapid.public}
+
+ SMTP_DELIVERY_METHOD=sendmail
+ SMTP_FROM_ADDRESS=mastodon@tools.immae.eu
+ SENDMAIL_LOCATION="/run/wrappers/bin/sendmail"
+ PAPERCLIP_ROOT_PATH=${mcfg.dataDir}
+
+ STREAMING_CLUSTER_NUM=1
+
+ RAILS_LOG_LEVEL=warn
+
+ # LDAP authentication (optional)
+ LDAP_ENABLED=true
+ LDAP_HOST=${env.ldap.host}
+ LDAP_PORT=636
+ LDAP_METHOD=simple_tls
+ LDAP_BASE="${env.ldap.base}"
+ LDAP_BIND_DN="${env.ldap.dn}"
+ LDAP_PASSWORD="${env.ldap.password}"
+ LDAP_UID="uid"
+ LDAP_SEARCH_FILTER="${env.ldap.filter}"
+ '';
+ };
+ immaeServices.mastodon = {
+ enable = true;
+ configFile = config.secrets.fullPaths."webapps/tools-mastodon";
+ socketsPrefix = "live_immae";
+ dataDir = "/var/lib/mastodon_immae";
+ };
+ services.filesWatcher.mastodon-streaming = {
+ restart = true;
+ paths = [ mcfg.configFile ];
+ };
+ services.filesWatcher.mastodon-web = {
+ restart = true;
+ paths = [ mcfg.configFile ];
+ };
+ services.filesWatcher.mastodon-sidekiq = {
+ restart = true;
+ paths = [ mcfg.configFile ];
+ };
+
+
+ services.websites.env.tools.modules = [
+ "headers" "proxy" "proxy_wstunnel" "proxy_http"
+ ];
+ security.acme.certs.eldiron.extraDomainNames = [ "mastodon.immae.eu" ];
+ services.websites.env.tools.vhostConfs.mastodon = {
+ certName = "eldiron";
+ hosts = ["mastodon.immae.eu" ];
+ root = root;
+ extraConfig = [ ''
+ Header always set Referrer-Policy "strict-origin-when-cross-origin"
+ Header always set Strict-Transport-Security "max-age=31536000"
+
+
+ Header always set Cache-Control "public, max-age=31536000, immutable"
+ Require all granted
+
+
+ ProxyPreserveHost On
+ RequestHeader set X-Forwarded-Proto "https"
+
+ RewriteEngine On
+
+ RewriteRule ^/api/v1/streaming/(.+)$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/$1 [P,NE,QSA,L]
+ RewriteRule ^/api/v1/streaming/public$ unix://${mcfg.sockets.node}|http://mastodon.immae.eu/api/v1/streaming/public [P,NE,QSA,L]
+ RewriteRule ^/api/v1/streaming/$ unix://${mcfg.sockets.node}|ws://mastodon.immae.eu/ [P,NE,QSA,L]
+ RewriteCond %{REQUEST_URI} !/500.html
+ RewriteCond %{REQUEST_URI} !/sw.js
+ RewriteCond %{REQUEST_URI} !/embed.js
+ RewriteCond %{REQUEST_URI} !/robots.txt
+ RewriteCond %{REQUEST_URI} !/manifest.json
+ RewriteCond %{REQUEST_URI} !/browserconfig.xml
+ RewriteCond %{REQUEST_URI} !/mask-icon.svg
+ RewriteCond %{REQUEST_URI} !^(/.*\.(png|ico|gif)$)
+ RewriteCond %{REQUEST_URI} !^/(assets|avatars|emoji|headers|packs|sounds|system|.well-known/acme-challenge)
+ RewriteRule ^/(.*)$ unix:///run/mastodon/live_immae_puma.sock|http://mastodon.immae.eu/$1 [P,NE,QSA,L]
+ ProxyPassReverse / unix://${mcfg.sockets.rails}|http://mastodon.immae.eu/
+
+ Alias /system ${mcfg.dataDir}
+
+
+ Require all granted
+ Options -MultiViews
+
+
+
+ Require all granted
+ Options -MultiViews +FollowSymlinks
+
+
+ ErrorDocument 500 /500.html
+ ErrorDocument 501 /500.html
+ ErrorDocument 502 /500.html
+ ErrorDocument 503 /500.html
+ ErrorDocument 504 /500.html
+ '' ];
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "mastodon website is running on mastodon.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "mastodon.immae.eu" "/" "Mastodon "];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Mastodon";
+ _webstatus_url = "https://mastodon.immae.eu/";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/mgoblin/default.nix b/systems/eldiron/websites/mgoblin/default.nix
new file mode 100644
index 0000000..f276c62
--- /dev/null
+++ b/systems/eldiron/websites/mgoblin/default.nix
@@ -0,0 +1,173 @@
+{ lib, pkgs, config, mediagoblin, ... }:
+let
+ env = config.myEnv.tools.mediagoblin;
+ cfg = config.myServices.websites.tools.mediagoblin;
+ mcfg = config.services.mediagoblin;
+in {
+ options.myServices.websites.tools.mediagoblin = {
+ enable = lib.mkEnableOption "enable mediagoblin's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.mgoblin =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.mediagoblin = {
+ file.datetime = "2022-08-21T20:00:00";
+ service = {
+ name = "Mediagoblin";
+ description = "MediaGoblin is a free software media publishing platform that anyone can run";
+ website = "https://mgoblin.immae.eu/";
+ logo = "https://mgoblin.immae.eu/mgoblin_static/images/goblin.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Mediagoblin";
+ website = "https://mediagoblin.org/";
+ license.url = "http://www.gnu.org/licenses/agpl.html";
+ license.name = "GNU Affero General Public License";
+ version = mcfg.package.version;
+ source.url = "https://git.savannah.gnu.org/git/mediagoblin.git";
+ modules = map (a: a.pluginName) mcfg.package.plugins;
+ };
+ };
+ secrets.keys."webapps/tools-mediagoblin" = {
+ user = "mediagoblin";
+ group = "mediagoblin";
+ permissions = "0400";
+ text =
+ let
+ psql_url = with env.postgresql; "postgresql://${user}:${password}@:${port}/${database}?host=${socket}";
+ redis_url = with env.redis; "redis+socket://${socket}?virtual_host=${db}";
+ in
+ ''
+ [DEFAULT]
+ data_basedir = "${mcfg.dataDir}"
+
+ [mediagoblin]
+ direct_remote_path = /mgoblin_static/
+ email_sender_address = "mediagoblin@tools.immae.eu"
+
+ #sql_engine = sqlite:///%(data_basedir)s/mediagoblin.db
+ sql_engine = ${psql_url}
+
+ email_debug_mode = false
+ allow_registration = false
+ allow_reporting = true
+
+ theme = airymodified
+
+ user_privilege_scheme = "uploader,commenter,reporter"
+
+ # We need to redefine them here since we override data_basedir
+ # cf /usr/share/webapps/mediagoblin/mediagoblin/config_spec.ini
+ workbench_path = %(data_basedir)s/media/workbench
+ crypto_path = %(data_basedir)s/crypto
+ theme_install_dir = %(data_basedir)s/themes/
+ theme_linked_assets_dir = %(data_basedir)s/theme_static/
+ plugin_linked_assets_dir = %(data_basedir)s/plugin_static/
+
+ [storage:queuestore]
+ base_dir = %(data_basedir)s/media/queue
+
+ [storage:publicstore]
+ base_dir = %(data_basedir)s/media/public
+ base_url = /mgoblin_media/
+
+ [celery]
+ CELERY_RESULT_DBURI = ${redis_url}
+ BROKER_URL = ${redis_url}
+ CELERYD_CONCURRENCY = 1
+
+ [plugins]
+ [[mediagoblin.plugins.geolocation]]
+ [[mediagoblin.plugins.ldap]]
+ [[[immae.eu]]]
+ LDAP_SERVER_URI = 'ldaps://${env.ldap.host}:636'
+ LDAP_SEARCH_BASE = '${env.ldap.base}'
+ LDAP_BIND_DN = '${env.ldap.dn}'
+ LDAP_BIND_PW = '${env.ldap.password}'
+ LDAP_SEARCH_FILTER = '${env.ldap.filter}'
+ EMAIL_SEARCH_FIELD = 'mail'
+ [[mediagoblin.plugins.basicsearch]]
+ [[mediagoblin.plugins.piwigo]]
+ [[mediagoblin.plugins.processing_info]]
+ [[mediagoblin.media_types.image]]
+ [[mediagoblin.media_types.video]]
+ '';
+ };
+
+ users.users.mediagoblin.extraGroups = [ "keys" ];
+
+ services.mediagoblin = {
+ enable = true;
+ package = mediagoblin.withPlugins (p: [p.basicsearch]);
+ configFile = config.secrets.fullPaths."webapps/tools-mediagoblin";
+ };
+ services.filesWatcher.mediagoblin-web = {
+ restart = true;
+ paths = [ mcfg.configFile ];
+ };
+ services.filesWatcher.mediagoblin-celeryd = {
+ restart = true;
+ paths = [ mcfg.configFile ];
+ };
+
+ services.websites.env.tools.modules = [
+ "proxy" "proxy_http"
+ ];
+ users.users.wwwrun.extraGroups = [ "mediagoblin" ];
+ security.acme.certs.eldiron.extraDomainNames = [ "mgoblin.immae.eu" ];
+ services.websites.env.tools.vhostConfs.mgoblin = {
+ certName = "eldiron";
+ hosts = ["mgoblin.immae.eu" ];
+ root = null;
+ extraConfig = [ ''
+ Alias /mgoblin_media ${mcfg.dataDir}/media/public
+
+ Options -Indexes +FollowSymLinks +MultiViews +Includes
+ Require all granted
+
+
+ Alias /theme_static ${mcfg.dataDir}/theme_static
+
+ Options -Indexes +FollowSymLinks +MultiViews +Includes
+ Require all granted
+
+
+ Alias /plugin_static ${mcfg.dataDir}/plugin_static
+
+ Options -Indexes +FollowSymLinks +MultiViews +Includes
+ Require all granted
+
+
+ ProxyPreserveHost on
+ ProxyVia On
+ ProxyRequests Off
+ ProxyPass /mgoblin_media !
+ ProxyPass /theme_static !
+ ProxyPass /plugin_static !
+ ProxyPassMatch ^/.well-known/acme-challenge !
+ ProxyPass / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/
+ ProxyPassReverse / unix://${mcfg.sockets.paster}|http://mgoblin.immae.eu/
+ '' ];
+ };
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "mediagoblin website is running on mgoblin.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "mgoblin.immae.eu" "/" "GNU MediaGoblin"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Mediagoblin";
+ _webstatus_url = "https://mgoblin.immae.eu/";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/moomin.txt b/systems/eldiron/websites/moomin.txt
new file mode 100644
index 0000000..036fb1c
--- /dev/null
+++ b/systems/eldiron/websites/moomin.txt
@@ -0,0 +1,16 @@
+⠀⠀⠀⠀⠀⠀⠀⢠⢦⡀⠀⡰⣩⠃
+⠀⠀⠀⠀⠀⠀⠀⠘⣄⠙⠍⠁⠙⠦⡀
+⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⡠⠄⠔⠊⠉⠒⠒⠒⢄
+⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⠆
+⠀⠀⢠⢤⠜⡆⠀⢸⠀⠰⣄⠀⠀⠀⠀⠀⠀⠀⣠⠎
+⠀⠀⠱⠤⡁⠈⠑⠇⠀⠀⠀⠉⠒⠤⠤⠄⢖⠊⠀⡐⠧⣄⣀
+⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡉⠀⣀⣨⡷
+⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢱⠜⠁
+⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣸⠱⡀
+⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⣣
+⠀⠀⠀⠀⠀⠀⠀⠑⣄⠀⠀⠀⠀⠀⠀⠀⢀⣠⣀⠴⠊⠁
+⠰⢍⢒⢄⠀⠀⠀⠀⢸⢳⢆⠀⠀⠀⠰⡖⠋⠁
+⠀⠳⠴⣙⢄⠀⢀⡠⣣⠃⠈⠑⢤⡄⠀⡸⠂
+⠀⠀⠀⠀⠑⠋⠓⠊⠁⠀⠀⠀⠓⠒⠉
+Credentials: https://twitter.com/thingskatedid/status/1278274012754309120
+Credentials: https://gist.github.com/katef/09581d7c84eddf784508fa430f6ef47a
diff --git a/systems/eldiron/websites/nossl/index.html b/systems/eldiron/websites/nossl/index.html
new file mode 100644
index 0000000..4401a80
--- /dev/null
+++ b/systems/eldiron/websites/nossl/index.html
@@ -0,0 +1,11 @@
+
+
+
+ No SSL site
+
+
+ No SSL on this site
+ Use for wifi networks with login page that doesn't work well with
+ https.
+
+
diff --git a/systems/eldiron/websites/peertube/default.nix b/systems/eldiron/websites/peertube/default.nix
new file mode 100644
index 0000000..0ebe4e7
--- /dev/null
+++ b/systems/eldiron/websites/peertube/default.nix
@@ -0,0 +1,147 @@
+{ lib, pkgs, config, ... }:
+let
+ env = config.myEnv.tools.peertube;
+ cfg = config.myServices.websites.tools.peertube;
+ pcfg = config.immaeServices.peertube;
+in {
+ options.myServices.websites.tools.peertube = {
+ enable = lib.mkEnableOption "enable Peertube's website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.peertube =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.hostings.peertube = {
+ file.datetime = "2022-08-21T20:00:00";
+ hosting = {
+ name = "Peertube";
+ description = "Free software to take back control of your videos";
+ website = "https://peertube.immae.eu/";
+ logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ myServices.chatonsProperties.services.peertube = {
+ file.datetime = "2022-08-21T20:00:00";
+ service = {
+ name = "Peertube";
+ description = "Free software to take back control of your videos";
+ website = "https://peertube.immae.eu/";
+ logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Peertube";
+ website = "https://joinpeertube.org/";
+ license.url = "https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE";
+ license.name = "GNU Affero General Public License";
+ version = pcfg.package.version;
+ source.url = "https://github.com/Chocobozzz/PeerTube";
+ };
+ };
+ immaeServices.peertube = {
+ enable = true;
+ configFile = config.secrets.fullPaths."webapps/tools-peertube";
+ };
+ users.users.peertube.extraGroups = [ "keys" ];
+
+ secrets.keys."webapps/tools-peertube" = {
+ user = "peertube";
+ group = "peertube";
+ permissions = "0640";
+ text = ''
+ listen:
+ hostname: 'localhost'
+ port: ${toString config.myEnv.ports.peertube}
+ webserver:
+ https: true
+ hostname: 'peertube.immae.eu'
+ port: 443
+ database:
+ hostname: '${env.postgresql.socket}'
+ port: 5432
+ suffix: '_prod'
+ username: '${env.postgresql.user}'
+ password: '${env.postgresql.password}'
+ pool:
+ max: 5
+ redis:
+ socket: '${env.redis.socket}'
+ auth: null
+ db: ${env.redis.db}
+ smtp:
+ transport: sendmail
+ sendmail: '/run/wrappers/bin/sendmail'
+ from_address: 'peertube@tools.immae.eu'
+ storage:
+ tmp: '${pcfg.dataDir}/storage/tmp/'
+ avatars: '${pcfg.dataDir}/storage/avatars/'
+ videos: '${pcfg.dataDir}/storage/videos/'
+ streaming_playlists: '${pcfg.dataDir}/storage/streaming-playlists/'
+ redundancy: '${pcfg.dataDir}/storage/videos/'
+ logs: '${pcfg.dataDir}/storage/logs/'
+ previews: '${pcfg.dataDir}/storage/previews/'
+ thumbnails: '${pcfg.dataDir}/storage/thumbnails/'
+ torrents: '${pcfg.dataDir}/storage/torrents/'
+ captions: '${pcfg.dataDir}/storage/captions/'
+ cache: '${pcfg.dataDir}/storage/cache/'
+ plugins: '${pcfg.dataDir}/storage/plugins/'
+ client_overrides: '${pcfg.dataDir}/storage/client-overrides/'
+ '';
+ };
+
+ services.websites.env.tools.modules = [
+ "headers" "proxy" "proxy_http" "proxy_wstunnel"
+ ];
+ services.filesWatcher.peertube = {
+ restart = true;
+ paths = [ pcfg.configFile ];
+ };
+
+ security.acme.certs.eldiron.extraDomainNames = [ "peertube.immae.eu" ];
+ services.websites.env.tools.vhostConfs.peertube = {
+ certName = "eldiron";
+ hosts = [ "peertube.immae.eu" ];
+ root = null;
+ extraConfig = [ ''
+ RewriteEngine On
+
+ RewriteCond %{REQUEST_URI} ^/socket.io [NC]
+ RewriteCond %{QUERY_STRING} transport=websocket [NC]
+ RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
+
+ RewriteCond %{REQUEST_URI} ^/tracker/socket [NC]
+ RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
+
+ ProxyPass / http://localhost:${toString env.listenPort}/
+ ProxyPassReverse / http://localhost:${toString env.listenPort}/
+
+ ProxyPreserveHost On
+ RequestHeader set X-Real-IP %{REMOTE_ADDR}s
+ '' ];
+ };
+
+ myServices.monitoring.fromMasterActivatedPlugins = [ "http" ];
+ myServices.monitoring.fromMasterObjects.service = [
+ {
+ service_description = "peertube website is running on peertube.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "peertube.immae.eu" "/" "Immae’s PeerTube"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Peertube";
+ _webstatus_url = "https://peertube.immae.eu/";
+ }
+ ];
+ };
+}
diff --git a/systems/eldiron/websites/performance/default.nix b/systems/eldiron/websites/performance/default.nix
new file mode 100644
index 0000000..23f754a
--- /dev/null
+++ b/systems/eldiron/websites/performance/default.nix
@@ -0,0 +1,93 @@
+{ pkgs, lib, config, ... }:
+let
+ env = config.myEnv.tools.status_engine;
+ package = pkgs.status-engine-interface.override({ config_file = config.secrets.fullPaths."status_engine_ui"; });
+ apacheRoot = "${package}/public";
+ cfg = config.myServices.websites.tools.performance;
+in
+{
+ options.myServices.websites.tools.performance = {
+ enable = lib.mkEnableOption "Enable performance website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.performance =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ secrets.keys = {
+ status_engine_ui = {
+ permissions = "0400";
+ user = "wwwrun";
+ group = "wwwrun";
+ text = ''
+ allow_anonymous: 0
+ anonymous_can_submit_commands: 0
+ urls_without_login:
+ - login
+ - loginstate
+ auth_type: ldap
+ ldap_server: ${env.ldap.host}
+ ldap_use_ssl: 1
+ ldap_port: 636
+ ldap_bind_dn: ${env.ldap.dn}
+ ldap_bind_password: ${env.ldap.password}
+ ldap_base_dn: ${env.ldap.base}
+ ldap_filter: "${env.ldap.filter}"
+ ldap_attribute:
+ - memberOf
+ use_crate: 0
+ use_mysql: 1
+ mysql:
+ host: 127.0.0.1
+ port: ${builtins.toString env.mysql.port}
+ username: ${env.mysql.user}
+ password: ${env.mysql.password}
+ database: ${env.mysql.database}
+ display_perfdata: 1
+ perfdata_backend: mysql
+ '';
+ };
+ };
+
+ services.websites.env.tools.modules = [ "proxy_fcgi" ];
+
+ security.acme.certs.eldiron.extraDomainNames = [ "performance.immae.eu" ];
+ services.websites.env.tools.vhostConfs.performance = {
+ certName = "eldiron";
+ hosts = [ "performance.immae.eu" ];
+ root = apacheRoot;
+ extraConfig = [
+ ''
+
+ DirectoryIndex index.html
+ AllowOverride None
+ Require all granted
+
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.status_engine.socket}|fcgi://localhost"
+
+
+ ''
+ ];
+ };
+
+ services.phpfpm.pools.status_engine = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = {
+ "listen.owner" = "wwwrun";
+ "listen.group" = "wwwrun";
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:StatusEngine:'";
+ "php_admin_value[open_basedir]" = "${package}:/tmp:${config.secrets.fullPaths."status_engine_ui"}";
+ };
+ phpPackage = pkgs.php74.withExtensions({ enabled, all }: enabled ++ [ all.redis ]);
+ };
+
+ };
+}
diff --git a/systems/eldiron/websites/stats/default.nix b/systems/eldiron/websites/stats/default.nix
new file mode 100644
index 0000000..665010b
--- /dev/null
+++ b/systems/eldiron/websites/stats/default.nix
@@ -0,0 +1,51 @@
+{ config, lib, pkgs, ... }:
+let
+ cfg = config.myServices.websites.tools.stats;
+ myCfg = config.myEnv.tools.umami;
+in
+{
+ options.myServices.websites.tools.stats.enable = lib.mkEnableOption "Enable stats site";
+ config = lib.mkIf cfg.enable {
+ secrets.keys = {
+ "uami/env" = {
+ permission = "0400";
+ text = ''
+ PORT=${toString myCfg.listenPort}
+ HOSTNAME=127.0.0.1
+ DATABASE_URL=postgresql://${myCfg.postgresql.user}:${myCfg.postgresql.password}@localhost:${myCfg.postgresql.port}/${myCfg.postgresql.database}?sslmode=disable&host=${myCfg.postgresql.socket}
+ HASH_SALT=${myCfg.hashSalt}
+ '';
+ };
+ };
+
+ security.acme.certs.eldiron.extraDomainNames = [ "stats.immae.eu" ];
+ services.websites.env.tools.vhostConfs.stats = {
+ certName = "eldiron";
+ hosts = [ "stats.immae.eu" ];
+ root = null;
+ extraConfig = [
+ ''
+ ProxyPass / http://localhost:${toString myCfg.listenPort}/
+ ProxyPassReverse / http://localhost:${toString myCfg.listenPort}/
+ ProxyPreserveHost On
+ ''
+ ];
+ };
+ systemd.services.umami = {
+ description = "Umami service";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ wants = [ "postgresql.service" ];
+ path = [ pkgs.nodejs pkgs.bashInteractive ];
+ serviceConfig = {
+ Type = "simple";
+ User = "umami";
+ Group = "umami";
+ DynamicUser = true;
+ SupplementaryGroups = [ "keys" ];
+ ExecStart = "${pkgs.umami}/bin/umami";
+ EnvironmentFile = config.secrets.fullPaths."umami/env";
+ };
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/adminer.nix b/systems/eldiron/websites/tools/adminer.nix
new file mode 100644
index 0000000..5e865b1
--- /dev/null
+++ b/systems/eldiron/websites/tools/adminer.nix
@@ -0,0 +1,83 @@
+{ config, webapps-adminer, php82, lib, forcePhpSocket ? null }:
+rec {
+ webRoot = webapps-adminer;
+ phpFpm = rec {
+ user = apache.user;
+ group = apache.group;
+ phpPackage = let
+ #mysqli_pam = php81.extensions.mysqli.overrideAttrs(old: {
+ # configureFlags = [ "--with-mysqli=${libmysqlclient_pam.dev}/bin/mysql_config" "--with-mysql-sock=/run/mysqld/mysqld.sock" ];
+ #});
+ in
+ php82.withExtensions ({ enabled, all }: [all.mysqli all.redis all.pgsql]);
+ settings = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "5";
+ "pm.process_idle_timeout" = "60";
+ #"php_admin_flag[log_errors]" = "on";
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "AdminerPHPSESSID";
+ "php_admin_value[open_basedir]" = "${webRoot}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Adminer:'";
+ };
+ };
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /adminer ${webRoot}
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${if forcePhpSocket != null then forcePhpSocket else socket}|fcgi://localhost"
+
+
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=mysql,cn=pam,ou=services,dc=immae,dc=eu
+ Require ldap-group cn=users,cn=postgresql,cn=pam,ou=services,dc=immae,dc=eu
+
+ '';
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "adminer website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https_auth" "tools.immae.eu" "/adminer/" "www.adminerevo.org"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Adminer";
+ _webstatus_url = "https://tools.immae.eu/adminer/";
+ }
+ ];
+
+ chatonsProperties = {
+ published = false;
+ file.datetime = "2023-08-21T15:20:00";
+ service = {
+ name = "Adminer";
+ description = "Database management in a single PHP file";
+ website = "https://tools.immae.eu/adminer/";
+ logo = "https://tools.immae.eu/adminer/?file=favicon.ico";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Adminer";
+ website = "https://docs.adminerevo.org/";
+ license.url = "https://github.com/adminerevo/adminerevo/blob/main/readme.md";
+ license.name = "Apache License 2.0 or GPL 2";
+ version = webRoot.version;
+ source.url = "https://github.com/adminerevo/adminerevo/";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/default.nix b/systems/eldiron/websites/tools/default.nix
new file mode 100644
index 0000000..4d9e3c1
--- /dev/null
+++ b/systems/eldiron/websites/tools/default.nix
@@ -0,0 +1,547 @@
+{ lib, pkgs, config, mypackages-lib, grocy, ... }:
+let
+ composerEnv = mypackages-lib.composerEnv;
+ adminer = pkgs.callPackage ./adminer.nix { inherit config; };
+ ympd = pkgs.callPackage ./ympd.nix {
+ env = config.myEnv.tools.ympd;
+ inherit config;
+ };
+ ttrss = pkgs.callPackage ./ttrss.nix {
+ ttrss = pkgs.webapps-ttrss;
+ ttrss-plugins = pkgs.webapps-ttrss-plugins;
+ env = config.myEnv.tools.ttrss;
+ php = pkgs.php72;
+ inherit config;
+ };
+ kanboard = pkgs.callPackage ./kanboard.nix {
+ inherit config;
+ env = config.myEnv.tools.kanboard;
+ };
+ wallabag = pkgs.callPackage ./wallabag.nix {
+ wallabag = pkgs.webapps-wallabag.override {
+ composerEnv = composerEnv.override {
+ php = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy]);
+ };
+ };
+ env = config.myEnv.tools.wallabag;
+ inherit config;
+ };
+ yourls = pkgs.callPackage ./yourls.nix {
+ yourls = pkgs.webapps-yourls;
+ yourls-plugins = pkgs.webapps-yourls-plugins;
+ env = config.myEnv.tools.yourls;
+ inherit config;
+ };
+ rompr = pkgs.callPackage ./rompr.nix {
+ rompr = pkgs.webapps-rompr;
+ env = config.myEnv.tools.rompr;
+ inherit config;
+ };
+ shaarli = pkgs.callPackage ./shaarli.nix {
+ env = config.myEnv.tools.shaarli;
+ inherit config;
+ };
+ dokuwiki = pkgs.callPackage ./dokuwiki.nix {
+ dokuwiki = pkgs.webapps-dokuwiki;
+ dokuwiki-plugins = pkgs.webapps-dokuwiki-plugins;
+ inherit config;
+ };
+ ldap = pkgs.callPackage ./ldap.nix {
+ phpldapadmin = pkgs.webapps-phpldapadmin;
+ env = config.myEnv.tools.phpldapadmin;
+ inherit config;
+ };
+ grocy' = pkgs.callPackage ./grocy.nix {
+ grocy = grocy.override { composerEnv = composerEnv.override { php = pkgs.php72; }; };
+ };
+ phpbb = pkgs.callPackage ./phpbb.nix {
+ phpbb = (pkgs.webapps-phpbb.withLangs (l: [ l.fr ])).withExts (e: [
+ e.alfredoramos.markdown e.davidiq.mailinglist e.dmzx.mchat
+ e.empteintesduweb.monitoranswers e.lr94.autosubscribe
+ e.phpbbmodders.adduser ]);
+ };
+ webhooks-bin-env = pkgs.buildEnv {
+ name = "webhook-env";
+ paths = [ pkgs.apprise ];
+ pathsToLink = [ "/bin" ];
+ };
+ webhooks = pkgs.callPackage ./webhooks.nix {
+ env = config.myEnv.tools.webhooks;
+ binEnv = webhooks-bin-env;
+ };
+ dmarc-reports = pkgs.callPackage ./dmarc_reports.nix {
+ env = config.myEnv.tools.dmarc_reports;
+ inherit config;
+ };
+
+ landing = pkgs.callPackage ./landing.nix { };
+
+ cfg = config.myServices.websites.tools.tools;
+ pcfg = config.services.phpfpm.pools;
+in {
+ options.myServices.websites.tools.tools = {
+ enable = lib.mkEnableOption "enable tools website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ # Services needing to send e-mails
+ myServices.dns.zones."immae.eu".emailPolicies."tools".receive = true;
+ myServices.dns.zones."immae.eu".subdomains =
+ with config.myServices.dns.helpers;
+ {
+ outils = ips servers.eldiron.ips.main;
+ tools = lib.mkMerge [
+ (mailCommon "immae.eu")
+ mailSend
+ (ips servers.eldiron.ips.main)
+ ];
+ };
+
+ myServices.chatonsProperties.services = {
+ adminer = adminer.chatonsProperties;
+ dokuwiki = dokuwiki.chatonsProperties;
+ shaarli = shaarli.chatonsProperties;
+ ttrss = ttrss.chatonsProperties;
+ wallabag = wallabag.chatonsProperties;
+ paste = {
+ file.datetime = "2022-08-22T00:15:00";
+ service = {
+ name = "Paste";
+ description = "A simple paster script with syntax highlight";
+ website = "https://tools.immae.eu/paste/";
+ logo = "https://assets.immae.eu/logo.jpg";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ guide.user = "https://tools.immae.eu/paste/";
+ };
+ software = {
+ name = "Paste";
+ website = "https://tools.immae.eu/paste/";
+ license.url = "https://tools.immae.eu/paste/license";
+ license.name = "MIT License";
+ version = "Unversioned";
+ source.url = "https://tools.immae.eu/paste/abcd123/py";
+ };
+ };
+ };
+ myServices.chatonsProperties.hostings = {
+ dokuwiki = dokuwiki.chatonsHostingProperties;
+ phpbb = phpbb.chatonsHostingProperties;
+ };
+ secrets.keys =
+ kanboard.keys
+ // ldap.keys
+ // shaarli.keys
+ // ttrss.keys
+ // wallabag.keys
+ // yourls.keys
+ // dmarc-reports.keys
+ // webhooks.keys
+ // ({ "webapps/tools-landing-sql-rw" = {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = let
+ env = config.myEnv.tools.landing;
+ in ''
+ SetEnv PGUSER "${env.postgresql.user}"
+ SetEnv PGPASSWORD "${env.postgresql.password}"
+ SetEnv PGDATABASE "${env.postgresql.database}"
+ SetEnv PGHOST "${env.postgresql.socket}"
+ '';
+ }; });
+ services.websites.env.tools.modules =
+ [ "proxy_fcgi" ]
+ ++ adminer.apache.modules
+ ++ ympd.apache.modules
+ ++ ttrss.apache.modules
+ ++ wallabag.apache.modules
+ ++ yourls.apache.modules
+ ++ rompr.apache.modules
+ ++ shaarli.apache.modules
+ ++ dokuwiki.apache.modules
+ ++ dmarc-reports.apache.modules
+ ++ phpbb.apache.modules
+ ++ ldap.apache.modules
+ ++ kanboard.apache.modules;
+
+ myServices.dns.zones."immae.dev" = with config.myServices.dns.helpers; {
+ subdomains.tools = ips servers.eldiron.ips.integration;
+ };
+ security.acme.certs.integration.domain = "tools.immae.dev";
+ services.websites.env.integration.vhostConfs.devtools = {
+ certName = "integration";
+ hosts = [ "tools.immae.dev" ];
+ root = "/var/lib/ftp/immae/devtools";
+ extraConfig = [
+ ''
+ Use Apaxy "/var/lib/ftp/immae/devtools" "title"
+ Timeout 600
+ ProxyTimeout 600
+ Header always set Content-Security-Policy-Report-Only "${config.myEnv.tools.csp_reports.policies.inline}"
+
+ DirectoryIndex index.php index.htm index.html
+ AllowOverride all
+ Require all granted
+
+ SetHandler "proxy:unix:${pcfg.devtools.socket}|fcgi://localhost"
+
+
+ ''
+ ];
+ };
+
+
+ security.acme.certs.eldiron.extraDomainNames = [ "outils.immae.eu" "tools.immae.eu" ];
+ services.websites.env.tools.vhostConfs.tools = {
+ certName = "eldiron";
+ hosts = ["tools.immae.eu" ];
+ root = landing;
+ extraConfig = [
+ ''
+ RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1
+ RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
+ RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
+
+
+ Include ${config.secrets.fullPaths."webapps/tools-landing-sql-rw"}
+ DirectoryIndex index.html
+ AllowOverride None
+ Require all granted
+
+
+ SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost"
+
+
+ ''
+ (adminer.apache.vhostConf pcfg.adminer.socket)
+ ympd.apache.vhostConf
+ (ttrss.apache.vhostConf pcfg.ttrss.socket)
+ (wallabag.apache.vhostConf pcfg.wallabag.socket)
+ (yourls.apache.vhostConf pcfg.yourls.socket)
+ (rompr.apache.vhostConf pcfg.rompr.socket)
+ (shaarli.apache.vhostConf pcfg.shaarli.socket)
+ (dokuwiki.apache.vhostConf pcfg.dokuwiki.socket)
+ (ldap.apache.vhostConf pcfg.ldap.socket)
+ (kanboard.apache.vhostConf pcfg.kanboard.socket)
+ (grocy'.apache.vhostConf pcfg.grocy.socket)
+ (phpbb.apache.vhostConf pcfg.phpbb.socket)
+ (dmarc-reports.apache.vhostConf pcfg.dmarc-reports.socket)
+ ''
+
+ ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
+ ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
+ ProxyPreserveHost on
+
+
+ ProxyPass unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
+ ProxyPassReverse unix://${config.services.paste.sockets.gunicorn}|http://tools.immae.eu/paste/
+ ProxyPreserveHost on
+
+
+
+ SetEnv proxy-nokeepalive 1
+ SetEnv proxy-sendchunked 1
+ LimitRequestBody 102400
+
+ RewriteEngine On
+
+ # FIXME: why is landing prefixed in the url?
+ RewriteCond %{HTTP:Upgrade} websocket [NC]
+ RewriteCond %{HTTP:Connection} upgrade [NC]
+ RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|ws://tools.immae.eu/$2 [P,NE,QSA,L]
+
+ RewriteRule ^(${landing}/ntfy)?/?(.*) unix:///run/ntfy/ntfy.sock|http://tools.immae.eu/$2 [P,NE,QSA,L]
+
+ Alias /BIP39 /var/lib/buildbot/outputs/immae/bip39
+
+ DirectoryIndex index.html
+ AllowOverride None
+ Require all granted
+
+
+ Alias /webhooks ${config.secrets.fullPaths."webapps/webhooks"}
+
+ Options -Indexes
+ DirectoryIndex index.php
+ Require all granted
+ AllowOverride None
+
+ SetHandler "proxy:unix:${pcfg.tools.socket}|fcgi://localhost"
+
+
+ ''
+ ];
+ };
+
+ services.websites.env.tools.vhostConfs.outils = {
+ certName = "eldiron";
+ hosts = [ "outils.immae.eu" ];
+ root = null;
+ extraConfig = [
+ ''
+ RedirectMatch 301 ^/mediagoblin(.*)$ https://mgoblin.immae.eu$1
+
+ RedirectMatch 301 ^/ether(.*)$ https://ether.immae.eu$1
+
+ RedirectMatch 301 ^/nextcloud(.*)$ https://cloud.immae.eu$1
+ RedirectMatch 301 ^/owncloud(.*)$ https://cloud.immae.eu$1
+
+ RedirectMatch 301 ^/carddavmate(.*)$ https://dav.immae.eu/infcloud$1
+ RedirectMatch 301 ^/caldavzap(.*)$ https://dav.immae.eu/infcloud$1
+ RedirectMatch 301 ^/caldav.php(.*)$ https://dav.immae.eu/caldav.php$1
+ RedirectMatch 301 ^/davical(.*)$ https://dav.immae.eu/davical$1
+
+ RedirectMatch 301 ^/taskweb(.*)$ https://task.immae.eu/taskweb$1
+
+ RedirectMatch 301 ^/roundcube(.*)$ https://mail.immae.eu/roundcube$1
+
+ RedirectMatch 301 ^/jappix(.*)$ https://im.immae.fr/converse
+
+ RedirectMatch 301 ^/vpn(.*)$ https://vpn.immae.eu$1
+
+ RedirectMatch 301 ^/(.*)$ https://tools.immae.eu/$1
+ ''
+ ];
+ };
+
+ systemd.services = {
+ phpfpm-dokuwiki = {
+ after = lib.mkAfter dokuwiki.phpFpm.serviceDeps;
+ wants = dokuwiki.phpFpm.serviceDeps;
+ };
+ phpfpm-phpbb = {
+ after = lib.mkAfter phpbb.phpFpm.serviceDeps;
+ wants = phpbb.phpFpm.serviceDeps;
+ };
+ phpfpm-kanboard = {
+ after = lib.mkAfter kanboard.phpFpm.serviceDeps;
+ wants = kanboard.phpFpm.serviceDeps;
+ };
+ phpfpm-ldap = {
+ after = lib.mkAfter ldap.phpFpm.serviceDeps;
+ wants = ldap.phpFpm.serviceDeps;
+ };
+ phpfpm-shaarli = {
+ after = lib.mkAfter shaarli.phpFpm.serviceDeps;
+ wants = shaarli.phpFpm.serviceDeps;
+ };
+ phpfpm-ttrss = {
+ after = lib.mkAfter ttrss.phpFpm.serviceDeps;
+ wants = ttrss.phpFpm.serviceDeps;
+ };
+ phpfpm-wallabag = {
+ after = lib.mkAfter wallabag.phpFpm.serviceDeps;
+ wants = wallabag.phpFpm.serviceDeps;
+ preStart = lib.mkAfter wallabag.phpFpm.preStart;
+ };
+ phpfpm-yourls = {
+ after = lib.mkAfter yourls.phpFpm.serviceDeps;
+ wants = yourls.phpFpm.serviceDeps;
+ };
+ ntfy = {
+ description = "send push notifications to your phone or desktop via scripts from any computer";
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ ExecStart = "${pkgs.ntfy-sh}/bin/ntfy serve --listen-http '' --listen-unix %t/ntfy/ntfy.sock --cache-file %S/ntfy/cache.db --cache-duration 120h --behind-proxy --attachment-cache-dir %S/ntfy/attachments --base-url https://tools.immae.eu/ntfy";
+ Type = "simple";
+ WorkingDirectory = "%S/ntfy";
+ RuntimeDirectory = "ntfy";
+ StateDirectory = "ntfy";
+ User = "wwwrun";
+ };
+ };
+ ympd = {
+ description = "Standalone MPD Web GUI written in C";
+ wantedBy = [ "multi-user.target" ];
+ script = ''
+ export MPD_PASSWORD=$(cat ${config.secrets.fullPaths."mpd"})
+ ${pkgs.ympd}/bin/ympd --host ${ympd.config.host} --port ${toString ympd.config.port} --webport ${ympd.config.webPort} --user nobody
+ '';
+ };
+ tt-rss = {
+ description = "Tiny Tiny RSS feeds update daemon";
+ serviceConfig = {
+ User = "wwwrun";
+ ExecStart = "${pkgs.php72}/bin/php ${ttrss.webRoot}/update.php --daemon";
+ StandardOutput = "syslog";
+ StandardError = "syslog";
+ PermissionsStartOnly = true;
+ };
+
+ wantedBy = [ "multi-user.target" ];
+ requires = ["postgresql.service"];
+ after = ["network.target" "postgresql.service"];
+ };
+ };
+
+ services.filesWatcher.ympd = {
+ restart = true;
+ paths = [ config.secrets.fullPaths."mpd" ];
+ };
+
+ services.phpfpm.pools = {
+ tools = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = {
+ "listen.owner" = "wwwrun";
+ "listen.group" = "wwwrun";
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Tools:'";
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "ToolsPHPSESSID";
+ "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [
+ "/run/wrappers/bin/sendmail" landing "/tmp"
+ config.secrets.fullPaths."webapps/webhooks"
+ "${webhooks-bin-env}/bin"
+ ];
+ };
+ phpEnv = {
+ CONTACT_EMAIL = config.myEnv.tools.contact;
+ };
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [ all.redis ]);
+ };
+ devtools = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = {
+ "listen.owner" = "wwwrun";
+ "listen.group" = "wwwrun";
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ "php_admin_value[sendmail_path]" = "/run/wrappers/bin/sendmail -t -i";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Devtools:'";
+ "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:/var/lib/ftp/immae/devtools:/tmp";
+ };
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.mysqli all.sqlite3 all.redis all.apcu all.opcache ]);
+ };
+ adminer = adminer.phpFpm;
+ ttrss = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = ttrss.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ wallabag = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = wallabag.phpFpm.pool;
+ phpPackage = pkgs.php73.withExtensions({ enabled, all }: enabled ++ [all.tidy all.redis]);
+ };
+ yourls = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = yourls.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ rompr = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = rompr.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ shaarli = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = shaarli.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ dmarc-reports = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = dmarc-reports.phpFpm.pool;
+ phpEnv = dmarc-reports.phpFpm.phpEnv;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ dokuwiki = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = dokuwiki.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ phpbb = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = phpbb.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ ldap = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = ldap.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ kanboard = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = kanboard.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ grocy = {
+ user = "wwwrun";
+ group = "wwwrun";
+ settings = grocy'.phpFpm.pool;
+ phpPackage = pkgs.php72.withExtensions({ enabled, all }: enabled ++ [all.redis]);
+ };
+ };
+
+ system.activationScripts = {
+ grocy = grocy'.activationScript;
+ ttrss = ttrss.activationScript;
+ wallabag = wallabag.activationScript;
+ rompr = rompr.activationScript;
+ shaarli = shaarli.activationScript;
+ dokuwiki = dokuwiki.activationScript;
+ phpbb = phpbb.activationScript;
+ kanboard = kanboard.activationScript;
+ };
+
+ services.websites.env.tools.watchPaths = [
+ config.secrets.fullPaths."webapps/tools-shaarli"
+ ];
+ services.filesWatcher.phpfpm-wallabag = {
+ restart = true;
+ paths = [ config.secrets.fullPaths."webapps/tools-wallabag" ];
+ };
+
+ myServices.monitoring.fromMasterActivatedPlugins = lib.mkMerge [
+ ttrss.monitoringPlugins
+ rompr.monitoringPlugins
+ wallabag.monitoringPlugins
+ yourls.monitoringPlugins
+ ympd.monitoringPlugins
+ dokuwiki.monitoringPlugins
+ shaarli.monitoringPlugins
+ ldap.monitoringPlugins
+ adminer.monitoringPlugins
+ ];
+ myServices.monitoring.fromMasterObjects = lib.mkMerge [
+ ttrss.monitoringObjects
+ rompr.monitoringObjects
+ wallabag.monitoringObjects
+ yourls.monitoringObjects
+ ympd.monitoringObjects
+ dokuwiki.monitoringObjects
+ shaarli.monitoringObjects
+ ldap.monitoringObjects
+ adminer.monitoringObjects
+ ];
+ };
+}
+
diff --git a/systems/eldiron/websites/tools/dmarc_reports.nix b/systems/eldiron/websites/tools/dmarc_reports.nix
new file mode 100644
index 0000000..8b3aa99
--- /dev/null
+++ b/systems/eldiron/websites/tools/dmarc_reports.nix
@@ -0,0 +1,61 @@
+{ env, config }:
+rec {
+ keys."webapps/tools-dmarc-reports.php" = {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = ''
+
+ '';
+ };
+ webRoot = ./dmarc_reports;
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /dmarc-reports "${root}"
+
+ DirectoryIndex index.html
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride None
+ Options +FollowSymlinks
+
+ SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
+ Use LDAPConnect
+ Require all granted
+ Require ldap-attribute uid=immae
+
+ '';
+ };
+ phpFpm = rec {
+ basedir = builtins.concatStringsSep ":"
+ [ webRoot config.secrets.fullPaths."webapps/tools-dmarc-reports.php" ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:DmarcReports:'";
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ };
+ phpEnv = {
+ SECRETS_FILE = config.secrets.fullPaths."webapps/tools-dmarc-reports.php";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/dmarc_reports/api.php b/systems/eldiron/websites/tools/dmarc_reports/api.php
new file mode 100644
index 0000000..850f9ce
--- /dev/null
+++ b/systems/eldiron/websites/tools/dmarc_reports/api.php
@@ -0,0 +1,122 @@
+ "ok",
+);
+$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport);
+
+function error_die($text, $number) {
+ http_response_code("500");
+ $message = array(
+ "status" => "error",
+ "message" => $text,
+ "code" => $number
+ );
+
+ die(json_encode($message));
+}
+
+$anonymous = isset($_GET['anonymous']) && $_GET['anonymous'];
+function maybe_anonymize($string, $long = false) {
+ global $anonymous_key;
+ global $anonymous;
+ if ($anonymous) {
+ if ($long) {
+ return md5($anonymous_key . ":" . $string);
+ } else {
+ return substr(md5($anonymous_key . ":" . $string), 0, 6);
+ }
+ } else {
+ return $string;
+ }
+}
+
+if (!$anonymous && (!isset($_SERVER['HTTP_AUTHORIZATION']) || $_SERVER['HTTP_AUTHORIZATION'] === "")) {
+ header('WWW-Authenticate: Basic realm="Immae"');
+ header('HTTP/1.0 401 Unauthorized');
+ echo "You need to be authenticated to access private information";
+ exit;
+}
+
+if ($mysqli->connect_errno) {
+ error_die($mysqli->connect_error, $mysqli->connect_errno);
+}
+
+if (!isset($_GET['serial'])) {
+ $response["domains"] = array();
+ $query = $mysqli->query("SELECT DISTINCT domain FROM `report` ORDER BY domain");
+ if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
+ while($row = $query->fetch_assoc()) {
+ $response["domains"][] = maybe_anonymize($row['domain']);
+ }
+
+ $response["orgs"] = array();
+ $query = $mysqli->query("SELECT DISTINCT org FROM `report` ORDER BY org");
+ if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
+ while($row = $query->fetch_assoc()) {
+ $response["orgs"][] = maybe_anonymize($row['org']);
+ }
+
+ $response["dates"] = array();
+ $query = $mysqli->query("SELECT DISTINCT DISTINCT year(mindate) as year, month(mindate) as month FROM `report` ORDER BY year DESC,month DESC");
+ if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
+ while($row = $query->fetch_assoc()) {
+ $response["dates"][] = sprintf( "%'.04d-%'.02d", $row['year'], $row['month'] );
+ }
+
+ $response["summaries"] = array();
+ if (isset($_GET['errors_only'])) {
+ $where = " WHERE (spfresult != 'pass' or dkimresult != 'pass')";
+ } else {
+ $where = "";
+ }
+
+ $sql = "SELECT report.* , sum(rptrecord.rcount) AS rcount, MIN(rptrecord.dkimresult) AS dkimresult, MIN(rptrecord.spfresult) AS spfresult FROM report LEFT JOIN (SELECT rcount, COALESCE(dkimresult, 'neutral') AS dkimresult, COALESCE(spfresult, 'neutral') AS spfresult, serial FROM rptrecord) AS rptrecord ON report.serial = rptrecord.serial$where GROUP BY serial ORDER BY mindate ASC, maxdate ASC, org";
+ $query = $mysqli->query($sql);
+ if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
+ while($row = $query->fetch_assoc()) {
+ $wanted_keys = array(
+ 'domain', 'org', 'reportid', 'mindate', 'maxdate', 'rcount', 'serial', 'policy_adkim', 'policy_aspf', 'policy_none', 'policy_sp', 'policy_pct', 'spfresult', 'dkimresult'
+ );
+ $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1'));
+ $row["domain"] = maybe_anonymize($row["domain"]);
+ $row["org"] = maybe_anonymize($row["org"]);
+ $row["reportid"] = maybe_anonymize($row["reportid"], true);
+ $response["summaries"][] = $row;
+ }
+} else {
+ $response["rptrecord"] = [];
+ $sql = $mysqli->prepare("SELECT * FROM rptrecord where serial = ?");
+ $sql->bind_param("s", $_GET["serial"]);
+ $sql->execute();
+ $query = $sql->get_result();
+ if ($mysqli->error) { error_die($mysqli->error, $mysqli->errno); }
+ while($row = $query->fetch_assoc()) {
+ if ($row['ip']) {
+ $ip = long2ip($row['ip']);
+ $host = gethostbyaddr($ip);
+ } elseif ( $row['ip6'] ) {
+ $ip = inet_ntop($row['ip6']);
+ $host = gethostbyaddr($ip);
+ } else {
+ $ip = "-";
+ $host = "-";
+ }
+ $wanted_keys = array(
+ 'ip', 'host', 'rcount', 'disposition', 'reason', 'dkimdomain', 'dkimresult', 'spfdomain', 'spfresult'
+ );
+ $row = array_intersect_key($row, array_fill_keys($wanted_keys, '1'));
+ $row['ip'] = maybe_anonymize($ip);
+ $row['host'] = maybe_anonymize($host);
+ $row['dkimdomain'] = maybe_anonymize($row['dkimdomain']);
+ $row['spfdomain'] = maybe_anonymize($row['spfdomain']);
+ $response["rptrecord"][] = $row;
+ }
+}
+
+header("Content-Type: application/json");
+
+echo json_encode($response, JSON_PRETTY_PRINT);
+?>
diff --git a/systems/eldiron/websites/tools/dmarc_reports/app.js b/systems/eldiron/websites/tools/dmarc_reports/app.js
new file mode 100644
index 0000000..8e8a6c4
--- /dev/null
+++ b/systems/eldiron/websites/tools/dmarc_reports/app.js
@@ -0,0 +1,103 @@
+const app = new Vue({
+ el: '#app',
+ data: {
+ info: null,
+ summaries: null,
+ selectedSummary: null,
+ filterGreen: true,
+ filterDomain: null,
+ filterOrg: null,
+ //filterDate: (new Date()).toISOString().substring(0, 7),
+ filterDate: null,
+ reverse: true,
+ anonymous: true,
+ },
+ created: async function () {
+ let that = this;
+
+ if ('anonymous' in localStorage) {
+ this.anonymous = JSON.parse(localStorage.anonymous);
+ }
+ this.fetchAll();
+ },
+ methods: {
+ fetchAll: async function() {
+ try {
+ this.info = await this.getInfo();
+ this.summaries = this.info.summaries;
+ } catch (error) {
+ this.info = null;
+ this.summaries = null;
+ }
+ },
+ toggleAnonymous: function() {
+ this.anonymous = !this.anonymous;
+ localStorage.anonymous = this.anonymous;
+ this.fetchAll();
+ },
+ filtered: function () {
+ let that = this;
+ let filtered = this.summaries.filter(function (summary) {
+ return (!that.filterGreen || that.getColor(summary) !== "lime")
+ && (!that.filterDomain || summary.domain === that.filterDomain)
+ && (!that.filterOrg || summary.org === that.filterOrg)
+ && (!that.filterDate || that.inDates(summary));
+ });
+ if (this.reverse) {
+ return filtered.reverse();
+ } else {
+ return filtered;
+ }
+ },
+ toggle: async function(summary) {
+ if (this.selectedSummary && this.selectedSummary.serial === summary.serial) {
+ this.selectedSummary = null;
+ } else {
+ if (!summary.details) {
+ summary.details = await this.getDetails(summary.serial);
+ }
+ this.selectedSummary = summary;
+ }
+ },
+ inDates: function(summary) {
+ if (!this.filterDate) { return true; }
+
+ let mindate = (new Date(summary.mindate)).toISOString().substring(0, 7);
+ let maxdate = (new Date(summary.maxdate)).toISOString().substring(0, 7);
+
+ return mindate === this.filterDate || maxdate === this.filterDate;
+ },
+ printDate: function (date) {
+ return (new Date(date)).toISOString().replace("T", " ").replace(/\..*Z$/, " UTC");
+ },
+ getColor: function (element) {
+ if (element.dkimresult === "fail" && element.spfresult === "fail") {
+ return "red";
+ } else if (element.dkimresult === "fail" || element.spfresult === "fail") {
+ return "orange";
+ } else if (element.dkimresult === "pass" && element.spfresult === "pass") {
+ return "lime";
+ } else {
+ return "yellow";
+ }
+ },
+ getInfo: function (event) {
+ let anonymous = this.anonymous ? "anonymous=1" : "";
+ return fetch(`api.php?${anonymous}`).then(function (response) {
+ if (response.status != 200) { return; }
+ return response.text().then(function (body) {
+ return JSON.parse(body);
+ });
+ });
+ },
+ getDetails: function (serial) {
+ let anonymous = this.anonymous ? "&anonymous=1" : "";
+ return fetch(`api.php?serial=${serial}${anonymous}`).then(function (response) {
+ if (response.status != 200) { return; }
+ return response.text().then(function (body) {
+ return JSON.parse(body);
+ });
+ });
+ }
+ }
+});
diff --git a/systems/eldiron/websites/tools/dmarc_reports/default.css b/systems/eldiron/websites/tools/dmarc_reports/default.css
new file mode 100644
index 0000000..9e0c63f
--- /dev/null
+++ b/systems/eldiron/websites/tools/dmarc_reports/default.css
@@ -0,0 +1,130 @@
+h1 {
+ text-align: center;
+}
+
+p.warninginfo {
+ text-align: center;
+}
+
+table.reportlist {
+ margin: 2em auto 2em auto;
+ border-collapse: collapse;
+ clear: both;
+}
+
+table.reportlist td, table.reportlist th {
+ padding:3px;
+}
+
+table.reportlist thead {
+ border-top: 1px solid grey;
+ border-bottom: 1px solid grey;
+
+}
+table.reportlist tbody tr:first-child td {
+ padding-top: 10px;
+}
+table.reportlist tr.sum {
+ border-top: 1px solid grey;
+}
+table.reportlist tr.selected {
+ background-color: lightgrey;
+}
+.reportdesc {
+ font-weight: bold;
+ width: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+tr.summaryrow {
+ cursor: pointer;
+}
+
+tr.summaryrow:hover, tr.summaryrow.selected {
+ background-color: lightgray;
+ border-left: 1px solid lightgray;
+}
+
+td.reportcell {
+ border-bottom: 1px solid lightgray;
+ border-left: 1px solid lightgray;
+ border-right: 1px solid lightgray;
+}
+
+table.reportdata {
+ margin: 0px auto 0px auto;
+ border-collapse: separate;
+ border-spacing: 2px;
+}
+
+table.reportdata tr th, table.reportdata tr td {
+ text-align: center;
+ padding: 3px;
+}
+
+table.reportdata tr.red {
+ background-color: #FF0000;
+}
+
+table.reportdata tr.orange {
+ background-color: #FFA500;
+}
+
+table.reportdata tr.lime {
+ background-color: #00FF00;
+}
+
+table.reportdata tr.yellow {
+ background-color: #FFFF00;
+}
+
+.optionblock {
+ background: lightgrey;
+ padding: 0.4em;
+ float: right;
+ margin: auto 2em 1em auto;
+ white-space: nowrap;
+}
+
+.optionlabel {
+ font-weight: bold;
+ float: left; clear: left;
+ margin-right: 1em;
+}
+
+.options {
+ font-size: 70%;
+ text-align: right;
+ border: none;
+ width: 97%;
+ padding: 0.4em;
+}
+
+.center {
+ text-align:center;
+}
+
+.circle_lime:before {
+ content: ' \25CF';
+ font-size: 25px;
+ color: #00FF00;
+}
+
+.circle_red:before {
+ content: ' \25CF';
+ font-size: 25px;
+ color: #FF0000;
+}
+
+.circle_yellow:before {
+ content: ' \25CF';
+ font-size: 25px;
+ color: #FFFF00;
+}
+
+.circle_orange:before {
+ content: ' \25CF';
+ font-size: 25px;
+ color: #FFA500;
+}
diff --git a/systems/eldiron/websites/tools/dmarc_reports/index.html b/systems/eldiron/websites/tools/dmarc_reports/index.html
new file mode 100644
index 0000000..0afc82f
--- /dev/null
+++ b/systems/eldiron/websites/tools/dmarc_reports/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ Dmarc reports
+
+
+
+
+
+
+
+
DMARC Reports
+
+ No information could be fetched. If in non-anonymous mode you need to be logged-in
+
+
+
+
+
+ Start Date
+ End Date
+ Domain
+ Reporting Organization
+ Report ID
+ Messages
+
+
+
+
+
+
+ {{ printDate(summary.mindate) }}
+ {{ printDate(summary.maxdate) }}
+ {{ summary.domain }}
+ {{ summary.org }}
+ {{ summary.reportid }}
+ {{ summary.rcount }}
+
+
+
+
+
Policies: adkim={{ summary.policy_adkim }}, aspf={{ summary.policy_aspf }}, p={{ summary.policy_none }}, sp={{ summary.policy_sp }}, pct={{ summary.policy_pct }}
+
+
+
+
+ IP Address
+ Host Name
+ Message Count
+ Disposition
+ Reason
+ DKIM Domain
+ Raw DKIM Result
+ SPF Domain
+ Raw SPF Result
+
+
+
+
+ {{ record.ip }}
+ {{ record.host }}
+ {{ record.rcount }}
+ {{ record.disposition }}
+ {{ record.reason }}
+ {{ record.dkimdomain }}
+ {{ record.dkimresult }}
+ {{ record.spfdomain }}
+ {{ record.spfresult }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/systems/eldiron/websites/tools/dokuwiki.nix b/systems/eldiron/websites/tools/dokuwiki.nix
new file mode 100644
index 0000000..813c426
--- /dev/null
+++ b/systems/eldiron/websites/tools/dokuwiki.nix
@@ -0,0 +1,106 @@
+{ lib, stdenv, dokuwiki, dokuwiki-plugins, config }:
+rec {
+ varDir = "/var/lib/dokuwiki";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ if [ ! -d ${varDir} ]; then
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/animals
+ cp -a ${webRoot}/conf.dist ${varDir}/conf
+ cp -a ${webRoot}/data.dist ${varDir}/data
+ cp -a ${webRoot}/
+ chown -R ${apache.user}:${apache.user} ${varDir}/config ${varDir}/data
+ chmod -R 755 ${varDir}/config ${varDir}/data
+ fi
+ '';
+ };
+ chatonsHostingProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ hosting = {
+ name = "Dokuwiki";
+ description = "DokuWiki is a simple to use and highly versatile Open Source wiki software";
+ website = "https://tools.immae.eu/dokuwiki/";
+ logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ chatonsProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ service = {
+ name = "Dokuwiki";
+ description = "DokuWiki is a simple to use and highly versatile Open Source wiki software";
+ website = "https://tools.immae.eu/dokuwiki/";
+ logo = "https://tools.immae.eu/dokuwiki/lib/tpl/dokuwiki/images/apple-touch-icon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Dokuwiki";
+ website = "https://www.dokuwiki.org/dokuwiki";
+ license.url = "http://www.gnu.org/licenses/gpl-2.0.html";
+ license.name = "GNU General Public License Version 2";
+ version = webRoot.version;
+ source.url = "https://download.dokuwiki.org/";
+ modules = map (a: a.pluginName) webRoot.plugins;
+ };
+ };
+ webRoot = dokuwiki.withPlugins (p: [ p.farmer p.todo ]);
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /dokuwiki "${root}"
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride All
+ Options +FollowSymlinks
+ Require all granted
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" (
+ [ webRoot varDir ] ++ webRoot.plugins);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "DokuwikiPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Dokuwiki:'";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "dokuwiki website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/dokuwiki/" "start"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Dokuwiki";
+ _webstatus_url = "https://tools.immae.eu/dokuwiki/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/grocy.nix b/systems/eldiron/websites/tools/grocy.nix
new file mode 100644
index 0000000..96e18a3
--- /dev/null
+++ b/systems/eldiron/websites/tools/grocy.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, grocy }:
+rec {
+ varDir = "/var/lib/grocy";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
+ '';
+ };
+ webRoot = grocy.webRoot;
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /grocy "${root}"
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride All
+ Options +FollowSymlinks
+ Require all granted
+
+ '';
+ };
+ phpFpm = rec {
+ basedir = builtins.concatStringsSep ":" (
+ [ grocy grocy.yarnModules varDir ]);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "grocyPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Grocy:'";
+ };
+ };
+}
+
diff --git a/systems/eldiron/websites/tools/kanboard.nix b/systems/eldiron/websites/tools/kanboard.nix
new file mode 100644
index 0000000..db39ecd
--- /dev/null
+++ b/systems/eldiron/websites/tools/kanboard.nix
@@ -0,0 +1,81 @@
+{ env, kanboard, config }:
+rec {
+ varDir = "/var/lib/kanboard";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/data
+ install -TDm644 ${webRoot}/dataold/.htaccess ${varDir}/data/.htaccess
+ install -TDm644 ${webRoot}/dataold/web.config ${varDir}/data/web.config
+ '';
+ };
+ keys."webapps/tools-kanboard" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ SetEnv MAIL_FROM "kanboard@tools.immae.eu"
+
+ SetEnv DB_DRIVER "postgres"
+ SetEnv DB_USERNAME "${env.postgresql.user}"
+ SetEnv DB_PASSWORD "${env.postgresql.password}"
+ SetEnv DB_HOSTNAME "${env.postgresql.socket}"
+ SetEnv DB_NAME "${env.postgresql.database}"
+
+ SetEnv DATA_DIR "${varDir}"
+ SetEnv LDAP_AUTH "true"
+ SetEnv LDAP_SERVER "${env.ldap.host}"
+ SetEnv LDAP_START_TLS "true"
+
+ SetEnv LDAP_BIND_TYPE "proxy"
+ SetEnv LDAP_USERNAME "${env.ldap.dn}"
+ SetEnv LDAP_PASSWORD "${env.ldap.password}"
+ SetEnv LDAP_USER_BASE_DN "${env.ldap.base}"
+ SetEnv LDAP_USER_FILTER "${env.ldap.filter}"
+ SetEnv LDAP_GROUP_ADMIN_DN "${env.ldap.admin_dn}"
+ '';
+ };
+ webRoot = kanboard;
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /kanboard "${root}"
+
+ Include ${config.secrets.fullPaths."webapps/tools-kanboard"}
+
+
+ DirectoryIndex index.php
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+
+ Require all denied
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "KanboardPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Kanboard:'";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/landing.nix b/systems/eldiron/websites/tools/landing.nix
new file mode 100644
index 0000000..f5d851e
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing.nix
@@ -0,0 +1,38 @@
+{ stdenv, yarn2nix-moretea, nodejs_16 }:
+let
+ source = builtins.fetchGit {
+ url = "https://git.immae.eu/github/bastienwirtz/homer.git";
+ ref = "gitolite_local/local_changes";
+ rev = "bb60c5b869931f305f15c5bfa9cdb3f68702f01f";
+ narHash = "sha256-xBIBUJhQ7KPY0d92pW9ErA9OvGafWcxyuGkbHShF4Bs=";
+ };
+ yarnModules = yarn2nix-moretea.mkYarnModules rec {
+ nodejs = nodejs_16;
+ name = "landing";
+ pname = name;
+ version = "v1.0.0";
+ packageJSON = "${source}/package.json";
+ yarnLock = "${source}/yarn.lock";
+ yarnNix = ./landing/yarn-packages.nix;
+ };
+in
+ stdenv.mkDerivation rec {
+ pname = "landing";
+ version = "v1.0.0";
+ src = source;
+
+ buildInputs = [ yarnModules yarn2nix-moretea.yarn ];
+ configurePhase = ''
+ ln -s ${yarnModules}/node_modules .
+ '';
+ buildPhase = ''
+ # See https://stackoverflow.com/questions/74548318/how-to-resolve-error-error0308010cdigital-envelope-routinesunsupported-no
+ export NODE_OPTIONS=--openssl-legacy-provider
+ yarn build
+ '';
+ installPhase = ''
+ cp -a dist $out
+ cp ${./landing}/*.php $out/
+ ln -s service-worker.js $out/worker.js
+ '';
+ }
diff --git a/systems/eldiron/websites/tools/landing/ldap_password.php b/systems/eldiron/websites/tools/landing/ldap_password.php
new file mode 100644
index 0000000..efb4f57
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing/ldap_password.php
@@ -0,0 +1,170 @@
+
+ * @website: http://technology.mattrude.com/2010/11/ldap-php-change-password-webpage/
+ *
+ *
+ * GNU GENERAL PUBLIC LICENSE
+ * Version 2, June 1991
+ *
+ * Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Everyone is permitted to copy and distribute verbatim copies
+ * of this license document, but changing it is not allowed.
+ */
+
+$message = array();
+$message_css = "";
+
+function changePasswordLDAP($con, $user_dn, $newPassword){
+ global $message;
+ $salt = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',4)),0,4);
+ $encoded_newPassword = "{SSHA}" . base64_encode(pack("H*", sha1($newPassword.$salt)).$salt);
+
+ $entry = array();
+ $entry["userPassword"] = "$encoded_newPassword";
+
+ if (ldap_modify($con,$user_dn,$entry) === false){
+ $error = ldap_error($con);
+ $errno = ldap_errno($con);
+ $message[] = "$errno - $error";
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function changePasswordSQL($user_realm, $newPassword) {
+ global $message;
+
+ foreach(["PGUSER", "PGPASSWORD", "PGDATABASE", "PGHOST"] as $k) {
+ if (isset($_SERVER[$k]) && !isset($_ENV[$k])) {
+ putenv("${k}=" . $_SERVER[$k]);
+ }
+ }
+ $con = pg_connect("");
+ $result = pg_query_params($con, "WITH newsalt as (SELECT gen_random_bytes(4)) UPDATE ldap_users SET password = encode(digest( $1 || (SELECT * FROM newsalt), 'sha1'), 'hex'), mechanism = 'SSHA', salt = (SELECT * FROM newsalt) where login || '@' || realm = $2", array($newPassword, $user_realm));
+ if (!$result) {
+ $message[] = "Error when accessing database";
+ return false;
+ } else {
+ return true;
+ }
+}
+
+function changePassword($user,$oldPassword,$newPassword,$newPasswordCnf){
+ global $message;
+ global $message_css;
+
+ $server = "ldaps://ldap.immae.eu";
+
+ error_reporting(0);
+ $con = ldap_connect($server);
+ ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
+
+ $user_dn = "uid=$user,ou=users,dc=immae,dc=eu";
+
+ if (ldap_bind($con, $user_dn, $oldPassword) === false) {
+ $user_dn = "uid=$user,ou=group_users,dc=immae,dc=eu";
+ if (ldap_bind($con, $user_dn, $oldPassword) === false) {
+ $message[] = "Error E101 - Current Username or Password is wrong.";
+ return false;
+ }
+ }
+ if ($newPassword != $newPasswordCnf ) {
+ $message[] = "Error E102 - Your New passwords do not match!";
+ return false;
+ }
+ if (strlen($newPassword) < 6 ) {
+ $message[] = "Error E103 - Your new password is too short. Your password must be at least 6 characters long.";
+ return false;
+ }
+
+ $user_search = ldap_search($con,"dc=immae,dc=eu","(uid=$user)");
+ $auth_entry = ldap_first_entry($con, $user_search);
+
+ $mail_address = ldap_get_values($con, $auth_entry, "mail")[0];
+ $first_name = ldap_get_values($con, $auth_entry, "givenName")[0];
+ $existing_password = ldap_get_values($con, $auth_entry, "userPassword")[0];
+ if (substr($existing_password, 0, 6) == "{SASL}") {
+ $result = changePasswordSQL(substr($existing_password, 6), $newPassword);
+ } else {
+ $result = changePasswordLDAP($con, $user_dn, $newPassword);
+ }
+
+ if (!$result) {
+ $message[] = "E201 - Your password cannot be changed, please contact the administrator.";
+ } else {
+ $message_css = "yes";
+ mail($mail_address,"Password change notice","Dear $first_name,
+Your password on https://tools.immae.eu/ldap_password.php for account $user was just changed.
+If you did not make this change, please contact me.
+If you were the one who changed your password, you may disregard this message.
+
+Thanks
+--
+Immae / Ismaël", "From: " . getenv("CONTACT_EMAIL"));
+ $message[] = "The password for $user has been changed. An informational email has been sent to $mail_address. Your new password is now fully active.";
+ }
+}
+
+?>
+
+
+
+Password Change Page
+
+
+
+
+
+
+
+
+
diff --git a/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php
new file mode 100644
index 0000000..85ed973
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing/ldap_ssh_keys.php
@@ -0,0 +1,343 @@
+
+
+
+ ImmaeEu Account
+
+
+
+
+
+
+
+
Gestion des clés SSH
+ $row["id"],
+ 'apps' => json_decode($row["usage"]),
+ 'public_key' => $row["key"],
+ 'comment' => $row["comment"],
+ );
+ }
+
+ pg_close($pg);
+ return $keys;
+}
+
+function saveKeys($keys)
+{
+ if (!isset($_SESSION["login"])) {
+ return false;
+ }
+ $pg = connectPg();
+ $existingIds = pg_fetch_all_columns(pg_query_params($pg, "SELECT id FROM ldap_users_ssh_keys WHERE realm = 'immae' AND login = $1", array($_SESSION["login"])));
+ foreach ($keys as $key) {
+ if (isset($key["id"])) {
+ unset($existingIds[array_search($key["id"],$existingIds)]);
+ pg_query_params($pg, "UPDATE ldap_users_ssh_keys SET key = $2, usage = ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[], comment = $4 WHERE id = $5 AND login = $1 AND realm = 'immae'", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"], $key["id"]));
+ } else {
+ pg_query_params($pg, "INSERT INTO ldap_users_ssh_keys (login,realm,key,usage,comment) values ($1,'immae',$2,ARRAY(SELECT * FROM json_array_elements_text($3))::ldap_users_ssh_key_usage[],$4)", array($_SESSION["login"], $key["public_key"], json_encode($key["apps"]), $key["comment"]));
+ }
+ }
+ foreach ($existingIds as $removedKeyId) {
+ pg_query_params($pg, "DELETE FROM ldap_users_ssh_keys WHERE login = $1 AND realm = 'immae' AND id = $2", array($_SESSION["login"], $removedKeyId));
+ }
+}
+
+
+// Script
+if (isset($_POST['deconnexion'])) {
+ $_SESSION = [];
+}
+
+if (isset($_POST['sauvegarder'])) {
+ $editedKeys = [];
+ $errors = false;
+ $keysToSave = [];
+ foreach($_POST['keys'] as $id => $key) {
+ $editedKeys[$id] = $key;
+ if (!checkSshKey($key['public_key'])) {
+ $editedKeys[$id]['error'] = true;
+ $errors = true;
+ }
+
+ if (!isset($key['apps'])) {
+ $editedKeys[$id]['apps'] = $key['apps'] = [];
+
+ }
+ foreach ($key['apps'] as $app) {
+ if (!in_array($app, apps)) {
+ die("integrity");
+ }
+ }
+
+ if (!isset($editedKeys[$id]['error']) || $editedKeys[$id]['error'] !== true) {
+ $keysToSave[] = $key;
+ }
+ }
+
+ if (!$errors) {
+ $successSave = saveKeys($keysToSave);
+ }
+}
+
+$loginErrors = "";
+if (isset($_POST['login'])) {
+ if (empty($_POST['username']) || empty($_POST['password'])) {
+ $loginErrors = "Le nom d'utilisateur et le mot de passe sont requis.";
+ } elseif (!checkLogin($_POST['username'], $_POST['password'])) {
+ $loginErrors = "Identifiants incorrects.";
+ } else {
+ $_SESSION['login'] = $_POST['username'];
+ }
+}
+
+if (isUserLogged()) :
+ $keys = isset($editedKeys) ? $editedKeys : getKeys();
+?>
+
Connecté en tant que = $_SESSION['login']; ?>
+
+
+
+
+
Clés enregistrées avec succès.
+
+
+
+
+
+
+ Login
+
+
+ = $loginErrors; ?>
+
+
+ Utilisateur :
+
+
+ Mot de passe :
+
+
+
+
+
+
+
+
+
+
diff --git a/systems/eldiron/websites/tools/landing/myip.php b/systems/eldiron/websites/tools/landing/myip.php
new file mode 100644
index 0000000..9ec1c6c
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing/myip.php
@@ -0,0 +1 @@
+
diff --git a/systems/eldiron/websites/tools/landing/node-packages.nix b/systems/eldiron/websites/tools/landing/node-packages.nix
new file mode 100644
index 0000000..9ebf254
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing/node-packages.nix
@@ -0,0 +1,130 @@
+# This file has been generated by node2nix 1.8.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, src, globalBuildInputs ? []}:
+
+let
+ sources = {
+ "@fortawesome/fontawesome-free-5.13.1" = {
+ name = "_at_fortawesome_slash_fontawesome-free";
+ packageName = "@fortawesome/fontawesome-free";
+ version = "5.13.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz";
+ sha512 = "D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw==";
+ };
+ };
+ "argparse-1.0.10" = {
+ name = "argparse";
+ packageName = "argparse";
+ version = "1.0.10";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+ sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+ };
+ };
+ "bulma-0.8.2" = {
+ name = "bulma";
+ packageName = "bulma";
+ version = "0.8.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/bulma/-/bulma-0.8.2.tgz";
+ sha512 = "vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA==";
+ };
+ };
+ "core-js-3.6.5" = {
+ name = "core-js";
+ packageName = "core-js";
+ version = "3.6.5";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz";
+ sha512 = "vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==";
+ };
+ };
+ "esprima-4.0.1" = {
+ name = "esprima";
+ packageName = "esprima";
+ version = "4.0.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+ sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+ };
+ };
+ "js-yaml-3.14.0" = {
+ name = "js-yaml";
+ packageName = "js-yaml";
+ version = "3.14.0";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz";
+ sha512 = "/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==";
+ };
+ };
+ "lodash.merge-4.6.2" = {
+ name = "lodash.merge";
+ packageName = "lodash.merge";
+ version = "4.6.2";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz";
+ sha512 = "0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==";
+ };
+ };
+ "register-service-worker-1.7.1" = {
+ name = "register-service-worker";
+ packageName = "register-service-worker";
+ version = "1.7.1";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.1.tgz";
+ sha512 = "IdTfUZ4u8iJL8o1w8es8l6UMGPmkwHolUdT+UmM1UypC80IB4KbpuIlvwWVj8UDS7eJwkEYRcKRgfRX+oTmJsw==";
+ };
+ };
+ "sprintf-js-1.0.3" = {
+ name = "sprintf-js";
+ packageName = "sprintf-js";
+ version = "1.0.3";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+ sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+ };
+ };
+ "vue-2.6.11" = {
+ name = "vue";
+ packageName = "vue";
+ version = "2.6.11";
+ src = fetchurl {
+ url = "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz";
+ sha512 = "VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==";
+ };
+ };
+ };
+ args = {
+ name = "homer";
+ packageName = "homer";
+ version = "20.06.1";
+ inherit src;
+ dependencies = [
+ sources."@fortawesome/fontawesome-free-5.13.1"
+ sources."argparse-1.0.10"
+ sources."bulma-0.8.2"
+ sources."core-js-3.6.5"
+ sources."esprima-4.0.1"
+ sources."js-yaml-3.14.0"
+ sources."lodash.merge-4.6.2"
+ sources."register-service-worker-1.7.1"
+ sources."sprintf-js-1.0.3"
+ sources."vue-2.6.11"
+ ];
+ buildInputs = globalBuildInputs;
+ meta = {
+ license = "Apache-2.0";
+ };
+ production = true;
+ bypassCache = true;
+ reconstructLock = true;
+ };
+in
+{
+ args = args;
+ sources = sources;
+ tarball = nodeEnv.buildNodeSourceDist args;
+ package = nodeEnv.buildNodePackage args;
+ shell = nodeEnv.buildNodeShell args;
+}
diff --git a/systems/eldiron/websites/tools/landing/yarn-packages.nix b/systems/eldiron/websites/tools/landing/yarn-packages.nix
new file mode 100644
index 0000000..9621c3e
--- /dev/null
+++ b/systems/eldiron/websites/tools/landing/yarn-packages.nix
@@ -0,0 +1,9357 @@
+{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec {
+ offline_cache = linkFarm "offline" packages;
+ packages = [
+ {
+ name = "_babel_code_frame___code_frame_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_code_frame___code_frame_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz";
+ sha1 = "d5481c5095daa1c57e16e54c6f9198443afb49ff";
+ };
+ }
+ {
+ name = "_babel_compat_data___compat_data_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_compat_data___compat_data_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.1.tgz";
+ sha1 = "b1085ffe72cd17bf2c0ee790fc09f9626011b2db";
+ };
+ }
+ {
+ name = "_babel_core___core_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_core___core_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/core/-/core-7.10.2.tgz";
+ sha1 = "bd6786046668a925ac2bd2fd95b579b92a23b36a";
+ };
+ }
+ {
+ name = "_babel_generator___generator_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_generator___generator_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz";
+ sha1 = "0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9";
+ };
+ }
+ {
+ name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_annotate_as_pure___helper_annotate_as_pure_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz";
+ sha1 = "f6d08acc6f70bbd59b436262553fb2e259a1a268";
+ };
+ }
+ {
+ name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_builder_binary_assignment_operator_visitor___helper_builder_binary_assignment_operator_visitor_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz";
+ sha1 = "0ec7d9be8174934532661f87783eb18d72290059";
+ };
+ }
+ {
+ name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_helper_compilation_targets___helper_compilation_targets_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz";
+ sha1 = "a17d9723b6e2c750299d2a14d4637c76936d8285";
+ };
+ }
+ {
+ name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_helper_create_class_features_plugin___helper_create_class_features_plugin_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz";
+ sha1 = "7474295770f217dbcf288bf7572eb213db46ee67";
+ };
+ }
+ {
+ name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_create_regexp_features_plugin___helper_create_regexp_features_plugin_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz";
+ sha1 = "1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd";
+ };
+ }
+ {
+ name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_define_map___helper_define_map_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz";
+ sha1 = "5e69ee8308648470dd7900d159c044c10285221d";
+ };
+ }
+ {
+ name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_explode_assignable_expression___helper_explode_assignable_expression_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz";
+ sha1 = "e9d76305ee1162ca467357ae25df94f179af2b7e";
+ };
+ }
+ {
+ name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_function_name___helper_function_name_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz";
+ sha1 = "92bd63829bfc9215aca9d9defa85f56b539454f4";
+ };
+ }
+ {
+ name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz";
+ sha1 = "7303390a81ba7cb59613895a192b93850e373f7d";
+ };
+ }
+ {
+ name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_hoist_variables___helper_hoist_variables_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz";
+ sha1 = "7e77c82e5dcae1ebf123174c385aaadbf787d077";
+ };
+ }
+ {
+ name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_member_expression_to_functions___helper_member_expression_to_functions_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz";
+ sha1 = "432967fd7e12a4afef66c4687d4ca22bc0456f15";
+ };
+ }
+ {
+ name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_module_imports___helper_module_imports_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz";
+ sha1 = "dd331bd45bccc566ce77004e9d05fe17add13876";
+ };
+ }
+ {
+ name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_module_transforms___helper_module_transforms_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz";
+ sha1 = "24e2f08ee6832c60b157bb0936c86bef7210c622";
+ };
+ }
+ {
+ name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_optimise_call_expression___helper_optimise_call_expression_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz";
+ sha1 = "b4a1f2561870ce1247ceddb02a3860fa96d72543";
+ };
+ }
+ {
+ name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_plugin_utils___helper_plugin_utils_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz";
+ sha1 = "ec5a5cf0eec925b66c60580328b122c01230a127";
+ };
+ }
+ {
+ name = "_babel_helper_regex___helper_regex_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_regex___helper_regex_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz";
+ sha1 = "021cf1a7ba99822f993222a001cc3fec83255b96";
+ };
+ }
+ {
+ name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_remap_async_to_generator___helper_remap_async_to_generator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz";
+ sha1 = "bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432";
+ };
+ }
+ {
+ name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_replace_supers___helper_replace_supers_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz";
+ sha1 = "ec6859d20c5d8087f6a2dc4e014db7228975f13d";
+ };
+ }
+ {
+ name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_simple_access___helper_simple_access_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz";
+ sha1 = "08fb7e22ace9eb8326f7e3920a1c2052f13d851e";
+ };
+ }
+ {
+ name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz";
+ sha1 = "c6f4be1cbc15e3a868e4c64a17d5d31d754da35f";
+ };
+ }
+ {
+ name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz";
+ sha1 = "5770b0c1a826c4f53f5ede5e153163e0318e94b5";
+ };
+ }
+ {
+ name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helper_wrap_function___helper_wrap_function_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz";
+ sha1 = "956d1310d6696257a7afd47e4c42dfda5dfcedc9";
+ };
+ }
+ {
+ name = "_babel_helpers___helpers_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_helpers___helpers_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz";
+ sha1 = "a6827b7cb975c9d9cef5fd61d919f60d8844a973";
+ };
+ }
+ {
+ name = "_babel_highlight___highlight_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_highlight___highlight_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz";
+ sha1 = "841d098ba613ba1a427a2b383d79e35552c38ae0";
+ };
+ }
+ {
+ name = "_babel_parser___parser_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_parser___parser_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz";
+ sha1 = "871807f10442b92ff97e4783b9b54f6a0ca812d0";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_async_generator_functions___plugin_proposal_async_generator_functions_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz";
+ sha1 = "6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_class_properties___plugin_proposal_class_properties_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz";
+ sha1 = "046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_decorators___plugin_proposal_decorators_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.1.tgz";
+ sha1 = "9373c2d8db45345c6e30452ad77b469758e5c8f7";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_dynamic_import___plugin_proposal_dynamic_import_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz";
+ sha1 = "e36979dc1dc3b73f6d6816fc4951da2363488ef0";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_json_strings___plugin_proposal_json_strings_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz";
+ sha1 = "b1e691ee24c651b5a5e32213222b2379734aff09";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_nullish_coalescing_operator___plugin_proposal_nullish_coalescing_operator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz";
+ sha1 = "02dca21673842ff2fe763ac253777f235e9bbf78";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_numeric_separator___plugin_proposal_numeric_separator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz";
+ sha1 = "a9a38bc34f78bdfd981e791c27c6fdcec478c123";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_object_rest_spread___plugin_proposal_object_rest_spread_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz";
+ sha1 = "cba44908ac9f142650b4a65b8aa06bf3478d5fb6";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_optional_catch_binding___plugin_proposal_optional_catch_binding_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz";
+ sha1 = "c9f86d99305f9fa531b568ff5ab8c964b8b223d2";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_optional_chaining___plugin_proposal_optional_chaining_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz";
+ sha1 = "15f5d6d22708629451a91be28f8facc55b0e818c";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_private_methods___plugin_proposal_private_methods_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz";
+ sha1 = "ed85e8058ab0fe309c3f448e5e1b73ca89cdb598";
+ };
+ }
+ {
+ name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_proposal_unicode_property_regex___plugin_proposal_unicode_property_regex_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz";
+ sha1 = "dc04feb25e2dd70c12b05d680190e138fa2c0c6f";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_async_generators___plugin_syntax_async_generators_7.8.4.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz";
+ sha1 = "a983fb1aeb2ec3f6ed042a210f640e90e786fe0d";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_class_properties___plugin_syntax_class_properties_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz";
+ sha1 = "d5bc0645913df5b17ad7eda0fa2308330bde34c5";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_decorators___plugin_syntax_decorators_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.1.tgz";
+ sha1 = "16b869c4beafc9a442565147bda7ce0967bd4f13";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_dynamic_import___plugin_syntax_dynamic_import_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz";
+ sha1 = "62bf98b2da3cd21d626154fc96ee5b3cb68eacb3";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_json_strings___plugin_syntax_json_strings_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz";
+ sha1 = "01ca21b668cd8218c9e640cb6dd88c5412b2c96a";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_jsx___plugin_syntax_jsx_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.1.tgz";
+ sha1 = "0ae371134a42b91d5418feb3c8c8d43e1565d2da";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_nullish_coalescing_operator___plugin_syntax_nullish_coalescing_operator_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz";
+ sha1 = "167ed70368886081f74b5c36c65a88c03b66d1a9";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_numeric_separator___plugin_syntax_numeric_separator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz";
+ sha1 = "25761ee7410bc8cf97327ba741ee94e4a61b7d99";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_object_rest_spread___plugin_syntax_object_rest_spread_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz";
+ sha1 = "60e225edcbd98a640332a2e72dd3e66f1af55871";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_optional_catch_binding___plugin_syntax_optional_catch_binding_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz";
+ sha1 = "6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_optional_chaining___plugin_syntax_optional_chaining_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz";
+ sha1 = "4f69c2ab95167e0180cd5336613f8c5788f7d48a";
+ };
+ }
+ {
+ name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_syntax_top_level_await___plugin_syntax_top_level_await_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz";
+ sha1 = "8b8733f8c57397b3eaa47ddba8841586dcaef362";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_arrow_functions___plugin_transform_arrow_functions_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz";
+ sha1 = "cb5ee3a36f0863c06ead0b409b4cc43a889b295b";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_async_to_generator___plugin_transform_async_to_generator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz";
+ sha1 = "e5153eb1a3e028f79194ed8a7a4bf55f862b2062";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_block_scoped_functions___plugin_transform_block_scoped_functions_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz";
+ sha1 = "146856e756d54b20fff14b819456b3e01820b85d";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_block_scoping___plugin_transform_block_scoping_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz";
+ sha1 = "47092d89ca345811451cd0dc5d91605982705d5e";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_classes___plugin_transform_classes_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz";
+ sha1 = "6e11dd6c4dfae70f540480a4702477ed766d733f";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_computed_properties___plugin_transform_computed_properties_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz";
+ sha1 = "59aa399064429d64dce5cf76ef9b90b7245ebd07";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_destructuring___plugin_transform_destructuring_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz";
+ sha1 = "abd58e51337815ca3a22a336b85f62b998e71907";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_dotall_regex___plugin_transform_dotall_regex_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz";
+ sha1 = "920b9fec2d78bb57ebb64a644d5c2ba67cc104ee";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_duplicate_keys___plugin_transform_duplicate_keys_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz";
+ sha1 = "c900a793beb096bc9d4d0a9d0cde19518ffc83b9";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_exponentiation_operator___plugin_transform_exponentiation_operator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz";
+ sha1 = "279c3116756a60dd6e6f5e488ba7957db9c59eb3";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_for_of___plugin_transform_for_of_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz";
+ sha1 = "ff01119784eb0ee32258e8646157ba2501fcfda5";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_function_name___plugin_transform_function_name_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz";
+ sha1 = "4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_literals___plugin_transform_literals_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz";
+ sha1 = "5794f8da82846b22e4e6631ea1658bce708eb46a";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_member_expression_literals___plugin_transform_member_expression_literals_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz";
+ sha1 = "90347cba31bca6f394b3f7bd95d2bbfd9fce2f39";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_modules_amd___plugin_transform_modules_amd_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz";
+ sha1 = "65950e8e05797ebd2fe532b96e19fc5482a1d52a";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_modules_commonjs___plugin_transform_modules_commonjs_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz";
+ sha1 = "d5ff4b4413ed97ffded99961056e1fb980fb9301";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_modules_systemjs___plugin_transform_modules_systemjs_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz";
+ sha1 = "9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_modules_umd___plugin_transform_modules_umd_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz";
+ sha1 = "ea080911ffc6eb21840a5197a39ede4ee67b1595";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_named_capturing_groups_regex___plugin_transform_named_capturing_groups_regex_7.8.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz";
+ sha1 = "a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_new_target___plugin_transform_new_target_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz";
+ sha1 = "6ee41a5e648da7632e22b6fb54012e87f612f324";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_object_super___plugin_transform_object_super_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz";
+ sha1 = "2e3016b0adbf262983bf0d5121d676a5ed9c4fde";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_parameters___plugin_transform_parameters_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz";
+ sha1 = "b25938a3c5fae0354144a720b07b32766f683ddd";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_property_literals___plugin_transform_property_literals_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz";
+ sha1 = "cffc7315219230ed81dc53e4625bf86815b6050d";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_regenerator___plugin_transform_regenerator_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz";
+ sha1 = "10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_reserved_words___plugin_transform_reserved_words_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz";
+ sha1 = "0fc1027312b4d1c3276a57890c8ae3bcc0b64a86";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_runtime___plugin_transform_runtime_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.1.tgz";
+ sha1 = "fd1887f749637fb2ed86dc278e79eb41df37f4b1";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_shorthand_properties___plugin_transform_shorthand_properties_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz";
+ sha1 = "e8b54f238a1ccbae482c4dce946180ae7b3143f3";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_spread___plugin_transform_spread_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz";
+ sha1 = "0c6d618a0c4461a274418460a28c9ccf5239a7c8";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_sticky_regex___plugin_transform_sticky_regex_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz";
+ sha1 = "90fc89b7526228bed9842cff3588270a7a393b00";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_template_literals___plugin_transform_template_literals_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz";
+ sha1 = "914c7b7f4752c570ea00553b4284dad8070e8628";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_typeof_symbol___plugin_transform_typeof_symbol_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz";
+ sha1 = "60c0239b69965d166b80a84de7315c1bc7e0bb0e";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_unicode_escapes___plugin_transform_unicode_escapes_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz";
+ sha1 = "add0f8483dab60570d9e03cecef6c023aa8c9940";
+ };
+ }
+ {
+ name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_plugin_transform_unicode_regex___plugin_transform_unicode_regex_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz";
+ sha1 = "6b58f2aea7b68df37ac5025d9c88752443a6b43f";
+ };
+ }
+ {
+ name = "_babel_preset_env___preset_env_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_preset_env___preset_env_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.2.tgz";
+ sha1 = "715930f2cf8573b0928005ee562bed52fb65fdfb";
+ };
+ }
+ {
+ name = "_babel_preset_modules___preset_modules_0.1.3.tgz";
+ path = fetchurl {
+ name = "_babel_preset_modules___preset_modules_0.1.3.tgz";
+ url = "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz";
+ sha1 = "13242b53b5ef8c883c3cf7dddd55b36ce80fbc72";
+ };
+ }
+ {
+ name = "_babel_runtime___runtime_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_runtime___runtime_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz";
+ sha1 = "d103f21f2602497d38348a32e008637d506db839";
+ };
+ }
+ {
+ name = "_babel_template___template_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_template___template_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz";
+ sha1 = "e167154a94cb5f14b28dc58f5356d2162f539811";
+ };
+ }
+ {
+ name = "_babel_traverse___traverse_7.10.1.tgz";
+ path = fetchurl {
+ name = "_babel_traverse___traverse_7.10.1.tgz";
+ url = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz";
+ sha1 = "bbcef3031e4152a6c0b50147f4958df54ca0dd27";
+ };
+ }
+ {
+ name = "_babel_types___types_7.10.2.tgz";
+ path = fetchurl {
+ name = "_babel_types___types_7.10.2.tgz";
+ url = "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz";
+ sha1 = "30283be31cad0dbf6fb00bd40641ca0ea675172d";
+ };
+ }
+ {
+ name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz";
+ path = fetchurl {
+ name = "_fortawesome_fontawesome_free___fontawesome_free_5.13.0.tgz";
+ url = "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz";
+ sha1 = "fcb113d1aca4b471b709e8c9c168674fbd6e06d9";
+ };
+ }
+ {
+ name = "_hapi_address___address_2.1.4.tgz";
+ path = fetchurl {
+ name = "_hapi_address___address_2.1.4.tgz";
+ url = "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz";
+ sha1 = "5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5";
+ };
+ }
+ {
+ name = "_hapi_bourne___bourne_1.3.2.tgz";
+ path = fetchurl {
+ name = "_hapi_bourne___bourne_1.3.2.tgz";
+ url = "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz";
+ sha1 = "0a7095adea067243ce3283e1b56b8a8f453b242a";
+ };
+ }
+ {
+ name = "_hapi_hoek___hoek_8.5.1.tgz";
+ path = fetchurl {
+ name = "_hapi_hoek___hoek_8.5.1.tgz";
+ url = "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz";
+ sha1 = "fde96064ca446dec8c55a8c2f130957b070c6e06";
+ };
+ }
+ {
+ name = "_hapi_joi___joi_15.1.1.tgz";
+ path = fetchurl {
+ name = "_hapi_joi___joi_15.1.1.tgz";
+ url = "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz";
+ sha1 = "c675b8a71296f02833f8d6d243b34c57b8ce19d7";
+ };
+ }
+ {
+ name = "_hapi_topo___topo_3.1.6.tgz";
+ path = fetchurl {
+ name = "_hapi_topo___topo_3.1.6.tgz";
+ url = "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz";
+ sha1 = "68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29";
+ };
+ }
+ {
+ name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz";
+ path = fetchurl {
+ name = "_intervolga_optimize_cssnano_plugin___optimize_cssnano_plugin_1.0.6.tgz";
+ url = "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz";
+ sha1 = "be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8";
+ };
+ }
+ {
+ name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz";
+ path = fetchurl {
+ name = "_mrmlnc_readdir_enhanced___readdir_enhanced_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz";
+ sha1 = "524af240d1a360527b730475ecfa1344aa540dde";
+ };
+ }
+ {
+ name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz";
+ path = fetchurl {
+ name = "_nodelib_fs.stat___fs.stat_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz";
+ sha1 = "2b5a3ab3f918cca48a8c754c08168e3f03eba61b";
+ };
+ }
+ {
+ name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz";
+ path = fetchurl {
+ name = "_soda_friendly_errors_webpack_plugin___friendly_errors_webpack_plugin_1.7.1.tgz";
+ url = "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz";
+ sha1 = "706f64bcb4a8b9642b48ae3ace444c70334d615d";
+ };
+ }
+ {
+ name = "_soda_get_current_script___get_current_script_1.0.1.tgz";
+ path = fetchurl {
+ name = "_soda_get_current_script___get_current_script_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/@soda/get-current-script/-/get-current-script-1.0.1.tgz";
+ sha1 = "f4afffcb36e069a801d5339c90499601c47a2516";
+ };
+ }
+ {
+ name = "_types_color_name___color_name_1.1.1.tgz";
+ path = fetchurl {
+ name = "_types_color_name___color_name_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz";
+ sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0";
+ };
+ }
+ {
+ name = "_types_glob___glob_7.1.2.tgz";
+ path = fetchurl {
+ name = "_types_glob___glob_7.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz";
+ sha1 = "06ca26521353a545d94a0adc74f38a59d232c987";
+ };
+ }
+ {
+ name = "_types_json_schema___json_schema_7.0.4.tgz";
+ path = fetchurl {
+ name = "_types_json_schema___json_schema_7.0.4.tgz";
+ url = "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz";
+ sha1 = "38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339";
+ };
+ }
+ {
+ name = "_types_minimatch___minimatch_3.0.3.tgz";
+ path = fetchurl {
+ name = "_types_minimatch___minimatch_3.0.3.tgz";
+ url = "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz";
+ sha1 = "3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d";
+ };
+ }
+ {
+ name = "_types_node___node_14.0.11.tgz";
+ path = fetchurl {
+ name = "_types_node___node_14.0.11.tgz";
+ url = "https://registry.yarnpkg.com/@types/node/-/node-14.0.11.tgz";
+ sha1 = "61d4886e2424da73b7b25547f59fdcb534c165a3";
+ };
+ }
+ {
+ name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz";
+ path = fetchurl {
+ name = "_types_normalize_package_data___normalize_package_data_2.4.0.tgz";
+ url = "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
+ sha1 = "e486d0d97396d79beedd0a6e33f4534ff6b4973e";
+ };
+ }
+ {
+ name = "_types_q___q_1.5.4.tgz";
+ path = fetchurl {
+ name = "_types_q___q_1.5.4.tgz";
+ url = "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz";
+ sha1 = "15925414e0ad2cd765bfef58842f7e26a7accb24";
+ };
+ }
+ {
+ name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz";
+ path = fetchurl {
+ name = "_vue_babel_helper_vue_jsx_merge_props___babel_helper_vue_jsx_merge_props_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz";
+ sha1 = "048fe579958da408fb7a8b2a3ec050b50a661040";
+ };
+ }
+ {
+ name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_plugin_transform_vue_jsx___babel_plugin_transform_vue_jsx_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz";
+ sha1 = "c0a3e6efc022e75e4247b448a8fc6b86f03e91c0";
+ };
+ }
+ {
+ name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_babel_preset_app___babel_preset_app_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.1.tgz";
+ sha1 = "97c6796183cd0abf96a17297dc335c4c702fd8c4";
+ };
+ }
+ {
+ name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_preset_jsx___babel_preset_jsx_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz";
+ sha1 = "2e169eb4c204ea37ca66c2ea85a880bfc99d4f20";
+ };
+ }
+ {
+ name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_sugar_functional_vue___babel_sugar_functional_vue_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz";
+ sha1 = "f7e24fba09e6f1ee70104560a8808057555f1a9a";
+ };
+ }
+ {
+ name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_sugar_inject_h___babel_sugar_inject_h_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz";
+ sha1 = "8a5276b6d8e2ed16ffc8078aad94236274e6edf0";
+ };
+ }
+ {
+ name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_sugar_v_model___babel_sugar_v_model_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz";
+ sha1 = "1ff6fd1b800223fc9cb1e84dceb5e52d737a8192";
+ };
+ }
+ {
+ name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_babel_sugar_v_on___babel_sugar_v_on_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz";
+ sha1 = "b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b";
+ };
+ }
+ {
+ name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_overlay___cli_overlay_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.1.tgz";
+ sha1 = "f1f51f31f7a00d371e9a5b5a941525184475bf8b";
+ };
+ }
+ {
+ name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_plugin_babel___cli_plugin_babel_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.1.tgz";
+ sha1 = "2c6e969fe51f1b4b211bea84afb7cad18240f70f";
+ };
+ }
+ {
+ name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_plugin_eslint___cli_plugin_eslint_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.1.tgz";
+ sha1 = "e39d6517da6de231195d227f995f495e2958a74a";
+ };
+ }
+ {
+ name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_plugin_pwa___cli_plugin_pwa_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.4.1.tgz";
+ sha1 = "e7bc010bc78cfaf74968c11fb332f3abc1ef298d";
+ };
+ }
+ {
+ name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_plugin_router___cli_plugin_router_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.1.tgz";
+ sha1 = "07d09df0f4bea816e637da814f578b808f1f93b2";
+ };
+ }
+ {
+ name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_plugin_vuex___cli_plugin_vuex_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.1.tgz";
+ sha1 = "98d18fc5d36fa6e0d1fc2ecaeea37aa965564f19";
+ };
+ }
+ {
+ name = "_vue_cli_service___cli_service_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_service___cli_service_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.1.tgz";
+ sha1 = "b26a435d8c953bc7efaf7b784c9835c1415bcf1c";
+ };
+ }
+ {
+ name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz";
+ path = fetchurl {
+ name = "_vue_cli_shared_utils___cli_shared_utils_4.4.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.1.tgz";
+ sha1 = "930304ade5a9f9bf0d2fd67d9305cad83d04aae1";
+ };
+ }
+ {
+ name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz";
+ path = fetchurl {
+ name = "_vue_component_compiler_utils___component_compiler_utils_3.1.2.tgz";
+ url = "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz";
+ sha1 = "8213a5ff3202f9f2137fe55370f9e8b9656081c3";
+ };
+ }
+ {
+ name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz";
+ path = fetchurl {
+ name = "_vue_eslint_config_prettier___eslint_config_prettier_6.0.0.tgz";
+ url = "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz";
+ sha1 = "ad5912b308f4ae468458e02a2b05db0b9d246700";
+ };
+ }
+ {
+ name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz";
+ path = fetchurl {
+ name = "_vue_preload_webpack_plugin___preload_webpack_plugin_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz";
+ sha1 = "18723530d304f443021da2292d6ec9502826104a";
+ };
+ }
+ {
+ name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz";
+ path = fetchurl {
+ name = "_vue_web_component_wrapper___web_component_wrapper_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz";
+ sha1 = "bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1";
+ };
+ }
+ {
+ name = "_webassemblyjs_ast___ast_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_ast___ast_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz";
+ sha1 = "bd850604b4042459a5a41cd7d338cbed695ed964";
+ };
+ }
+ {
+ name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_floating_point_hex_parser___floating_point_hex_parser_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz";
+ sha1 = "3c3d3b271bddfc84deb00f71344438311d52ffb4";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_api_error___helper_api_error_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz";
+ sha1 = "203f676e333b96c9da2eeab3ccef33c45928b6a2";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_buffer___helper_buffer_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz";
+ sha1 = "a1442d269c5feb23fcbc9ef759dac3547f29de00";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_code_frame___helper_code_frame_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz";
+ sha1 = "647f8892cd2043a82ac0c8c5e75c36f1d9159f27";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_fsm___helper_fsm_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz";
+ sha1 = "c05256b71244214671f4b08ec108ad63b70eddb8";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_module_context___helper_module_context_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz";
+ sha1 = "25d8884b76839871a08a6c6f806c3979ef712f07";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_wasm_bytecode___helper_wasm_bytecode_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz";
+ sha1 = "4fed8beac9b8c14f8c58b70d124d549dd1fe5790";
+ };
+ }
+ {
+ name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_helper_wasm_section___helper_wasm_section_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz";
+ sha1 = "5a4138d5a6292ba18b04c5ae49717e4167965346";
+ };
+ }
+ {
+ name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_ieee754___ieee754_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz";
+ sha1 = "15c7a0fbaae83fb26143bbacf6d6df1702ad39e4";
+ };
+ }
+ {
+ name = "_webassemblyjs_leb128___leb128_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_leb128___leb128_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz";
+ sha1 = "f19ca0b76a6dc55623a09cffa769e838fa1e1c95";
+ };
+ }
+ {
+ name = "_webassemblyjs_utf8___utf8_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_utf8___utf8_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz";
+ sha1 = "04d33b636f78e6a6813227e82402f7637b6229ab";
+ };
+ }
+ {
+ name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wasm_edit___wasm_edit_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz";
+ sha1 = "3fe6d79d3f0f922183aa86002c42dd256cfee9cf";
+ };
+ }
+ {
+ name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wasm_gen___wasm_gen_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz";
+ sha1 = "50bc70ec68ded8e2763b01a1418bf43491a7a49c";
+ };
+ }
+ {
+ name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wasm_opt___wasm_opt_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz";
+ sha1 = "2211181e5b31326443cc8112eb9f0b9028721a61";
+ };
+ }
+ {
+ name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wasm_parser___wasm_parser_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz";
+ sha1 = "9d48e44826df4a6598294aa6c87469d642fff65e";
+ };
+ }
+ {
+ name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wast_parser___wast_parser_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz";
+ sha1 = "3031115d79ac5bd261556cecc3fa90a3ef451914";
+ };
+ }
+ {
+ name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz";
+ path = fetchurl {
+ name = "_webassemblyjs_wast_printer___wast_printer_1.9.0.tgz";
+ url = "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz";
+ sha1 = "4935d54c85fef637b00ce9f52377451d00d47899";
+ };
+ }
+ {
+ name = "_xtuc_ieee754___ieee754_1.2.0.tgz";
+ path = fetchurl {
+ name = "_xtuc_ieee754___ieee754_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
+ sha1 = "eef014a3145ae477a1cbc00cd1e552336dceb790";
+ };
+ }
+ {
+ name = "_xtuc_long___long_4.2.2.tgz";
+ path = fetchurl {
+ name = "_xtuc_long___long_4.2.2.tgz";
+ url = "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz";
+ sha1 = "d291c6a4e97989b5c61d9acf396ae4fe133a718d";
+ };
+ }
+ {
+ name = "accepts___accepts_1.3.7.tgz";
+ path = fetchurl {
+ name = "accepts___accepts_1.3.7.tgz";
+ url = "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz";
+ sha1 = "531bc726517a3b2b41f850021c6cc15eaab507cd";
+ };
+ }
+ {
+ name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+ path = fetchurl {
+ name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+ url = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz";
+ sha1 = "4c66069173d6fdd68ed85239fc256226182b2ebe";
+ };
+ }
+ {
+ name = "acorn_walk___acorn_walk_7.1.1.tgz";
+ path = fetchurl {
+ name = "acorn_walk___acorn_walk_7.1.1.tgz";
+ url = "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz";
+ sha1 = "345f0dffad5c735e7373d2fec9a1023e6a44b83e";
+ };
+ }
+ {
+ name = "acorn___acorn_6.4.1.tgz";
+ path = fetchurl {
+ name = "acorn___acorn_6.4.1.tgz";
+ url = "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz";
+ sha1 = "531e58ba3f51b9dacb9a6646ca4debf5b14ca474";
+ };
+ }
+ {
+ name = "acorn___acorn_7.2.0.tgz";
+ path = fetchurl {
+ name = "acorn___acorn_7.2.0.tgz";
+ url = "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz";
+ sha1 = "17ea7e40d7c8640ff54a694c889c26f31704effe";
+ };
+ }
+ {
+ name = "address___address_1.1.2.tgz";
+ path = fetchurl {
+ name = "address___address_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz";
+ sha1 = "bf1116c9c758c51b7a933d296b72c221ed9428b6";
+ };
+ }
+ {
+ name = "aggregate_error___aggregate_error_3.0.1.tgz";
+ path = fetchurl {
+ name = "aggregate_error___aggregate_error_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz";
+ sha1 = "db2fe7246e536f40d9b5442a39e117d7dd6a24e0";
+ };
+ }
+ {
+ name = "ajv_errors___ajv_errors_1.0.1.tgz";
+ path = fetchurl {
+ name = "ajv_errors___ajv_errors_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz";
+ sha1 = "f35986aceb91afadec4102fbd85014950cefa64d";
+ };
+ }
+ {
+ name = "ajv_keywords___ajv_keywords_3.4.1.tgz";
+ path = fetchurl {
+ name = "ajv_keywords___ajv_keywords_3.4.1.tgz";
+ url = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz";
+ sha1 = "ef916e271c64ac12171fd8384eaae6b2345854da";
+ };
+ }
+ {
+ name = "ajv___ajv_6.12.2.tgz";
+ path = fetchurl {
+ name = "ajv___ajv_6.12.2.tgz";
+ url = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz";
+ sha1 = "c629c5eced17baf314437918d2da88c99d5958cd";
+ };
+ }
+ {
+ name = "alphanum_sort___alphanum_sort_1.0.2.tgz";
+ path = fetchurl {
+ name = "alphanum_sort___alphanum_sort_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz";
+ sha1 = "97a1119649b211ad33691d9f9f486a8ec9fbe0a3";
+ };
+ }
+ {
+ name = "ansi_colors___ansi_colors_3.2.4.tgz";
+ path = fetchurl {
+ name = "ansi_colors___ansi_colors_3.2.4.tgz";
+ url = "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz";
+ sha1 = "e3a3da4bfbae6c86a9c285625de124a234026fbf";
+ };
+ }
+ {
+ name = "ansi_escapes___ansi_escapes_4.3.1.tgz";
+ path = fetchurl {
+ name = "ansi_escapes___ansi_escapes_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz";
+ sha1 = "a5c47cc43181f1f38ffd7076837700d395522a61";
+ };
+ }
+ {
+ name = "ansi_html___ansi_html_0.0.7.tgz";
+ path = fetchurl {
+ name = "ansi_html___ansi_html_0.0.7.tgz";
+ url = "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz";
+ sha1 = "813584021962a9e9e6fd039f940d12f56ca7859e";
+ };
+ }
+ {
+ name = "ansi_regex___ansi_regex_2.1.1.tgz";
+ path = fetchurl {
+ name = "ansi_regex___ansi_regex_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz";
+ sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+ };
+ }
+ {
+ name = "ansi_regex___ansi_regex_3.0.0.tgz";
+ path = fetchurl {
+ name = "ansi_regex___ansi_regex_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz";
+ sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+ };
+ }
+ {
+ name = "ansi_regex___ansi_regex_4.1.0.tgz";
+ path = fetchurl {
+ name = "ansi_regex___ansi_regex_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz";
+ sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997";
+ };
+ }
+ {
+ name = "ansi_regex___ansi_regex_5.0.0.tgz";
+ path = fetchurl {
+ name = "ansi_regex___ansi_regex_5.0.0.tgz";
+ url = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz";
+ sha1 = "388539f55179bf39339c81af30a654d69f87cb75";
+ };
+ }
+ {
+ name = "ansi_styles___ansi_styles_2.2.1.tgz";
+ path = fetchurl {
+ name = "ansi_styles___ansi_styles_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz";
+ sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
+ };
+ }
+ {
+ name = "ansi_styles___ansi_styles_3.2.1.tgz";
+ path = fetchurl {
+ name = "ansi_styles___ansi_styles_3.2.1.tgz";
+ url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
+ sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d";
+ };
+ }
+ {
+ name = "ansi_styles___ansi_styles_4.2.1.tgz";
+ path = fetchurl {
+ name = "ansi_styles___ansi_styles_4.2.1.tgz";
+ url = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz";
+ sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359";
+ };
+ }
+ {
+ name = "any_promise___any_promise_1.3.0.tgz";
+ path = fetchurl {
+ name = "any_promise___any_promise_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz";
+ sha1 = "abc6afeedcea52e809cdc0376aed3ce39635d17f";
+ };
+ }
+ {
+ name = "anymatch___anymatch_2.0.0.tgz";
+ path = fetchurl {
+ name = "anymatch___anymatch_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz";
+ sha1 = "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb";
+ };
+ }
+ {
+ name = "anymatch___anymatch_3.1.1.tgz";
+ path = fetchurl {
+ name = "anymatch___anymatch_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz";
+ sha1 = "c55ecf02185e2469259399310c173ce31233b142";
+ };
+ }
+ {
+ name = "aproba___aproba_1.2.0.tgz";
+ path = fetchurl {
+ name = "aproba___aproba_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz";
+ sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a";
+ };
+ }
+ {
+ name = "arch___arch_2.1.2.tgz";
+ path = fetchurl {
+ name = "arch___arch_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz";
+ sha1 = "0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf";
+ };
+ }
+ {
+ name = "argparse___argparse_1.0.10.tgz";
+ path = fetchurl {
+ name = "argparse___argparse_1.0.10.tgz";
+ url = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz";
+ sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911";
+ };
+ }
+ {
+ name = "arr_diff___arr_diff_4.0.0.tgz";
+ path = fetchurl {
+ name = "arr_diff___arr_diff_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz";
+ sha1 = "d6461074febfec71e7e15235761a329a5dc7c520";
+ };
+ }
+ {
+ name = "arr_flatten___arr_flatten_1.1.0.tgz";
+ path = fetchurl {
+ name = "arr_flatten___arr_flatten_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz";
+ sha1 = "36048bbff4e7b47e136644316c99669ea5ae91f1";
+ };
+ }
+ {
+ name = "arr_union___arr_union_3.1.0.tgz";
+ path = fetchurl {
+ name = "arr_union___arr_union_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz";
+ sha1 = "e39b09aea9def866a8f206e288af63919bae39c4";
+ };
+ }
+ {
+ name = "array_flatten___array_flatten_1.1.1.tgz";
+ path = fetchurl {
+ name = "array_flatten___array_flatten_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz";
+ sha1 = "9a5f699051b1e7073328f2a008968b64ea2955d2";
+ };
+ }
+ {
+ name = "array_flatten___array_flatten_2.1.2.tgz";
+ path = fetchurl {
+ name = "array_flatten___array_flatten_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz";
+ sha1 = "24ef80a28c1a893617e2149b0c6d0d788293b099";
+ };
+ }
+ {
+ name = "array_union___array_union_1.0.2.tgz";
+ path = fetchurl {
+ name = "array_union___array_union_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz";
+ sha1 = "9a34410e4f4e3da23dea375be5be70f24778ec39";
+ };
+ }
+ {
+ name = "array_uniq___array_uniq_1.0.3.tgz";
+ path = fetchurl {
+ name = "array_uniq___array_uniq_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz";
+ sha1 = "af6ac877a25cc7f74e058894753858dfdb24fdb6";
+ };
+ }
+ {
+ name = "array_unique___array_unique_0.3.2.tgz";
+ path = fetchurl {
+ name = "array_unique___array_unique_0.3.2.tgz";
+ url = "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz";
+ sha1 = "a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428";
+ };
+ }
+ {
+ name = "asn1.js___asn1.js_4.10.1.tgz";
+ path = fetchurl {
+ name = "asn1.js___asn1.js_4.10.1.tgz";
+ url = "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz";
+ sha1 = "b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0";
+ };
+ }
+ {
+ name = "asn1___asn1_0.2.4.tgz";
+ path = fetchurl {
+ name = "asn1___asn1_0.2.4.tgz";
+ url = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz";
+ sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136";
+ };
+ }
+ {
+ name = "assert_plus___assert_plus_1.0.0.tgz";
+ path = fetchurl {
+ name = "assert_plus___assert_plus_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz";
+ sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+ };
+ }
+ {
+ name = "assert___assert_1.5.0.tgz";
+ path = fetchurl {
+ name = "assert___assert_1.5.0.tgz";
+ url = "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz";
+ sha1 = "55c109aaf6e0aefdb3dc4b71240c70bf574b18eb";
+ };
+ }
+ {
+ name = "assign_symbols___assign_symbols_1.0.0.tgz";
+ path = fetchurl {
+ name = "assign_symbols___assign_symbols_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz";
+ sha1 = "59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367";
+ };
+ }
+ {
+ name = "astral_regex___astral_regex_1.0.0.tgz";
+ path = fetchurl {
+ name = "astral_regex___astral_regex_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz";
+ sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9";
+ };
+ }
+ {
+ name = "async_each___async_each_1.0.3.tgz";
+ path = fetchurl {
+ name = "async_each___async_each_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz";
+ sha1 = "b727dbf87d7651602f06f4d4ac387f47d91b0cbf";
+ };
+ }
+ {
+ name = "async_limiter___async_limiter_1.0.1.tgz";
+ path = fetchurl {
+ name = "async_limiter___async_limiter_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz";
+ sha1 = "dd379e94f0db8310b08291f9d64c3209766617fd";
+ };
+ }
+ {
+ name = "async___async_2.6.3.tgz";
+ path = fetchurl {
+ name = "async___async_2.6.3.tgz";
+ url = "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz";
+ sha1 = "d72625e2344a3656e3a3ad4fa749fa83299d82ff";
+ };
+ }
+ {
+ name = "asynckit___asynckit_0.4.0.tgz";
+ path = fetchurl {
+ name = "asynckit___asynckit_0.4.0.tgz";
+ url = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz";
+ sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+ };
+ }
+ {
+ name = "atob___atob_2.1.2.tgz";
+ path = fetchurl {
+ name = "atob___atob_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz";
+ sha1 = "6d9517eb9e030d2436666651e86bd9f6f13533c9";
+ };
+ }
+ {
+ name = "autoprefixer___autoprefixer_9.8.0.tgz";
+ path = fetchurl {
+ name = "autoprefixer___autoprefixer_9.8.0.tgz";
+ url = "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz";
+ sha1 = "68e2d2bef7ba4c3a65436f662d0a56a741e56511";
+ };
+ }
+ {
+ name = "aws_sign2___aws_sign2_0.7.0.tgz";
+ path = fetchurl {
+ name = "aws_sign2___aws_sign2_0.7.0.tgz";
+ url = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz";
+ sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+ };
+ }
+ {
+ name = "aws4___aws4_1.10.0.tgz";
+ path = fetchurl {
+ name = "aws4___aws4_1.10.0.tgz";
+ url = "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz";
+ sha1 = "a17b3a8ea811060e74d47d306122400ad4497ae2";
+ };
+ }
+ {
+ name = "babel_eslint___babel_eslint_10.1.0.tgz";
+ path = fetchurl {
+ name = "babel_eslint___babel_eslint_10.1.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz";
+ sha1 = "6968e568a910b78fb3779cdd8b6ac2f479943232";
+ };
+ }
+ {
+ name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz";
+ path = fetchurl {
+ name = "babel_extract_comments___babel_extract_comments_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz";
+ sha1 = "0a2aedf81417ed391b85e18b4614e693a0351a21";
+ };
+ }
+ {
+ name = "babel_loader___babel_loader_8.1.0.tgz";
+ path = fetchurl {
+ name = "babel_loader___babel_loader_8.1.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz";
+ sha1 = "c611d5112bd5209abe8b9fa84c3e4da25275f1c3";
+ };
+ }
+ {
+ name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz";
+ path = fetchurl {
+ name = "babel_plugin_dynamic_import_node___babel_plugin_dynamic_import_node_2.3.3.tgz";
+ url = "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz";
+ sha1 = "84fda19c976ec5c6defef57f9427b3def66e17a3";
+ };
+ }
+ {
+ name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz";
+ path = fetchurl {
+ name = "babel_plugin_syntax_object_rest_spread___babel_plugin_syntax_object_rest_spread_6.13.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz";
+ sha1 = "fd6536f2bce13836ffa3a5458c4903a597bb3bf5";
+ };
+ }
+ {
+ name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz";
+ path = fetchurl {
+ name = "babel_plugin_transform_object_rest_spread___babel_plugin_transform_object_rest_spread_6.26.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz";
+ sha1 = "0f36692d50fef6b7e2d4b3ac1478137a963b7b06";
+ };
+ }
+ {
+ name = "babel_runtime___babel_runtime_6.26.0.tgz";
+ path = fetchurl {
+ name = "babel_runtime___babel_runtime_6.26.0.tgz";
+ url = "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz";
+ sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
+ };
+ }
+ {
+ name = "babylon___babylon_6.18.0.tgz";
+ path = fetchurl {
+ name = "babylon___babylon_6.18.0.tgz";
+ url = "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz";
+ sha1 = "af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3";
+ };
+ }
+ {
+ name = "balanced_match___balanced_match_1.0.0.tgz";
+ path = fetchurl {
+ name = "balanced_match___balanced_match_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
+ sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+ };
+ }
+ {
+ name = "base64_js___base64_js_1.3.1.tgz";
+ path = fetchurl {
+ name = "base64_js___base64_js_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz";
+ sha1 = "58ece8cb75dd07e71ed08c736abc5fac4dbf8df1";
+ };
+ }
+ {
+ name = "base___base_0.11.2.tgz";
+ path = fetchurl {
+ name = "base___base_0.11.2.tgz";
+ url = "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz";
+ sha1 = "7bde5ced145b6d551a90db87f83c558b4eb48a8f";
+ };
+ }
+ {
+ name = "batch___batch_0.6.1.tgz";
+ path = fetchurl {
+ name = "batch___batch_0.6.1.tgz";
+ url = "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz";
+ sha1 = "dc34314f4e679318093fc760272525f94bf25c16";
+ };
+ }
+ {
+ name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
+ path = fetchurl {
+ name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+ sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+ };
+ }
+ {
+ name = "bfj___bfj_6.1.2.tgz";
+ path = fetchurl {
+ name = "bfj___bfj_6.1.2.tgz";
+ url = "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz";
+ sha1 = "325c861a822bcb358a41c78a33b8e6e2086dde7f";
+ };
+ }
+ {
+ name = "big.js___big.js_3.2.0.tgz";
+ path = fetchurl {
+ name = "big.js___big.js_3.2.0.tgz";
+ url = "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz";
+ sha1 = "a5fc298b81b9e0dca2e458824784b65c52ba588e";
+ };
+ }
+ {
+ name = "big.js___big.js_5.2.2.tgz";
+ path = fetchurl {
+ name = "big.js___big.js_5.2.2.tgz";
+ url = "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz";
+ sha1 = "65f0af382f578bcdc742bd9c281e9cb2d7768328";
+ };
+ }
+ {
+ name = "binary_extensions___binary_extensions_1.13.1.tgz";
+ path = fetchurl {
+ name = "binary_extensions___binary_extensions_1.13.1.tgz";
+ url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz";
+ sha1 = "598afe54755b2868a5330d2aff9d4ebb53209b65";
+ };
+ }
+ {
+ name = "binary_extensions___binary_extensions_2.0.0.tgz";
+ path = fetchurl {
+ name = "binary_extensions___binary_extensions_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz";
+ sha1 = "23c0df14f6a88077f5f986c0d167ec03c3d5537c";
+ };
+ }
+ {
+ name = "bindings___bindings_1.5.0.tgz";
+ path = fetchurl {
+ name = "bindings___bindings_1.5.0.tgz";
+ url = "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz";
+ sha1 = "10353c9e945334bc0511a6d90b38fbc7c9c504df";
+ };
+ }
+ {
+ name = "bluebird___bluebird_3.7.2.tgz";
+ path = fetchurl {
+ name = "bluebird___bluebird_3.7.2.tgz";
+ url = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz";
+ sha1 = "9f229c15be272454ffa973ace0dbee79a1b0c36f";
+ };
+ }
+ {
+ name = "bn.js___bn.js_4.11.9.tgz";
+ path = fetchurl {
+ name = "bn.js___bn.js_4.11.9.tgz";
+ url = "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz";
+ sha1 = "26d556829458f9d1e81fc48952493d0ba3507828";
+ };
+ }
+ {
+ name = "bn.js___bn.js_5.1.2.tgz";
+ path = fetchurl {
+ name = "bn.js___bn.js_5.1.2.tgz";
+ url = "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz";
+ sha1 = "c9686902d3c9a27729f43ab10f9d79c2004da7b0";
+ };
+ }
+ {
+ name = "body_parser___body_parser_1.19.0.tgz";
+ path = fetchurl {
+ name = "body_parser___body_parser_1.19.0.tgz";
+ url = "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz";
+ sha1 = "96b2709e57c9c4e09a6fd66a8fd979844f69f08a";
+ };
+ }
+ {
+ name = "bonjour___bonjour_3.5.0.tgz";
+ path = fetchurl {
+ name = "bonjour___bonjour_3.5.0.tgz";
+ url = "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz";
+ sha1 = "8e890a183d8ee9a2393b3844c691a42bcf7bc9f5";
+ };
+ }
+ {
+ name = "boolbase___boolbase_1.0.0.tgz";
+ path = fetchurl {
+ name = "boolbase___boolbase_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz";
+ sha1 = "68dff5fbe60c51eb37725ea9e3ed310dcc1e776e";
+ };
+ }
+ {
+ name = "brace_expansion___brace_expansion_1.1.11.tgz";
+ path = fetchurl {
+ name = "brace_expansion___brace_expansion_1.1.11.tgz";
+ url = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
+ sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd";
+ };
+ }
+ {
+ name = "braces___braces_2.3.2.tgz";
+ path = fetchurl {
+ name = "braces___braces_2.3.2.tgz";
+ url = "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz";
+ sha1 = "5979fd3f14cd531565e5fa2df1abfff1dfaee729";
+ };
+ }
+ {
+ name = "braces___braces_3.0.2.tgz";
+ path = fetchurl {
+ name = "braces___braces_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz";
+ sha1 = "3454e1a462ee8d599e236df336cd9ea4f8afe107";
+ };
+ }
+ {
+ name = "brorand___brorand_1.1.0.tgz";
+ path = fetchurl {
+ name = "brorand___brorand_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz";
+ sha1 = "12c25efe40a45e3c323eb8675a0a0ce57b22371f";
+ };
+ }
+ {
+ name = "browserify_aes___browserify_aes_1.2.0.tgz";
+ path = fetchurl {
+ name = "browserify_aes___browserify_aes_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz";
+ sha1 = "326734642f403dabc3003209853bb70ad428ef48";
+ };
+ }
+ {
+ name = "browserify_cipher___browserify_cipher_1.0.1.tgz";
+ path = fetchurl {
+ name = "browserify_cipher___browserify_cipher_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz";
+ sha1 = "8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0";
+ };
+ }
+ {
+ name = "browserify_des___browserify_des_1.0.2.tgz";
+ path = fetchurl {
+ name = "browserify_des___browserify_des_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz";
+ sha1 = "3af4f1f59839403572f1c66204375f7a7f703e9c";
+ };
+ }
+ {
+ name = "browserify_rsa___browserify_rsa_4.0.1.tgz";
+ path = fetchurl {
+ name = "browserify_rsa___browserify_rsa_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz";
+ sha1 = "21e0abfaf6f2029cf2fafb133567a701d4135524";
+ };
+ }
+ {
+ name = "browserify_sign___browserify_sign_4.2.0.tgz";
+ path = fetchurl {
+ name = "browserify_sign___browserify_sign_4.2.0.tgz";
+ url = "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz";
+ sha1 = "545d0b1b07e6b2c99211082bf1b12cce7a0b0e11";
+ };
+ }
+ {
+ name = "browserify_zlib___browserify_zlib_0.2.0.tgz";
+ path = fetchurl {
+ name = "browserify_zlib___browserify_zlib_0.2.0.tgz";
+ url = "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz";
+ sha1 = "2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f";
+ };
+ }
+ {
+ name = "browserslist___browserslist_4.12.0.tgz";
+ path = fetchurl {
+ name = "browserslist___browserslist_4.12.0.tgz";
+ url = "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz";
+ sha1 = "06c6d5715a1ede6c51fc39ff67fd647f740b656d";
+ };
+ }
+ {
+ name = "buffer_from___buffer_from_1.1.1.tgz";
+ path = fetchurl {
+ name = "buffer_from___buffer_from_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz";
+ sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef";
+ };
+ }
+ {
+ name = "buffer_indexof___buffer_indexof_1.1.1.tgz";
+ path = fetchurl {
+ name = "buffer_indexof___buffer_indexof_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz";
+ sha1 = "52fabcc6a606d1a00302802648ef68f639da268c";
+ };
+ }
+ {
+ name = "buffer_json___buffer_json_2.0.0.tgz";
+ path = fetchurl {
+ name = "buffer_json___buffer_json_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz";
+ sha1 = "f73e13b1e42f196fe2fd67d001c7d7107edd7c23";
+ };
+ }
+ {
+ name = "buffer_xor___buffer_xor_1.0.3.tgz";
+ path = fetchurl {
+ name = "buffer_xor___buffer_xor_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz";
+ sha1 = "26e61ed1422fb70dd42e6e36729ed51d855fe8d9";
+ };
+ }
+ {
+ name = "buffer___buffer_4.9.2.tgz";
+ path = fetchurl {
+ name = "buffer___buffer_4.9.2.tgz";
+ url = "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz";
+ sha1 = "230ead344002988644841ab0244af8c44bbe3ef8";
+ };
+ }
+ {
+ name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz";
+ path = fetchurl {
+ name = "builtin_status_codes___builtin_status_codes_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz";
+ sha1 = "85982878e21b98e1c66425e03d0174788f569ee8";
+ };
+ }
+ {
+ name = "bulma___bulma_0.8.2.tgz";
+ path = fetchurl {
+ name = "bulma___bulma_0.8.2.tgz";
+ url = "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz";
+ sha1 = "5d928f16ed4a84549c2873f95c92c38c69c631a7";
+ };
+ }
+ {
+ name = "bytes___bytes_3.0.0.tgz";
+ path = fetchurl {
+ name = "bytes___bytes_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz";
+ sha1 = "d32815404d689699f85a4ea4fa8755dd13a96048";
+ };
+ }
+ {
+ name = "bytes___bytes_3.1.0.tgz";
+ path = fetchurl {
+ name = "bytes___bytes_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz";
+ sha1 = "f6cf7933a360e0588fa9fde85651cdc7f805d1f6";
+ };
+ }
+ {
+ name = "cacache___cacache_12.0.4.tgz";
+ path = fetchurl {
+ name = "cacache___cacache_12.0.4.tgz";
+ url = "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz";
+ sha1 = "668bcbd105aeb5f1d92fe25570ec9525c8faa40c";
+ };
+ }
+ {
+ name = "cacache___cacache_13.0.1.tgz";
+ path = fetchurl {
+ name = "cacache___cacache_13.0.1.tgz";
+ url = "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz";
+ sha1 = "a8000c21697089082f85287a1aec6e382024a71c";
+ };
+ }
+ {
+ name = "cache_base___cache_base_1.0.1.tgz";
+ path = fetchurl {
+ name = "cache_base___cache_base_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz";
+ sha1 = "0a7f46416831c8b662ee36fe4e7c59d76f666ab2";
+ };
+ }
+ {
+ name = "cache_loader___cache_loader_4.1.0.tgz";
+ path = fetchurl {
+ name = "cache_loader___cache_loader_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz";
+ sha1 = "9948cae353aec0a1fcb1eafda2300816ec85387e";
+ };
+ }
+ {
+ name = "call_me_maybe___call_me_maybe_1.0.1.tgz";
+ path = fetchurl {
+ name = "call_me_maybe___call_me_maybe_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz";
+ sha1 = "26d208ea89e37b5cbde60250a15f031c16a4d66b";
+ };
+ }
+ {
+ name = "caller_callsite___caller_callsite_2.0.0.tgz";
+ path = fetchurl {
+ name = "caller_callsite___caller_callsite_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz";
+ sha1 = "847e0fce0a223750a9a027c54b33731ad3154134";
+ };
+ }
+ {
+ name = "caller_path___caller_path_2.0.0.tgz";
+ path = fetchurl {
+ name = "caller_path___caller_path_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz";
+ sha1 = "468f83044e369ab2010fac5f06ceee15bb2cb1f4";
+ };
+ }
+ {
+ name = "callsites___callsites_2.0.0.tgz";
+ path = fetchurl {
+ name = "callsites___callsites_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz";
+ sha1 = "06eb84f00eea413da86affefacbffb36093b3c50";
+ };
+ }
+ {
+ name = "callsites___callsites_3.1.0.tgz";
+ path = fetchurl {
+ name = "callsites___callsites_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz";
+ sha1 = "b3630abd8943432f54b3f0519238e33cd7df2f73";
+ };
+ }
+ {
+ name = "camel_case___camel_case_3.0.0.tgz";
+ path = fetchurl {
+ name = "camel_case___camel_case_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz";
+ sha1 = "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73";
+ };
+ }
+ {
+ name = "camelcase___camelcase_5.3.1.tgz";
+ path = fetchurl {
+ name = "camelcase___camelcase_5.3.1.tgz";
+ url = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz";
+ sha1 = "e3c9b31569e106811df242f715725a1f4c494320";
+ };
+ }
+ {
+ name = "caniuse_api___caniuse_api_3.0.0.tgz";
+ path = fetchurl {
+ name = "caniuse_api___caniuse_api_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz";
+ sha1 = "5e4d90e2274961d46291997df599e3ed008ee4c0";
+ };
+ }
+ {
+ name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz";
+ path = fetchurl {
+ name = "caniuse_lite___caniuse_lite_1.0.30001078.tgz";
+ url = "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001078.tgz";
+ sha1 = "e1b6e2ae327b6a1ec11f65ec7a0dde1e7093074c";
+ };
+ }
+ {
+ name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz";
+ path = fetchurl {
+ name = "case_sensitive_paths_webpack_plugin___case_sensitive_paths_webpack_plugin_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz";
+ sha1 = "23ac613cc9a856e4f88ff8bb73bbb5e989825cf7";
+ };
+ }
+ {
+ name = "caseless___caseless_0.12.0.tgz";
+ path = fetchurl {
+ name = "caseless___caseless_0.12.0.tgz";
+ url = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz";
+ sha1 = "1b681c21ff84033c826543090689420d187151dc";
+ };
+ }
+ {
+ name = "chalk___chalk_1.1.3.tgz";
+ path = fetchurl {
+ name = "chalk___chalk_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz";
+ sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
+ };
+ }
+ {
+ name = "chalk___chalk_2.4.2.tgz";
+ path = fetchurl {
+ name = "chalk___chalk_2.4.2.tgz";
+ url = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz";
+ sha1 = "cd42541677a54333cf541a49108c1432b44c9424";
+ };
+ }
+ {
+ name = "chalk___chalk_3.0.0.tgz";
+ path = fetchurl {
+ name = "chalk___chalk_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz";
+ sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4";
+ };
+ }
+ {
+ name = "chalk___chalk_4.0.0.tgz";
+ path = fetchurl {
+ name = "chalk___chalk_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz";
+ sha1 = "6e98081ed2d17faab615eb52ac66ec1fe6209e72";
+ };
+ }
+ {
+ name = "chardet___chardet_0.7.0.tgz";
+ path = fetchurl {
+ name = "chardet___chardet_0.7.0.tgz";
+ url = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz";
+ sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e";
+ };
+ }
+ {
+ name = "check_types___check_types_8.0.3.tgz";
+ path = fetchurl {
+ name = "check_types___check_types_8.0.3.tgz";
+ url = "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz";
+ sha1 = "3356cca19c889544f2d7a95ed49ce508a0ecf552";
+ };
+ }
+ {
+ name = "chokidar___chokidar_3.4.0.tgz";
+ path = fetchurl {
+ name = "chokidar___chokidar_3.4.0.tgz";
+ url = "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz";
+ sha1 = "b30611423ce376357c765b9b8f904b9fba3c0be8";
+ };
+ }
+ {
+ name = "chokidar___chokidar_2.1.8.tgz";
+ path = fetchurl {
+ name = "chokidar___chokidar_2.1.8.tgz";
+ url = "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz";
+ sha1 = "804b3a7b6a99358c3c5c61e71d8728f041cff917";
+ };
+ }
+ {
+ name = "chownr___chownr_1.1.4.tgz";
+ path = fetchurl {
+ name = "chownr___chownr_1.1.4.tgz";
+ url = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz";
+ sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b";
+ };
+ }
+ {
+ name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz";
+ path = fetchurl {
+ name = "chrome_trace_event___chrome_trace_event_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz";
+ sha1 = "234090ee97c7d4ad1a2c4beae27505deffc608a4";
+ };
+ }
+ {
+ name = "ci_info___ci_info_1.6.0.tgz";
+ path = fetchurl {
+ name = "ci_info___ci_info_1.6.0.tgz";
+ url = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz";
+ sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497";
+ };
+ }
+ {
+ name = "cipher_base___cipher_base_1.0.4.tgz";
+ path = fetchurl {
+ name = "cipher_base___cipher_base_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz";
+ sha1 = "8760e4ecc272f4c363532f926d874aae2c1397de";
+ };
+ }
+ {
+ name = "class_utils___class_utils_0.3.6.tgz";
+ path = fetchurl {
+ name = "class_utils___class_utils_0.3.6.tgz";
+ url = "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz";
+ sha1 = "f93369ae8b9a7ce02fd41faad0ca83033190c463";
+ };
+ }
+ {
+ name = "clean_css___clean_css_4.2.3.tgz";
+ path = fetchurl {
+ name = "clean_css___clean_css_4.2.3.tgz";
+ url = "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz";
+ sha1 = "507b5de7d97b48ee53d84adb0160ff6216380f78";
+ };
+ }
+ {
+ name = "clean_stack___clean_stack_2.2.0.tgz";
+ path = fetchurl {
+ name = "clean_stack___clean_stack_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz";
+ sha1 = "ee8472dbb129e727b31e8a10a427dee9dfe4008b";
+ };
+ }
+ {
+ name = "cli_cursor___cli_cursor_2.1.0.tgz";
+ path = fetchurl {
+ name = "cli_cursor___cli_cursor_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz";
+ sha1 = "b35dac376479facc3e94747d41d0d0f5238ffcb5";
+ };
+ }
+ {
+ name = "cli_cursor___cli_cursor_3.1.0.tgz";
+ path = fetchurl {
+ name = "cli_cursor___cli_cursor_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz";
+ sha1 = "264305a7ae490d1d03bf0c9ba7c925d1753af307";
+ };
+ }
+ {
+ name = "cli_highlight___cli_highlight_2.1.4.tgz";
+ path = fetchurl {
+ name = "cli_highlight___cli_highlight_2.1.4.tgz";
+ url = "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz";
+ sha1 = "098cb642cf17f42adc1c1145e07f960ec4d7522b";
+ };
+ }
+ {
+ name = "cli_spinners___cli_spinners_2.3.0.tgz";
+ path = fetchurl {
+ name = "cli_spinners___cli_spinners_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz";
+ sha1 = "0632239a4b5aa4c958610142c34bb7a651fc8df5";
+ };
+ }
+ {
+ name = "cli_width___cli_width_2.2.1.tgz";
+ path = fetchurl {
+ name = "cli_width___cli_width_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz";
+ sha1 = "b0433d0b4e9c847ef18868a4ef16fd5fc8271c48";
+ };
+ }
+ {
+ name = "clipboardy___clipboardy_2.3.0.tgz";
+ path = fetchurl {
+ name = "clipboardy___clipboardy_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz";
+ sha1 = "3c2903650c68e46a91b388985bc2774287dba290";
+ };
+ }
+ {
+ name = "cliui___cliui_5.0.0.tgz";
+ path = fetchurl {
+ name = "cliui___cliui_5.0.0.tgz";
+ url = "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz";
+ sha1 = "deefcfdb2e800784aa34f46fa08e06851c7bbbc5";
+ };
+ }
+ {
+ name = "cliui___cliui_6.0.0.tgz";
+ path = fetchurl {
+ name = "cliui___cliui_6.0.0.tgz";
+ url = "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz";
+ sha1 = "511d702c0c4e41ca156d7d0e96021f23e13225b1";
+ };
+ }
+ {
+ name = "clone_deep___clone_deep_4.0.1.tgz";
+ path = fetchurl {
+ name = "clone_deep___clone_deep_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz";
+ sha1 = "c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387";
+ };
+ }
+ {
+ name = "clone___clone_1.0.4.tgz";
+ path = fetchurl {
+ name = "clone___clone_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz";
+ sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
+ };
+ }
+ {
+ name = "coa___coa_2.0.2.tgz";
+ path = fetchurl {
+ name = "coa___coa_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz";
+ sha1 = "43f6c21151b4ef2bf57187db0d73de229e3e7ec3";
+ };
+ }
+ {
+ name = "collection_visit___collection_visit_1.0.0.tgz";
+ path = fetchurl {
+ name = "collection_visit___collection_visit_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz";
+ sha1 = "4bc0373c164bc3291b4d368c829cf1a80a59dca0";
+ };
+ }
+ {
+ name = "color_convert___color_convert_1.9.3.tgz";
+ path = fetchurl {
+ name = "color_convert___color_convert_1.9.3.tgz";
+ url = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz";
+ sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8";
+ };
+ }
+ {
+ name = "color_convert___color_convert_2.0.1.tgz";
+ path = fetchurl {
+ name = "color_convert___color_convert_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz";
+ sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3";
+ };
+ }
+ {
+ name = "color_name___color_name_1.1.3.tgz";
+ path = fetchurl {
+ name = "color_name___color_name_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
+ sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+ };
+ }
+ {
+ name = "color_name___color_name_1.1.4.tgz";
+ path = fetchurl {
+ name = "color_name___color_name_1.1.4.tgz";
+ url = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz";
+ sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2";
+ };
+ }
+ {
+ name = "color_string___color_string_1.5.3.tgz";
+ path = fetchurl {
+ name = "color_string___color_string_1.5.3.tgz";
+ url = "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz";
+ sha1 = "c9bbc5f01b58b5492f3d6857459cb6590ce204cc";
+ };
+ }
+ {
+ name = "color___color_3.1.2.tgz";
+ path = fetchurl {
+ name = "color___color_3.1.2.tgz";
+ url = "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz";
+ sha1 = "68148e7f85d41ad7649c5fa8c8106f098d229e10";
+ };
+ }
+ {
+ name = "combined_stream___combined_stream_1.0.8.tgz";
+ path = fetchurl {
+ name = "combined_stream___combined_stream_1.0.8.tgz";
+ url = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz";
+ sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f";
+ };
+ }
+ {
+ name = "commander___commander_2.17.1.tgz";
+ path = fetchurl {
+ name = "commander___commander_2.17.1.tgz";
+ url = "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz";
+ sha1 = "bd77ab7de6de94205ceacc72f1716d29f20a77bf";
+ };
+ }
+ {
+ name = "commander___commander_2.20.3.tgz";
+ path = fetchurl {
+ name = "commander___commander_2.20.3.tgz";
+ url = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz";
+ sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33";
+ };
+ }
+ {
+ name = "commander___commander_2.19.0.tgz";
+ path = fetchurl {
+ name = "commander___commander_2.19.0.tgz";
+ url = "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz";
+ sha1 = "f6198aa84e5b83c46054b94ddedbfed5ee9ff12a";
+ };
+ }
+ {
+ name = "common_tags___common_tags_1.8.0.tgz";
+ path = fetchurl {
+ name = "common_tags___common_tags_1.8.0.tgz";
+ url = "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz";
+ sha1 = "8e3153e542d4a39e9b10554434afaaf98956a937";
+ };
+ }
+ {
+ name = "commondir___commondir_1.0.1.tgz";
+ path = fetchurl {
+ name = "commondir___commondir_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz";
+ sha1 = "ddd800da0c66127393cca5950ea968a3aaf1253b";
+ };
+ }
+ {
+ name = "component_emitter___component_emitter_1.3.0.tgz";
+ path = fetchurl {
+ name = "component_emitter___component_emitter_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz";
+ sha1 = "16e4070fba8ae29b679f2215853ee181ab2eabc0";
+ };
+ }
+ {
+ name = "compressible___compressible_2.0.18.tgz";
+ path = fetchurl {
+ name = "compressible___compressible_2.0.18.tgz";
+ url = "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz";
+ sha1 = "af53cca6b070d4c3c0750fbd77286a6d7cc46fba";
+ };
+ }
+ {
+ name = "compression___compression_1.7.4.tgz";
+ path = fetchurl {
+ name = "compression___compression_1.7.4.tgz";
+ url = "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz";
+ sha1 = "95523eff170ca57c29a0ca41e6fe131f41e5bb8f";
+ };
+ }
+ {
+ name = "concat_map___concat_map_0.0.1.tgz";
+ path = fetchurl {
+ name = "concat_map___concat_map_0.0.1.tgz";
+ url = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
+ sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+ };
+ }
+ {
+ name = "concat_stream___concat_stream_1.6.2.tgz";
+ path = fetchurl {
+ name = "concat_stream___concat_stream_1.6.2.tgz";
+ url = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz";
+ sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34";
+ };
+ }
+ {
+ name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz";
+ path = fetchurl {
+ name = "connect_history_api_fallback___connect_history_api_fallback_1.6.0.tgz";
+ url = "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz";
+ sha1 = "8b32089359308d111115d81cad3fceab888f97bc";
+ };
+ }
+ {
+ name = "console_browserify___console_browserify_1.2.0.tgz";
+ path = fetchurl {
+ name = "console_browserify___console_browserify_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz";
+ sha1 = "67063cef57ceb6cf4993a2ab3a55840ae8c49336";
+ };
+ }
+ {
+ name = "consolidate___consolidate_0.15.1.tgz";
+ path = fetchurl {
+ name = "consolidate___consolidate_0.15.1.tgz";
+ url = "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz";
+ sha1 = "21ab043235c71a07d45d9aad98593b0dba56bab7";
+ };
+ }
+ {
+ name = "constants_browserify___constants_browserify_1.0.0.tgz";
+ path = fetchurl {
+ name = "constants_browserify___constants_browserify_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz";
+ sha1 = "c20b96d8c617748aaf1c16021760cd27fcb8cb75";
+ };
+ }
+ {
+ name = "content_disposition___content_disposition_0.5.3.tgz";
+ path = fetchurl {
+ name = "content_disposition___content_disposition_0.5.3.tgz";
+ url = "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz";
+ sha1 = "e130caf7e7279087c5616c2007d0485698984fbd";
+ };
+ }
+ {
+ name = "content_type___content_type_1.0.4.tgz";
+ path = fetchurl {
+ name = "content_type___content_type_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz";
+ sha1 = "e138cc75e040c727b1966fe5e5f8c9aee256fe3b";
+ };
+ }
+ {
+ name = "convert_source_map___convert_source_map_1.7.0.tgz";
+ path = fetchurl {
+ name = "convert_source_map___convert_source_map_1.7.0.tgz";
+ url = "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz";
+ sha1 = "17a2cb882d7f77d3490585e2ce6c524424a3a442";
+ };
+ }
+ {
+ name = "cookie_signature___cookie_signature_1.0.6.tgz";
+ path = fetchurl {
+ name = "cookie_signature___cookie_signature_1.0.6.tgz";
+ url = "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz";
+ sha1 = "e303a882b342cc3ee8ca513a79999734dab3ae2c";
+ };
+ }
+ {
+ name = "cookie___cookie_0.4.0.tgz";
+ path = fetchurl {
+ name = "cookie___cookie_0.4.0.tgz";
+ url = "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz";
+ sha1 = "beb437e7022b3b6d49019d088665303ebe9c14ba";
+ };
+ }
+ {
+ name = "copy_concurrently___copy_concurrently_1.0.5.tgz";
+ path = fetchurl {
+ name = "copy_concurrently___copy_concurrently_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz";
+ sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0";
+ };
+ }
+ {
+ name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+ path = fetchurl {
+ name = "copy_descriptor___copy_descriptor_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz";
+ sha1 = "676f6eb3c39997c2ee1ac3a924fd6124748f578d";
+ };
+ }
+ {
+ name = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz";
+ path = fetchurl {
+ name = "copy_webpack_plugin___copy_webpack_plugin_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz";
+ sha1 = "5481a03dea1123d88a988c6ff8b78247214f0b88";
+ };
+ }
+ {
+ name = "core_js_compat___core_js_compat_3.6.5.tgz";
+ path = fetchurl {
+ name = "core_js_compat___core_js_compat_3.6.5.tgz";
+ url = "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz";
+ sha1 = "2a51d9a4e25dfd6e690251aa81f99e3c05481f1c";
+ };
+ }
+ {
+ name = "core_js___core_js_2.6.11.tgz";
+ path = fetchurl {
+ name = "core_js___core_js_2.6.11.tgz";
+ url = "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz";
+ sha1 = "38831469f9922bded8ee21c9dc46985e0399308c";
+ };
+ }
+ {
+ name = "core_js___core_js_3.6.5.tgz";
+ path = fetchurl {
+ name = "core_js___core_js_3.6.5.tgz";
+ url = "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz";
+ sha1 = "7395dc273af37fb2e50e9bd3d9fe841285231d1a";
+ };
+ }
+ {
+ name = "core_util_is___core_util_is_1.0.2.tgz";
+ path = fetchurl {
+ name = "core_util_is___core_util_is_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
+ sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+ };
+ }
+ {
+ name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+ path = fetchurl {
+ name = "cosmiconfig___cosmiconfig_5.2.1.tgz";
+ url = "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz";
+ sha1 = "040f726809c591e77a17c0a3626ca45b4f168b1a";
+ };
+ }
+ {
+ name = "create_ecdh___create_ecdh_4.0.3.tgz";
+ path = fetchurl {
+ name = "create_ecdh___create_ecdh_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz";
+ sha1 = "c9111b6f33045c4697f144787f9254cdc77c45ff";
+ };
+ }
+ {
+ name = "create_hash___create_hash_1.2.0.tgz";
+ path = fetchurl {
+ name = "create_hash___create_hash_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz";
+ sha1 = "889078af11a63756bcfb59bd221996be3a9ef196";
+ };
+ }
+ {
+ name = "create_hmac___create_hmac_1.1.7.tgz";
+ path = fetchurl {
+ name = "create_hmac___create_hmac_1.1.7.tgz";
+ url = "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz";
+ sha1 = "69170c78b3ab957147b2b8b04572e47ead2243ff";
+ };
+ }
+ {
+ name = "cross_spawn___cross_spawn_5.1.0.tgz";
+ path = fetchurl {
+ name = "cross_spawn___cross_spawn_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz";
+ sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
+ };
+ }
+ {
+ name = "cross_spawn___cross_spawn_6.0.5.tgz";
+ path = fetchurl {
+ name = "cross_spawn___cross_spawn_6.0.5.tgz";
+ url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz";
+ sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4";
+ };
+ }
+ {
+ name = "cross_spawn___cross_spawn_7.0.3.tgz";
+ path = fetchurl {
+ name = "cross_spawn___cross_spawn_7.0.3.tgz";
+ url = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz";
+ sha1 = "f73a85b9d5d41d045551c177e2882d4ac85728a6";
+ };
+ }
+ {
+ name = "crypto_browserify___crypto_browserify_3.12.0.tgz";
+ path = fetchurl {
+ name = "crypto_browserify___crypto_browserify_3.12.0.tgz";
+ url = "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz";
+ sha1 = "396cf9f3137f03e4b8e532c58f698254e00f80ec";
+ };
+ }
+ {
+ name = "css_color_names___css_color_names_0.0.4.tgz";
+ path = fetchurl {
+ name = "css_color_names___css_color_names_0.0.4.tgz";
+ url = "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz";
+ sha1 = "808adc2e79cf84738069b646cb20ec27beb629e0";
+ };
+ }
+ {
+ name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz";
+ path = fetchurl {
+ name = "css_declaration_sorter___css_declaration_sorter_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz";
+ sha1 = "c198940f63a76d7e36c1e71018b001721054cb22";
+ };
+ }
+ {
+ name = "css_loader___css_loader_3.5.3.tgz";
+ path = fetchurl {
+ name = "css_loader___css_loader_3.5.3.tgz";
+ url = "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz";
+ sha1 = "95ac16468e1adcd95c844729e0bb167639eb0bcf";
+ };
+ }
+ {
+ name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz";
+ path = fetchurl {
+ name = "css_select_base_adapter___css_select_base_adapter_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz";
+ sha1 = "3b2ff4972cc362ab88561507a95408a1432135d7";
+ };
+ }
+ {
+ name = "css_select___css_select_1.2.0.tgz";
+ path = fetchurl {
+ name = "css_select___css_select_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz";
+ sha1 = "2b3a110539c5355f1cd8d314623e870b121ec858";
+ };
+ }
+ {
+ name = "css_select___css_select_2.1.0.tgz";
+ path = fetchurl {
+ name = "css_select___css_select_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz";
+ sha1 = "6a34653356635934a81baca68d0255432105dbef";
+ };
+ }
+ {
+ name = "css_tree___css_tree_1.0.0_alpha.37.tgz";
+ path = fetchurl {
+ name = "css_tree___css_tree_1.0.0_alpha.37.tgz";
+ url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz";
+ sha1 = "98bebd62c4c1d9f960ec340cf9f7522e30709a22";
+ };
+ }
+ {
+ name = "css_tree___css_tree_1.0.0_alpha.39.tgz";
+ path = fetchurl {
+ name = "css_tree___css_tree_1.0.0_alpha.39.tgz";
+ url = "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz";
+ sha1 = "2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb";
+ };
+ }
+ {
+ name = "css_what___css_what_2.1.3.tgz";
+ path = fetchurl {
+ name = "css_what___css_what_2.1.3.tgz";
+ url = "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz";
+ sha1 = "a6d7604573365fe74686c3f311c56513d88285f2";
+ };
+ }
+ {
+ name = "css_what___css_what_3.3.0.tgz";
+ path = fetchurl {
+ name = "css_what___css_what_3.3.0.tgz";
+ url = "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz";
+ sha1 = "10fec696a9ece2e591ac772d759aacabac38cd39";
+ };
+ }
+ {
+ name = "cssesc___cssesc_3.0.0.tgz";
+ path = fetchurl {
+ name = "cssesc___cssesc_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz";
+ sha1 = "37741919903b868565e1c09ea747445cd18983ee";
+ };
+ }
+ {
+ name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz";
+ path = fetchurl {
+ name = "cssnano_preset_default___cssnano_preset_default_4.0.7.tgz";
+ url = "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz";
+ sha1 = "51ec662ccfca0f88b396dcd9679cdb931be17f76";
+ };
+ }
+ {
+ name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz";
+ path = fetchurl {
+ name = "cssnano_util_get_arguments___cssnano_util_get_arguments_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz";
+ sha1 = "ed3a08299f21d75741b20f3b81f194ed49cc150f";
+ };
+ }
+ {
+ name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz";
+ path = fetchurl {
+ name = "cssnano_util_get_match___cssnano_util_get_match_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz";
+ sha1 = "c0e4ca07f5386bb17ec5e52250b4f5961365156d";
+ };
+ }
+ {
+ name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz";
+ path = fetchurl {
+ name = "cssnano_util_raw_cache___cssnano_util_raw_cache_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz";
+ sha1 = "b26d5fd5f72a11dfe7a7846fb4c67260f96bf282";
+ };
+ }
+ {
+ name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz";
+ path = fetchurl {
+ name = "cssnano_util_same_parent___cssnano_util_same_parent_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz";
+ sha1 = "574082fb2859d2db433855835d9a8456ea18bbf3";
+ };
+ }
+ {
+ name = "cssnano___cssnano_4.1.10.tgz";
+ path = fetchurl {
+ name = "cssnano___cssnano_4.1.10.tgz";
+ url = "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz";
+ sha1 = "0ac41f0b13d13d465487e111b778d42da631b8b2";
+ };
+ }
+ {
+ name = "csso___csso_4.0.3.tgz";
+ path = fetchurl {
+ name = "csso___csso_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz";
+ sha1 = "0d9985dc852c7cc2b2cacfbbe1079014d1a8e903";
+ };
+ }
+ {
+ name = "cyclist___cyclist_1.0.1.tgz";
+ path = fetchurl {
+ name = "cyclist___cyclist_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz";
+ sha1 = "596e9698fd0c80e12038c2b82d6eb1b35b6224d9";
+ };
+ }
+ {
+ name = "dashdash___dashdash_1.14.1.tgz";
+ path = fetchurl {
+ name = "dashdash___dashdash_1.14.1.tgz";
+ url = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz";
+ sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+ };
+ }
+ {
+ name = "de_indent___de_indent_1.0.2.tgz";
+ path = fetchurl {
+ name = "de_indent___de_indent_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz";
+ sha1 = "b2038e846dc33baa5796128d0804b455b8c1e21d";
+ };
+ }
+ {
+ name = "debug___debug_2.6.9.tgz";
+ path = fetchurl {
+ name = "debug___debug_2.6.9.tgz";
+ url = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
+ sha1 = "5d128515df134ff327e90a4c93f4e077a536341f";
+ };
+ }
+ {
+ name = "debug___debug_3.2.6.tgz";
+ path = fetchurl {
+ name = "debug___debug_3.2.6.tgz";
+ url = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz";
+ sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b";
+ };
+ }
+ {
+ name = "debug___debug_4.1.1.tgz";
+ path = fetchurl {
+ name = "debug___debug_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz";
+ sha1 = "3b72260255109c6b589cee050f1d516139664791";
+ };
+ }
+ {
+ name = "decamelize___decamelize_1.2.0.tgz";
+ path = fetchurl {
+ name = "decamelize___decamelize_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
+ sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+ };
+ }
+ {
+ name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+ path = fetchurl {
+ name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+ url = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+ sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+ };
+ }
+ {
+ name = "deep_equal___deep_equal_1.1.1.tgz";
+ path = fetchurl {
+ name = "deep_equal___deep_equal_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz";
+ sha1 = "b5c98c942ceffaf7cb051e24e1434a25a2e6076a";
+ };
+ }
+ {
+ name = "deep_is___deep_is_0.1.3.tgz";
+ path = fetchurl {
+ name = "deep_is___deep_is_0.1.3.tgz";
+ url = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz";
+ sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+ };
+ }
+ {
+ name = "deepmerge___deepmerge_1.5.2.tgz";
+ path = fetchurl {
+ name = "deepmerge___deepmerge_1.5.2.tgz";
+ url = "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz";
+ sha1 = "10499d868844cdad4fee0842df8c7f6f0c95a753";
+ };
+ }
+ {
+ name = "default_gateway___default_gateway_4.2.0.tgz";
+ path = fetchurl {
+ name = "default_gateway___default_gateway_4.2.0.tgz";
+ url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz";
+ sha1 = "167104c7500c2115f6dd69b0a536bb8ed720552b";
+ };
+ }
+ {
+ name = "default_gateway___default_gateway_5.0.5.tgz";
+ path = fetchurl {
+ name = "default_gateway___default_gateway_5.0.5.tgz";
+ url = "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz";
+ sha1 = "4fd6bd5d2855d39b34cc5a59505486e9aafc9b10";
+ };
+ }
+ {
+ name = "defaults___defaults_1.0.3.tgz";
+ path = fetchurl {
+ name = "defaults___defaults_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz";
+ sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
+ };
+ }
+ {
+ name = "define_properties___define_properties_1.1.3.tgz";
+ path = fetchurl {
+ name = "define_properties___define_properties_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz";
+ sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1";
+ };
+ }
+ {
+ name = "define_property___define_property_0.2.5.tgz";
+ path = fetchurl {
+ name = "define_property___define_property_0.2.5.tgz";
+ url = "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz";
+ sha1 = "c35b1ef918ec3c990f9a5bc57be04aacec5c8116";
+ };
+ }
+ {
+ name = "define_property___define_property_1.0.0.tgz";
+ path = fetchurl {
+ name = "define_property___define_property_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz";
+ sha1 = "769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6";
+ };
+ }
+ {
+ name = "define_property___define_property_2.0.2.tgz";
+ path = fetchurl {
+ name = "define_property___define_property_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz";
+ sha1 = "d459689e8d654ba77e02a817f8710d702cb16e9d";
+ };
+ }
+ {
+ name = "del___del_4.1.1.tgz";
+ path = fetchurl {
+ name = "del___del_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz";
+ sha1 = "9e8f117222ea44a31ff3a156c049b99052a9f0b4";
+ };
+ }
+ {
+ name = "delayed_stream___delayed_stream_1.0.0.tgz";
+ path = fetchurl {
+ name = "delayed_stream___delayed_stream_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz";
+ sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+ };
+ }
+ {
+ name = "depd___depd_1.1.2.tgz";
+ path = fetchurl {
+ name = "depd___depd_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz";
+ sha1 = "9bcd52e14c097763e749b274c4346ed2e560b5a9";
+ };
+ }
+ {
+ name = "des.js___des.js_1.0.1.tgz";
+ path = fetchurl {
+ name = "des.js___des.js_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz";
+ sha1 = "5382142e1bdc53f85d86d53e5f4aa7deb91e0843";
+ };
+ }
+ {
+ name = "destroy___destroy_1.0.4.tgz";
+ path = fetchurl {
+ name = "destroy___destroy_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz";
+ sha1 = "978857442c44749e4206613e37946205826abd80";
+ };
+ }
+ {
+ name = "detect_node___detect_node_2.0.4.tgz";
+ path = fetchurl {
+ name = "detect_node___detect_node_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz";
+ sha1 = "014ee8f8f669c5c58023da64b8179c083a28c46c";
+ };
+ }
+ {
+ name = "diffie_hellman___diffie_hellman_5.0.3.tgz";
+ path = fetchurl {
+ name = "diffie_hellman___diffie_hellman_5.0.3.tgz";
+ url = "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz";
+ sha1 = "40e8ee98f55a2149607146921c63e1ae5f3d2875";
+ };
+ }
+ {
+ name = "dir_glob___dir_glob_2.2.2.tgz";
+ path = fetchurl {
+ name = "dir_glob___dir_glob_2.2.2.tgz";
+ url = "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz";
+ sha1 = "fa09f0694153c8918b18ba0deafae94769fc50c4";
+ };
+ }
+ {
+ name = "dns_equal___dns_equal_1.0.0.tgz";
+ path = fetchurl {
+ name = "dns_equal___dns_equal_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz";
+ sha1 = "b39e7f1da6eb0a75ba9c17324b34753c47e0654d";
+ };
+ }
+ {
+ name = "dns_packet___dns_packet_1.3.1.tgz";
+ path = fetchurl {
+ name = "dns_packet___dns_packet_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz";
+ sha1 = "12aa426981075be500b910eedcd0b47dd7deda5a";
+ };
+ }
+ {
+ name = "dns_txt___dns_txt_2.0.2.tgz";
+ path = fetchurl {
+ name = "dns_txt___dns_txt_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz";
+ sha1 = "b91d806f5d27188e4ab3e7d107d881a1cc4642b6";
+ };
+ }
+ {
+ name = "doctrine___doctrine_3.0.0.tgz";
+ path = fetchurl {
+ name = "doctrine___doctrine_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz";
+ sha1 = "addebead72a6574db783639dc87a121773973961";
+ };
+ }
+ {
+ name = "dom_converter___dom_converter_0.2.0.tgz";
+ path = fetchurl {
+ name = "dom_converter___dom_converter_0.2.0.tgz";
+ url = "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz";
+ sha1 = "6721a9daee2e293682955b6afe416771627bb768";
+ };
+ }
+ {
+ name = "dom_serializer___dom_serializer_0.2.2.tgz";
+ path = fetchurl {
+ name = "dom_serializer___dom_serializer_0.2.2.tgz";
+ url = "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz";
+ sha1 = "1afb81f533717175d478655debc5e332d9f9bb51";
+ };
+ }
+ {
+ name = "domain_browser___domain_browser_1.2.0.tgz";
+ path = fetchurl {
+ name = "domain_browser___domain_browser_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz";
+ sha1 = "3d31f50191a6749dd1375a7f522e823d42e54eda";
+ };
+ }
+ {
+ name = "domelementtype___domelementtype_1.3.1.tgz";
+ path = fetchurl {
+ name = "domelementtype___domelementtype_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz";
+ sha1 = "d048c44b37b0d10a7f2a3d5fee3f4333d790481f";
+ };
+ }
+ {
+ name = "domelementtype___domelementtype_2.0.1.tgz";
+ path = fetchurl {
+ name = "domelementtype___domelementtype_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz";
+ sha1 = "1f8bdfe91f5a78063274e803b4bdcedf6e94f94d";
+ };
+ }
+ {
+ name = "domhandler___domhandler_2.4.2.tgz";
+ path = fetchurl {
+ name = "domhandler___domhandler_2.4.2.tgz";
+ url = "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz";
+ sha1 = "8805097e933d65e85546f726d60f5eb88b44f803";
+ };
+ }
+ {
+ name = "domutils___domutils_1.5.1.tgz";
+ path = fetchurl {
+ name = "domutils___domutils_1.5.1.tgz";
+ url = "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz";
+ sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
+ };
+ }
+ {
+ name = "domutils___domutils_1.7.0.tgz";
+ path = fetchurl {
+ name = "domutils___domutils_1.7.0.tgz";
+ url = "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz";
+ sha1 = "56ea341e834e06e6748af7a1cb25da67ea9f8c2a";
+ };
+ }
+ {
+ name = "dot_prop___dot_prop_5.2.0.tgz";
+ path = fetchurl {
+ name = "dot_prop___dot_prop_5.2.0.tgz";
+ url = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz";
+ sha1 = "c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb";
+ };
+ }
+ {
+ name = "dotenv_expand___dotenv_expand_5.1.0.tgz";
+ path = fetchurl {
+ name = "dotenv_expand___dotenv_expand_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz";
+ sha1 = "3fbaf020bfd794884072ea26b1e9791d45a629f0";
+ };
+ }
+ {
+ name = "dotenv___dotenv_8.2.0.tgz";
+ path = fetchurl {
+ name = "dotenv___dotenv_8.2.0.tgz";
+ url = "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz";
+ sha1 = "97e619259ada750eea3e4ea3e26bceea5424b16a";
+ };
+ }
+ {
+ name = "duplexer___duplexer_0.1.1.tgz";
+ path = fetchurl {
+ name = "duplexer___duplexer_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz";
+ sha1 = "ace6ff808c1ce66b57d1ebf97977acb02334cfc1";
+ };
+ }
+ {
+ name = "duplexify___duplexify_3.7.1.tgz";
+ path = fetchurl {
+ name = "duplexify___duplexify_3.7.1.tgz";
+ url = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz";
+ sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309";
+ };
+ }
+ {
+ name = "easy_stack___easy_stack_1.0.0.tgz";
+ path = fetchurl {
+ name = "easy_stack___easy_stack_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz";
+ sha1 = "12c91b3085a37f0baa336e9486eac4bf94e3e788";
+ };
+ }
+ {
+ name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz";
+ path = fetchurl {
+ name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+ sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+ };
+ }
+ {
+ name = "ee_first___ee_first_1.1.1.tgz";
+ path = fetchurl {
+ name = "ee_first___ee_first_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz";
+ sha1 = "590c61156b0ae2f4f0255732a158b266bc56b21d";
+ };
+ }
+ {
+ name = "ejs___ejs_2.7.4.tgz";
+ path = fetchurl {
+ name = "ejs___ejs_2.7.4.tgz";
+ url = "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz";
+ sha1 = "48661287573dcc53e366c7a1ae52c3a120eec9ba";
+ };
+ }
+ {
+ name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz";
+ path = fetchurl {
+ name = "electron_to_chromium___electron_to_chromium_1.3.464.tgz";
+ url = "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz";
+ sha1 = "fe13feaa08f6f865d3c89d5d72e54c194f463aa5";
+ };
+ }
+ {
+ name = "elliptic___elliptic_6.5.2.tgz";
+ path = fetchurl {
+ name = "elliptic___elliptic_6.5.2.tgz";
+ url = "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz";
+ sha1 = "05c5678d7173c049d8ca433552224a495d0e3762";
+ };
+ }
+ {
+ name = "emoji_regex___emoji_regex_7.0.3.tgz";
+ path = fetchurl {
+ name = "emoji_regex___emoji_regex_7.0.3.tgz";
+ url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz";
+ sha1 = "933a04052860c85e83c122479c4748a8e4c72156";
+ };
+ }
+ {
+ name = "emoji_regex___emoji_regex_8.0.0.tgz";
+ path = fetchurl {
+ name = "emoji_regex___emoji_regex_8.0.0.tgz";
+ url = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz";
+ sha1 = "e818fd69ce5ccfcb404594f842963bf53164cc37";
+ };
+ }
+ {
+ name = "emojis_list___emojis_list_2.1.0.tgz";
+ path = fetchurl {
+ name = "emojis_list___emojis_list_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz";
+ sha1 = "4daa4d9db00f9819880c79fa457ae5b09a1fd389";
+ };
+ }
+ {
+ name = "emojis_list___emojis_list_3.0.0.tgz";
+ path = fetchurl {
+ name = "emojis_list___emojis_list_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz";
+ sha1 = "5570662046ad29e2e916e71aae260abdff4f6a78";
+ };
+ }
+ {
+ name = "encodeurl___encodeurl_1.0.2.tgz";
+ path = fetchurl {
+ name = "encodeurl___encodeurl_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz";
+ sha1 = "ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59";
+ };
+ }
+ {
+ name = "end_of_stream___end_of_stream_1.4.4.tgz";
+ path = fetchurl {
+ name = "end_of_stream___end_of_stream_1.4.4.tgz";
+ url = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz";
+ sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0";
+ };
+ }
+ {
+ name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz";
+ path = fetchurl {
+ name = "enhanced_resolve___enhanced_resolve_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz";
+ sha1 = "2937e2b8066cd0fe7ce0990a98f0d71a35189f66";
+ };
+ }
+ {
+ name = "entities___entities_1.1.2.tgz";
+ path = fetchurl {
+ name = "entities___entities_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz";
+ sha1 = "bdfa735299664dfafd34529ed4f8522a275fea56";
+ };
+ }
+ {
+ name = "entities___entities_2.0.3.tgz";
+ path = fetchurl {
+ name = "entities___entities_2.0.3.tgz";
+ url = "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz";
+ sha1 = "5c487e5742ab93c15abb5da22759b8590ec03b7f";
+ };
+ }
+ {
+ name = "errno___errno_0.1.7.tgz";
+ path = fetchurl {
+ name = "errno___errno_0.1.7.tgz";
+ url = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz";
+ sha1 = "4684d71779ad39af177e3f007996f7c67c852618";
+ };
+ }
+ {
+ name = "error_ex___error_ex_1.3.2.tgz";
+ path = fetchurl {
+ name = "error_ex___error_ex_1.3.2.tgz";
+ url = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz";
+ sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf";
+ };
+ }
+ {
+ name = "error_stack_parser___error_stack_parser_2.0.6.tgz";
+ path = fetchurl {
+ name = "error_stack_parser___error_stack_parser_2.0.6.tgz";
+ url = "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz";
+ sha1 = "5a99a707bd7a4c58a797902d48d82803ede6aad8";
+ };
+ }
+ {
+ name = "es_abstract___es_abstract_1.17.5.tgz";
+ path = fetchurl {
+ name = "es_abstract___es_abstract_1.17.5.tgz";
+ url = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz";
+ sha1 = "d8c9d1d66c8981fb9200e2251d799eee92774ae9";
+ };
+ }
+ {
+ name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+ path = fetchurl {
+ name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+ url = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+ sha1 = "e55cd4c9cdc188bcefb03b366c736323fc5c898a";
+ };
+ }
+ {
+ name = "escape_html___escape_html_1.0.3.tgz";
+ path = fetchurl {
+ name = "escape_html___escape_html_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz";
+ sha1 = "0258eae4d3d0c0974de1c169188ef0051d1d1988";
+ };
+ }
+ {
+ name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+ path = fetchurl {
+ name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+ sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+ };
+ }
+ {
+ name = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz";
+ path = fetchurl {
+ name = "eslint_config_prettier___eslint_config_prettier_6.11.0.tgz";
+ url = "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz";
+ sha1 = "f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1";
+ };
+ }
+ {
+ name = "eslint_loader___eslint_loader_2.2.1.tgz";
+ path = fetchurl {
+ name = "eslint_loader___eslint_loader_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz";
+ sha1 = "28b9c12da54057af0845e2a6112701a2f6bf8337";
+ };
+ }
+ {
+ name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz";
+ path = fetchurl {
+ name = "eslint_plugin_prettier___eslint_plugin_prettier_3.1.3.tgz";
+ url = "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz";
+ sha1 = "ae116a0fc0e598fdae48743a4430903de5b4e6ca";
+ };
+ }
+ {
+ name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz";
+ path = fetchurl {
+ name = "eslint_plugin_vue___eslint_plugin_vue_6.2.2.tgz";
+ url = "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz";
+ sha1 = "27fecd9a3a24789b0f111ecdd540a9e56198e0fe";
+ };
+ }
+ {
+ name = "eslint_scope___eslint_scope_4.0.3.tgz";
+ path = fetchurl {
+ name = "eslint_scope___eslint_scope_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz";
+ sha1 = "ca03833310f6889a3264781aa82e63eb9cfe7848";
+ };
+ }
+ {
+ name = "eslint_scope___eslint_scope_5.1.0.tgz";
+ path = fetchurl {
+ name = "eslint_scope___eslint_scope_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz";
+ sha1 = "d0f971dfe59c69e0cada684b23d49dbf82600ce5";
+ };
+ }
+ {
+ name = "eslint_utils___eslint_utils_2.0.0.tgz";
+ path = fetchurl {
+ name = "eslint_utils___eslint_utils_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz";
+ sha1 = "7be1cc70f27a72a76cd14aa698bcabed6890e1cd";
+ };
+ }
+ {
+ name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz";
+ path = fetchurl {
+ name = "eslint_visitor_keys___eslint_visitor_keys_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz";
+ sha1 = "74415ac884874495f78ec2a97349525344c981fa";
+ };
+ }
+ {
+ name = "eslint___eslint_7.2.0.tgz";
+ path = fetchurl {
+ name = "eslint___eslint_7.2.0.tgz";
+ url = "https://registry.yarnpkg.com/eslint/-/eslint-7.2.0.tgz";
+ sha1 = "d41b2e47804b30dbabb093a967fb283d560082e6";
+ };
+ }
+ {
+ name = "espree___espree_6.2.1.tgz";
+ path = fetchurl {
+ name = "espree___espree_6.2.1.tgz";
+ url = "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz";
+ sha1 = "77fc72e1fd744a2052c20f38a5b575832e82734a";
+ };
+ }
+ {
+ name = "espree___espree_7.1.0.tgz";
+ path = fetchurl {
+ name = "espree___espree_7.1.0.tgz";
+ url = "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz";
+ sha1 = "a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c";
+ };
+ }
+ {
+ name = "esprima___esprima_4.0.1.tgz";
+ path = fetchurl {
+ name = "esprima___esprima_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz";
+ sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71";
+ };
+ }
+ {
+ name = "esquery___esquery_1.3.1.tgz";
+ path = fetchurl {
+ name = "esquery___esquery_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz";
+ sha1 = "b78b5828aa8e214e29fb74c4d5b752e1c033da57";
+ };
+ }
+ {
+ name = "esrecurse___esrecurse_4.2.1.tgz";
+ path = fetchurl {
+ name = "esrecurse___esrecurse_4.2.1.tgz";
+ url = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz";
+ sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf";
+ };
+ }
+ {
+ name = "estraverse___estraverse_4.3.0.tgz";
+ path = fetchurl {
+ name = "estraverse___estraverse_4.3.0.tgz";
+ url = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz";
+ sha1 = "398ad3f3c5a24948be7725e83d11a7de28cdbd1d";
+ };
+ }
+ {
+ name = "estraverse___estraverse_5.1.0.tgz";
+ path = fetchurl {
+ name = "estraverse___estraverse_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz";
+ sha1 = "374309d39fd935ae500e7b92e8a6b4c720e59642";
+ };
+ }
+ {
+ name = "esutils___esutils_2.0.3.tgz";
+ path = fetchurl {
+ name = "esutils___esutils_2.0.3.tgz";
+ url = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz";
+ sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64";
+ };
+ }
+ {
+ name = "etag___etag_1.8.1.tgz";
+ path = fetchurl {
+ name = "etag___etag_1.8.1.tgz";
+ url = "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz";
+ sha1 = "41ae2eeb65efa62268aebfea83ac7d79299b0887";
+ };
+ }
+ {
+ name = "event_pubsub___event_pubsub_4.3.0.tgz";
+ path = fetchurl {
+ name = "event_pubsub___event_pubsub_4.3.0.tgz";
+ url = "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz";
+ sha1 = "f68d816bc29f1ec02c539dc58c8dd40ce72cb36e";
+ };
+ }
+ {
+ name = "eventemitter3___eventemitter3_4.0.4.tgz";
+ path = fetchurl {
+ name = "eventemitter3___eventemitter3_4.0.4.tgz";
+ url = "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz";
+ sha1 = "b5463ace635a083d018bdc7c917b4c5f10a85384";
+ };
+ }
+ {
+ name = "events___events_3.1.0.tgz";
+ path = fetchurl {
+ name = "events___events_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz";
+ sha1 = "84279af1b34cb75aa88bf5ff291f6d0bd9b31a59";
+ };
+ }
+ {
+ name = "eventsource___eventsource_1.0.7.tgz";
+ path = fetchurl {
+ name = "eventsource___eventsource_1.0.7.tgz";
+ url = "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz";
+ sha1 = "8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0";
+ };
+ }
+ {
+ name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz";
+ path = fetchurl {
+ name = "evp_bytestokey___evp_bytestokey_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz";
+ sha1 = "7fcbdb198dc71959432efe13842684e0525acb02";
+ };
+ }
+ {
+ name = "execa___execa_0.8.0.tgz";
+ path = fetchurl {
+ name = "execa___execa_0.8.0.tgz";
+ url = "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz";
+ sha1 = "d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da";
+ };
+ }
+ {
+ name = "execa___execa_1.0.0.tgz";
+ path = fetchurl {
+ name = "execa___execa_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz";
+ sha1 = "c6236a5bb4df6d6f15e88e7f017798216749ddd8";
+ };
+ }
+ {
+ name = "execa___execa_3.4.0.tgz";
+ path = fetchurl {
+ name = "execa___execa_3.4.0.tgz";
+ url = "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz";
+ sha1 = "c08ed4550ef65d858fac269ffc8572446f37eb89";
+ };
+ }
+ {
+ name = "expand_brackets___expand_brackets_2.1.4.tgz";
+ path = fetchurl {
+ name = "expand_brackets___expand_brackets_2.1.4.tgz";
+ url = "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz";
+ sha1 = "b77735e315ce30f6b6eff0f83b04151a22449622";
+ };
+ }
+ {
+ name = "express___express_4.17.1.tgz";
+ path = fetchurl {
+ name = "express___express_4.17.1.tgz";
+ url = "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz";
+ sha1 = "4491fc38605cf51f8629d39c2b5d026f98a4c134";
+ };
+ }
+ {
+ name = "extend_shallow___extend_shallow_2.0.1.tgz";
+ path = fetchurl {
+ name = "extend_shallow___extend_shallow_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz";
+ sha1 = "51af7d614ad9a9f610ea1bafbb989d6b1c56890f";
+ };
+ }
+ {
+ name = "extend_shallow___extend_shallow_3.0.2.tgz";
+ path = fetchurl {
+ name = "extend_shallow___extend_shallow_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz";
+ sha1 = "26a71aaf073b39fb2127172746131c2704028db8";
+ };
+ }
+ {
+ name = "extend___extend_3.0.2.tgz";
+ path = fetchurl {
+ name = "extend___extend_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz";
+ sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa";
+ };
+ }
+ {
+ name = "external_editor___external_editor_3.1.0.tgz";
+ path = fetchurl {
+ name = "external_editor___external_editor_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz";
+ sha1 = "cb03f740befae03ea4d283caed2741a83f335495";
+ };
+ }
+ {
+ name = "extglob___extglob_2.0.4.tgz";
+ path = fetchurl {
+ name = "extglob___extglob_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz";
+ sha1 = "ad00fe4dc612a9232e8718711dc5cb5ab0285543";
+ };
+ }
+ {
+ name = "extsprintf___extsprintf_1.3.0.tgz";
+ path = fetchurl {
+ name = "extsprintf___extsprintf_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz";
+ sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+ };
+ }
+ {
+ name = "extsprintf___extsprintf_1.4.0.tgz";
+ path = fetchurl {
+ name = "extsprintf___extsprintf_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz";
+ sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f";
+ };
+ }
+ {
+ name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+ path = fetchurl {
+ name = "fast_deep_equal___fast_deep_equal_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz";
+ sha1 = "545145077c501491e33b15ec408c294376e94ae4";
+ };
+ }
+ {
+ name = "fast_diff___fast_diff_1.2.0.tgz";
+ path = fetchurl {
+ name = "fast_diff___fast_diff_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz";
+ sha1 = "73ee11982d86caaf7959828d519cfe927fac5f03";
+ };
+ }
+ {
+ name = "fast_glob___fast_glob_2.2.7.tgz";
+ path = fetchurl {
+ name = "fast_glob___fast_glob_2.2.7.tgz";
+ url = "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz";
+ sha1 = "6953857c3afa475fff92ee6015d52da70a4cd39d";
+ };
+ }
+ {
+ name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+ path = fetchurl {
+ name = "fast_json_stable_stringify___fast_json_stable_stringify_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+ sha1 = "874bf69c6f404c2b5d99c481341399fd55892633";
+ };
+ }
+ {
+ name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+ path = fetchurl {
+ name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+ url = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+ sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+ };
+ }
+ {
+ name = "faye_websocket___faye_websocket_0.10.0.tgz";
+ path = fetchurl {
+ name = "faye_websocket___faye_websocket_0.10.0.tgz";
+ url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz";
+ sha1 = "4e492f8d04dfb6f89003507f6edbf2d501e7c6f4";
+ };
+ }
+ {
+ name = "faye_websocket___faye_websocket_0.11.3.tgz";
+ path = fetchurl {
+ name = "faye_websocket___faye_websocket_0.11.3.tgz";
+ url = "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz";
+ sha1 = "5c0e9a8968e8912c286639fde977a8b209f2508e";
+ };
+ }
+ {
+ name = "figgy_pudding___figgy_pudding_3.5.2.tgz";
+ path = fetchurl {
+ name = "figgy_pudding___figgy_pudding_3.5.2.tgz";
+ url = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz";
+ sha1 = "b4eee8148abb01dcf1d1ac34367d59e12fa61d6e";
+ };
+ }
+ {
+ name = "figures___figures_3.2.0.tgz";
+ path = fetchurl {
+ name = "figures___figures_3.2.0.tgz";
+ url = "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz";
+ sha1 = "625c18bd293c604dc4a8ddb2febf0c88341746af";
+ };
+ }
+ {
+ name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+ path = fetchurl {
+ name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+ url = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+ sha1 = "ca0f6efa6dd3d561333fb14515065c2fafdf439c";
+ };
+ }
+ {
+ name = "file_loader___file_loader_4.3.0.tgz";
+ path = fetchurl {
+ name = "file_loader___file_loader_4.3.0.tgz";
+ url = "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz";
+ sha1 = "780f040f729b3d18019f20605f723e844b8a58af";
+ };
+ }
+ {
+ name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz";
+ path = fetchurl {
+ name = "file_uri_to_path___file_uri_to_path_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
+ sha1 = "553a7b8446ff6f684359c445f1e37a05dacc33dd";
+ };
+ }
+ {
+ name = "filesize___filesize_3.6.1.tgz";
+ path = fetchurl {
+ name = "filesize___filesize_3.6.1.tgz";
+ url = "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz";
+ sha1 = "090bb3ee01b6f801a8a8be99d31710b3422bb317";
+ };
+ }
+ {
+ name = "fill_range___fill_range_4.0.0.tgz";
+ path = fetchurl {
+ name = "fill_range___fill_range_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz";
+ sha1 = "d544811d428f98eb06a63dc402d2403c328c38f7";
+ };
+ }
+ {
+ name = "fill_range___fill_range_7.0.1.tgz";
+ path = fetchurl {
+ name = "fill_range___fill_range_7.0.1.tgz";
+ url = "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz";
+ sha1 = "1919a6a7c75fe38b2c7c77e5198535da9acdda40";
+ };
+ }
+ {
+ name = "finalhandler___finalhandler_1.1.2.tgz";
+ path = fetchurl {
+ name = "finalhandler___finalhandler_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz";
+ sha1 = "b7e7d000ffd11938d0fdb053506f6ebabe9f587d";
+ };
+ }
+ {
+ name = "find_cache_dir___find_cache_dir_0.1.1.tgz";
+ path = fetchurl {
+ name = "find_cache_dir___find_cache_dir_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz";
+ sha1 = "c8defae57c8a52a8a784f9e31c57c742e993a0b9";
+ };
+ }
+ {
+ name = "find_cache_dir___find_cache_dir_2.1.0.tgz";
+ path = fetchurl {
+ name = "find_cache_dir___find_cache_dir_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz";
+ sha1 = "8d0f94cd13fe43c6c7c261a0d86115ca918c05f7";
+ };
+ }
+ {
+ name = "find_cache_dir___find_cache_dir_3.3.1.tgz";
+ path = fetchurl {
+ name = "find_cache_dir___find_cache_dir_3.3.1.tgz";
+ url = "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz";
+ sha1 = "89b33fad4a4670daa94f855f7fbe31d6d84fe880";
+ };
+ }
+ {
+ name = "find_up___find_up_1.1.2.tgz";
+ path = fetchurl {
+ name = "find_up___find_up_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz";
+ sha1 = "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f";
+ };
+ }
+ {
+ name = "find_up___find_up_2.1.0.tgz";
+ path = fetchurl {
+ name = "find_up___find_up_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz";
+ sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+ };
+ }
+ {
+ name = "find_up___find_up_3.0.0.tgz";
+ path = fetchurl {
+ name = "find_up___find_up_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz";
+ sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73";
+ };
+ }
+ {
+ name = "find_up___find_up_4.1.0.tgz";
+ path = fetchurl {
+ name = "find_up___find_up_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz";
+ sha1 = "97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19";
+ };
+ }
+ {
+ name = "flat_cache___flat_cache_2.0.1.tgz";
+ path = fetchurl {
+ name = "flat_cache___flat_cache_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz";
+ sha1 = "5d296d6f04bda44a4630a301413bdbc2ec085ec0";
+ };
+ }
+ {
+ name = "flatted___flatted_2.0.2.tgz";
+ path = fetchurl {
+ name = "flatted___flatted_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz";
+ sha1 = "4575b21e2bcee7434aa9be662f4b7b5f9c2b5138";
+ };
+ }
+ {
+ name = "flush_write_stream___flush_write_stream_1.1.1.tgz";
+ path = fetchurl {
+ name = "flush_write_stream___flush_write_stream_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz";
+ sha1 = "8dd7d873a1babc207d94ead0c2e0e44276ebf2e8";
+ };
+ }
+ {
+ name = "follow_redirects___follow_redirects_1.11.0.tgz";
+ path = fetchurl {
+ name = "follow_redirects___follow_redirects_1.11.0.tgz";
+ url = "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz";
+ sha1 = "afa14f08ba12a52963140fe43212658897bc0ecb";
+ };
+ }
+ {
+ name = "for_in___for_in_1.0.2.tgz";
+ path = fetchurl {
+ name = "for_in___for_in_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz";
+ sha1 = "81068d295a8142ec0ac726c6e2200c30fb6d5e80";
+ };
+ }
+ {
+ name = "forever_agent___forever_agent_0.6.1.tgz";
+ path = fetchurl {
+ name = "forever_agent___forever_agent_0.6.1.tgz";
+ url = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz";
+ sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+ };
+ }
+ {
+ name = "form_data___form_data_2.3.3.tgz";
+ path = fetchurl {
+ name = "form_data___form_data_2.3.3.tgz";
+ url = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz";
+ sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6";
+ };
+ }
+ {
+ name = "forwarded___forwarded_0.1.2.tgz";
+ path = fetchurl {
+ name = "forwarded___forwarded_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz";
+ sha1 = "98c23dab1175657b8c0573e8ceccd91b0ff18c84";
+ };
+ }
+ {
+ name = "fragment_cache___fragment_cache_0.2.1.tgz";
+ path = fetchurl {
+ name = "fragment_cache___fragment_cache_0.2.1.tgz";
+ url = "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz";
+ sha1 = "4290fad27f13e89be7f33799c6bc5a0abfff0d19";
+ };
+ }
+ {
+ name = "fresh___fresh_0.5.2.tgz";
+ path = fetchurl {
+ name = "fresh___fresh_0.5.2.tgz";
+ url = "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz";
+ sha1 = "3d8cadd90d976569fa835ab1f8e4b23a105605a7";
+ };
+ }
+ {
+ name = "from2___from2_2.3.0.tgz";
+ path = fetchurl {
+ name = "from2___from2_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz";
+ sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af";
+ };
+ }
+ {
+ name = "fs_extra___fs_extra_4.0.3.tgz";
+ path = fetchurl {
+ name = "fs_extra___fs_extra_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz";
+ sha1 = "0d852122e5bc5beb453fb028e9c0c9bf36340c94";
+ };
+ }
+ {
+ name = "fs_extra___fs_extra_7.0.1.tgz";
+ path = fetchurl {
+ name = "fs_extra___fs_extra_7.0.1.tgz";
+ url = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz";
+ sha1 = "4f189c44aa123b895f722804f55ea23eadc348e9";
+ };
+ }
+ {
+ name = "fs_minipass___fs_minipass_2.1.0.tgz";
+ path = fetchurl {
+ name = "fs_minipass___fs_minipass_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz";
+ sha1 = "7f5036fdbf12c63c169190cbe4199c852271f9fb";
+ };
+ }
+ {
+ name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz";
+ path = fetchurl {
+ name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz";
+ url = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz";
+ sha1 = "b47df53493ef911df75731e70a9ded0189db40c9";
+ };
+ }
+ {
+ name = "fs.realpath___fs.realpath_1.0.0.tgz";
+ path = fetchurl {
+ name = "fs.realpath___fs.realpath_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
+ sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+ };
+ }
+ {
+ name = "fsevents___fsevents_1.2.13.tgz";
+ path = fetchurl {
+ name = "fsevents___fsevents_1.2.13.tgz";
+ url = "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz";
+ sha1 = "f325cb0455592428bcf11b383370ef70e3bfcc38";
+ };
+ }
+ {
+ name = "fsevents___fsevents_2.1.3.tgz";
+ path = fetchurl {
+ name = "fsevents___fsevents_2.1.3.tgz";
+ url = "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz";
+ sha1 = "fb738703ae8d2f9fe900c33836ddebee8b97f23e";
+ };
+ }
+ {
+ name = "function_bind___function_bind_1.1.1.tgz";
+ path = fetchurl {
+ name = "function_bind___function_bind_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz";
+ sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d";
+ };
+ }
+ {
+ name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+ path = fetchurl {
+ name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+ sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+ };
+ }
+ {
+ name = "gensync___gensync_1.0.0_beta.1.tgz";
+ path = fetchurl {
+ name = "gensync___gensync_1.0.0_beta.1.tgz";
+ url = "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz";
+ sha1 = "58f4361ff987e5ff6e1e7a210827aa371eaac269";
+ };
+ }
+ {
+ name = "get_caller_file___get_caller_file_2.0.5.tgz";
+ path = fetchurl {
+ name = "get_caller_file___get_caller_file_2.0.5.tgz";
+ url = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz";
+ sha1 = "4f94412a82db32f36e3b0b9741f8a97feb031f7e";
+ };
+ }
+ {
+ name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+ path = fetchurl {
+ name = "get_own_enumerable_property_symbols___get_own_enumerable_property_symbols_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz";
+ sha1 = "b5fde77f22cbe35f390b4e089922c50bce6ef664";
+ };
+ }
+ {
+ name = "get_stdin___get_stdin_6.0.0.tgz";
+ path = fetchurl {
+ name = "get_stdin___get_stdin_6.0.0.tgz";
+ url = "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz";
+ sha1 = "9e09bf712b360ab9225e812048f71fde9c89657b";
+ };
+ }
+ {
+ name = "get_stream___get_stream_3.0.0.tgz";
+ path = fetchurl {
+ name = "get_stream___get_stream_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz";
+ sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
+ };
+ }
+ {
+ name = "get_stream___get_stream_4.1.0.tgz";
+ path = fetchurl {
+ name = "get_stream___get_stream_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz";
+ sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5";
+ };
+ }
+ {
+ name = "get_stream___get_stream_5.1.0.tgz";
+ path = fetchurl {
+ name = "get_stream___get_stream_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz";
+ sha1 = "01203cdc92597f9b909067c3e656cc1f4d3c4dc9";
+ };
+ }
+ {
+ name = "get_value___get_value_2.0.6.tgz";
+ path = fetchurl {
+ name = "get_value___get_value_2.0.6.tgz";
+ url = "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz";
+ sha1 = "dc15ca1c672387ca76bd37ac0a395ba2042a2c28";
+ };
+ }
+ {
+ name = "getpass___getpass_0.1.7.tgz";
+ path = fetchurl {
+ name = "getpass___getpass_0.1.7.tgz";
+ url = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz";
+ sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+ };
+ }
+ {
+ name = "glob_parent___glob_parent_3.1.0.tgz";
+ path = fetchurl {
+ name = "glob_parent___glob_parent_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz";
+ sha1 = "9e6af6299d8d3bd2bd40430832bd113df906c5ae";
+ };
+ }
+ {
+ name = "glob_parent___glob_parent_5.1.1.tgz";
+ path = fetchurl {
+ name = "glob_parent___glob_parent_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz";
+ sha1 = "b6c1ef417c4e5663ea498f1c45afac6916bbc229";
+ };
+ }
+ {
+ name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz";
+ path = fetchurl {
+ name = "glob_to_regexp___glob_to_regexp_0.3.0.tgz";
+ url = "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz";
+ sha1 = "8c5a1494d2066c570cc3bfe4496175acc4d502ab";
+ };
+ }
+ {
+ name = "glob___glob_7.1.6.tgz";
+ path = fetchurl {
+ name = "glob___glob_7.1.6.tgz";
+ url = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz";
+ sha1 = "141f33b81a7c2492e125594307480c46679278a6";
+ };
+ }
+ {
+ name = "globals___globals_11.12.0.tgz";
+ path = fetchurl {
+ name = "globals___globals_11.12.0.tgz";
+ url = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz";
+ sha1 = "ab8795338868a0babd8525758018c2a7eb95c42e";
+ };
+ }
+ {
+ name = "globals___globals_12.4.0.tgz";
+ path = fetchurl {
+ name = "globals___globals_12.4.0.tgz";
+ url = "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz";
+ sha1 = "a18813576a41b00a24a97e7f815918c2e19925f8";
+ };
+ }
+ {
+ name = "globby___globby_6.1.0.tgz";
+ path = fetchurl {
+ name = "globby___globby_6.1.0.tgz";
+ url = "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz";
+ sha1 = "f5a6d70e8395e21c858fb0489d64df02424d506c";
+ };
+ }
+ {
+ name = "globby___globby_7.1.1.tgz";
+ path = fetchurl {
+ name = "globby___globby_7.1.1.tgz";
+ url = "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz";
+ sha1 = "fb2ccff9401f8600945dfada97440cca972b8680";
+ };
+ }
+ {
+ name = "globby___globby_9.2.0.tgz";
+ path = fetchurl {
+ name = "globby___globby_9.2.0.tgz";
+ url = "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz";
+ sha1 = "fd029a706c703d29bdd170f4b6db3a3f7a7cb63d";
+ };
+ }
+ {
+ name = "graceful_fs___graceful_fs_4.2.4.tgz";
+ path = fetchurl {
+ name = "graceful_fs___graceful_fs_4.2.4.tgz";
+ url = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz";
+ sha1 = "2256bde14d3632958c465ebc96dc467ca07a29fb";
+ };
+ }
+ {
+ name = "gzip_size___gzip_size_5.1.1.tgz";
+ path = fetchurl {
+ name = "gzip_size___gzip_size_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz";
+ sha1 = "cb9bee692f87c0612b232840a873904e4c135274";
+ };
+ }
+ {
+ name = "handle_thing___handle_thing_2.0.1.tgz";
+ path = fetchurl {
+ name = "handle_thing___handle_thing_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz";
+ sha1 = "857f79ce359580c340d43081cc648970d0bb234e";
+ };
+ }
+ {
+ name = "har_schema___har_schema_2.0.0.tgz";
+ path = fetchurl {
+ name = "har_schema___har_schema_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz";
+ sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+ };
+ }
+ {
+ name = "har_validator___har_validator_5.1.3.tgz";
+ path = fetchurl {
+ name = "har_validator___har_validator_5.1.3.tgz";
+ url = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz";
+ sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080";
+ };
+ }
+ {
+ name = "has_ansi___has_ansi_2.0.0.tgz";
+ path = fetchurl {
+ name = "has_ansi___has_ansi_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz";
+ sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
+ };
+ }
+ {
+ name = "has_flag___has_flag_3.0.0.tgz";
+ path = fetchurl {
+ name = "has_flag___has_flag_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz";
+ sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+ };
+ }
+ {
+ name = "has_flag___has_flag_4.0.0.tgz";
+ path = fetchurl {
+ name = "has_flag___has_flag_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz";
+ sha1 = "944771fd9c81c81265c4d6941860da06bb59479b";
+ };
+ }
+ {
+ name = "has_symbols___has_symbols_1.0.1.tgz";
+ path = fetchurl {
+ name = "has_symbols___has_symbols_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz";
+ sha1 = "9f5214758a44196c406d9bd76cebf81ec2dd31e8";
+ };
+ }
+ {
+ name = "has_value___has_value_0.3.1.tgz";
+ path = fetchurl {
+ name = "has_value___has_value_0.3.1.tgz";
+ url = "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz";
+ sha1 = "7b1f58bada62ca827ec0a2078025654845995e1f";
+ };
+ }
+ {
+ name = "has_value___has_value_1.0.0.tgz";
+ path = fetchurl {
+ name = "has_value___has_value_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz";
+ sha1 = "18b281da585b1c5c51def24c930ed29a0be6b177";
+ };
+ }
+ {
+ name = "has_values___has_values_0.1.4.tgz";
+ path = fetchurl {
+ name = "has_values___has_values_0.1.4.tgz";
+ url = "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz";
+ sha1 = "6d61de95d91dfca9b9a02089ad384bff8f62b771";
+ };
+ }
+ {
+ name = "has_values___has_values_1.0.0.tgz";
+ path = fetchurl {
+ name = "has_values___has_values_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz";
+ sha1 = "95b0b63fec2146619a6fe57fe75628d5a39efe4f";
+ };
+ }
+ {
+ name = "has___has_1.0.3.tgz";
+ path = fetchurl {
+ name = "has___has_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz";
+ sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796";
+ };
+ }
+ {
+ name = "hash_base___hash_base_3.1.0.tgz";
+ path = fetchurl {
+ name = "hash_base___hash_base_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz";
+ sha1 = "55c381d9e06e1d2997a883b4a3fddfe7f0d3af33";
+ };
+ }
+ {
+ name = "hash_sum___hash_sum_1.0.2.tgz";
+ path = fetchurl {
+ name = "hash_sum___hash_sum_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz";
+ sha1 = "33b40777754c6432573c120cc3808bbd10d47f04";
+ };
+ }
+ {
+ name = "hash_sum___hash_sum_2.0.0.tgz";
+ path = fetchurl {
+ name = "hash_sum___hash_sum_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz";
+ sha1 = "81d01bb5de8ea4a214ad5d6ead1b523460b0b45a";
+ };
+ }
+ {
+ name = "hash.js___hash.js_1.1.7.tgz";
+ path = fetchurl {
+ name = "hash.js___hash.js_1.1.7.tgz";
+ url = "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz";
+ sha1 = "0babca538e8d4ee4a0f8988d68866537a003cf42";
+ };
+ }
+ {
+ name = "he___he_1.2.0.tgz";
+ path = fetchurl {
+ name = "he___he_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz";
+ sha1 = "84ae65fa7eafb165fddb61566ae14baf05664f0f";
+ };
+ }
+ {
+ name = "hex_color_regex___hex_color_regex_1.1.0.tgz";
+ path = fetchurl {
+ name = "hex_color_regex___hex_color_regex_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz";
+ sha1 = "4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e";
+ };
+ }
+ {
+ name = "highlight.js___highlight.js_9.18.1.tgz";
+ path = fetchurl {
+ name = "highlight.js___highlight.js_9.18.1.tgz";
+ url = "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz";
+ sha1 = "ed21aa001fe6252bb10a3d76d47573c6539fe13c";
+ };
+ }
+ {
+ name = "hmac_drbg___hmac_drbg_1.0.1.tgz";
+ path = fetchurl {
+ name = "hmac_drbg___hmac_drbg_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz";
+ sha1 = "d2745701025a6c775a6c545793ed502fc0c649a1";
+ };
+ }
+ {
+ name = "hoopy___hoopy_0.1.4.tgz";
+ path = fetchurl {
+ name = "hoopy___hoopy_0.1.4.tgz";
+ url = "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz";
+ sha1 = "609207d661100033a9a9402ad3dea677381c1b1d";
+ };
+ }
+ {
+ name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+ path = fetchurl {
+ name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+ url = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz";
+ sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488";
+ };
+ }
+ {
+ name = "hpack.js___hpack.js_2.1.6.tgz";
+ path = fetchurl {
+ name = "hpack.js___hpack.js_2.1.6.tgz";
+ url = "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz";
+ sha1 = "87774c0949e513f42e84575b3c45681fade2a0b2";
+ };
+ }
+ {
+ name = "hsl_regex___hsl_regex_1.0.0.tgz";
+ path = fetchurl {
+ name = "hsl_regex___hsl_regex_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz";
+ sha1 = "d49330c789ed819e276a4c0d272dffa30b18fe6e";
+ };
+ }
+ {
+ name = "hsla_regex___hsla_regex_1.0.0.tgz";
+ path = fetchurl {
+ name = "hsla_regex___hsla_regex_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz";
+ sha1 = "c1ce7a3168c8c6614033a4b5f7877f3b225f9c38";
+ };
+ }
+ {
+ name = "html_comment_regex___html_comment_regex_1.1.2.tgz";
+ path = fetchurl {
+ name = "html_comment_regex___html_comment_regex_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz";
+ sha1 = "97d4688aeb5c81886a364faa0cad1dda14d433a7";
+ };
+ }
+ {
+ name = "html_entities___html_entities_1.3.1.tgz";
+ path = fetchurl {
+ name = "html_entities___html_entities_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz";
+ sha1 = "fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44";
+ };
+ }
+ {
+ name = "html_minifier___html_minifier_3.5.21.tgz";
+ path = fetchurl {
+ name = "html_minifier___html_minifier_3.5.21.tgz";
+ url = "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz";
+ sha1 = "d0040e054730e354db008463593194015212d20c";
+ };
+ }
+ {
+ name = "html_tags___html_tags_2.0.0.tgz";
+ path = fetchurl {
+ name = "html_tags___html_tags_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz";
+ sha1 = "10b30a386085f43cede353cc8fa7cb0deeea668b";
+ };
+ }
+ {
+ name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz";
+ path = fetchurl {
+ name = "html_webpack_plugin___html_webpack_plugin_3.2.0.tgz";
+ url = "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz";
+ sha1 = "b01abbd723acaaa7b37b6af4492ebda03d9dd37b";
+ };
+ }
+ {
+ name = "htmlparser2___htmlparser2_3.10.1.tgz";
+ path = fetchurl {
+ name = "htmlparser2___htmlparser2_3.10.1.tgz";
+ url = "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz";
+ sha1 = "bd679dc3f59897b6a34bb10749c855bb53a9392f";
+ };
+ }
+ {
+ name = "http_deceiver___http_deceiver_1.2.7.tgz";
+ path = fetchurl {
+ name = "http_deceiver___http_deceiver_1.2.7.tgz";
+ url = "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz";
+ sha1 = "fa7168944ab9a519d337cb0bec7284dc3e723d87";
+ };
+ }
+ {
+ name = "http_errors___http_errors_1.7.2.tgz";
+ path = fetchurl {
+ name = "http_errors___http_errors_1.7.2.tgz";
+ url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz";
+ sha1 = "4f5029cf13239f31036e5b2e55292bcfbcc85c8f";
+ };
+ }
+ {
+ name = "http_errors___http_errors_1.6.3.tgz";
+ path = fetchurl {
+ name = "http_errors___http_errors_1.6.3.tgz";
+ url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz";
+ sha1 = "8b55680bb4be283a0b5bf4ea2e38580be1d9320d";
+ };
+ }
+ {
+ name = "http_errors___http_errors_1.7.3.tgz";
+ path = fetchurl {
+ name = "http_errors___http_errors_1.7.3.tgz";
+ url = "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz";
+ sha1 = "6c619e4f9c60308c38519498c14fbb10aacebb06";
+ };
+ }
+ {
+ name = "http_parser_js___http_parser_js_0.5.2.tgz";
+ path = fetchurl {
+ name = "http_parser_js___http_parser_js_0.5.2.tgz";
+ url = "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz";
+ sha1 = "da2e31d237b393aae72ace43882dd7e270a8ff77";
+ };
+ }
+ {
+ name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz";
+ path = fetchurl {
+ name = "http_proxy_middleware___http_proxy_middleware_0.19.1.tgz";
+ url = "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz";
+ sha1 = "183c7dc4aa1479150306498c210cdaf96080a43a";
+ };
+ }
+ {
+ name = "http_proxy___http_proxy_1.18.1.tgz";
+ path = fetchurl {
+ name = "http_proxy___http_proxy_1.18.1.tgz";
+ url = "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz";
+ sha1 = "401541f0534884bbf95260334e72f88ee3976549";
+ };
+ }
+ {
+ name = "http_signature___http_signature_1.2.0.tgz";
+ path = fetchurl {
+ name = "http_signature___http_signature_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz";
+ sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+ };
+ }
+ {
+ name = "https_browserify___https_browserify_1.0.0.tgz";
+ path = fetchurl {
+ name = "https_browserify___https_browserify_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz";
+ sha1 = "ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73";
+ };
+ }
+ {
+ name = "human_signals___human_signals_1.1.1.tgz";
+ path = fetchurl {
+ name = "human_signals___human_signals_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz";
+ sha1 = "c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3";
+ };
+ }
+ {
+ name = "iconv_lite___iconv_lite_0.4.24.tgz";
+ path = fetchurl {
+ name = "iconv_lite___iconv_lite_0.4.24.tgz";
+ url = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz";
+ sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b";
+ };
+ }
+ {
+ name = "icss_utils___icss_utils_4.1.1.tgz";
+ path = fetchurl {
+ name = "icss_utils___icss_utils_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz";
+ sha1 = "21170b53789ee27447c2f47dd683081403f9a467";
+ };
+ }
+ {
+ name = "ieee754___ieee754_1.1.13.tgz";
+ path = fetchurl {
+ name = "ieee754___ieee754_1.1.13.tgz";
+ url = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz";
+ sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84";
+ };
+ }
+ {
+ name = "iferr___iferr_0.1.5.tgz";
+ path = fetchurl {
+ name = "iferr___iferr_0.1.5.tgz";
+ url = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz";
+ sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501";
+ };
+ }
+ {
+ name = "ignore___ignore_3.3.10.tgz";
+ path = fetchurl {
+ name = "ignore___ignore_3.3.10.tgz";
+ url = "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz";
+ sha1 = "0a97fb876986e8081c631160f8f9f389157f0043";
+ };
+ }
+ {
+ name = "ignore___ignore_4.0.6.tgz";
+ path = fetchurl {
+ name = "ignore___ignore_4.0.6.tgz";
+ url = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz";
+ sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc";
+ };
+ }
+ {
+ name = "import_cwd___import_cwd_2.1.0.tgz";
+ path = fetchurl {
+ name = "import_cwd___import_cwd_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz";
+ sha1 = "aa6cf36e722761285cb371ec6519f53e2435b0a9";
+ };
+ }
+ {
+ name = "import_fresh___import_fresh_2.0.0.tgz";
+ path = fetchurl {
+ name = "import_fresh___import_fresh_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz";
+ sha1 = "d81355c15612d386c61f9ddd3922d4304822a546";
+ };
+ }
+ {
+ name = "import_fresh___import_fresh_3.2.1.tgz";
+ path = fetchurl {
+ name = "import_fresh___import_fresh_3.2.1.tgz";
+ url = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz";
+ sha1 = "633ff618506e793af5ac91bf48b72677e15cbe66";
+ };
+ }
+ {
+ name = "import_from___import_from_2.1.0.tgz";
+ path = fetchurl {
+ name = "import_from___import_from_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz";
+ sha1 = "335db7f2a7affd53aaa471d4b8021dee36b7f3b1";
+ };
+ }
+ {
+ name = "import_local___import_local_2.0.0.tgz";
+ path = fetchurl {
+ name = "import_local___import_local_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz";
+ sha1 = "55070be38a5993cf18ef6db7e961f5bee5c5a09d";
+ };
+ }
+ {
+ name = "imurmurhash___imurmurhash_0.1.4.tgz";
+ path = fetchurl {
+ name = "imurmurhash___imurmurhash_0.1.4.tgz";
+ url = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz";
+ sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+ };
+ }
+ {
+ name = "indent_string___indent_string_4.0.0.tgz";
+ path = fetchurl {
+ name = "indent_string___indent_string_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz";
+ sha1 = "624f8f4497d619b2d9768531d58f4122854d7251";
+ };
+ }
+ {
+ name = "indexes_of___indexes_of_1.0.1.tgz";
+ path = fetchurl {
+ name = "indexes_of___indexes_of_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz";
+ sha1 = "f30f716c8e2bd346c7b67d3df3915566a7c05607";
+ };
+ }
+ {
+ name = "infer_owner___infer_owner_1.0.4.tgz";
+ path = fetchurl {
+ name = "infer_owner___infer_owner_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz";
+ sha1 = "c4cefcaa8e51051c2a40ba2ce8a3d27295af9467";
+ };
+ }
+ {
+ name = "inflight___inflight_1.0.6.tgz";
+ path = fetchurl {
+ name = "inflight___inflight_1.0.6.tgz";
+ url = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
+ sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+ };
+ }
+ {
+ name = "inherits___inherits_2.0.4.tgz";
+ path = fetchurl {
+ name = "inherits___inherits_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz";
+ sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c";
+ };
+ }
+ {
+ name = "inherits___inherits_2.0.1.tgz";
+ path = fetchurl {
+ name = "inherits___inherits_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz";
+ sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
+ };
+ }
+ {
+ name = "inherits___inherits_2.0.3.tgz";
+ path = fetchurl {
+ name = "inherits___inherits_2.0.3.tgz";
+ url = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz";
+ sha1 = "633c2c83e3da42a502f52466022480f4208261de";
+ };
+ }
+ {
+ name = "inquirer___inquirer_7.1.0.tgz";
+ path = fetchurl {
+ name = "inquirer___inquirer_7.1.0.tgz";
+ url = "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz";
+ sha1 = "1298a01859883e17c7264b82870ae1034f92dd29";
+ };
+ }
+ {
+ name = "internal_ip___internal_ip_4.3.0.tgz";
+ path = fetchurl {
+ name = "internal_ip___internal_ip_4.3.0.tgz";
+ url = "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz";
+ sha1 = "845452baad9d2ca3b69c635a137acb9a0dad0907";
+ };
+ }
+ {
+ name = "invariant___invariant_2.2.4.tgz";
+ path = fetchurl {
+ name = "invariant___invariant_2.2.4.tgz";
+ url = "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz";
+ sha1 = "610f3c92c9359ce1db616e538008d23ff35158e6";
+ };
+ }
+ {
+ name = "ip_regex___ip_regex_2.1.0.tgz";
+ path = fetchurl {
+ name = "ip_regex___ip_regex_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz";
+ sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9";
+ };
+ }
+ {
+ name = "ip___ip_1.1.5.tgz";
+ path = fetchurl {
+ name = "ip___ip_1.1.5.tgz";
+ url = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz";
+ sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a";
+ };
+ }
+ {
+ name = "ipaddr.js___ipaddr.js_1.9.1.tgz";
+ path = fetchurl {
+ name = "ipaddr.js___ipaddr.js_1.9.1.tgz";
+ url = "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz";
+ sha1 = "bff38543eeb8984825079ff3a2a8e6cbd46781b3";
+ };
+ }
+ {
+ name = "is_absolute_url___is_absolute_url_2.1.0.tgz";
+ path = fetchurl {
+ name = "is_absolute_url___is_absolute_url_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz";
+ sha1 = "50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6";
+ };
+ }
+ {
+ name = "is_absolute_url___is_absolute_url_3.0.3.tgz";
+ path = fetchurl {
+ name = "is_absolute_url___is_absolute_url_3.0.3.tgz";
+ url = "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz";
+ sha1 = "96c6a22b6a23929b11ea0afb1836c36ad4a5d698";
+ };
+ }
+ {
+ name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+ path = fetchurl {
+ name = "is_accessor_descriptor___is_accessor_descriptor_0.1.6.tgz";
+ url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";
+ sha1 = "a9e12cb3ae8d876727eeef3843f8a0897b5c98d6";
+ };
+ }
+ {
+ name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+ path = fetchurl {
+ name = "is_accessor_descriptor___is_accessor_descriptor_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz";
+ sha1 = "169c2f6d3df1f992618072365c9b0ea1f6878656";
+ };
+ }
+ {
+ name = "is_arguments___is_arguments_1.0.4.tgz";
+ path = fetchurl {
+ name = "is_arguments___is_arguments_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz";
+ sha1 = "3faf966c7cba0ff437fb31f6250082fcf0448cf3";
+ };
+ }
+ {
+ name = "is_arrayish___is_arrayish_0.2.1.tgz";
+ path = fetchurl {
+ name = "is_arrayish___is_arrayish_0.2.1.tgz";
+ url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz";
+ sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+ };
+ }
+ {
+ name = "is_arrayish___is_arrayish_0.3.2.tgz";
+ path = fetchurl {
+ name = "is_arrayish___is_arrayish_0.3.2.tgz";
+ url = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz";
+ sha1 = "4574a2ae56f7ab206896fb431eaeed066fdf8f03";
+ };
+ }
+ {
+ name = "is_binary_path___is_binary_path_1.0.1.tgz";
+ path = fetchurl {
+ name = "is_binary_path___is_binary_path_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz";
+ sha1 = "75f16642b480f187a711c814161fd3a4a7655898";
+ };
+ }
+ {
+ name = "is_binary_path___is_binary_path_2.1.0.tgz";
+ path = fetchurl {
+ name = "is_binary_path___is_binary_path_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz";
+ sha1 = "ea1f7f3b80f064236e83470f86c09c254fb45b09";
+ };
+ }
+ {
+ name = "is_buffer___is_buffer_1.1.6.tgz";
+ path = fetchurl {
+ name = "is_buffer___is_buffer_1.1.6.tgz";
+ url = "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz";
+ sha1 = "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be";
+ };
+ }
+ {
+ name = "is_callable___is_callable_1.2.0.tgz";
+ path = fetchurl {
+ name = "is_callable___is_callable_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz";
+ sha1 = "83336560b54a38e35e3a2df7afd0454d691468bb";
+ };
+ }
+ {
+ name = "is_ci___is_ci_1.2.1.tgz";
+ path = fetchurl {
+ name = "is_ci___is_ci_1.2.1.tgz";
+ url = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz";
+ sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c";
+ };
+ }
+ {
+ name = "is_color_stop___is_color_stop_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_color_stop___is_color_stop_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz";
+ sha1 = "cfff471aee4dd5c9e158598fbe12967b5cdad345";
+ };
+ }
+ {
+ name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+ path = fetchurl {
+ name = "is_data_descriptor___is_data_descriptor_0.1.4.tgz";
+ url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";
+ sha1 = "0b5ee648388e2c860282e793f1856fec3f301b56";
+ };
+ }
+ {
+ name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+ path = fetchurl {
+ name = "is_data_descriptor___is_data_descriptor_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz";
+ sha1 = "d84876321d0e7add03990406abbbbd36ba9268c7";
+ };
+ }
+ {
+ name = "is_date_object___is_date_object_1.0.2.tgz";
+ path = fetchurl {
+ name = "is_date_object___is_date_object_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz";
+ sha1 = "bda736f2cd8fd06d32844e7743bfa7494c3bfd7e";
+ };
+ }
+ {
+ name = "is_descriptor___is_descriptor_0.1.6.tgz";
+ path = fetchurl {
+ name = "is_descriptor___is_descriptor_0.1.6.tgz";
+ url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz";
+ sha1 = "366d8240dde487ca51823b1ab9f07a10a78251ca";
+ };
+ }
+ {
+ name = "is_descriptor___is_descriptor_1.0.2.tgz";
+ path = fetchurl {
+ name = "is_descriptor___is_descriptor_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz";
+ sha1 = "3b159746a66604b04f8c81524ba365c5f14d86ec";
+ };
+ }
+ {
+ name = "is_directory___is_directory_0.3.1.tgz";
+ path = fetchurl {
+ name = "is_directory___is_directory_0.3.1.tgz";
+ url = "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz";
+ sha1 = "61339b6f2475fc772fd9c9d83f5c8575dc154ae1";
+ };
+ }
+ {
+ name = "is_docker___is_docker_2.0.0.tgz";
+ path = fetchurl {
+ name = "is_docker___is_docker_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz";
+ sha1 = "2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b";
+ };
+ }
+ {
+ name = "is_extendable___is_extendable_0.1.1.tgz";
+ path = fetchurl {
+ name = "is_extendable___is_extendable_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz";
+ sha1 = "62b110e289a471418e3ec36a617d472e301dfc89";
+ };
+ }
+ {
+ name = "is_extendable___is_extendable_1.0.1.tgz";
+ path = fetchurl {
+ name = "is_extendable___is_extendable_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz";
+ sha1 = "a7470f9e426733d81bd81e1155264e3a3507cab4";
+ };
+ }
+ {
+ name = "is_extglob___is_extglob_2.1.1.tgz";
+ path = fetchurl {
+ name = "is_extglob___is_extglob_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz";
+ sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+ };
+ }
+ {
+ name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+ path = fetchurl {
+ name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+ sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+ };
+ }
+ {
+ name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz";
+ path = fetchurl {
+ name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+ sha1 = "f116f8064fe90b3f7844a38997c0b75051269f1d";
+ };
+ }
+ {
+ name = "is_glob___is_glob_3.1.0.tgz";
+ path = fetchurl {
+ name = "is_glob___is_glob_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz";
+ sha1 = "7ba5ae24217804ac70707b96922567486cc3e84a";
+ };
+ }
+ {
+ name = "is_glob___is_glob_4.0.1.tgz";
+ path = fetchurl {
+ name = "is_glob___is_glob_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz";
+ sha1 = "7567dbe9f2f5e2467bc77ab83c4a29482407a5dc";
+ };
+ }
+ {
+ name = "is_number___is_number_3.0.0.tgz";
+ path = fetchurl {
+ name = "is_number___is_number_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz";
+ sha1 = "24fd6201a4782cf50561c810276afc7d12d71195";
+ };
+ }
+ {
+ name = "is_number___is_number_7.0.0.tgz";
+ path = fetchurl {
+ name = "is_number___is_number_7.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz";
+ sha1 = "7535345b896734d5f80c4d06c50955527a14f12b";
+ };
+ }
+ {
+ name = "is_obj___is_obj_1.0.1.tgz";
+ path = fetchurl {
+ name = "is_obj___is_obj_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz";
+ sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
+ };
+ }
+ {
+ name = "is_obj___is_obj_2.0.0.tgz";
+ path = fetchurl {
+ name = "is_obj___is_obj_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz";
+ sha1 = "473fb05d973705e3fd9620545018ca8e22ef4982";
+ };
+ }
+ {
+ name = "is_path_cwd___is_path_cwd_2.2.0.tgz";
+ path = fetchurl {
+ name = "is_path_cwd___is_path_cwd_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz";
+ sha1 = "67d43b82664a7b5191fd9119127eb300048a9fdb";
+ };
+ }
+ {
+ name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz";
+ path = fetchurl {
+ name = "is_path_in_cwd___is_path_in_cwd_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz";
+ sha1 = "bfe2dca26c69f397265a4009963602935a053acb";
+ };
+ }
+ {
+ name = "is_path_inside___is_path_inside_2.1.0.tgz";
+ path = fetchurl {
+ name = "is_path_inside___is_path_inside_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz";
+ sha1 = "7c9810587d659a40d27bcdb4d5616eab059494b2";
+ };
+ }
+ {
+ name = "is_plain_obj___is_plain_obj_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_plain_obj___is_plain_obj_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
+ sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
+ };
+ }
+ {
+ name = "is_plain_object___is_plain_object_2.0.4.tgz";
+ path = fetchurl {
+ name = "is_plain_object___is_plain_object_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz";
+ sha1 = "2c163b3fafb1b606d9d17928f05c2a1c38e07677";
+ };
+ }
+ {
+ name = "is_regex___is_regex_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_regex___is_regex_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz";
+ sha1 = "ece38e389e490df0dc21caea2bd596f987f767ff";
+ };
+ }
+ {
+ name = "is_regexp___is_regexp_1.0.0.tgz";
+ path = fetchurl {
+ name = "is_regexp___is_regexp_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz";
+ sha1 = "fd2d883545c46bac5a633e7b9a09e87fa2cb5069";
+ };
+ }
+ {
+ name = "is_resolvable___is_resolvable_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_resolvable___is_resolvable_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz";
+ sha1 = "fb18f87ce1feb925169c9a407c19318a3206ed88";
+ };
+ }
+ {
+ name = "is_stream___is_stream_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_stream___is_stream_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz";
+ sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+ };
+ }
+ {
+ name = "is_stream___is_stream_2.0.0.tgz";
+ path = fetchurl {
+ name = "is_stream___is_stream_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz";
+ sha1 = "bde9c32680d6fae04129d6ac9d921ce7815f78e3";
+ };
+ }
+ {
+ name = "is_svg___is_svg_3.0.0.tgz";
+ path = fetchurl {
+ name = "is_svg___is_svg_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz";
+ sha1 = "9321dbd29c212e5ca99c4fa9794c714bcafa2f75";
+ };
+ }
+ {
+ name = "is_symbol___is_symbol_1.0.3.tgz";
+ path = fetchurl {
+ name = "is_symbol___is_symbol_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz";
+ sha1 = "38e1014b9e6329be0de9d24a414fd7441ec61937";
+ };
+ }
+ {
+ name = "is_typedarray___is_typedarray_1.0.0.tgz";
+ path = fetchurl {
+ name = "is_typedarray___is_typedarray_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz";
+ sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+ };
+ }
+ {
+ name = "is_windows___is_windows_1.0.2.tgz";
+ path = fetchurl {
+ name = "is_windows___is_windows_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz";
+ sha1 = "d1850eb9791ecd18e6182ce12a30f396634bb19d";
+ };
+ }
+ {
+ name = "is_wsl___is_wsl_1.1.0.tgz";
+ path = fetchurl {
+ name = "is_wsl___is_wsl_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz";
+ sha1 = "1f16e4aa22b04d1336b66188a66af3c600c3a66d";
+ };
+ }
+ {
+ name = "is_wsl___is_wsl_2.2.0.tgz";
+ path = fetchurl {
+ name = "is_wsl___is_wsl_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz";
+ sha1 = "74a4c76e77ca9fd3f932f290c17ea326cd157271";
+ };
+ }
+ {
+ name = "isarray___isarray_1.0.0.tgz";
+ path = fetchurl {
+ name = "isarray___isarray_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
+ sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+ };
+ }
+ {
+ name = "isexe___isexe_2.0.0.tgz";
+ path = fetchurl {
+ name = "isexe___isexe_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz";
+ sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+ };
+ }
+ {
+ name = "isobject___isobject_2.1.0.tgz";
+ path = fetchurl {
+ name = "isobject___isobject_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz";
+ sha1 = "f065561096a3f1da2ef46272f815c840d87e0c89";
+ };
+ }
+ {
+ name = "isobject___isobject_3.0.1.tgz";
+ path = fetchurl {
+ name = "isobject___isobject_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz";
+ sha1 = "4e431e92b11a9731636aa1f9c8d1ccbcfdab78df";
+ };
+ }
+ {
+ name = "isstream___isstream_0.1.2.tgz";
+ path = fetchurl {
+ name = "isstream___isstream_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz";
+ sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+ };
+ }
+ {
+ name = "javascript_stringify___javascript_stringify_2.0.1.tgz";
+ path = fetchurl {
+ name = "javascript_stringify___javascript_stringify_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz";
+ sha1 = "6ef358035310e35d667c675ed63d3eb7c1aa19e5";
+ };
+ }
+ {
+ name = "jest_worker___jest_worker_25.5.0.tgz";
+ path = fetchurl {
+ name = "jest_worker___jest_worker_25.5.0.tgz";
+ url = "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz";
+ sha1 = "2611d071b79cea0f43ee57a3d118593ac1547db1";
+ };
+ }
+ {
+ name = "js_message___js_message_1.0.5.tgz";
+ path = fetchurl {
+ name = "js_message___js_message_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz";
+ sha1 = "2300d24b1af08e89dd095bc1a4c9c9cfcb892d15";
+ };
+ }
+ {
+ name = "js_queue___js_queue_2.0.0.tgz";
+ path = fetchurl {
+ name = "js_queue___js_queue_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz";
+ sha1 = "362213cf860f468f0125fc6c96abc1742531f948";
+ };
+ }
+ {
+ name = "js_tokens___js_tokens_4.0.0.tgz";
+ path = fetchurl {
+ name = "js_tokens___js_tokens_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz";
+ sha1 = "19203fb59991df98e3a287050d4647cdeaf32499";
+ };
+ }
+ {
+ name = "js_yaml___js_yaml_3.14.0.tgz";
+ path = fetchurl {
+ name = "js_yaml___js_yaml_3.14.0.tgz";
+ url = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz";
+ sha1 = "a7a34170f26a21bb162424d8adacb4113a69e482";
+ };
+ }
+ {
+ name = "jsbn___jsbn_0.1.1.tgz";
+ path = fetchurl {
+ name = "jsbn___jsbn_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz";
+ sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+ };
+ }
+ {
+ name = "jsesc___jsesc_2.5.2.tgz";
+ path = fetchurl {
+ name = "jsesc___jsesc_2.5.2.tgz";
+ url = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz";
+ sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4";
+ };
+ }
+ {
+ name = "jsesc___jsesc_0.5.0.tgz";
+ path = fetchurl {
+ name = "jsesc___jsesc_0.5.0.tgz";
+ url = "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz";
+ sha1 = "e7dee66e35d6fc16f710fe91d5cf69f70f08911d";
+ };
+ }
+ {
+ name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+ path = fetchurl {
+ name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+ sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9";
+ };
+ }
+ {
+ name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+ path = fetchurl {
+ name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+ url = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+ sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660";
+ };
+ }
+ {
+ name = "json_schema___json_schema_0.2.3.tgz";
+ path = fetchurl {
+ name = "json_schema___json_schema_0.2.3.tgz";
+ url = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz";
+ sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+ };
+ }
+ {
+ name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+ path = fetchurl {
+ name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+ sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+ };
+ }
+ {
+ name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz";
+ path = fetchurl {
+ name = "json_stable_stringify___json_stable_stringify_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz";
+ sha1 = "9a759d39c5f2ff503fd5300646ed445f88c4f9af";
+ };
+ }
+ {
+ name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
+ path = fetchurl {
+ name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
+ url = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+ sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+ };
+ }
+ {
+ name = "json3___json3_3.3.3.tgz";
+ path = fetchurl {
+ name = "json3___json3_3.3.3.tgz";
+ url = "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz";
+ sha1 = "7fc10e375fc5ae42c4705a5cc0aa6f62be305b81";
+ };
+ }
+ {
+ name = "json5___json5_0.5.1.tgz";
+ path = fetchurl {
+ name = "json5___json5_0.5.1.tgz";
+ url = "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz";
+ sha1 = "1eade7acc012034ad84e2396767ead9fa5495821";
+ };
+ }
+ {
+ name = "json5___json5_1.0.1.tgz";
+ path = fetchurl {
+ name = "json5___json5_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz";
+ sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe";
+ };
+ }
+ {
+ name = "json5___json5_2.1.3.tgz";
+ path = fetchurl {
+ name = "json5___json5_2.1.3.tgz";
+ url = "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz";
+ sha1 = "c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43";
+ };
+ }
+ {
+ name = "jsonfile___jsonfile_4.0.0.tgz";
+ path = fetchurl {
+ name = "jsonfile___jsonfile_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz";
+ sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb";
+ };
+ }
+ {
+ name = "jsonify___jsonify_0.0.0.tgz";
+ path = fetchurl {
+ name = "jsonify___jsonify_0.0.0.tgz";
+ url = "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz";
+ sha1 = "2c74b6ee41d93ca51b7b5aaee8f503631d252a73";
+ };
+ }
+ {
+ name = "jsprim___jsprim_1.4.1.tgz";
+ path = fetchurl {
+ name = "jsprim___jsprim_1.4.1.tgz";
+ url = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz";
+ sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+ };
+ }
+ {
+ name = "killable___killable_1.0.1.tgz";
+ path = fetchurl {
+ name = "killable___killable_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz";
+ sha1 = "4c8ce441187a061c7474fb87ca08e2a638194892";
+ };
+ }
+ {
+ name = "kind_of___kind_of_3.2.2.tgz";
+ path = fetchurl {
+ name = "kind_of___kind_of_3.2.2.tgz";
+ url = "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz";
+ sha1 = "31ea21a734bab9bbb0f32466d893aea51e4a3c64";
+ };
+ }
+ {
+ name = "kind_of___kind_of_4.0.0.tgz";
+ path = fetchurl {
+ name = "kind_of___kind_of_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz";
+ sha1 = "20813df3d712928b207378691a45066fae72dd57";
+ };
+ }
+ {
+ name = "kind_of___kind_of_5.1.0.tgz";
+ path = fetchurl {
+ name = "kind_of___kind_of_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz";
+ sha1 = "729c91e2d857b7a419a1f9aa65685c4c33f5845d";
+ };
+ }
+ {
+ name = "kind_of___kind_of_6.0.3.tgz";
+ path = fetchurl {
+ name = "kind_of___kind_of_6.0.3.tgz";
+ url = "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz";
+ sha1 = "07c05034a6c349fa06e24fa35aa76db4580ce4dd";
+ };
+ }
+ {
+ name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz";
+ path = fetchurl {
+ name = "launch_editor_middleware___launch_editor_middleware_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz";
+ sha1 = "e14b07e6c7154b0a4b86a0fd345784e45804c157";
+ };
+ }
+ {
+ name = "launch_editor___launch_editor_2.2.1.tgz";
+ path = fetchurl {
+ name = "launch_editor___launch_editor_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz";
+ sha1 = "871b5a3ee39d6680fcc26d37930b6eeda89db0ca";
+ };
+ }
+ {
+ name = "leven___leven_3.1.0.tgz";
+ path = fetchurl {
+ name = "leven___leven_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz";
+ sha1 = "77891de834064cccba82ae7842bb6b14a13ed7f2";
+ };
+ }
+ {
+ name = "levenary___levenary_1.1.1.tgz";
+ path = fetchurl {
+ name = "levenary___levenary_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz";
+ sha1 = "842a9ee98d2075aa7faeedbe32679e9205f46f77";
+ };
+ }
+ {
+ name = "levn___levn_0.4.1.tgz";
+ path = fetchurl {
+ name = "levn___levn_0.4.1.tgz";
+ url = "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz";
+ sha1 = "ae4562c007473b932a6200d403268dd2fffc6ade";
+ };
+ }
+ {
+ name = "lines_and_columns___lines_and_columns_1.1.6.tgz";
+ path = fetchurl {
+ name = "lines_and_columns___lines_and_columns_1.1.6.tgz";
+ url = "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz";
+ sha1 = "1c00c743b433cd0a4e80758f7b64a57440d9ff00";
+ };
+ }
+ {
+ name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz";
+ path = fetchurl {
+ name = "loader_fs_cache___loader_fs_cache_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz";
+ sha1 = "f08657646d607078be2f0a032f8bd69dd6f277d9";
+ };
+ }
+ {
+ name = "loader_runner___loader_runner_2.4.0.tgz";
+ path = fetchurl {
+ name = "loader_runner___loader_runner_2.4.0.tgz";
+ url = "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz";
+ sha1 = "ed47066bfe534d7e84c4c7b9998c2a75607d9357";
+ };
+ }
+ {
+ name = "loader_utils___loader_utils_0.2.17.tgz";
+ path = fetchurl {
+ name = "loader_utils___loader_utils_0.2.17.tgz";
+ url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz";
+ sha1 = "f86e6374d43205a6e6c60e9196f17c0299bfb348";
+ };
+ }
+ {
+ name = "loader_utils___loader_utils_1.4.0.tgz";
+ path = fetchurl {
+ name = "loader_utils___loader_utils_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz";
+ sha1 = "c579b5e34cb34b1a74edc6c1fb36bfa371d5a613";
+ };
+ }
+ {
+ name = "loader_utils___loader_utils_2.0.0.tgz";
+ path = fetchurl {
+ name = "loader_utils___loader_utils_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz";
+ sha1 = "e4cace5b816d425a166b5f097e10cd12b36064b0";
+ };
+ }
+ {
+ name = "locate_path___locate_path_2.0.0.tgz";
+ path = fetchurl {
+ name = "locate_path___locate_path_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz";
+ sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+ };
+ }
+ {
+ name = "locate_path___locate_path_3.0.0.tgz";
+ path = fetchurl {
+ name = "locate_path___locate_path_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz";
+ sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e";
+ };
+ }
+ {
+ name = "locate_path___locate_path_5.0.0.tgz";
+ path = fetchurl {
+ name = "locate_path___locate_path_5.0.0.tgz";
+ url = "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz";
+ sha1 = "1afba396afd676a6d42504d0a67a3a7eb9f62aa0";
+ };
+ }
+ {
+ name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz";
+ path = fetchurl {
+ name = "lodash._reinterpolate___lodash._reinterpolate_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz";
+ sha1 = "0ccf2d89166af03b3663c796538b75ac6e114d9d";
+ };
+ }
+ {
+ name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz";
+ path = fetchurl {
+ name = "lodash.defaultsdeep___lodash.defaultsdeep_4.6.1.tgz";
+ url = "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz";
+ sha1 = "512e9bd721d272d94e3d3a63653fa17516741ca6";
+ };
+ }
+ {
+ name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz";
+ path = fetchurl {
+ name = "lodash.kebabcase___lodash.kebabcase_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz";
+ sha1 = "8489b1cb0d29ff88195cceca448ff6d6cc295c36";
+ };
+ }
+ {
+ name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz";
+ path = fetchurl {
+ name = "lodash.mapvalues___lodash.mapvalues_4.6.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz";
+ sha1 = "1bafa5005de9dd6f4f26668c30ca37230cc9689c";
+ };
+ }
+ {
+ name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+ path = fetchurl {
+ name = "lodash.memoize___lodash.memoize_4.1.2.tgz";
+ url = "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz";
+ sha1 = "bcc6c49a42a2840ed997f323eada5ecd182e0bfe";
+ };
+ }
+ {
+ name = "lodash.merge___lodash.merge_4.6.2.tgz";
+ path = fetchurl {
+ name = "lodash.merge___lodash.merge_4.6.2.tgz";
+ url = "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz";
+ sha1 = "558aa53b43b661e1925a0afdfa36a9a1085fe57a";
+ };
+ }
+ {
+ name = "lodash.template___lodash.template_4.5.0.tgz";
+ path = fetchurl {
+ name = "lodash.template___lodash.template_4.5.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz";
+ sha1 = "f976195cf3f347d0d5f52483569fe8031ccce8ab";
+ };
+ }
+ {
+ name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz";
+ path = fetchurl {
+ name = "lodash.templatesettings___lodash.templatesettings_4.2.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz";
+ sha1 = "e481310f049d3cf6d47e912ad09313b154f0fb33";
+ };
+ }
+ {
+ name = "lodash.transform___lodash.transform_4.6.0.tgz";
+ path = fetchurl {
+ name = "lodash.transform___lodash.transform_4.6.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz";
+ sha1 = "12306422f63324aed8483d3f38332b5f670547a0";
+ };
+ }
+ {
+ name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
+ path = fetchurl {
+ name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
+ url = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+ sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+ };
+ }
+ {
+ name = "lodash___lodash_4.17.15.tgz";
+ path = fetchurl {
+ name = "lodash___lodash_4.17.15.tgz";
+ url = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz";
+ sha1 = "b447f6670a0455bbfeedd11392eff330ea097548";
+ };
+ }
+ {
+ name = "log_symbols___log_symbols_2.2.0.tgz";
+ path = fetchurl {
+ name = "log_symbols___log_symbols_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz";
+ sha1 = "5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a";
+ };
+ }
+ {
+ name = "loglevel___loglevel_1.6.8.tgz";
+ path = fetchurl {
+ name = "loglevel___loglevel_1.6.8.tgz";
+ url = "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz";
+ sha1 = "8a25fb75d092230ecd4457270d80b54e28011171";
+ };
+ }
+ {
+ name = "loose_envify___loose_envify_1.4.0.tgz";
+ path = fetchurl {
+ name = "loose_envify___loose_envify_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz";
+ sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf";
+ };
+ }
+ {
+ name = "lower_case___lower_case_1.1.4.tgz";
+ path = fetchurl {
+ name = "lower_case___lower_case_1.1.4.tgz";
+ url = "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz";
+ sha1 = "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac";
+ };
+ }
+ {
+ name = "lru_cache___lru_cache_4.1.5.tgz";
+ path = fetchurl {
+ name = "lru_cache___lru_cache_4.1.5.tgz";
+ url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz";
+ sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd";
+ };
+ }
+ {
+ name = "lru_cache___lru_cache_5.1.1.tgz";
+ path = fetchurl {
+ name = "lru_cache___lru_cache_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz";
+ sha1 = "1da27e6710271947695daf6848e847f01d84b920";
+ };
+ }
+ {
+ name = "make_dir___make_dir_2.1.0.tgz";
+ path = fetchurl {
+ name = "make_dir___make_dir_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz";
+ sha1 = "5f0310e18b8be898cc07009295a30ae41e91e6f5";
+ };
+ }
+ {
+ name = "make_dir___make_dir_3.1.0.tgz";
+ path = fetchurl {
+ name = "make_dir___make_dir_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz";
+ sha1 = "415e967046b3a7f1d185277d84aa58203726a13f";
+ };
+ }
+ {
+ name = "map_cache___map_cache_0.2.2.tgz";
+ path = fetchurl {
+ name = "map_cache___map_cache_0.2.2.tgz";
+ url = "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz";
+ sha1 = "c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf";
+ };
+ }
+ {
+ name = "map_visit___map_visit_1.0.0.tgz";
+ path = fetchurl {
+ name = "map_visit___map_visit_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz";
+ sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f";
+ };
+ }
+ {
+ name = "md5.js___md5.js_1.3.5.tgz";
+ path = fetchurl {
+ name = "md5.js___md5.js_1.3.5.tgz";
+ url = "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz";
+ sha1 = "b5d07b8e3216e3e27cd728d72f70d1e6a342005f";
+ };
+ }
+ {
+ name = "mdn_data___mdn_data_2.0.4.tgz";
+ path = fetchurl {
+ name = "mdn_data___mdn_data_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz";
+ sha1 = "699b3c38ac6f1d728091a64650b65d388502fd5b";
+ };
+ }
+ {
+ name = "mdn_data___mdn_data_2.0.6.tgz";
+ path = fetchurl {
+ name = "mdn_data___mdn_data_2.0.6.tgz";
+ url = "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz";
+ sha1 = "852dc60fcaa5daa2e8cf6c9189c440ed3e042978";
+ };
+ }
+ {
+ name = "media_typer___media_typer_0.3.0.tgz";
+ path = fetchurl {
+ name = "media_typer___media_typer_0.3.0.tgz";
+ url = "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz";
+ sha1 = "8710d7af0aa626f8fffa1ce00168545263255748";
+ };
+ }
+ {
+ name = "memory_fs___memory_fs_0.4.1.tgz";
+ path = fetchurl {
+ name = "memory_fs___memory_fs_0.4.1.tgz";
+ url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz";
+ sha1 = "3a9a20b8462523e447cfbc7e8bb80ed667bfc552";
+ };
+ }
+ {
+ name = "memory_fs___memory_fs_0.5.0.tgz";
+ path = fetchurl {
+ name = "memory_fs___memory_fs_0.5.0.tgz";
+ url = "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz";
+ sha1 = "324c01288b88652966d161db77838720845a8e3c";
+ };
+ }
+ {
+ name = "merge_descriptors___merge_descriptors_1.0.1.tgz";
+ path = fetchurl {
+ name = "merge_descriptors___merge_descriptors_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz";
+ sha1 = "b00aaa556dd8b44568150ec9d1b953f3f90cbb61";
+ };
+ }
+ {
+ name = "merge_source_map___merge_source_map_1.1.0.tgz";
+ path = fetchurl {
+ name = "merge_source_map___merge_source_map_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz";
+ sha1 = "2fdde7e6020939f70906a68f2d7ae685e4c8c646";
+ };
+ }
+ {
+ name = "merge_stream___merge_stream_2.0.0.tgz";
+ path = fetchurl {
+ name = "merge_stream___merge_stream_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz";
+ sha1 = "52823629a14dd00c9770fb6ad47dc6310f2c1f60";
+ };
+ }
+ {
+ name = "merge2___merge2_1.4.1.tgz";
+ path = fetchurl {
+ name = "merge2___merge2_1.4.1.tgz";
+ url = "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz";
+ sha1 = "4368892f885e907455a6fd7dc55c0c9d404990ae";
+ };
+ }
+ {
+ name = "methods___methods_1.1.2.tgz";
+ path = fetchurl {
+ name = "methods___methods_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz";
+ sha1 = "5529a4d67654134edcc5266656835b0f851afcee";
+ };
+ }
+ {
+ name = "micromatch___micromatch_3.1.10.tgz";
+ path = fetchurl {
+ name = "micromatch___micromatch_3.1.10.tgz";
+ url = "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz";
+ sha1 = "70859bc95c9840952f359a068a3fc49f9ecfac23";
+ };
+ }
+ {
+ name = "miller_rabin___miller_rabin_4.0.1.tgz";
+ path = fetchurl {
+ name = "miller_rabin___miller_rabin_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz";
+ sha1 = "f080351c865b0dc562a8462966daa53543c78a4d";
+ };
+ }
+ {
+ name = "mime_db___mime_db_1.44.0.tgz";
+ path = fetchurl {
+ name = "mime_db___mime_db_1.44.0.tgz";
+ url = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz";
+ sha1 = "fa11c5eb0aca1334b4233cb4d52f10c5a6272f92";
+ };
+ }
+ {
+ name = "mime_types___mime_types_2.1.27.tgz";
+ path = fetchurl {
+ name = "mime_types___mime_types_2.1.27.tgz";
+ url = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz";
+ sha1 = "47949f98e279ea53119f5722e0f34e529bec009f";
+ };
+ }
+ {
+ name = "mime___mime_1.6.0.tgz";
+ path = fetchurl {
+ name = "mime___mime_1.6.0.tgz";
+ url = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz";
+ sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1";
+ };
+ }
+ {
+ name = "mime___mime_2.4.6.tgz";
+ path = fetchurl {
+ name = "mime___mime_2.4.6.tgz";
+ url = "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz";
+ sha1 = "e5b407c90db442f2beb5b162373d07b69affa4d1";
+ };
+ }
+ {
+ name = "mimic_fn___mimic_fn_1.2.0.tgz";
+ path = fetchurl {
+ name = "mimic_fn___mimic_fn_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz";
+ sha1 = "820c86a39334640e99516928bd03fca88057d022";
+ };
+ }
+ {
+ name = "mimic_fn___mimic_fn_2.1.0.tgz";
+ path = fetchurl {
+ name = "mimic_fn___mimic_fn_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz";
+ sha1 = "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b";
+ };
+ }
+ {
+ name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz";
+ path = fetchurl {
+ name = "mini_css_extract_plugin___mini_css_extract_plugin_0.9.0.tgz";
+ url = "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz";
+ sha1 = "47f2cf07aa165ab35733b1fc97d4c46c0564339e";
+ };
+ }
+ {
+ name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz";
+ path = fetchurl {
+ name = "minimalistic_assert___minimalistic_assert_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
+ sha1 = "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7";
+ };
+ }
+ {
+ name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz";
+ path = fetchurl {
+ name = "minimalistic_crypto_utils___minimalistic_crypto_utils_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz";
+ sha1 = "f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a";
+ };
+ }
+ {
+ name = "minimatch___minimatch_3.0.4.tgz";
+ path = fetchurl {
+ name = "minimatch___minimatch_3.0.4.tgz";
+ url = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
+ sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
+ };
+ }
+ {
+ name = "minimist___minimist_1.2.5.tgz";
+ path = fetchurl {
+ name = "minimist___minimist_1.2.5.tgz";
+ url = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz";
+ sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602";
+ };
+ }
+ {
+ name = "minipass_collect___minipass_collect_1.0.2.tgz";
+ path = fetchurl {
+ name = "minipass_collect___minipass_collect_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz";
+ sha1 = "22b813bf745dc6edba2576b940022ad6edc8c617";
+ };
+ }
+ {
+ name = "minipass_flush___minipass_flush_1.0.5.tgz";
+ path = fetchurl {
+ name = "minipass_flush___minipass_flush_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz";
+ sha1 = "82e7135d7e89a50ffe64610a787953c4c4cbb373";
+ };
+ }
+ {
+ name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz";
+ path = fetchurl {
+ name = "minipass_pipeline___minipass_pipeline_1.2.3.tgz";
+ url = "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz";
+ sha1 = "55f7839307d74859d6e8ada9c3ebe72cec216a34";
+ };
+ }
+ {
+ name = "minipass___minipass_3.1.3.tgz";
+ path = fetchurl {
+ name = "minipass___minipass_3.1.3.tgz";
+ url = "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz";
+ sha1 = "7d42ff1f39635482e15f9cdb53184deebd5815fd";
+ };
+ }
+ {
+ name = "mississippi___mississippi_3.0.0.tgz";
+ path = fetchurl {
+ name = "mississippi___mississippi_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz";
+ sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022";
+ };
+ }
+ {
+ name = "mixin_deep___mixin_deep_1.3.2.tgz";
+ path = fetchurl {
+ name = "mixin_deep___mixin_deep_1.3.2.tgz";
+ url = "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz";
+ sha1 = "1120b43dc359a785dce65b55b82e257ccf479566";
+ };
+ }
+ {
+ name = "mkdirp___mkdirp_0.5.5.tgz";
+ path = fetchurl {
+ name = "mkdirp___mkdirp_0.5.5.tgz";
+ url = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz";
+ sha1 = "d91cefd62d1436ca0f41620e251288d420099def";
+ };
+ }
+ {
+ name = "move_concurrently___move_concurrently_1.0.1.tgz";
+ path = fetchurl {
+ name = "move_concurrently___move_concurrently_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz";
+ sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92";
+ };
+ }
+ {
+ name = "ms___ms_2.0.0.tgz";
+ path = fetchurl {
+ name = "ms___ms_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
+ sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+ };
+ }
+ {
+ name = "ms___ms_2.1.1.tgz";
+ path = fetchurl {
+ name = "ms___ms_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz";
+ sha1 = "30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a";
+ };
+ }
+ {
+ name = "ms___ms_2.1.2.tgz";
+ path = fetchurl {
+ name = "ms___ms_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz";
+ sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009";
+ };
+ }
+ {
+ name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz";
+ path = fetchurl {
+ name = "multicast_dns_service_types___multicast_dns_service_types_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz";
+ sha1 = "899f11d9686e5e05cb91b35d5f0e63b773cfc901";
+ };
+ }
+ {
+ name = "multicast_dns___multicast_dns_6.2.3.tgz";
+ path = fetchurl {
+ name = "multicast_dns___multicast_dns_6.2.3.tgz";
+ url = "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz";
+ sha1 = "a0ec7bd9055c4282f790c3c82f4e28db3b31b229";
+ };
+ }
+ {
+ name = "mute_stream___mute_stream_0.0.8.tgz";
+ path = fetchurl {
+ name = "mute_stream___mute_stream_0.0.8.tgz";
+ url = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz";
+ sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d";
+ };
+ }
+ {
+ name = "mz___mz_2.7.0.tgz";
+ path = fetchurl {
+ name = "mz___mz_2.7.0.tgz";
+ url = "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz";
+ sha1 = "95008057a56cafadc2bc63dde7f9ff6955948e32";
+ };
+ }
+ {
+ name = "nan___nan_2.14.1.tgz";
+ path = fetchurl {
+ name = "nan___nan_2.14.1.tgz";
+ url = "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz";
+ sha1 = "d7be34dfa3105b91494c3147089315eff8874b01";
+ };
+ }
+ {
+ name = "nanomatch___nanomatch_1.2.13.tgz";
+ path = fetchurl {
+ name = "nanomatch___nanomatch_1.2.13.tgz";
+ url = "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz";
+ sha1 = "b87a8aa4fc0de8fe6be88895b38983ff265bd119";
+ };
+ }
+ {
+ name = "natural_compare___natural_compare_1.4.0.tgz";
+ path = fetchurl {
+ name = "natural_compare___natural_compare_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz";
+ sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+ };
+ }
+ {
+ name = "negotiator___negotiator_0.6.2.tgz";
+ path = fetchurl {
+ name = "negotiator___negotiator_0.6.2.tgz";
+ url = "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz";
+ sha1 = "feacf7ccf525a77ae9634436a64883ffeca346fb";
+ };
+ }
+ {
+ name = "neo_async___neo_async_2.6.1.tgz";
+ path = fetchurl {
+ name = "neo_async___neo_async_2.6.1.tgz";
+ url = "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz";
+ sha1 = "ac27ada66167fa8849a6addd837f6b189ad2081c";
+ };
+ }
+ {
+ name = "nice_try___nice_try_1.0.5.tgz";
+ path = fetchurl {
+ name = "nice_try___nice_try_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz";
+ sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366";
+ };
+ }
+ {
+ name = "no_case___no_case_2.3.2.tgz";
+ path = fetchurl {
+ name = "no_case___no_case_2.3.2.tgz";
+ url = "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz";
+ sha1 = "60b813396be39b3f1288a4c1ed5d1e7d28b464ac";
+ };
+ }
+ {
+ name = "node_forge___node_forge_0.9.0.tgz";
+ path = fetchurl {
+ name = "node_forge___node_forge_0.9.0.tgz";
+ url = "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz";
+ sha1 = "d624050edbb44874adca12bb9a52ec63cb782579";
+ };
+ }
+ {
+ name = "node_ipc___node_ipc_9.1.1.tgz";
+ path = fetchurl {
+ name = "node_ipc___node_ipc_9.1.1.tgz";
+ url = "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz";
+ sha1 = "4e245ed6938e65100e595ebc5dc34b16e8dd5d69";
+ };
+ }
+ {
+ name = "node_libs_browser___node_libs_browser_2.2.1.tgz";
+ path = fetchurl {
+ name = "node_libs_browser___node_libs_browser_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz";
+ sha1 = "b64f513d18338625f90346d27b0d235e631f6425";
+ };
+ }
+ {
+ name = "node_releases___node_releases_1.1.58.tgz";
+ path = fetchurl {
+ name = "node_releases___node_releases_1.1.58.tgz";
+ url = "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz";
+ sha1 = "8ee20eef30fa60e52755fcc0942def5a734fe935";
+ };
+ }
+ {
+ name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+ path = fetchurl {
+ name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+ url = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+ sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8";
+ };
+ }
+ {
+ name = "normalize_path___normalize_path_1.0.0.tgz";
+ path = fetchurl {
+ name = "normalize_path___normalize_path_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz";
+ sha1 = "32d0e472f91ff345701c15a8311018d3b0a90379";
+ };
+ }
+ {
+ name = "normalize_path___normalize_path_2.1.1.tgz";
+ path = fetchurl {
+ name = "normalize_path___normalize_path_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz";
+ sha1 = "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9";
+ };
+ }
+ {
+ name = "normalize_path___normalize_path_3.0.0.tgz";
+ path = fetchurl {
+ name = "normalize_path___normalize_path_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz";
+ sha1 = "0dcd69ff23a1c9b11fd0978316644a0388216a65";
+ };
+ }
+ {
+ name = "normalize_range___normalize_range_0.1.2.tgz";
+ path = fetchurl {
+ name = "normalize_range___normalize_range_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz";
+ sha1 = "2d10c06bdfd312ea9777695a4d28439456b75942";
+ };
+ }
+ {
+ name = "normalize_url___normalize_url_1.9.1.tgz";
+ path = fetchurl {
+ name = "normalize_url___normalize_url_1.9.1.tgz";
+ url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz";
+ sha1 = "2cc0d66b31ea23036458436e3620d85954c66c3c";
+ };
+ }
+ {
+ name = "normalize_url___normalize_url_3.3.0.tgz";
+ path = fetchurl {
+ name = "normalize_url___normalize_url_3.3.0.tgz";
+ url = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz";
+ sha1 = "b2e1c4dc4f7c6d57743df733a4f5978d18650559";
+ };
+ }
+ {
+ name = "npm_run_path___npm_run_path_2.0.2.tgz";
+ path = fetchurl {
+ name = "npm_run_path___npm_run_path_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz";
+ sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+ };
+ }
+ {
+ name = "npm_run_path___npm_run_path_4.0.1.tgz";
+ path = fetchurl {
+ name = "npm_run_path___npm_run_path_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz";
+ sha1 = "b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea";
+ };
+ }
+ {
+ name = "nth_check___nth_check_1.0.2.tgz";
+ path = fetchurl {
+ name = "nth_check___nth_check_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz";
+ sha1 = "b2bd295c37e3dd58a3bf0700376663ba4d9cf05c";
+ };
+ }
+ {
+ name = "num2fraction___num2fraction_1.2.2.tgz";
+ path = fetchurl {
+ name = "num2fraction___num2fraction_1.2.2.tgz";
+ url = "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz";
+ sha1 = "6f682b6a027a4e9ddfa4564cd2589d1d4e669ede";
+ };
+ }
+ {
+ name = "oauth_sign___oauth_sign_0.9.0.tgz";
+ path = fetchurl {
+ name = "oauth_sign___oauth_sign_0.9.0.tgz";
+ url = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz";
+ sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455";
+ };
+ }
+ {
+ name = "object_assign___object_assign_4.1.1.tgz";
+ path = fetchurl {
+ name = "object_assign___object_assign_4.1.1.tgz";
+ url = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz";
+ sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+ };
+ }
+ {
+ name = "object_copy___object_copy_0.1.0.tgz";
+ path = fetchurl {
+ name = "object_copy___object_copy_0.1.0.tgz";
+ url = "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz";
+ sha1 = "7e7d858b781bd7c991a41ba975ed3812754e998c";
+ };
+ }
+ {
+ name = "object_hash___object_hash_1.3.1.tgz";
+ path = fetchurl {
+ name = "object_hash___object_hash_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz";
+ sha1 = "fde452098a951cb145f039bb7d455449ddc126df";
+ };
+ }
+ {
+ name = "object_inspect___object_inspect_1.7.0.tgz";
+ path = fetchurl {
+ name = "object_inspect___object_inspect_1.7.0.tgz";
+ url = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz";
+ sha1 = "f4f6bd181ad77f006b5ece60bd0b6f398ff74a67";
+ };
+ }
+ {
+ name = "object_is___object_is_1.1.2.tgz";
+ path = fetchurl {
+ name = "object_is___object_is_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz";
+ sha1 = "c5d2e87ff9e119f78b7a088441519e2eec1573b6";
+ };
+ }
+ {
+ name = "object_keys___object_keys_1.1.1.tgz";
+ path = fetchurl {
+ name = "object_keys___object_keys_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz";
+ sha1 = "1c47f272df277f3b1daf061677d9c82e2322c60e";
+ };
+ }
+ {
+ name = "object_visit___object_visit_1.0.1.tgz";
+ path = fetchurl {
+ name = "object_visit___object_visit_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz";
+ sha1 = "f79c4493af0c5377b59fe39d395e41042dd045bb";
+ };
+ }
+ {
+ name = "object.assign___object.assign_4.1.0.tgz";
+ path = fetchurl {
+ name = "object.assign___object.assign_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz";
+ sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da";
+ };
+ }
+ {
+ name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz";
+ path = fetchurl {
+ name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz";
+ sha1 = "369bf1f9592d8ab89d712dced5cb81c7c5352649";
+ };
+ }
+ {
+ name = "object.pick___object.pick_1.3.0.tgz";
+ path = fetchurl {
+ name = "object.pick___object.pick_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz";
+ sha1 = "87a10ac4c1694bd2e1cbf53591a66141fb5dd747";
+ };
+ }
+ {
+ name = "object.values___object.values_1.1.1.tgz";
+ path = fetchurl {
+ name = "object.values___object.values_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz";
+ sha1 = "68a99ecde356b7e9295a3c5e0ce31dc8c953de5e";
+ };
+ }
+ {
+ name = "obuf___obuf_1.1.2.tgz";
+ path = fetchurl {
+ name = "obuf___obuf_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz";
+ sha1 = "09bea3343d41859ebd446292d11c9d4db619084e";
+ };
+ }
+ {
+ name = "on_finished___on_finished_2.3.0.tgz";
+ path = fetchurl {
+ name = "on_finished___on_finished_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz";
+ sha1 = "20f1336481b083cd75337992a16971aa2d906947";
+ };
+ }
+ {
+ name = "on_headers___on_headers_1.0.2.tgz";
+ path = fetchurl {
+ name = "on_headers___on_headers_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz";
+ sha1 = "772b0ae6aaa525c399e489adfad90c403eb3c28f";
+ };
+ }
+ {
+ name = "once___once_1.4.0.tgz";
+ path = fetchurl {
+ name = "once___once_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
+ sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+ };
+ }
+ {
+ name = "onetime___onetime_2.0.1.tgz";
+ path = fetchurl {
+ name = "onetime___onetime_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz";
+ sha1 = "067428230fd67443b2794b22bba528b6867962d4";
+ };
+ }
+ {
+ name = "onetime___onetime_5.1.0.tgz";
+ path = fetchurl {
+ name = "onetime___onetime_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz";
+ sha1 = "fff0f3c91617fe62bb50189636e99ac8a6df7be5";
+ };
+ }
+ {
+ name = "open___open_6.4.0.tgz";
+ path = fetchurl {
+ name = "open___open_6.4.0.tgz";
+ url = "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz";
+ sha1 = "5c13e96d0dc894686164f18965ecfe889ecfc8a9";
+ };
+ }
+ {
+ name = "opener___opener_1.5.1.tgz";
+ path = fetchurl {
+ name = "opener___opener_1.5.1.tgz";
+ url = "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz";
+ sha1 = "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed";
+ };
+ }
+ {
+ name = "opn___opn_5.5.0.tgz";
+ path = fetchurl {
+ name = "opn___opn_5.5.0.tgz";
+ url = "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz";
+ sha1 = "fc7164fab56d235904c51c3b27da6758ca3b9bfc";
+ };
+ }
+ {
+ name = "optionator___optionator_0.9.1.tgz";
+ path = fetchurl {
+ name = "optionator___optionator_0.9.1.tgz";
+ url = "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz";
+ sha1 = "4f236a6373dae0566a6d43e1326674f50c291499";
+ };
+ }
+ {
+ name = "ora___ora_3.4.0.tgz";
+ path = fetchurl {
+ name = "ora___ora_3.4.0.tgz";
+ url = "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz";
+ sha1 = "bf0752491059a3ef3ed4c85097531de9fdbcd318";
+ };
+ }
+ {
+ name = "original___original_1.0.2.tgz";
+ path = fetchurl {
+ name = "original___original_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz";
+ sha1 = "e442a61cffe1c5fd20a65f3261c26663b303f25f";
+ };
+ }
+ {
+ name = "os_browserify___os_browserify_0.3.0.tgz";
+ path = fetchurl {
+ name = "os_browserify___os_browserify_0.3.0.tgz";
+ url = "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz";
+ sha1 = "854373c7f5c2315914fc9bfc6bd8238fdda1ec27";
+ };
+ }
+ {
+ name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+ path = fetchurl {
+ name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+ sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+ };
+ }
+ {
+ name = "p_finally___p_finally_1.0.0.tgz";
+ path = fetchurl {
+ name = "p_finally___p_finally_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz";
+ sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+ };
+ }
+ {
+ name = "p_finally___p_finally_2.0.1.tgz";
+ path = fetchurl {
+ name = "p_finally___p_finally_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz";
+ sha1 = "bd6fcaa9c559a096b680806f4d657b3f0f240561";
+ };
+ }
+ {
+ name = "p_limit___p_limit_1.3.0.tgz";
+ path = fetchurl {
+ name = "p_limit___p_limit_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz";
+ sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8";
+ };
+ }
+ {
+ name = "p_limit___p_limit_2.3.0.tgz";
+ path = fetchurl {
+ name = "p_limit___p_limit_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz";
+ sha1 = "3dd33c647a214fdfffd835933eb086da0dc21db1";
+ };
+ }
+ {
+ name = "p_locate___p_locate_2.0.0.tgz";
+ path = fetchurl {
+ name = "p_locate___p_locate_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz";
+ sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+ };
+ }
+ {
+ name = "p_locate___p_locate_3.0.0.tgz";
+ path = fetchurl {
+ name = "p_locate___p_locate_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz";
+ sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4";
+ };
+ }
+ {
+ name = "p_locate___p_locate_4.1.0.tgz";
+ path = fetchurl {
+ name = "p_locate___p_locate_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz";
+ sha1 = "a3428bb7088b3a60292f66919278b7c297ad4f07";
+ };
+ }
+ {
+ name = "p_map___p_map_2.1.0.tgz";
+ path = fetchurl {
+ name = "p_map___p_map_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz";
+ sha1 = "310928feef9c9ecc65b68b17693018a665cea175";
+ };
+ }
+ {
+ name = "p_map___p_map_3.0.0.tgz";
+ path = fetchurl {
+ name = "p_map___p_map_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz";
+ sha1 = "d704d9af8a2ba684e2600d9a215983d4141a979d";
+ };
+ }
+ {
+ name = "p_retry___p_retry_3.0.1.tgz";
+ path = fetchurl {
+ name = "p_retry___p_retry_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz";
+ sha1 = "316b4c8893e2c8dc1cfa891f406c4b422bebf328";
+ };
+ }
+ {
+ name = "p_try___p_try_1.0.0.tgz";
+ path = fetchurl {
+ name = "p_try___p_try_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz";
+ sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+ };
+ }
+ {
+ name = "p_try___p_try_2.2.0.tgz";
+ path = fetchurl {
+ name = "p_try___p_try_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz";
+ sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6";
+ };
+ }
+ {
+ name = "pako___pako_1.0.11.tgz";
+ path = fetchurl {
+ name = "pako___pako_1.0.11.tgz";
+ url = "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz";
+ sha1 = "6c9599d340d54dfd3946380252a35705a6b992bf";
+ };
+ }
+ {
+ name = "parallel_transform___parallel_transform_1.2.0.tgz";
+ path = fetchurl {
+ name = "parallel_transform___parallel_transform_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz";
+ sha1 = "9049ca37d6cb2182c3b1d2c720be94d14a5814fc";
+ };
+ }
+ {
+ name = "param_case___param_case_2.1.1.tgz";
+ path = fetchurl {
+ name = "param_case___param_case_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz";
+ sha1 = "df94fd8cf6531ecf75e6bef9a0858fbc72be2247";
+ };
+ }
+ {
+ name = "parent_module___parent_module_1.0.1.tgz";
+ path = fetchurl {
+ name = "parent_module___parent_module_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz";
+ sha1 = "691d2709e78c79fae3a156622452d00762caaaa2";
+ };
+ }
+ {
+ name = "parse_asn1___parse_asn1_5.1.5.tgz";
+ path = fetchurl {
+ name = "parse_asn1___parse_asn1_5.1.5.tgz";
+ url = "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz";
+ sha1 = "003271343da58dc94cace494faef3d2147ecea0e";
+ };
+ }
+ {
+ name = "parse_json___parse_json_4.0.0.tgz";
+ path = fetchurl {
+ name = "parse_json___parse_json_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz";
+ sha1 = "be35f5425be1f7f6c747184f98a788cb99477ee0";
+ };
+ }
+ {
+ name = "parse_json___parse_json_5.0.0.tgz";
+ path = fetchurl {
+ name = "parse_json___parse_json_5.0.0.tgz";
+ url = "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz";
+ sha1 = "73e5114c986d143efa3712d4ea24db9a4266f60f";
+ };
+ }
+ {
+ name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz";
+ path = fetchurl {
+ name = "parse5_htmlparser2_tree_adapter___parse5_htmlparser2_tree_adapter_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz";
+ sha1 = "e8c743d4e92194d5293ecde2b08be31e67461cbc";
+ };
+ }
+ {
+ name = "parse5___parse5_5.1.1.tgz";
+ path = fetchurl {
+ name = "parse5___parse5_5.1.1.tgz";
+ url = "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz";
+ sha1 = "f68e4e5ba1852ac2cadc00f4555fff6c2abb6178";
+ };
+ }
+ {
+ name = "parseurl___parseurl_1.3.3.tgz";
+ path = fetchurl {
+ name = "parseurl___parseurl_1.3.3.tgz";
+ url = "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz";
+ sha1 = "9da19e7bee8d12dff0513ed5b76957793bc2e8d4";
+ };
+ }
+ {
+ name = "pascalcase___pascalcase_0.1.1.tgz";
+ path = fetchurl {
+ name = "pascalcase___pascalcase_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz";
+ sha1 = "b363e55e8006ca6fe21784d2db22bd15d7917f14";
+ };
+ }
+ {
+ name = "path_browserify___path_browserify_0.0.1.tgz";
+ path = fetchurl {
+ name = "path_browserify___path_browserify_0.0.1.tgz";
+ url = "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz";
+ sha1 = "e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a";
+ };
+ }
+ {
+ name = "path_dirname___path_dirname_1.0.2.tgz";
+ path = fetchurl {
+ name = "path_dirname___path_dirname_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz";
+ sha1 = "cc33d24d525e099a5388c0336c6e32b9160609e0";
+ };
+ }
+ {
+ name = "path_exists___path_exists_2.1.0.tgz";
+ path = fetchurl {
+ name = "path_exists___path_exists_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz";
+ sha1 = "0feb6c64f0fc518d9a754dd5efb62c7022761f4b";
+ };
+ }
+ {
+ name = "path_exists___path_exists_3.0.0.tgz";
+ path = fetchurl {
+ name = "path_exists___path_exists_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
+ sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+ };
+ }
+ {
+ name = "path_exists___path_exists_4.0.0.tgz";
+ path = fetchurl {
+ name = "path_exists___path_exists_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz";
+ sha1 = "513bdbe2d3b95d7762e8c1137efa195c6c61b5b3";
+ };
+ }
+ {
+ name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+ path = fetchurl {
+ name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+ sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+ };
+ }
+ {
+ name = "path_is_inside___path_is_inside_1.0.2.tgz";
+ path = fetchurl {
+ name = "path_is_inside___path_is_inside_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz";
+ sha1 = "365417dede44430d1c11af61027facf074bdfc53";
+ };
+ }
+ {
+ name = "path_key___path_key_2.0.1.tgz";
+ path = fetchurl {
+ name = "path_key___path_key_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz";
+ sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+ };
+ }
+ {
+ name = "path_key___path_key_3.1.1.tgz";
+ path = fetchurl {
+ name = "path_key___path_key_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz";
+ sha1 = "581f6ade658cbba65a0d3380de7753295054f375";
+ };
+ }
+ {
+ name = "path_parse___path_parse_1.0.6.tgz";
+ path = fetchurl {
+ name = "path_parse___path_parse_1.0.6.tgz";
+ url = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz";
+ sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c";
+ };
+ }
+ {
+ name = "path_to_regexp___path_to_regexp_0.1.7.tgz";
+ path = fetchurl {
+ name = "path_to_regexp___path_to_regexp_0.1.7.tgz";
+ url = "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz";
+ sha1 = "df604178005f522f15eb4490e7247a1bfaa67f8c";
+ };
+ }
+ {
+ name = "path_type___path_type_3.0.0.tgz";
+ path = fetchurl {
+ name = "path_type___path_type_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz";
+ sha1 = "cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f";
+ };
+ }
+ {
+ name = "pbkdf2___pbkdf2_3.1.1.tgz";
+ path = fetchurl {
+ name = "pbkdf2___pbkdf2_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz";
+ sha1 = "cb8724b0fada984596856d1a6ebafd3584654b94";
+ };
+ }
+ {
+ name = "performance_now___performance_now_2.1.0.tgz";
+ path = fetchurl {
+ name = "performance_now___performance_now_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz";
+ sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+ };
+ }
+ {
+ name = "picomatch___picomatch_2.2.2.tgz";
+ path = fetchurl {
+ name = "picomatch___picomatch_2.2.2.tgz";
+ url = "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz";
+ sha1 = "21f333e9b6b8eaff02468f5146ea406d345f4dad";
+ };
+ }
+ {
+ name = "pify___pify_2.3.0.tgz";
+ path = fetchurl {
+ name = "pify___pify_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz";
+ sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+ };
+ }
+ {
+ name = "pify___pify_3.0.0.tgz";
+ path = fetchurl {
+ name = "pify___pify_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz";
+ sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
+ };
+ }
+ {
+ name = "pify___pify_4.0.1.tgz";
+ path = fetchurl {
+ name = "pify___pify_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz";
+ sha1 = "4b2cd25c50d598735c50292224fd8c6df41e3231";
+ };
+ }
+ {
+ name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+ path = fetchurl {
+ name = "pinkie_promise___pinkie_promise_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
+ sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
+ };
+ }
+ {
+ name = "pinkie___pinkie_2.0.4.tgz";
+ path = fetchurl {
+ name = "pinkie___pinkie_2.0.4.tgz";
+ url = "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz";
+ sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
+ };
+ }
+ {
+ name = "pkg_dir___pkg_dir_1.0.0.tgz";
+ path = fetchurl {
+ name = "pkg_dir___pkg_dir_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz";
+ sha1 = "7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4";
+ };
+ }
+ {
+ name = "pkg_dir___pkg_dir_3.0.0.tgz";
+ path = fetchurl {
+ name = "pkg_dir___pkg_dir_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz";
+ sha1 = "2749020f239ed990881b1f71210d51eb6523bea3";
+ };
+ }
+ {
+ name = "pkg_dir___pkg_dir_4.2.0.tgz";
+ path = fetchurl {
+ name = "pkg_dir___pkg_dir_4.2.0.tgz";
+ url = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz";
+ sha1 = "f099133df7ede422e81d1d8448270eeb3e4261f3";
+ };
+ }
+ {
+ name = "pkg_up___pkg_up_2.0.0.tgz";
+ path = fetchurl {
+ name = "pkg_up___pkg_up_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz";
+ sha1 = "c819ac728059a461cab1c3889a2be3c49a004d7f";
+ };
+ }
+ {
+ name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz";
+ path = fetchurl {
+ name = "pnp_webpack_plugin___pnp_webpack_plugin_1.6.4.tgz";
+ url = "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz";
+ sha1 = "c9711ac4dc48a685dabafc86f8b6dd9f8df84149";
+ };
+ }
+ {
+ name = "portfinder___portfinder_1.0.26.tgz";
+ path = fetchurl {
+ name = "portfinder___portfinder_1.0.26.tgz";
+ url = "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz";
+ sha1 = "475658d56ca30bed72ac7f1378ed350bd1b64e70";
+ };
+ }
+ {
+ name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+ path = fetchurl {
+ name = "posix_character_classes___posix_character_classes_0.1.1.tgz";
+ url = "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz";
+ sha1 = "01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab";
+ };
+ }
+ {
+ name = "postcss_calc___postcss_calc_7.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_calc___postcss_calc_7.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz";
+ sha1 = "504efcd008ca0273120568b0792b16cdcde8aac1";
+ };
+ }
+ {
+ name = "postcss_colormin___postcss_colormin_4.0.3.tgz";
+ path = fetchurl {
+ name = "postcss_colormin___postcss_colormin_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz";
+ sha1 = "ae060bce93ed794ac71264f08132d550956bd381";
+ };
+ }
+ {
+ name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_convert_values___postcss_convert_values_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz";
+ sha1 = "ca3813ed4da0f812f9d43703584e449ebe189a7f";
+ };
+ }
+ {
+ name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_discard_comments___postcss_discard_comments_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz";
+ sha1 = "1fbabd2c246bff6aaad7997b2b0918f4d7af4033";
+ };
+ }
+ {
+ name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_discard_duplicates___postcss_discard_duplicates_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz";
+ sha1 = "3fe133cd3c82282e550fc9b239176a9207b784eb";
+ };
+ }
+ {
+ name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_discard_empty___postcss_discard_empty_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz";
+ sha1 = "c8c951e9f73ed9428019458444a02ad90bb9f765";
+ };
+ }
+ {
+ name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_discard_overridden___postcss_discard_overridden_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz";
+ sha1 = "652aef8a96726f029f5e3e00146ee7a4e755ff57";
+ };
+ }
+ {
+ name = "postcss_load_config___postcss_load_config_2.1.0.tgz";
+ path = fetchurl {
+ name = "postcss_load_config___postcss_load_config_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz";
+ sha1 = "c84d692b7bb7b41ddced94ee62e8ab31b417b003";
+ };
+ }
+ {
+ name = "postcss_loader___postcss_loader_3.0.0.tgz";
+ path = fetchurl {
+ name = "postcss_loader___postcss_loader_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz";
+ sha1 = "6b97943e47c72d845fa9e03f273773d4e8dd6c2d";
+ };
+ }
+ {
+ name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz";
+ path = fetchurl {
+ name = "postcss_merge_longhand___postcss_merge_longhand_4.0.11.tgz";
+ url = "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz";
+ sha1 = "62f49a13e4a0ee04e7b98f42bb16062ca2549e24";
+ };
+ }
+ {
+ name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz";
+ path = fetchurl {
+ name = "postcss_merge_rules___postcss_merge_rules_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz";
+ sha1 = "362bea4ff5a1f98e4075a713c6cb25aefef9a650";
+ };
+ }
+ {
+ name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_minify_font_values___postcss_minify_font_values_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz";
+ sha1 = "cd4c344cce474343fac5d82206ab2cbcb8afd5a6";
+ };
+ }
+ {
+ name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_minify_gradients___postcss_minify_gradients_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz";
+ sha1 = "93b29c2ff5099c535eecda56c4aa6e665a663471";
+ };
+ }
+ {
+ name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_minify_params___postcss_minify_params_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz";
+ sha1 = "6b9cef030c11e35261f95f618c90036d680db874";
+ };
+ }
+ {
+ name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_minify_selectors___postcss_minify_selectors_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz";
+ sha1 = "e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8";
+ };
+ }
+ {
+ name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz";
+ path = fetchurl {
+ name = "postcss_modules_extract_imports___postcss_modules_extract_imports_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz";
+ sha1 = "818719a1ae1da325f9832446b01136eeb493cd7e";
+ };
+ }
+ {
+ name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_modules_local_by_default___postcss_modules_local_by_default_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz";
+ sha1 = "e8a6561be914aaf3c052876377524ca90dbb7915";
+ };
+ }
+ {
+ name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz";
+ path = fetchurl {
+ name = "postcss_modules_scope___postcss_modules_scope_2.2.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz";
+ sha1 = "385cae013cc7743f5a7d7602d1073a89eaae62ee";
+ };
+ }
+ {
+ name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz";
+ path = fetchurl {
+ name = "postcss_modules_values___postcss_modules_values_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz";
+ sha1 = "5b5000d6ebae29b4255301b4a3a54574423e7f10";
+ };
+ }
+ {
+ name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_charset___postcss_normalize_charset_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz";
+ sha1 = "8b35add3aee83a136b0471e0d59be58a50285dd4";
+ };
+ }
+ {
+ name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_display_values___postcss_normalize_display_values_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz";
+ sha1 = "0dbe04a4ce9063d4667ed2be476bb830c825935a";
+ };
+ }
+ {
+ name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_positions___postcss_normalize_positions_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz";
+ sha1 = "05f757f84f260437378368a91f8932d4b102917f";
+ };
+ }
+ {
+ name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_repeat_style___postcss_normalize_repeat_style_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz";
+ sha1 = "c4ebbc289f3991a028d44751cbdd11918b17910c";
+ };
+ }
+ {
+ name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_string___postcss_normalize_string_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz";
+ sha1 = "cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c";
+ };
+ }
+ {
+ name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_timing_functions___postcss_normalize_timing_functions_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz";
+ sha1 = "8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9";
+ };
+ }
+ {
+ name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_unicode___postcss_normalize_unicode_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz";
+ sha1 = "841bd48fdcf3019ad4baa7493a3d363b52ae1cfb";
+ };
+ }
+ {
+ name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_url___postcss_normalize_url_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz";
+ sha1 = "10e437f86bc7c7e58f7b9652ed878daaa95faae1";
+ };
+ }
+ {
+ name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_normalize_whitespace___postcss_normalize_whitespace_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz";
+ sha1 = "bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82";
+ };
+ }
+ {
+ name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz";
+ path = fetchurl {
+ name = "postcss_ordered_values___postcss_ordered_values_4.1.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz";
+ sha1 = "0cf75c820ec7d5c4d280189559e0b571ebac0eee";
+ };
+ }
+ {
+ name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz";
+ path = fetchurl {
+ name = "postcss_reduce_initial___postcss_reduce_initial_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz";
+ sha1 = "7fd42ebea5e9c814609639e2c2e84ae270ba48df";
+ };
+ }
+ {
+ name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_reduce_transforms___postcss_reduce_transforms_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz";
+ sha1 = "17efa405eacc6e07be3414a5ca2d1074681d4e29";
+ };
+ }
+ {
+ name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz";
+ path = fetchurl {
+ name = "postcss_selector_parser___postcss_selector_parser_3.1.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz";
+ sha1 = "b310f5c4c0fdaf76f94902bbaa30db6aa84f5270";
+ };
+ }
+ {
+ name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_selector_parser___postcss_selector_parser_6.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz";
+ sha1 = "934cf799d016c83411859e09dcecade01286ec5c";
+ };
+ }
+ {
+ name = "postcss_svgo___postcss_svgo_4.0.2.tgz";
+ path = fetchurl {
+ name = "postcss_svgo___postcss_svgo_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz";
+ sha1 = "17b997bc711b333bab143aaed3b8d3d6e3d38258";
+ };
+ }
+ {
+ name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz";
+ path = fetchurl {
+ name = "postcss_unique_selectors___postcss_unique_selectors_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz";
+ sha1 = "9446911f3289bfd64c6d680f073c03b1f9ee4bac";
+ };
+ }
+ {
+ name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz";
+ path = fetchurl {
+ name = "postcss_value_parser___postcss_value_parser_3.3.1.tgz";
+ url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz";
+ sha1 = "9ff822547e2893213cf1c30efa51ac5fd1ba8281";
+ };
+ }
+ {
+ name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz";
+ path = fetchurl {
+ name = "postcss_value_parser___postcss_value_parser_4.1.0.tgz";
+ url = "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz";
+ sha1 = "443f6a20ced6481a2bda4fa8532a6e55d789a2cb";
+ };
+ }
+ {
+ name = "postcss___postcss_7.0.32.tgz";
+ path = fetchurl {
+ name = "postcss___postcss_7.0.32.tgz";
+ url = "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz";
+ sha1 = "4310d6ee347053da3433db2be492883d62cec59d";
+ };
+ }
+ {
+ name = "prelude_ls___prelude_ls_1.2.1.tgz";
+ path = fetchurl {
+ name = "prelude_ls___prelude_ls_1.2.1.tgz";
+ url = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz";
+ sha1 = "debc6489d7a6e6b0e7611888cec880337d316396";
+ };
+ }
+ {
+ name = "prepend_http___prepend_http_1.0.4.tgz";
+ path = fetchurl {
+ name = "prepend_http___prepend_http_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz";
+ sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
+ };
+ }
+ {
+ name = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz";
+ path = fetchurl {
+ name = "prettier_linter_helpers___prettier_linter_helpers_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz";
+ sha1 = "d23d41fe1375646de2d0104d3454a3008802cf7b";
+ };
+ }
+ {
+ name = "prettier___prettier_1.19.1.tgz";
+ path = fetchurl {
+ name = "prettier___prettier_1.19.1.tgz";
+ url = "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz";
+ sha1 = "f7d7f5ff8a9cd872a7be4ca142095956a60797cb";
+ };
+ }
+ {
+ name = "prettier___prettier_2.0.5.tgz";
+ path = fetchurl {
+ name = "prettier___prettier_2.0.5.tgz";
+ url = "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz";
+ sha1 = "d6d56282455243f2f92cc1716692c08aa31522d4";
+ };
+ }
+ {
+ name = "pretty_bytes___pretty_bytes_5.3.0.tgz";
+ path = fetchurl {
+ name = "pretty_bytes___pretty_bytes_5.3.0.tgz";
+ url = "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz";
+ sha1 = "f2849e27db79fb4d6cfe24764fc4134f165989f2";
+ };
+ }
+ {
+ name = "pretty_error___pretty_error_2.1.1.tgz";
+ path = fetchurl {
+ name = "pretty_error___pretty_error_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz";
+ sha1 = "5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3";
+ };
+ }
+ {
+ name = "private___private_0.1.8.tgz";
+ path = fetchurl {
+ name = "private___private_0.1.8.tgz";
+ url = "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz";
+ sha1 = "2381edb3689f7a53d653190060fcf822d2f368ff";
+ };
+ }
+ {
+ name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+ path = fetchurl {
+ name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+ sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2";
+ };
+ }
+ {
+ name = "process___process_0.11.10.tgz";
+ path = fetchurl {
+ name = "process___process_0.11.10.tgz";
+ url = "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz";
+ sha1 = "7332300e840161bda3e69a1d1d91a7d4bc16f182";
+ };
+ }
+ {
+ name = "progress___progress_2.0.3.tgz";
+ path = fetchurl {
+ name = "progress___progress_2.0.3.tgz";
+ url = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz";
+ sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8";
+ };
+ }
+ {
+ name = "promise_inflight___promise_inflight_1.0.1.tgz";
+ path = fetchurl {
+ name = "promise_inflight___promise_inflight_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz";
+ sha1 = "98472870bf228132fcbdd868129bad12c3c029e3";
+ };
+ }
+ {
+ name = "proxy_addr___proxy_addr_2.0.6.tgz";
+ path = fetchurl {
+ name = "proxy_addr___proxy_addr_2.0.6.tgz";
+ url = "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz";
+ sha1 = "fdc2336505447d3f2f2c638ed272caf614bbb2bf";
+ };
+ }
+ {
+ name = "prr___prr_1.0.1.tgz";
+ path = fetchurl {
+ name = "prr___prr_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz";
+ sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+ };
+ }
+ {
+ name = "pseudomap___pseudomap_1.0.2.tgz";
+ path = fetchurl {
+ name = "pseudomap___pseudomap_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz";
+ sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+ };
+ }
+ {
+ name = "psl___psl_1.8.0.tgz";
+ path = fetchurl {
+ name = "psl___psl_1.8.0.tgz";
+ url = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz";
+ sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24";
+ };
+ }
+ {
+ name = "public_encrypt___public_encrypt_4.0.3.tgz";
+ path = fetchurl {
+ name = "public_encrypt___public_encrypt_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz";
+ sha1 = "4fcc9d77a07e48ba7527e7cbe0de33d0701331e0";
+ };
+ }
+ {
+ name = "pump___pump_2.0.1.tgz";
+ path = fetchurl {
+ name = "pump___pump_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz";
+ sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909";
+ };
+ }
+ {
+ name = "pump___pump_3.0.0.tgz";
+ path = fetchurl {
+ name = "pump___pump_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz";
+ sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64";
+ };
+ }
+ {
+ name = "pumpify___pumpify_1.5.1.tgz";
+ path = fetchurl {
+ name = "pumpify___pumpify_1.5.1.tgz";
+ url = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz";
+ sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce";
+ };
+ }
+ {
+ name = "punycode___punycode_1.3.2.tgz";
+ path = fetchurl {
+ name = "punycode___punycode_1.3.2.tgz";
+ url = "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz";
+ sha1 = "9653a036fb7c1ee42342f2325cceefea3926c48d";
+ };
+ }
+ {
+ name = "punycode___punycode_1.4.1.tgz";
+ path = fetchurl {
+ name = "punycode___punycode_1.4.1.tgz";
+ url = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz";
+ sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+ };
+ }
+ {
+ name = "punycode___punycode_2.1.1.tgz";
+ path = fetchurl {
+ name = "punycode___punycode_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz";
+ sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec";
+ };
+ }
+ {
+ name = "q___q_1.5.1.tgz";
+ path = fetchurl {
+ name = "q___q_1.5.1.tgz";
+ url = "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz";
+ sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
+ };
+ }
+ {
+ name = "qs___qs_6.7.0.tgz";
+ path = fetchurl {
+ name = "qs___qs_6.7.0.tgz";
+ url = "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz";
+ sha1 = "41dc1a015e3d581f1621776be31afb2876a9b1bc";
+ };
+ }
+ {
+ name = "qs___qs_6.5.2.tgz";
+ path = fetchurl {
+ name = "qs___qs_6.5.2.tgz";
+ url = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz";
+ sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36";
+ };
+ }
+ {
+ name = "query_string___query_string_4.3.4.tgz";
+ path = fetchurl {
+ name = "query_string___query_string_4.3.4.tgz";
+ url = "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz";
+ sha1 = "bbb693b9ca915c232515b228b1a02b609043dbeb";
+ };
+ }
+ {
+ name = "querystring_es3___querystring_es3_0.2.1.tgz";
+ path = fetchurl {
+ name = "querystring_es3___querystring_es3_0.2.1.tgz";
+ url = "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz";
+ sha1 = "9ec61f79049875707d69414596fd907a4d711e73";
+ };
+ }
+ {
+ name = "querystring___querystring_0.2.0.tgz";
+ path = fetchurl {
+ name = "querystring___querystring_0.2.0.tgz";
+ url = "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz";
+ sha1 = "b209849203bb25df820da756e747005878521620";
+ };
+ }
+ {
+ name = "querystringify___querystringify_2.1.1.tgz";
+ path = fetchurl {
+ name = "querystringify___querystringify_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz";
+ sha1 = "60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e";
+ };
+ }
+ {
+ name = "randombytes___randombytes_2.1.0.tgz";
+ path = fetchurl {
+ name = "randombytes___randombytes_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz";
+ sha1 = "df6f84372f0270dc65cdf6291349ab7a473d4f2a";
+ };
+ }
+ {
+ name = "randomfill___randomfill_1.0.4.tgz";
+ path = fetchurl {
+ name = "randomfill___randomfill_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz";
+ sha1 = "c92196fc86ab42be983f1bf31778224931d61458";
+ };
+ }
+ {
+ name = "range_parser___range_parser_1.2.1.tgz";
+ path = fetchurl {
+ name = "range_parser___range_parser_1.2.1.tgz";
+ url = "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz";
+ sha1 = "3cf37023d199e1c24d1a55b84800c2f3e6468031";
+ };
+ }
+ {
+ name = "raw_body___raw_body_2.4.0.tgz";
+ path = fetchurl {
+ name = "raw_body___raw_body_2.4.0.tgz";
+ url = "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz";
+ sha1 = "a1ce6fb9c9bc356ca52e89256ab59059e13d0332";
+ };
+ }
+ {
+ name = "raw_loader___raw_loader_4.0.1.tgz";
+ path = fetchurl {
+ name = "raw_loader___raw_loader_4.0.1.tgz";
+ url = "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz";
+ sha1 = "14e1f726a359b68437e183d5a5b7d33a3eba6933";
+ };
+ }
+ {
+ name = "read_pkg___read_pkg_5.2.0.tgz";
+ path = fetchurl {
+ name = "read_pkg___read_pkg_5.2.0.tgz";
+ url = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz";
+ sha1 = "7bf295438ca5a33e56cd30e053b34ee7250c93cc";
+ };
+ }
+ {
+ name = "readable_stream___readable_stream_2.3.7.tgz";
+ path = fetchurl {
+ name = "readable_stream___readable_stream_2.3.7.tgz";
+ url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz";
+ sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57";
+ };
+ }
+ {
+ name = "readable_stream___readable_stream_3.6.0.tgz";
+ path = fetchurl {
+ name = "readable_stream___readable_stream_3.6.0.tgz";
+ url = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz";
+ sha1 = "337bbda3adc0706bd3e024426a286d4b4b2c9198";
+ };
+ }
+ {
+ name = "readdirp___readdirp_2.2.1.tgz";
+ path = fetchurl {
+ name = "readdirp___readdirp_2.2.1.tgz";
+ url = "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz";
+ sha1 = "0e87622a3325aa33e892285caf8b4e846529a525";
+ };
+ }
+ {
+ name = "readdirp___readdirp_3.4.0.tgz";
+ path = fetchurl {
+ name = "readdirp___readdirp_3.4.0.tgz";
+ url = "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz";
+ sha1 = "9fdccdf9e9155805449221ac645e8303ab5b9ada";
+ };
+ }
+ {
+ name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz";
+ path = fetchurl {
+ name = "regenerate_unicode_properties___regenerate_unicode_properties_8.2.0.tgz";
+ url = "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz";
+ sha1 = "e5de7111d655e7ba60c057dbe9ff37c87e65cdec";
+ };
+ }
+ {
+ name = "regenerate___regenerate_1.4.1.tgz";
+ path = fetchurl {
+ name = "regenerate___regenerate_1.4.1.tgz";
+ url = "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz";
+ sha1 = "cad92ad8e6b591773485fbe05a485caf4f457e6f";
+ };
+ }
+ {
+ name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+ path = fetchurl {
+ name = "regenerator_runtime___regenerator_runtime_0.11.1.tgz";
+ url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz";
+ sha1 = "be05ad7f9bf7d22e056f9726cee5017fbf19e2e9";
+ };
+ }
+ {
+ name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+ path = fetchurl {
+ name = "regenerator_runtime___regenerator_runtime_0.13.5.tgz";
+ url = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz";
+ sha1 = "d878a1d094b4306d10b9096484b33ebd55e26697";
+ };
+ }
+ {
+ name = "regenerator_transform___regenerator_transform_0.14.4.tgz";
+ path = fetchurl {
+ name = "regenerator_transform___regenerator_transform_0.14.4.tgz";
+ url = "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz";
+ sha1 = "5266857896518d1616a78a0479337a30ea974cc7";
+ };
+ }
+ {
+ name = "regex_not___regex_not_1.0.2.tgz";
+ path = fetchurl {
+ name = "regex_not___regex_not_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz";
+ sha1 = "1f4ece27e00b0b65e0247a6810e6a85d83a5752c";
+ };
+ }
+ {
+ name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+ path = fetchurl {
+ name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz";
+ sha1 = "7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75";
+ };
+ }
+ {
+ name = "regexpp___regexpp_3.1.0.tgz";
+ path = fetchurl {
+ name = "regexpp___regexpp_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz";
+ sha1 = "206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2";
+ };
+ }
+ {
+ name = "regexpu_core___regexpu_core_4.7.0.tgz";
+ path = fetchurl {
+ name = "regexpu_core___regexpu_core_4.7.0.tgz";
+ url = "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz";
+ sha1 = "fcbf458c50431b0bb7b45d6967b8192d91f3d938";
+ };
+ }
+ {
+ name = "register_service_worker___register_service_worker_1.7.1.tgz";
+ path = fetchurl {
+ name = "register_service_worker___register_service_worker_1.7.1.tgz";
+ url = "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.7.1.tgz";
+ sha1 = "6308347ac6c0af0f6c0b22ea5d59d25e836bc932";
+ };
+ }
+ {
+ name = "regjsgen___regjsgen_0.5.2.tgz";
+ path = fetchurl {
+ name = "regjsgen___regjsgen_0.5.2.tgz";
+ url = "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz";
+ sha1 = "92ff295fb1deecbf6ecdab2543d207e91aa33733";
+ };
+ }
+ {
+ name = "regjsparser___regjsparser_0.6.4.tgz";
+ path = fetchurl {
+ name = "regjsparser___regjsparser_0.6.4.tgz";
+ url = "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz";
+ sha1 = "a769f8684308401a66e9b529d2436ff4d0666272";
+ };
+ }
+ {
+ name = "relateurl___relateurl_0.2.7.tgz";
+ path = fetchurl {
+ name = "relateurl___relateurl_0.2.7.tgz";
+ url = "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz";
+ sha1 = "54dbf377e51440aca90a4cd274600d3ff2d888a9";
+ };
+ }
+ {
+ name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz";
+ path = fetchurl {
+ name = "remove_trailing_separator___remove_trailing_separator_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz";
+ sha1 = "c24bce2a283adad5bc3f58e0d48249b92379d8ef";
+ };
+ }
+ {
+ name = "renderkid___renderkid_2.0.3.tgz";
+ path = fetchurl {
+ name = "renderkid___renderkid_2.0.3.tgz";
+ url = "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz";
+ sha1 = "380179c2ff5ae1365c522bf2fcfcff01c5b74149";
+ };
+ }
+ {
+ name = "repeat_element___repeat_element_1.1.3.tgz";
+ path = fetchurl {
+ name = "repeat_element___repeat_element_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz";
+ sha1 = "782e0d825c0c5a3bb39731f84efee6b742e6b1ce";
+ };
+ }
+ {
+ name = "repeat_string___repeat_string_1.6.1.tgz";
+ path = fetchurl {
+ name = "repeat_string___repeat_string_1.6.1.tgz";
+ url = "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz";
+ sha1 = "8dcae470e1c88abc2d600fff4a776286da75e637";
+ };
+ }
+ {
+ name = "request_promise_core___request_promise_core_1.1.3.tgz";
+ path = fetchurl {
+ name = "request_promise_core___request_promise_core_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz";
+ sha1 = "e9a3c081b51380dfea677336061fea879a829ee9";
+ };
+ }
+ {
+ name = "request_promise_native___request_promise_native_1.0.8.tgz";
+ path = fetchurl {
+ name = "request_promise_native___request_promise_native_1.0.8.tgz";
+ url = "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz";
+ sha1 = "a455b960b826e44e2bf8999af64dff2bfe58cb36";
+ };
+ }
+ {
+ name = "request___request_2.88.2.tgz";
+ path = fetchurl {
+ name = "request___request_2.88.2.tgz";
+ url = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz";
+ sha1 = "d73c918731cb5a87da047e207234146f664d12b3";
+ };
+ }
+ {
+ name = "require_directory___require_directory_2.1.1.tgz";
+ path = fetchurl {
+ name = "require_directory___require_directory_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
+ sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+ };
+ }
+ {
+ name = "require_main_filename___require_main_filename_2.0.0.tgz";
+ path = fetchurl {
+ name = "require_main_filename___require_main_filename_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz";
+ sha1 = "d0b329ecc7cc0f61649f62215be69af54aa8989b";
+ };
+ }
+ {
+ name = "requires_port___requires_port_1.0.0.tgz";
+ path = fetchurl {
+ name = "requires_port___requires_port_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz";
+ sha1 = "925d2601d39ac485e091cf0da5c6e694dc3dcaff";
+ };
+ }
+ {
+ name = "resolve_cwd___resolve_cwd_2.0.0.tgz";
+ path = fetchurl {
+ name = "resolve_cwd___resolve_cwd_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz";
+ sha1 = "00a9f7387556e27038eae232caa372a6a59b665a";
+ };
+ }
+ {
+ name = "resolve_from___resolve_from_3.0.0.tgz";
+ path = fetchurl {
+ name = "resolve_from___resolve_from_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz";
+ sha1 = "b22c7af7d9d6881bc8b6e653335eebcb0a188748";
+ };
+ }
+ {
+ name = "resolve_from___resolve_from_4.0.0.tgz";
+ path = fetchurl {
+ name = "resolve_from___resolve_from_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz";
+ sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6";
+ };
+ }
+ {
+ name = "resolve_url___resolve_url_0.2.1.tgz";
+ path = fetchurl {
+ name = "resolve_url___resolve_url_0.2.1.tgz";
+ url = "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz";
+ sha1 = "2c637fe77c893afd2a663fe21aa9080068e2052a";
+ };
+ }
+ {
+ name = "resolve___resolve_1.17.0.tgz";
+ path = fetchurl {
+ name = "resolve___resolve_1.17.0.tgz";
+ url = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz";
+ sha1 = "b25941b54968231cc2d1bb76a79cb7f2c0bf8444";
+ };
+ }
+ {
+ name = "restore_cursor___restore_cursor_2.0.0.tgz";
+ path = fetchurl {
+ name = "restore_cursor___restore_cursor_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz";
+ sha1 = "9f7ee287f82fd326d4fd162923d62129eee0dfaf";
+ };
+ }
+ {
+ name = "restore_cursor___restore_cursor_3.1.0.tgz";
+ path = fetchurl {
+ name = "restore_cursor___restore_cursor_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz";
+ sha1 = "39f67c54b3a7a58cea5236d95cf0034239631f7e";
+ };
+ }
+ {
+ name = "ret___ret_0.1.15.tgz";
+ path = fetchurl {
+ name = "ret___ret_0.1.15.tgz";
+ url = "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz";
+ sha1 = "b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc";
+ };
+ }
+ {
+ name = "retry___retry_0.12.0.tgz";
+ path = fetchurl {
+ name = "retry___retry_0.12.0.tgz";
+ url = "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz";
+ sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b";
+ };
+ }
+ {
+ name = "rgb_regex___rgb_regex_1.0.1.tgz";
+ path = fetchurl {
+ name = "rgb_regex___rgb_regex_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz";
+ sha1 = "c0e0d6882df0e23be254a475e8edd41915feaeb1";
+ };
+ }
+ {
+ name = "rgba_regex___rgba_regex_1.0.0.tgz";
+ path = fetchurl {
+ name = "rgba_regex___rgba_regex_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz";
+ sha1 = "43374e2e2ca0968b0ef1523460b7d730ff22eeb3";
+ };
+ }
+ {
+ name = "rimraf___rimraf_2.6.3.tgz";
+ path = fetchurl {
+ name = "rimraf___rimraf_2.6.3.tgz";
+ url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz";
+ sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab";
+ };
+ }
+ {
+ name = "rimraf___rimraf_2.7.1.tgz";
+ path = fetchurl {
+ name = "rimraf___rimraf_2.7.1.tgz";
+ url = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz";
+ sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec";
+ };
+ }
+ {
+ name = "ripemd160___ripemd160_2.0.2.tgz";
+ path = fetchurl {
+ name = "ripemd160___ripemd160_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz";
+ sha1 = "a1c1a6f624751577ba5d07914cbc92850585890c";
+ };
+ }
+ {
+ name = "run_async___run_async_2.4.1.tgz";
+ path = fetchurl {
+ name = "run_async___run_async_2.4.1.tgz";
+ url = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz";
+ sha1 = "8440eccf99ea3e70bd409d49aab88e10c189a455";
+ };
+ }
+ {
+ name = "run_queue___run_queue_1.0.3.tgz";
+ path = fetchurl {
+ name = "run_queue___run_queue_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz";
+ sha1 = "e848396f057d223f24386924618e25694161ec47";
+ };
+ }
+ {
+ name = "rxjs___rxjs_6.5.5.tgz";
+ path = fetchurl {
+ name = "rxjs___rxjs_6.5.5.tgz";
+ url = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz";
+ sha1 = "c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec";
+ };
+ }
+ {
+ name = "safe_buffer___safe_buffer_5.1.2.tgz";
+ path = fetchurl {
+ name = "safe_buffer___safe_buffer_5.1.2.tgz";
+ url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
+ sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d";
+ };
+ }
+ {
+ name = "safe_buffer___safe_buffer_5.2.1.tgz";
+ path = fetchurl {
+ name = "safe_buffer___safe_buffer_5.2.1.tgz";
+ url = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz";
+ sha1 = "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6";
+ };
+ }
+ {
+ name = "safe_regex___safe_regex_1.1.0.tgz";
+ path = fetchurl {
+ name = "safe_regex___safe_regex_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz";
+ sha1 = "40a3669f3b077d1e943d44629e157dd48023bf2e";
+ };
+ }
+ {
+ name = "safer_buffer___safer_buffer_2.1.2.tgz";
+ path = fetchurl {
+ name = "safer_buffer___safer_buffer_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz";
+ sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a";
+ };
+ }
+ {
+ name = "sass_loader___sass_loader_8.0.2.tgz";
+ path = fetchurl {
+ name = "sass_loader___sass_loader_8.0.2.tgz";
+ url = "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz";
+ sha1 = "debecd8c3ce243c76454f2e8290482150380090d";
+ };
+ }
+ {
+ name = "sass___sass_1.26.8.tgz";
+ path = fetchurl {
+ name = "sass___sass_1.26.8.tgz";
+ url = "https://registry.yarnpkg.com/sass/-/sass-1.26.8.tgz";
+ sha1 = "312652530721f9568d4c4000b0db07ec6eb23325";
+ };
+ }
+ {
+ name = "sax___sax_1.2.4.tgz";
+ path = fetchurl {
+ name = "sax___sax_1.2.4.tgz";
+ url = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz";
+ sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9";
+ };
+ }
+ {
+ name = "schema_utils___schema_utils_1.0.0.tgz";
+ path = fetchurl {
+ name = "schema_utils___schema_utils_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz";
+ sha1 = "0b79a93204d7b600d4b2850d1f66c2a34951c770";
+ };
+ }
+ {
+ name = "schema_utils___schema_utils_2.7.0.tgz";
+ path = fetchurl {
+ name = "schema_utils___schema_utils_2.7.0.tgz";
+ url = "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz";
+ sha1 = "17151f76d8eae67fbbf77960c33c676ad9f4efc7";
+ };
+ }
+ {
+ name = "select_hose___select_hose_2.0.0.tgz";
+ path = fetchurl {
+ name = "select_hose___select_hose_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz";
+ sha1 = "625d8658f865af43ec962bfc376a37359a4994ca";
+ };
+ }
+ {
+ name = "selfsigned___selfsigned_1.10.7.tgz";
+ path = fetchurl {
+ name = "selfsigned___selfsigned_1.10.7.tgz";
+ url = "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz";
+ sha1 = "da5819fd049d5574f28e88a9bcc6dbc6e6f3906b";
+ };
+ }
+ {
+ name = "semver___semver_5.7.1.tgz";
+ path = fetchurl {
+ name = "semver___semver_5.7.1.tgz";
+ url = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz";
+ sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7";
+ };
+ }
+ {
+ name = "semver___semver_7.0.0.tgz";
+ path = fetchurl {
+ name = "semver___semver_7.0.0.tgz";
+ url = "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz";
+ sha1 = "5f3ca35761e47e05b206c6daff2cf814f0316b8e";
+ };
+ }
+ {
+ name = "semver___semver_6.3.0.tgz";
+ path = fetchurl {
+ name = "semver___semver_6.3.0.tgz";
+ url = "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz";
+ sha1 = "ee0a64c8af5e8ceea67687b133761e1becbd1d3d";
+ };
+ }
+ {
+ name = "semver___semver_7.3.2.tgz";
+ path = fetchurl {
+ name = "semver___semver_7.3.2.tgz";
+ url = "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz";
+ sha1 = "604962b052b81ed0786aae84389ffba70ffd3938";
+ };
+ }
+ {
+ name = "send___send_0.17.1.tgz";
+ path = fetchurl {
+ name = "send___send_0.17.1.tgz";
+ url = "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz";
+ sha1 = "c1d8b059f7900f7466dd4938bdc44e11ddb376c8";
+ };
+ }
+ {
+ name = "serialize_javascript___serialize_javascript_2.1.2.tgz";
+ path = fetchurl {
+ name = "serialize_javascript___serialize_javascript_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz";
+ sha1 = "ecec53b0e0317bdc95ef76ab7074b7384785fa61";
+ };
+ }
+ {
+ name = "serialize_javascript___serialize_javascript_3.1.0.tgz";
+ path = fetchurl {
+ name = "serialize_javascript___serialize_javascript_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz";
+ sha1 = "8bf3a9170712664ef2561b44b691eafe399214ea";
+ };
+ }
+ {
+ name = "serve_index___serve_index_1.9.1.tgz";
+ path = fetchurl {
+ name = "serve_index___serve_index_1.9.1.tgz";
+ url = "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz";
+ sha1 = "d3768d69b1e7d82e5ce050fff5b453bea12a9239";
+ };
+ }
+ {
+ name = "serve_static___serve_static_1.14.1.tgz";
+ path = fetchurl {
+ name = "serve_static___serve_static_1.14.1.tgz";
+ url = "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz";
+ sha1 = "666e636dc4f010f7ef29970a88a674320898b2f9";
+ };
+ }
+ {
+ name = "set_blocking___set_blocking_2.0.0.tgz";
+ path = fetchurl {
+ name = "set_blocking___set_blocking_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
+ sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+ };
+ }
+ {
+ name = "set_value___set_value_2.0.1.tgz";
+ path = fetchurl {
+ name = "set_value___set_value_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz";
+ sha1 = "a18d40530e6f07de4228c7defe4227af8cad005b";
+ };
+ }
+ {
+ name = "setimmediate___setimmediate_1.0.5.tgz";
+ path = fetchurl {
+ name = "setimmediate___setimmediate_1.0.5.tgz";
+ url = "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz";
+ sha1 = "290cbb232e306942d7d7ea9b83732ab7856f8285";
+ };
+ }
+ {
+ name = "setprototypeof___setprototypeof_1.1.0.tgz";
+ path = fetchurl {
+ name = "setprototypeof___setprototypeof_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz";
+ sha1 = "d0bd85536887b6fe7c0d818cb962d9d91c54e656";
+ };
+ }
+ {
+ name = "setprototypeof___setprototypeof_1.1.1.tgz";
+ path = fetchurl {
+ name = "setprototypeof___setprototypeof_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz";
+ sha1 = "7e95acb24aa92f5885e0abef5ba131330d4ae683";
+ };
+ }
+ {
+ name = "sha.js___sha.js_2.4.11.tgz";
+ path = fetchurl {
+ name = "sha.js___sha.js_2.4.11.tgz";
+ url = "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz";
+ sha1 = "37a5cf0b81ecbc6943de109ba2960d1b26584ae7";
+ };
+ }
+ {
+ name = "shallow_clone___shallow_clone_3.0.1.tgz";
+ path = fetchurl {
+ name = "shallow_clone___shallow_clone_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz";
+ sha1 = "8f2981ad92531f55035b01fb230769a40e02efa3";
+ };
+ }
+ {
+ name = "shebang_command___shebang_command_1.2.0.tgz";
+ path = fetchurl {
+ name = "shebang_command___shebang_command_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz";
+ sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+ };
+ }
+ {
+ name = "shebang_command___shebang_command_2.0.0.tgz";
+ path = fetchurl {
+ name = "shebang_command___shebang_command_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz";
+ sha1 = "ccd0af4f8835fbdc265b82461aaf0c36663f34ea";
+ };
+ }
+ {
+ name = "shebang_regex___shebang_regex_1.0.0.tgz";
+ path = fetchurl {
+ name = "shebang_regex___shebang_regex_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz";
+ sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+ };
+ }
+ {
+ name = "shebang_regex___shebang_regex_3.0.0.tgz";
+ path = fetchurl {
+ name = "shebang_regex___shebang_regex_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz";
+ sha1 = "ae16f1644d873ecad843b0307b143362d4c42172";
+ };
+ }
+ {
+ name = "shell_quote___shell_quote_1.7.2.tgz";
+ path = fetchurl {
+ name = "shell_quote___shell_quote_1.7.2.tgz";
+ url = "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz";
+ sha1 = "67a7d02c76c9da24f99d20808fcaded0e0e04be2";
+ };
+ }
+ {
+ name = "signal_exit___signal_exit_3.0.3.tgz";
+ path = fetchurl {
+ name = "signal_exit___signal_exit_3.0.3.tgz";
+ url = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz";
+ sha1 = "a1410c2edd8f077b08b4e253c8eacfcaf057461c";
+ };
+ }
+ {
+ name = "simple_swizzle___simple_swizzle_0.2.2.tgz";
+ path = fetchurl {
+ name = "simple_swizzle___simple_swizzle_0.2.2.tgz";
+ url = "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz";
+ sha1 = "a4da6b635ffcccca33f70d17cb92592de95e557a";
+ };
+ }
+ {
+ name = "slash___slash_1.0.0.tgz";
+ path = fetchurl {
+ name = "slash___slash_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz";
+ sha1 = "c41f2f6c39fc16d1cd17ad4b5d896114ae470d55";
+ };
+ }
+ {
+ name = "slash___slash_2.0.0.tgz";
+ path = fetchurl {
+ name = "slash___slash_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz";
+ sha1 = "de552851a1759df3a8f206535442f5ec4ddeab44";
+ };
+ }
+ {
+ name = "slice_ansi___slice_ansi_2.1.0.tgz";
+ path = fetchurl {
+ name = "slice_ansi___slice_ansi_2.1.0.tgz";
+ url = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz";
+ sha1 = "cacd7693461a637a5788d92a7dd4fba068e81636";
+ };
+ }
+ {
+ name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+ path = fetchurl {
+ name = "snapdragon_node___snapdragon_node_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz";
+ sha1 = "6c175f86ff14bdb0724563e8f3c1b021a286853b";
+ };
+ }
+ {
+ name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+ path = fetchurl {
+ name = "snapdragon_util___snapdragon_util_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz";
+ sha1 = "f956479486f2acd79700693f6f7b805e45ab56e2";
+ };
+ }
+ {
+ name = "snapdragon___snapdragon_0.8.2.tgz";
+ path = fetchurl {
+ name = "snapdragon___snapdragon_0.8.2.tgz";
+ url = "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz";
+ sha1 = "64922e7c565b0e14204ba1aa7d6964278d25182d";
+ };
+ }
+ {
+ name = "sockjs_client___sockjs_client_1.4.0.tgz";
+ path = fetchurl {
+ name = "sockjs_client___sockjs_client_1.4.0.tgz";
+ url = "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz";
+ sha1 = "c9f2568e19c8fd8173b4997ea3420e0bb306c7d5";
+ };
+ }
+ {
+ name = "sockjs___sockjs_0.3.20.tgz";
+ path = fetchurl {
+ name = "sockjs___sockjs_0.3.20.tgz";
+ url = "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz";
+ sha1 = "b26a283ec562ef8b2687b44033a4eeceac75d855";
+ };
+ }
+ {
+ name = "sort_keys___sort_keys_1.1.2.tgz";
+ path = fetchurl {
+ name = "sort_keys___sort_keys_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz";
+ sha1 = "441b6d4d346798f1b4e49e8920adfba0e543f9ad";
+ };
+ }
+ {
+ name = "source_list_map___source_list_map_2.0.1.tgz";
+ path = fetchurl {
+ name = "source_list_map___source_list_map_2.0.1.tgz";
+ url = "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz";
+ sha1 = "3993bd873bfc48479cca9ea3a547835c7c154b34";
+ };
+ }
+ {
+ name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+ path = fetchurl {
+ name = "source_map_resolve___source_map_resolve_0.5.3.tgz";
+ url = "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz";
+ sha1 = "190866bece7553e1f8f267a2ee82c606b5509a1a";
+ };
+ }
+ {
+ name = "source_map_support___source_map_support_0.5.19.tgz";
+ path = fetchurl {
+ name = "source_map_support___source_map_support_0.5.19.tgz";
+ url = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz";
+ sha1 = "a98b62f86dcaf4f67399648c085291ab9e8fed61";
+ };
+ }
+ {
+ name = "source_map_url___source_map_url_0.4.0.tgz";
+ path = fetchurl {
+ name = "source_map_url___source_map_url_0.4.0.tgz";
+ url = "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz";
+ sha1 = "3e935d7ddd73631b97659956d55128e87b5084a3";
+ };
+ }
+ {
+ name = "source_map___source_map_0.5.7.tgz";
+ path = fetchurl {
+ name = "source_map___source_map_0.5.7.tgz";
+ url = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz";
+ sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+ };
+ }
+ {
+ name = "source_map___source_map_0.6.1.tgz";
+ path = fetchurl {
+ name = "source_map___source_map_0.6.1.tgz";
+ url = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz";
+ sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263";
+ };
+ }
+ {
+ name = "spdx_correct___spdx_correct_3.1.1.tgz";
+ path = fetchurl {
+ name = "spdx_correct___spdx_correct_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz";
+ sha1 = "dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9";
+ };
+ }
+ {
+ name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+ path = fetchurl {
+ name = "spdx_exceptions___spdx_exceptions_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz";
+ sha1 = "3f28ce1a77a00372683eade4a433183527a2163d";
+ };
+ }
+ {
+ name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+ path = fetchurl {
+ name = "spdx_expression_parse___spdx_expression_parse_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz";
+ sha1 = "cf70f50482eefdc98e3ce0a6833e4a53ceeba679";
+ };
+ }
+ {
+ name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+ path = fetchurl {
+ name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+ url = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz";
+ sha1 = "3694b5804567a458d3c8045842a6358632f62654";
+ };
+ }
+ {
+ name = "spdy_transport___spdy_transport_3.0.0.tgz";
+ path = fetchurl {
+ name = "spdy_transport___spdy_transport_3.0.0.tgz";
+ url = "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz";
+ sha1 = "00d4863a6400ad75df93361a1608605e5dcdcf31";
+ };
+ }
+ {
+ name = "spdy___spdy_4.0.2.tgz";
+ path = fetchurl {
+ name = "spdy___spdy_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz";
+ sha1 = "b74f466203a3eda452c02492b91fb9e84a27677b";
+ };
+ }
+ {
+ name = "split_string___split_string_3.1.0.tgz";
+ path = fetchurl {
+ name = "split_string___split_string_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz";
+ sha1 = "7cb09dda3a86585705c64b39a6466038682e8fe2";
+ };
+ }
+ {
+ name = "sprintf_js___sprintf_js_1.0.3.tgz";
+ path = fetchurl {
+ name = "sprintf_js___sprintf_js_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz";
+ sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+ };
+ }
+ {
+ name = "sshpk___sshpk_1.16.1.tgz";
+ path = fetchurl {
+ name = "sshpk___sshpk_1.16.1.tgz";
+ url = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz";
+ sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877";
+ };
+ }
+ {
+ name = "ssri___ssri_6.0.1.tgz";
+ path = fetchurl {
+ name = "ssri___ssri_6.0.1.tgz";
+ url = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz";
+ sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8";
+ };
+ }
+ {
+ name = "ssri___ssri_7.1.0.tgz";
+ path = fetchurl {
+ name = "ssri___ssri_7.1.0.tgz";
+ url = "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz";
+ sha1 = "92c241bf6de82365b5c7fb4bd76e975522e1294d";
+ };
+ }
+ {
+ name = "stable___stable_0.1.8.tgz";
+ path = fetchurl {
+ name = "stable___stable_0.1.8.tgz";
+ url = "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz";
+ sha1 = "836eb3c8382fe2936feaf544631017ce7d47a3cf";
+ };
+ }
+ {
+ name = "stackframe___stackframe_1.2.0.tgz";
+ path = fetchurl {
+ name = "stackframe___stackframe_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz";
+ sha1 = "52429492d63c62eb989804c11552e3d22e779303";
+ };
+ }
+ {
+ name = "static_extend___static_extend_0.1.2.tgz";
+ path = fetchurl {
+ name = "static_extend___static_extend_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz";
+ sha1 = "60809c39cbff55337226fd5e0b520f341f1fb5c6";
+ };
+ }
+ {
+ name = "statuses___statuses_1.5.0.tgz";
+ path = fetchurl {
+ name = "statuses___statuses_1.5.0.tgz";
+ url = "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz";
+ sha1 = "161c7dac177659fd9811f43771fa99381478628c";
+ };
+ }
+ {
+ name = "stealthy_require___stealthy_require_1.1.1.tgz";
+ path = fetchurl {
+ name = "stealthy_require___stealthy_require_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz";
+ sha1 = "35b09875b4ff49f26a777e509b3090a3226bf24b";
+ };
+ }
+ {
+ name = "stream_browserify___stream_browserify_2.0.2.tgz";
+ path = fetchurl {
+ name = "stream_browserify___stream_browserify_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz";
+ sha1 = "87521d38a44aa7ee91ce1cd2a47df0cb49dd660b";
+ };
+ }
+ {
+ name = "stream_each___stream_each_1.2.3.tgz";
+ path = fetchurl {
+ name = "stream_each___stream_each_1.2.3.tgz";
+ url = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz";
+ sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae";
+ };
+ }
+ {
+ name = "stream_http___stream_http_2.8.3.tgz";
+ path = fetchurl {
+ name = "stream_http___stream_http_2.8.3.tgz";
+ url = "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz";
+ sha1 = "b2d242469288a5a27ec4fe8933acf623de6514fc";
+ };
+ }
+ {
+ name = "stream_shift___stream_shift_1.0.1.tgz";
+ path = fetchurl {
+ name = "stream_shift___stream_shift_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz";
+ sha1 = "d7088281559ab2778424279b0877da3c392d5a3d";
+ };
+ }
+ {
+ name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz";
+ path = fetchurl {
+ name = "strict_uri_encode___strict_uri_encode_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz";
+ sha1 = "279b225df1d582b1f54e65addd4352e18faa0713";
+ };
+ }
+ {
+ name = "string_width___string_width_2.1.1.tgz";
+ path = fetchurl {
+ name = "string_width___string_width_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz";
+ sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e";
+ };
+ }
+ {
+ name = "string_width___string_width_3.1.0.tgz";
+ path = fetchurl {
+ name = "string_width___string_width_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz";
+ sha1 = "22767be21b62af1081574306f69ac51b62203961";
+ };
+ }
+ {
+ name = "string_width___string_width_4.2.0.tgz";
+ path = fetchurl {
+ name = "string_width___string_width_4.2.0.tgz";
+ url = "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz";
+ sha1 = "952182c46cc7b2c313d1596e623992bd163b72b5";
+ };
+ }
+ {
+ name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+ path = fetchurl {
+ name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+ sha1 = "85812a6b847ac002270f5808146064c995fb6913";
+ };
+ }
+ {
+ name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+ path = fetchurl {
+ name = "string.prototype.trimleft___string.prototype.trimleft_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz";
+ sha1 = "4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc";
+ };
+ }
+ {
+ name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+ path = fetchurl {
+ name = "string.prototype.trimright___string.prototype.trimright_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz";
+ sha1 = "c76f1cef30f21bbad8afeb8db1511496cfb0f2a3";
+ };
+ }
+ {
+ name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+ path = fetchurl {
+ name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+ sha1 = "14af6d9f34b053f7cfc89b72f8f2ee14b9039a54";
+ };
+ }
+ {
+ name = "string_decoder___string_decoder_1.3.0.tgz";
+ path = fetchurl {
+ name = "string_decoder___string_decoder_1.3.0.tgz";
+ url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz";
+ sha1 = "42f114594a46cf1a8e30b0a84f56c78c3edac21e";
+ };
+ }
+ {
+ name = "string_decoder___string_decoder_1.1.1.tgz";
+ path = fetchurl {
+ name = "string_decoder___string_decoder_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
+ sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8";
+ };
+ }
+ {
+ name = "stringify_object___stringify_object_3.3.0.tgz";
+ path = fetchurl {
+ name = "stringify_object___stringify_object_3.3.0.tgz";
+ url = "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz";
+ sha1 = "703065aefca19300d3ce88af4f5b3956d7556629";
+ };
+ }
+ {
+ name = "strip_ansi___strip_ansi_3.0.1.tgz";
+ path = fetchurl {
+ name = "strip_ansi___strip_ansi_3.0.1.tgz";
+ url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz";
+ sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+ };
+ }
+ {
+ name = "strip_ansi___strip_ansi_4.0.0.tgz";
+ path = fetchurl {
+ name = "strip_ansi___strip_ansi_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz";
+ sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+ };
+ }
+ {
+ name = "strip_ansi___strip_ansi_5.2.0.tgz";
+ path = fetchurl {
+ name = "strip_ansi___strip_ansi_5.2.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz";
+ sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae";
+ };
+ }
+ {
+ name = "strip_ansi___strip_ansi_6.0.0.tgz";
+ path = fetchurl {
+ name = "strip_ansi___strip_ansi_6.0.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz";
+ sha1 = "0b1571dd7669ccd4f3e06e14ef1eed26225ae532";
+ };
+ }
+ {
+ name = "strip_comments___strip_comments_1.0.2.tgz";
+ path = fetchurl {
+ name = "strip_comments___strip_comments_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/strip-comments/-/strip-comments-1.0.2.tgz";
+ sha1 = "82b9c45e7f05873bee53f37168af930aa368679d";
+ };
+ }
+ {
+ name = "strip_eof___strip_eof_1.0.0.tgz";
+ path = fetchurl {
+ name = "strip_eof___strip_eof_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz";
+ sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+ };
+ }
+ {
+ name = "strip_final_newline___strip_final_newline_2.0.0.tgz";
+ path = fetchurl {
+ name = "strip_final_newline___strip_final_newline_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz";
+ sha1 = "89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad";
+ };
+ }
+ {
+ name = "strip_indent___strip_indent_2.0.0.tgz";
+ path = fetchurl {
+ name = "strip_indent___strip_indent_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz";
+ sha1 = "5ef8db295d01e6ed6cbf7aab96998d7822527b68";
+ };
+ }
+ {
+ name = "strip_json_comments___strip_json_comments_3.1.0.tgz";
+ path = fetchurl {
+ name = "strip_json_comments___strip_json_comments_3.1.0.tgz";
+ url = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz";
+ sha1 = "7638d31422129ecf4457440009fba03f9f9ac180";
+ };
+ }
+ {
+ name = "stylehacks___stylehacks_4.0.3.tgz";
+ path = fetchurl {
+ name = "stylehacks___stylehacks_4.0.3.tgz";
+ url = "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz";
+ sha1 = "6718fcaf4d1e07d8a1318690881e8d96726a71d5";
+ };
+ }
+ {
+ name = "supports_color___supports_color_2.0.0.tgz";
+ path = fetchurl {
+ name = "supports_color___supports_color_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz";
+ sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
+ };
+ }
+ {
+ name = "supports_color___supports_color_5.5.0.tgz";
+ path = fetchurl {
+ name = "supports_color___supports_color_5.5.0.tgz";
+ url = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz";
+ sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f";
+ };
+ }
+ {
+ name = "supports_color___supports_color_6.1.0.tgz";
+ path = fetchurl {
+ name = "supports_color___supports_color_6.1.0.tgz";
+ url = "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz";
+ sha1 = "0764abc69c63d5ac842dd4867e8d025e880df8f3";
+ };
+ }
+ {
+ name = "supports_color___supports_color_7.1.0.tgz";
+ path = fetchurl {
+ name = "supports_color___supports_color_7.1.0.tgz";
+ url = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz";
+ sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1";
+ };
+ }
+ {
+ name = "svg_tags___svg_tags_1.0.0.tgz";
+ path = fetchurl {
+ name = "svg_tags___svg_tags_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz";
+ sha1 = "58f71cee3bd519b59d4b2a843b6c7de64ac04764";
+ };
+ }
+ {
+ name = "svgo___svgo_1.3.2.tgz";
+ path = fetchurl {
+ name = "svgo___svgo_1.3.2.tgz";
+ url = "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz";
+ sha1 = "b6dc511c063346c9e415b81e43401145b96d4167";
+ };
+ }
+ {
+ name = "table___table_5.4.6.tgz";
+ path = fetchurl {
+ name = "table___table_5.4.6.tgz";
+ url = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz";
+ sha1 = "1292d19500ce3f86053b05f0e8e7e4a3bb21079e";
+ };
+ }
+ {
+ name = "tapable___tapable_1.1.3.tgz";
+ path = fetchurl {
+ name = "tapable___tapable_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz";
+ sha1 = "a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2";
+ };
+ }
+ {
+ name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz";
+ path = fetchurl {
+ name = "terser_webpack_plugin___terser_webpack_plugin_1.4.4.tgz";
+ url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz";
+ sha1 = "2c63544347324baafa9a56baaddf1634c8abfc2f";
+ };
+ }
+ {
+ name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz";
+ path = fetchurl {
+ name = "terser_webpack_plugin___terser_webpack_plugin_2.3.7.tgz";
+ url = "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz";
+ sha1 = "4910ff5d1a872168cc7fa6cd3749e2b0d60a8a0b";
+ };
+ }
+ {
+ name = "terser___terser_4.7.0.tgz";
+ path = fetchurl {
+ name = "terser___terser_4.7.0.tgz";
+ url = "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz";
+ sha1 = "15852cf1a08e3256a80428e865a2fa893ffba006";
+ };
+ }
+ {
+ name = "text_table___text_table_0.2.0.tgz";
+ path = fetchurl {
+ name = "text_table___text_table_0.2.0.tgz";
+ url = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz";
+ sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+ };
+ }
+ {
+ name = "thenify_all___thenify_all_1.6.0.tgz";
+ path = fetchurl {
+ name = "thenify_all___thenify_all_1.6.0.tgz";
+ url = "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz";
+ sha1 = "1a1918d402d8fc3f98fbf234db0bcc8cc10e9726";
+ };
+ }
+ {
+ name = "thenify___thenify_3.3.0.tgz";
+ path = fetchurl {
+ name = "thenify___thenify_3.3.0.tgz";
+ url = "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz";
+ sha1 = "e69e38a1babe969b0108207978b9f62b88604839";
+ };
+ }
+ {
+ name = "thread_loader___thread_loader_2.1.3.tgz";
+ path = fetchurl {
+ name = "thread_loader___thread_loader_2.1.3.tgz";
+ url = "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz";
+ sha1 = "cbd2c139fc2b2de6e9d28f62286ab770c1acbdda";
+ };
+ }
+ {
+ name = "through2___through2_2.0.5.tgz";
+ path = fetchurl {
+ name = "through2___through2_2.0.5.tgz";
+ url = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz";
+ sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd";
+ };
+ }
+ {
+ name = "through___through_2.3.8.tgz";
+ path = fetchurl {
+ name = "through___through_2.3.8.tgz";
+ url = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz";
+ sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+ };
+ }
+ {
+ name = "thunky___thunky_1.1.0.tgz";
+ path = fetchurl {
+ name = "thunky___thunky_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz";
+ sha1 = "5abaf714a9405db0504732bbccd2cedd9ef9537d";
+ };
+ }
+ {
+ name = "timers_browserify___timers_browserify_2.0.11.tgz";
+ path = fetchurl {
+ name = "timers_browserify___timers_browserify_2.0.11.tgz";
+ url = "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz";
+ sha1 = "800b1f3eee272e5bc53ee465a04d0e804c31211f";
+ };
+ }
+ {
+ name = "timsort___timsort_0.3.0.tgz";
+ path = fetchurl {
+ name = "timsort___timsort_0.3.0.tgz";
+ url = "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz";
+ sha1 = "405411a8e7e6339fe64db9a234de11dc31e02bd4";
+ };
+ }
+ {
+ name = "tmp___tmp_0.0.33.tgz";
+ path = fetchurl {
+ name = "tmp___tmp_0.0.33.tgz";
+ url = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz";
+ sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9";
+ };
+ }
+ {
+ name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz";
+ path = fetchurl {
+ name = "to_arraybuffer___to_arraybuffer_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz";
+ sha1 = "7d229b1fcc637e466ca081180836a7aabff83f43";
+ };
+ }
+ {
+ name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+ path = fetchurl {
+ name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+ sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+ };
+ }
+ {
+ name = "to_object_path___to_object_path_0.3.0.tgz";
+ path = fetchurl {
+ name = "to_object_path___to_object_path_0.3.0.tgz";
+ url = "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz";
+ sha1 = "297588b7b0e7e0ac08e04e672f85c1f4999e17af";
+ };
+ }
+ {
+ name = "to_regex_range___to_regex_range_2.1.1.tgz";
+ path = fetchurl {
+ name = "to_regex_range___to_regex_range_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz";
+ sha1 = "7c80c17b9dfebe599e27367e0d4dd5590141db38";
+ };
+ }
+ {
+ name = "to_regex_range___to_regex_range_5.0.1.tgz";
+ path = fetchurl {
+ name = "to_regex_range___to_regex_range_5.0.1.tgz";
+ url = "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz";
+ sha1 = "1648c44aae7c8d988a326018ed72f5b4dd0392e4";
+ };
+ }
+ {
+ name = "to_regex___to_regex_3.0.2.tgz";
+ path = fetchurl {
+ name = "to_regex___to_regex_3.0.2.tgz";
+ url = "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz";
+ sha1 = "13cfdd9b336552f30b51f33a8ae1b42a7a7599ce";
+ };
+ }
+ {
+ name = "toidentifier___toidentifier_1.0.0.tgz";
+ path = fetchurl {
+ name = "toidentifier___toidentifier_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz";
+ sha1 = "7e1be3470f1e77948bc43d94a3c8f4d7752ba553";
+ };
+ }
+ {
+ name = "toposort___toposort_1.0.7.tgz";
+ path = fetchurl {
+ name = "toposort___toposort_1.0.7.tgz";
+ url = "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz";
+ sha1 = "2e68442d9f64ec720b8cc89e6443ac6caa950029";
+ };
+ }
+ {
+ name = "tough_cookie___tough_cookie_2.5.0.tgz";
+ path = fetchurl {
+ name = "tough_cookie___tough_cookie_2.5.0.tgz";
+ url = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz";
+ sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2";
+ };
+ }
+ {
+ name = "tryer___tryer_1.0.1.tgz";
+ path = fetchurl {
+ name = "tryer___tryer_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz";
+ sha1 = "f2c85406800b9b0f74c9f7465b81eaad241252f8";
+ };
+ }
+ {
+ name = "ts_pnp___ts_pnp_1.2.0.tgz";
+ path = fetchurl {
+ name = "ts_pnp___ts_pnp_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz";
+ sha1 = "a500ad084b0798f1c3071af391e65912c86bca92";
+ };
+ }
+ {
+ name = "tslib___tslib_1.13.0.tgz";
+ path = fetchurl {
+ name = "tslib___tslib_1.13.0.tgz";
+ url = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz";
+ sha1 = "c881e13cc7015894ed914862d276436fa9a47043";
+ };
+ }
+ {
+ name = "tty_browserify___tty_browserify_0.0.0.tgz";
+ path = fetchurl {
+ name = "tty_browserify___tty_browserify_0.0.0.tgz";
+ url = "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz";
+ sha1 = "a157ba402da24e9bf957f9aa69d524eed42901a6";
+ };
+ }
+ {
+ name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
+ path = fetchurl {
+ name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
+ url = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+ sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+ };
+ }
+ {
+ name = "tweetnacl___tweetnacl_0.14.5.tgz";
+ path = fetchurl {
+ name = "tweetnacl___tweetnacl_0.14.5.tgz";
+ url = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz";
+ sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+ };
+ }
+ {
+ name = "type_check___type_check_0.4.0.tgz";
+ path = fetchurl {
+ name = "type_check___type_check_0.4.0.tgz";
+ url = "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz";
+ sha1 = "07b8203bfa7056c0657050e3ccd2c37730bab8f1";
+ };
+ }
+ {
+ name = "type_fest___type_fest_0.11.0.tgz";
+ path = fetchurl {
+ name = "type_fest___type_fest_0.11.0.tgz";
+ url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz";
+ sha1 = "97abf0872310fed88a5c466b25681576145e33f1";
+ };
+ }
+ {
+ name = "type_fest___type_fest_0.6.0.tgz";
+ path = fetchurl {
+ name = "type_fest___type_fest_0.6.0.tgz";
+ url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz";
+ sha1 = "8d2a2370d3df886eb5c90ada1c5bf6188acf838b";
+ };
+ }
+ {
+ name = "type_fest___type_fest_0.8.1.tgz";
+ path = fetchurl {
+ name = "type_fest___type_fest_0.8.1.tgz";
+ url = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz";
+ sha1 = "09e249ebde851d3b1e48d27c105444667f17b83d";
+ };
+ }
+ {
+ name = "type_is___type_is_1.6.18.tgz";
+ path = fetchurl {
+ name = "type_is___type_is_1.6.18.tgz";
+ url = "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz";
+ sha1 = "4e552cd05df09467dcbc4ef739de89f2cf37c131";
+ };
+ }
+ {
+ name = "typedarray___typedarray_0.0.6.tgz";
+ path = fetchurl {
+ name = "typedarray___typedarray_0.0.6.tgz";
+ url = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz";
+ sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+ };
+ }
+ {
+ name = "uglify_js___uglify_js_3.4.10.tgz";
+ path = fetchurl {
+ name = "uglify_js___uglify_js_3.4.10.tgz";
+ url = "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz";
+ sha1 = "9ad9563d8eb3acdfb8d38597d2af1d815f6a755f";
+ };
+ }
+ {
+ name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz";
+ path = fetchurl {
+ name = "unicode_canonical_property_names_ecmascript___unicode_canonical_property_names_ecmascript_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz";
+ sha1 = "2619800c4c825800efdd8343af7dd9933cbe2818";
+ };
+ }
+ {
+ name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz";
+ path = fetchurl {
+ name = "unicode_match_property_ecmascript___unicode_match_property_ecmascript_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz";
+ sha1 = "8ed2a32569961bce9227d09cd3ffbb8fed5f020c";
+ };
+ }
+ {
+ name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz";
+ path = fetchurl {
+ name = "unicode_match_property_value_ecmascript___unicode_match_property_value_ecmascript_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz";
+ sha1 = "0d91f600eeeb3096aa962b1d6fc88876e64ea531";
+ };
+ }
+ {
+ name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz";
+ path = fetchurl {
+ name = "unicode_property_aliases_ecmascript___unicode_property_aliases_ecmascript_1.1.0.tgz";
+ url = "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz";
+ sha1 = "dd57a99f6207bedff4628abefb94c50db941c8f4";
+ };
+ }
+ {
+ name = "union_value___union_value_1.0.1.tgz";
+ path = fetchurl {
+ name = "union_value___union_value_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz";
+ sha1 = "0b6fe7b835aecda61c6ea4d4f02c14221e109847";
+ };
+ }
+ {
+ name = "uniq___uniq_1.0.1.tgz";
+ path = fetchurl {
+ name = "uniq___uniq_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz";
+ sha1 = "b31c5ae8254844a3a8281541ce2b04b865a734ff";
+ };
+ }
+ {
+ name = "uniqs___uniqs_2.0.0.tgz";
+ path = fetchurl {
+ name = "uniqs___uniqs_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz";
+ sha1 = "ffede4b36b25290696e6e165d4a59edb998e6b02";
+ };
+ }
+ {
+ name = "unique_filename___unique_filename_1.1.1.tgz";
+ path = fetchurl {
+ name = "unique_filename___unique_filename_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz";
+ sha1 = "1d69769369ada0583103a1e6ae87681b56573230";
+ };
+ }
+ {
+ name = "unique_slug___unique_slug_2.0.2.tgz";
+ path = fetchurl {
+ name = "unique_slug___unique_slug_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz";
+ sha1 = "baabce91083fc64e945b0f3ad613e264f7cd4e6c";
+ };
+ }
+ {
+ name = "universalify___universalify_0.1.2.tgz";
+ path = fetchurl {
+ name = "universalify___universalify_0.1.2.tgz";
+ url = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz";
+ sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66";
+ };
+ }
+ {
+ name = "unpipe___unpipe_1.0.0.tgz";
+ path = fetchurl {
+ name = "unpipe___unpipe_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz";
+ sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
+ };
+ }
+ {
+ name = "unquote___unquote_1.1.1.tgz";
+ path = fetchurl {
+ name = "unquote___unquote_1.1.1.tgz";
+ url = "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz";
+ sha1 = "8fded7324ec6e88a0ff8b905e7c098cdc086d544";
+ };
+ }
+ {
+ name = "unset_value___unset_value_1.0.0.tgz";
+ path = fetchurl {
+ name = "unset_value___unset_value_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz";
+ sha1 = "8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559";
+ };
+ }
+ {
+ name = "upath___upath_1.2.0.tgz";
+ path = fetchurl {
+ name = "upath___upath_1.2.0.tgz";
+ url = "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz";
+ sha1 = "8f66dbcd55a883acdae4408af8b035a5044c1894";
+ };
+ }
+ {
+ name = "upper_case___upper_case_1.1.3.tgz";
+ path = fetchurl {
+ name = "upper_case___upper_case_1.1.3.tgz";
+ url = "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz";
+ sha1 = "f6b4501c2ec4cdd26ba78be7222961de77621598";
+ };
+ }
+ {
+ name = "uri_js___uri_js_4.2.2.tgz";
+ path = fetchurl {
+ name = "uri_js___uri_js_4.2.2.tgz";
+ url = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz";
+ sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0";
+ };
+ }
+ {
+ name = "urix___urix_0.1.0.tgz";
+ path = fetchurl {
+ name = "urix___urix_0.1.0.tgz";
+ url = "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz";
+ sha1 = "da937f7a62e21fec1fd18d49b35c2935067a6c72";
+ };
+ }
+ {
+ name = "url_loader___url_loader_2.3.0.tgz";
+ path = fetchurl {
+ name = "url_loader___url_loader_2.3.0.tgz";
+ url = "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz";
+ sha1 = "e0e2ef658f003efb8ca41b0f3ffbf76bab88658b";
+ };
+ }
+ {
+ name = "url_parse___url_parse_1.4.7.tgz";
+ path = fetchurl {
+ name = "url_parse___url_parse_1.4.7.tgz";
+ url = "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz";
+ sha1 = "a8a83535e8c00a316e403a5db4ac1b9b853ae278";
+ };
+ }
+ {
+ name = "url___url_0.11.0.tgz";
+ path = fetchurl {
+ name = "url___url_0.11.0.tgz";
+ url = "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz";
+ sha1 = "3838e97cfc60521eb73c525a8e55bfdd9e2e28f1";
+ };
+ }
+ {
+ name = "use___use_3.1.1.tgz";
+ path = fetchurl {
+ name = "use___use_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz";
+ sha1 = "d50c8cac79a19fbc20f2911f56eb973f4e10070f";
+ };
+ }
+ {
+ name = "util_deprecate___util_deprecate_1.0.2.tgz";
+ path = fetchurl {
+ name = "util_deprecate___util_deprecate_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
+ sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+ };
+ }
+ {
+ name = "util.promisify___util.promisify_1.0.0.tgz";
+ path = fetchurl {
+ name = "util.promisify___util.promisify_1.0.0.tgz";
+ url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz";
+ sha1 = "440f7165a459c9a16dc145eb8e72f35687097030";
+ };
+ }
+ {
+ name = "util.promisify___util.promisify_1.0.1.tgz";
+ path = fetchurl {
+ name = "util.promisify___util.promisify_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz";
+ sha1 = "6baf7774b80eeb0f7520d8b81d07982a59abbaee";
+ };
+ }
+ {
+ name = "util___util_0.10.3.tgz";
+ path = fetchurl {
+ name = "util___util_0.10.3.tgz";
+ url = "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz";
+ sha1 = "7afb1afe50805246489e3db7fe0ed379336ac0f9";
+ };
+ }
+ {
+ name = "util___util_0.11.1.tgz";
+ path = fetchurl {
+ name = "util___util_0.11.1.tgz";
+ url = "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz";
+ sha1 = "3236733720ec64bb27f6e26f421aaa2e1b588d61";
+ };
+ }
+ {
+ name = "utila___utila_0.4.0.tgz";
+ path = fetchurl {
+ name = "utila___utila_0.4.0.tgz";
+ url = "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz";
+ sha1 = "8a16a05d445657a3aea5eecc5b12a4fa5379772c";
+ };
+ }
+ {
+ name = "utils_merge___utils_merge_1.0.1.tgz";
+ path = fetchurl {
+ name = "utils_merge___utils_merge_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz";
+ sha1 = "9f95710f50a267947b2ccc124741c1028427e713";
+ };
+ }
+ {
+ name = "uuid___uuid_3.4.0.tgz";
+ path = fetchurl {
+ name = "uuid___uuid_3.4.0.tgz";
+ url = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz";
+ sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee";
+ };
+ }
+ {
+ name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz";
+ path = fetchurl {
+ name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz";
+ url = "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz";
+ sha1 = "54bc3cdd43317bca91e35dcaf305b1a7237de745";
+ };
+ }
+ {
+ name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+ path = fetchurl {
+ name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+ url = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+ sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a";
+ };
+ }
+ {
+ name = "vary___vary_1.1.2.tgz";
+ path = fetchurl {
+ name = "vary___vary_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz";
+ sha1 = "2299f02c6ded30d4a5961b0b9f74524a18f634fc";
+ };
+ }
+ {
+ name = "vendors___vendors_1.0.4.tgz";
+ path = fetchurl {
+ name = "vendors___vendors_1.0.4.tgz";
+ url = "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz";
+ sha1 = "e2b800a53e7a29b93506c3cf41100d16c4c4ad8e";
+ };
+ }
+ {
+ name = "verror___verror_1.10.0.tgz";
+ path = fetchurl {
+ name = "verror___verror_1.10.0.tgz";
+ url = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz";
+ sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+ };
+ }
+ {
+ name = "vm_browserify___vm_browserify_1.1.2.tgz";
+ path = fetchurl {
+ name = "vm_browserify___vm_browserify_1.1.2.tgz";
+ url = "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz";
+ sha1 = "78641c488b8e6ca91a75f511e7a3b32a86e5dda0";
+ };
+ }
+ {
+ name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz";
+ path = fetchurl {
+ name = "vue_eslint_parser___vue_eslint_parser_7.1.0.tgz";
+ url = "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz";
+ sha1 = "9cdbcc823e656b087507a1911732b867ac101e83";
+ };
+ }
+ {
+ name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz";
+ path = fetchurl {
+ name = "vue_hot_reload_api___vue_hot_reload_api_2.3.4.tgz";
+ url = "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz";
+ sha1 = "532955cc1eb208a3d990b3a9f9a70574657e08f2";
+ };
+ }
+ {
+ name = "vue_loader___vue_loader_15.9.2.tgz";
+ path = fetchurl {
+ name = "vue_loader___vue_loader_15.9.2.tgz";
+ url = "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.2.tgz";
+ sha1 = "ae01f5f4c9c6a04bff4483912e72ef91a402c1ae";
+ };
+ }
+ {
+ name = "vue_style_loader___vue_style_loader_4.1.2.tgz";
+ path = fetchurl {
+ name = "vue_style_loader___vue_style_loader_4.1.2.tgz";
+ url = "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz";
+ sha1 = "dedf349806f25ceb4e64f3ad7c0a44fba735fcf8";
+ };
+ }
+ {
+ name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz";
+ path = fetchurl {
+ name = "vue_template_compiler___vue_template_compiler_2.6.11.tgz";
+ url = "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz";
+ sha1 = "c04704ef8f498b153130018993e56309d4698080";
+ };
+ }
+ {
+ name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz";
+ path = fetchurl {
+ name = "vue_template_es2015_compiler___vue_template_es2015_compiler_1.9.1.tgz";
+ url = "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz";
+ sha1 = "1ee3bc9a16ecbf5118be334bb15f9c46f82f5825";
+ };
+ }
+ {
+ name = "vue___vue_2.6.11.tgz";
+ path = fetchurl {
+ name = "vue___vue_2.6.11.tgz";
+ url = "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz";
+ sha1 = "76594d877d4b12234406e84e35275c6d514125c5";
+ };
+ }
+ {
+ name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz";
+ path = fetchurl {
+ name = "watchpack_chokidar2___watchpack_chokidar2_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz";
+ sha1 = "9948a1866cbbd6cb824dea13a7ed691f6c8ddff0";
+ };
+ }
+ {
+ name = "watchpack___watchpack_1.7.2.tgz";
+ path = fetchurl {
+ name = "watchpack___watchpack_1.7.2.tgz";
+ url = "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz";
+ sha1 = "c02e4d4d49913c3e7e122c3325365af9d331e9aa";
+ };
+ }
+ {
+ name = "wbuf___wbuf_1.7.3.tgz";
+ path = fetchurl {
+ name = "wbuf___wbuf_1.7.3.tgz";
+ url = "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz";
+ sha1 = "c1d8d149316d3ea852848895cb6a0bfe887b87df";
+ };
+ }
+ {
+ name = "wcwidth___wcwidth_1.0.1.tgz";
+ path = fetchurl {
+ name = "wcwidth___wcwidth_1.0.1.tgz";
+ url = "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz";
+ sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8";
+ };
+ }
+ {
+ name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz";
+ path = fetchurl {
+ name = "webpack_bundle_analyzer___webpack_bundle_analyzer_3.8.0.tgz";
+ url = "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz";
+ sha1 = "ce6b3f908daf069fd1f7266f692cbb3bded9ba16";
+ };
+ }
+ {
+ name = "webpack_chain___webpack_chain_6.4.0.tgz";
+ path = fetchurl {
+ name = "webpack_chain___webpack_chain_6.4.0.tgz";
+ url = "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.4.0.tgz";
+ sha1 = "22f0b27b6a9bc9ee3cba4f9e6513cf66394034e2";
+ };
+ }
+ {
+ name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz";
+ path = fetchurl {
+ name = "webpack_dev_middleware___webpack_dev_middleware_3.7.2.tgz";
+ url = "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz";
+ sha1 = "0019c3db716e3fa5cecbf64f2ab88a74bab331f3";
+ };
+ }
+ {
+ name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz";
+ path = fetchurl {
+ name = "webpack_dev_server___webpack_dev_server_3.11.0.tgz";
+ url = "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz";
+ sha1 = "8f154a3bce1bcfd1cc618ef4e703278855e7ff8c";
+ };
+ }
+ {
+ name = "webpack_log___webpack_log_2.0.0.tgz";
+ path = fetchurl {
+ name = "webpack_log___webpack_log_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz";
+ sha1 = "5b7928e0637593f119d32f6227c1e0ac31e1b47f";
+ };
+ }
+ {
+ name = "webpack_merge___webpack_merge_4.2.2.tgz";
+ path = fetchurl {
+ name = "webpack_merge___webpack_merge_4.2.2.tgz";
+ url = "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz";
+ sha1 = "a27c52ea783d1398afd2087f547d7b9d2f43634d";
+ };
+ }
+ {
+ name = "webpack_sources___webpack_sources_1.4.3.tgz";
+ path = fetchurl {
+ name = "webpack_sources___webpack_sources_1.4.3.tgz";
+ url = "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz";
+ sha1 = "eedd8ec0b928fbf1cbfe994e22d2d890f330a933";
+ };
+ }
+ {
+ name = "webpack___webpack_4.43.0.tgz";
+ path = fetchurl {
+ name = "webpack___webpack_4.43.0.tgz";
+ url = "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz";
+ sha1 = "c48547b11d563224c561dad1172c8aa0b8a678e6";
+ };
+ }
+ {
+ name = "websocket_driver___websocket_driver_0.6.5.tgz";
+ path = fetchurl {
+ name = "websocket_driver___websocket_driver_0.6.5.tgz";
+ url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz";
+ sha1 = "5cb2556ceb85f4373c6d8238aa691c8454e13a36";
+ };
+ }
+ {
+ name = "websocket_driver___websocket_driver_0.7.4.tgz";
+ path = fetchurl {
+ name = "websocket_driver___websocket_driver_0.7.4.tgz";
+ url = "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz";
+ sha1 = "89ad5295bbf64b480abcba31e4953aca706f5760";
+ };
+ }
+ {
+ name = "websocket_extensions___websocket_extensions_0.1.4.tgz";
+ path = fetchurl {
+ name = "websocket_extensions___websocket_extensions_0.1.4.tgz";
+ url = "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz";
+ sha1 = "7f8473bc839dfd87608adb95d7eb075211578a42";
+ };
+ }
+ {
+ name = "which_module___which_module_2.0.0.tgz";
+ path = fetchurl {
+ name = "which_module___which_module_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
+ sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+ };
+ }
+ {
+ name = "which___which_1.3.1.tgz";
+ path = fetchurl {
+ name = "which___which_1.3.1.tgz";
+ url = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz";
+ sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a";
+ };
+ }
+ {
+ name = "which___which_2.0.2.tgz";
+ path = fetchurl {
+ name = "which___which_2.0.2.tgz";
+ url = "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz";
+ sha1 = "7c6a8dd0a636a0327e10b59c9286eee93f3f51b1";
+ };
+ }
+ {
+ name = "word_wrap___word_wrap_1.2.3.tgz";
+ path = fetchurl {
+ name = "word_wrap___word_wrap_1.2.3.tgz";
+ url = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz";
+ sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c";
+ };
+ }
+ {
+ name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_background_sync___workbox_background_sync_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz";
+ sha1 = "26821b9bf16e9e37fd1d640289edddc08afd1950";
+ };
+ }
+ {
+ name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_broadcast_update___workbox_broadcast_update_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz";
+ sha1 = "e2c0280b149e3a504983b757606ad041f332c35b";
+ };
+ }
+ {
+ name = "workbox_build___workbox_build_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_build___workbox_build_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-build/-/workbox-build-4.3.1.tgz";
+ sha1 = "414f70fb4d6de47f6538608b80ec52412d233e64";
+ };
+ }
+ {
+ name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_cacheable_response___workbox_cacheable_response_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz";
+ sha1 = "f53e079179c095a3f19e5313b284975c91428c91";
+ };
+ }
+ {
+ name = "workbox_core___workbox_core_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_core___workbox_core_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-core/-/workbox-core-4.3.1.tgz";
+ sha1 = "005d2c6a06a171437afd6ca2904a5727ecd73be6";
+ };
+ }
+ {
+ name = "workbox_expiration___workbox_expiration_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_expiration___workbox_expiration_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-4.3.1.tgz";
+ sha1 = "d790433562029e56837f341d7f553c4a78ebe921";
+ };
+ }
+ {
+ name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_google_analytics___workbox_google_analytics_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz";
+ sha1 = "9eda0183b103890b5c256e6f4ea15a1f1548519a";
+ };
+ }
+ {
+ name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_navigation_preload___workbox_navigation_preload_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz";
+ sha1 = "29c8e4db5843803b34cd96dc155f9ebd9afa453d";
+ };
+ }
+ {
+ name = "workbox_precaching___workbox_precaching_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_precaching___workbox_precaching_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-4.3.1.tgz";
+ sha1 = "9fc45ed122d94bbe1f0ea9584ff5940960771cba";
+ };
+ }
+ {
+ name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_range_requests___workbox_range_requests_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz";
+ sha1 = "f8a470188922145cbf0c09a9a2d5e35645244e74";
+ };
+ }
+ {
+ name = "workbox_routing___workbox_routing_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_routing___workbox_routing_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-4.3.1.tgz";
+ sha1 = "a675841af623e0bb0c67ce4ed8e724ac0bed0cda";
+ };
+ }
+ {
+ name = "workbox_strategies___workbox_strategies_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_strategies___workbox_strategies_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-4.3.1.tgz";
+ sha1 = "d2be03c4ef214c115e1ab29c9c759c9fe3e9e646";
+ };
+ }
+ {
+ name = "workbox_streams___workbox_streams_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_streams___workbox_streams_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-4.3.1.tgz";
+ sha1 = "0b57da70e982572de09c8742dd0cb40a6b7c2cc3";
+ };
+ }
+ {
+ name = "workbox_sw___workbox_sw_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_sw___workbox_sw_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-4.3.1.tgz";
+ sha1 = "df69e395c479ef4d14499372bcd84c0f5e246164";
+ };
+ }
+ {
+ name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_webpack_plugin___workbox_webpack_plugin_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz";
+ sha1 = "47ff5ea1cc074b6c40fb5a86108863a24120d4bd";
+ };
+ }
+ {
+ name = "workbox_window___workbox_window_4.3.1.tgz";
+ path = fetchurl {
+ name = "workbox_window___workbox_window_4.3.1.tgz";
+ url = "https://registry.yarnpkg.com/workbox-window/-/workbox-window-4.3.1.tgz";
+ sha1 = "ee6051bf10f06afa5483c9b8dfa0531994ede0f3";
+ };
+ }
+ {
+ name = "worker_farm___worker_farm_1.7.0.tgz";
+ path = fetchurl {
+ name = "worker_farm___worker_farm_1.7.0.tgz";
+ url = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz";
+ sha1 = "26a94c5391bbca926152002f69b84a4bf772e5a8";
+ };
+ }
+ {
+ name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+ path = fetchurl {
+ name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+ url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
+ sha1 = "1fd1f67235d5b6d0fee781056001bfb694c03b09";
+ };
+ }
+ {
+ name = "wrap_ansi___wrap_ansi_6.2.0.tgz";
+ path = fetchurl {
+ name = "wrap_ansi___wrap_ansi_6.2.0.tgz";
+ url = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz";
+ sha1 = "e9393ba07102e6c91a3b221478f0257cd2856e53";
+ };
+ }
+ {
+ name = "wrappy___wrappy_1.0.2.tgz";
+ path = fetchurl {
+ name = "wrappy___wrappy_1.0.2.tgz";
+ url = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
+ sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+ };
+ }
+ {
+ name = "write___write_1.0.3.tgz";
+ path = fetchurl {
+ name = "write___write_1.0.3.tgz";
+ url = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz";
+ sha1 = "0800e14523b923a387e415123c865616aae0f5c3";
+ };
+ }
+ {
+ name = "ws___ws_6.2.1.tgz";
+ path = fetchurl {
+ name = "ws___ws_6.2.1.tgz";
+ url = "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz";
+ sha1 = "442fdf0a47ed64f59b6a5d8ff130f4748ed524fb";
+ };
+ }
+ {
+ name = "xtend___xtend_4.0.2.tgz";
+ path = fetchurl {
+ name = "xtend___xtend_4.0.2.tgz";
+ url = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz";
+ sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54";
+ };
+ }
+ {
+ name = "y18n___y18n_4.0.0.tgz";
+ path = fetchurl {
+ name = "y18n___y18n_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz";
+ sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b";
+ };
+ }
+ {
+ name = "yallist___yallist_2.1.2.tgz";
+ path = fetchurl {
+ name = "yallist___yallist_2.1.2.tgz";
+ url = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz";
+ sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+ };
+ }
+ {
+ name = "yallist___yallist_3.1.1.tgz";
+ path = fetchurl {
+ name = "yallist___yallist_3.1.1.tgz";
+ url = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz";
+ sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd";
+ };
+ }
+ {
+ name = "yallist___yallist_4.0.0.tgz";
+ path = fetchurl {
+ name = "yallist___yallist_4.0.0.tgz";
+ url = "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz";
+ sha1 = "9bb92790d9c0effec63be73519e11a35019a3a72";
+ };
+ }
+ {
+ name = "yargs_parser___yargs_parser_13.1.2.tgz";
+ path = fetchurl {
+ name = "yargs_parser___yargs_parser_13.1.2.tgz";
+ url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz";
+ sha1 = "130f09702ebaeef2650d54ce6e3e5706f7a4fb38";
+ };
+ }
+ {
+ name = "yargs_parser___yargs_parser_18.1.3.tgz";
+ path = fetchurl {
+ name = "yargs_parser___yargs_parser_18.1.3.tgz";
+ url = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz";
+ sha1 = "be68c4975c6b2abf469236b0c870362fab09a7b0";
+ };
+ }
+ {
+ name = "yargs___yargs_13.3.2.tgz";
+ path = fetchurl {
+ name = "yargs___yargs_13.3.2.tgz";
+ url = "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz";
+ sha1 = "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd";
+ };
+ }
+ {
+ name = "yargs___yargs_15.3.1.tgz";
+ path = fetchurl {
+ name = "yargs___yargs_15.3.1.tgz";
+ url = "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz";
+ sha1 = "9505b472763963e54afe60148ad27a330818e98b";
+ };
+ }
+ {
+ name = "yorkie___yorkie_2.0.0.tgz";
+ path = fetchurl {
+ name = "yorkie___yorkie_2.0.0.tgz";
+ url = "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz";
+ sha1 = "92411912d435214e12c51c2ae1093e54b6bb83d9";
+ };
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/ldap.nix b/systems/eldiron/websites/tools/ldap.nix
new file mode 100644
index 0000000..9509169
--- /dev/null
+++ b/systems/eldiron/websites/tools/ldap.nix
@@ -0,0 +1,77 @@
+{ lib, php, env, writeText, phpldapadmin, config }:
+rec {
+ keys."webapps/tools-ldap" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ custom->appearance['show_clear_password'] = true;
+ $config->custom->appearance['hide_template_warning'] = true;
+ $config->custom->appearance['theme'] = "tango";
+ $config->custom->appearance['minimalMode'] = false;
+ $config->custom->appearance['tree'] = 'AJAXTree';
+
+ $servers = new Datastore();
+
+ $servers->newServer('ldap_pla');
+ $servers->setValue('server','name','Immae’s LDAP');
+ $servers->setValue('server','host','ldaps://${env.ldap.host}');
+ $servers->setValue('login','auth_type','cookie');
+ $servers->setValue('login','bind_id','${env.ldap.dn}');
+ $servers->setValue('login','bind_pass','${env.ldap.password}');
+ $servers->setValue('appearance','pla_password_hash','ssha');
+ $servers->setValue('login','attr','uid');
+ $servers->setValue('login','fallback_dn',true);
+ '';
+ };
+ webRoot = phpldapadmin.override { config = config.secrets.fullPaths."webapps/tools-ldap"; };
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = "${webRoot}/htdocs";
+ vhostConf = socket: ''
+ Alias /ldap "${root}"
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride None
+ Require all granted
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" [ webRoot config.secrets.fullPaths."webapps/tools-ldap" ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "LdapPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpLDAPAdmin:'";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "ldap website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/ldap/" "phpLDAPadmin"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "LDAP";
+ _webstatus_url = "https://tools.immae.eu/ldap/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/phpbb.nix b/systems/eldiron/websites/tools/phpbb.nix
new file mode 100644
index 0000000..c1cbd6f
--- /dev/null
+++ b/systems/eldiron/websites/tools/phpbb.nix
@@ -0,0 +1,69 @@
+{ lib, phpbb, gnused }:
+rec {
+ varDir = "/var/lib/phpbb";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ if [ ! -d ${varDir} ]; then
+ install -m 0755 -o ${apache.user} -g ${apache.user} -d ${varDir}
+ cp -a ${phpbb}/vars/* ${varDir}
+ chown -R ${apache.user}:${apache.user} ${varDir}
+ fi
+ '';
+ };
+ chatonsHostingProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ hosting = {
+ name = "phpBB";
+ description = "Forum software";
+ website = "https://tools.immae.eu/forum";
+ logo = "https://www.phpbb.com/favicon.ico";
+ type = "INSTANCE";
+ status.level = "OK";
+ status.description = "OK";
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ };
+ webRoot = phpbb;
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /forum "${root}"
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+ # add instal to the list after install
+
+ Require all denied
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" ];
+ basedir = builtins.concatStringsSep ":" [ "/run/wrappers/bin/sendmail" phpbb varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "PhpBBPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:PhpBB:'";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/rompr.nix b/systems/eldiron/websites/tools/rompr.nix
new file mode 100644
index 0000000..a7308ce
--- /dev/null
+++ b/systems/eldiron/websites/tools/rompr.nix
@@ -0,0 +1,86 @@
+{ lib, env, rompr, config }:
+rec {
+ varDir = "/var/lib/rompr";
+ activationScript = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/prefs ${varDir}/albumart
+ '';
+ webRoot = rompr;
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "headers" "mime" "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /rompr ${root}
+
+
+ Options Indexes FollowSymLinks
+ DirectoryIndex index.php
+ AllowOverride all
+ Require all granted
+ Order allow,deny
+ Allow from all
+ ErrorDocument 404 /rompr/404.php
+ AddType image/x-icon .ico
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+
+
+ Header Set Cache-Control "max-age=0, no-store"
+ Header Set Cache-Control "no-cache, must-revalidate"
+
+
+
+ Header Set Cache-Control "max-age=0, no-store"
+ Header Set Cache-Control "no-cache, must-revalidate"
+
+
+
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu
+
+ '';
+ };
+ phpFpm = rec {
+ basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "RomprPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Rompr:'";
+ "php_flag[magic_quotes_gpc]" = "Off";
+ "php_flag[track_vars]" = "On";
+ "php_flag[register_globals]" = "Off";
+ "php_admin_flag[allow_url_fopen]" = "On";
+ "php_value[include_path]" = "${webRoot}";
+ "php_admin_value[upload_tmp_dir]" = "${varDir}/prefs";
+ "php_admin_value[post_max_size]" = "32M";
+ "php_admin_value[upload_max_filesize]" = "32M";
+ "php_admin_value[memory_limit]" = "256M";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "rompr mpd website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https_auth" "tools.immae.eu" "/rompr/" "RompЯ"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "MPD (ROMPR)";
+ _webstatus_url = "https://tools.immae.eu/rompr/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/shaarli.nix b/systems/eldiron/websites/tools/shaarli.nix
new file mode 100644
index 0000000..35f1edb
--- /dev/null
+++ b/systems/eldiron/websites/tools/shaarli.nix
@@ -0,0 +1,102 @@
+{ lib, env, stdenv, fetchurl, shaarli, config }:
+let
+ varDir = "/var/lib/shaarli";
+in rec {
+ activationScript = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/cache ${varDir}/pagecache ${varDir}/tmp ${varDir}/data
+ '';
+ webRoot = shaarli.override { inherit varDir; };
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" "rewrite" "env" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /Shaarli "${root}"
+
+ Include ${config.secrets.fullPaths."webapps/tools-shaarli"}
+
+ Header set Access-Control-Allow-Origin "*"
+ Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
+ Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, Client-Security-Token, Accept-Encoding"
+
+
+ DirectoryIndex index.php index.htm index.html
+ Options Indexes FollowSymLinks MultiViews Includes
+ AllowOverride All
+ Require all granted
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ '';
+ };
+ chatonsProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ service = {
+ name = "Shaarli";
+ description = "The personal, minimalist, super-fast, database free, bookmarking service - community repo";
+ website = "https://tools.immae.eu/Shaarli/";
+ logo = "https://tools.immae.eu/Shaarli/tpl/default/img/apple-touch-icon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Shaarli";
+ website = "https://shaarli.readthedocs.io/";
+ license.url = "https://github.com/shaarli/Shaarli/blob/master/COPYING";
+ license.name = "GNU General Public License Version 3";
+ version = webRoot.version;
+ source.url = "https://github.com/shaarli/Shaarli";
+ modules = "ldap-connection-patch";
+ };
+ };
+ keys."webapps/tools-shaarli" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ SetEnv SHAARLI_LDAP_PASSWORD "${env.ldap.password}"
+ SetEnv SHAARLI_LDAP_DN "${env.ldap.dn}"
+ SetEnv SHAARLI_LDAP_HOST "ldaps://${env.ldap.host}"
+ SetEnv SHAARLI_LDAP_BASE "${env.ldap.base}"
+ SetEnv SHAARLI_LDAP_FILTER "${env.ldap.filter}"
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" [ webRoot varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "ShaarliPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Shaarli:'";
+ "php_admin_value[upload_max_filesize]" = "200M";
+ "php_admin_value[post_max_size]" = "200M";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "shaarli website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/Shaarli/immae" "Immae"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Shaarli";
+ _webstatus_url = "https://tools.immae.eu/Shaarli/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/ttrss.nix b/systems/eldiron/websites/tools/ttrss.nix
new file mode 100644
index 0000000..6393256
--- /dev/null
+++ b/systems/eldiron/websites/tools/ttrss.nix
@@ -0,0 +1,167 @@
+{ php, env, ttrss, ttrss-plugins, config }:
+rec {
+ varDir = "/var/lib/ttrss";
+ activationScript = {
+ deps = [ "wrappers" ];
+ text = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/lock ${varDir}/cache ${varDir}/feed-icons
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir}/cache/export/ \
+ ${varDir}/cache/feeds/ \
+ ${varDir}/cache/images/ \
+ ${varDir}/cache/js/ \
+ ${varDir}/cache/simplepie/ \
+ ${varDir}/cache/upload/
+ touch ${varDir}/feed-icons/index.html
+ '';
+ };
+ chatonsProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ service = {
+ name = "RSS";
+ description = "Tiny Tiny RSS is a free and open source web-based news feed (RSS/Atom) reader and aggregator";
+ website = "https://tools.immae.eu/ttrss/";
+ logo = "https://tools.immae.eu/ttrss/images/favicon.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Tiny Tiny RSS";
+ website = "https://tt-rss.org/";
+ license.url = "https://www.gnu.org/copyleft/gpl.html";
+ license.name = "GNU General Public License Version 3";
+ version = webRoot.version;
+ source.url = "https://git.tt-rss.org/fox/tt-rss.git/";
+ modules = map (p: p.pluginName) webRoot.plugins;
+ };
+ };
+ keys."webapps/tools-ttrss" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ keyDependencies = [ php ];
+ text = ''
+
+ DirectoryIndex index.php
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride All
+ Options FollowSymlinks
+ Require all granted
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "postgresql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" (
+ [ webRoot config.secrets.fullPaths."webapps/tools-ttrss" varDir ]
+ ++ webRoot.plugins);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "TtrssPHPSESSID";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:TTRSS:'";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "ttrss website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/ttrss/" "Tiny Tiny RSS"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "TT-RSS";
+ _webstatus_url = "https://tools.immae.eu/ttrss/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/wallabag.nix b/systems/eldiron/websites/tools/wallabag.nix
new file mode 100644
index 0000000..0a5750d
--- /dev/null
+++ b/systems/eldiron/websites/tools/wallabag.nix
@@ -0,0 +1,180 @@
+{ env, wallabag, mylibs, config }:
+rec {
+ varDir = "/var/lib/wallabag";
+ keys."webapps/tools-wallabag" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+ # This file is auto-generated during the composer install
+ parameters:
+ database_driver: pdo_pgsql
+ database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver
+ database_host: ${env.postgresql.socket}
+ database_port: ${env.postgresql.port}
+ database_name: ${env.postgresql.database}
+ database_user: ${env.postgresql.user}
+ database_password: ${env.postgresql.password}
+ database_path: null
+ database_table_prefix: wallabag_
+ database_socket: null
+ database_charset: utf8
+ domain_name: https://tools.immae.eu/wallabag
+ mailer_transport: sendmail
+ mailer_host: 127.0.0.1
+ mailer_user: null
+ mailer_password: null
+ locale: fr
+ secret: ${env.secret}
+ twofactor_auth: true
+ twofactor_sender: wallabag@tools.immae.eu
+ fosuser_registration: false
+ fosuser_confirmation: true
+ from_email: wallabag@tools.immae.eu
+ rss_limit: 50
+ rabbitmq_host: localhost
+ rabbitmq_port: 5672
+ rabbitmq_user: guest
+ rabbitmq_password: guest
+ rabbitmq_prefetch_count: 10
+ redis_scheme: unix
+ redis_host: null
+ redis_port: null
+ redis_path: ${env.redis.socket}
+ redis_password: null
+ sites_credentials: { }
+ ldap_enabled: true
+ ldap_host: ${env.ldap.host}
+ ldap_port: 636
+ ldap_tls: false
+ ldap_ssl: true
+ ldap_bind_requires_dn: true
+ ldap_base: '${env.ldap.base}'
+ ldap_manager_dn: '${env.ldap.dn}'
+ ldap_manager_pw: ${env.ldap.password}
+ ldap_filter: '${env.ldap.filter}'
+ ldap_admin_filter: '${env.ldap.admin_filter}'
+ ldap_username_attribute: uid
+ ldap_email_attribute: mail
+ ldap_name_attribute: cn
+ ldap_enabled_attribute: null
+ services:
+ swiftmailer.mailer.default.transport:
+ class: Swift_SendmailTransport
+ arguments: ['/run/wrappers/bin/sendmail -bs']
+ '';
+ };
+ chatonsProperties = {
+ file.datetime = "2022-08-21T22:50:00";
+ service = {
+ name = "Wallabag";
+ description = "wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.";
+ website = "https://tools.immae.eu/wallabag/";
+ logo = "https://tools.immae.eu/wallabag/wallassets/themes/_global/img/appicon/apple-touch-icon-120.png";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["MEMBER" "CLIENT"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Wallabag";
+ website = "https://wallabag.org/en";
+ license.url = "https://github.com/wallabag/wallabag/blob/master/COPYING.md";
+ license.name = "MIT License";
+ version = webappDir.version;
+ source.url = "https://github.com/wallabag/wallabag";
+ modules = "ldap-patch";
+ };
+ };
+ webappDir = wallabag.override { ldap = true; wallabag_config = config.secrets.fullPaths."webapps/tools-wallabag"; };
+ activationScript = ''
+ install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \
+ ${varDir}/var ${varDir}/data/db ${varDir}/assets/images
+ '';
+ webRoot = "${webappDir}/web";
+ # Domain migration: Table wallabag_entry contains whole
+ # https://tools.immae.eu/wallabag domain name in preview_picture
+ apache = rec {
+ user = "wwwrun";
+ group = "wwwrun";
+ modules = [ "proxy_fcgi" ];
+ root = webRoot;
+ vhostConf = socket: ''
+ Alias /wallabag "${root}"
+
+ AllowOverride None
+ Require all granted
+ # For OAuth (apps)
+ CGIPassAuth On
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+
+ Options -MultiViews
+ RewriteEngine On
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^(.*)$ app.php [QSA,L]
+
+
+
+
+ RewriteEngine Off
+
+
+
+ AllowOverride None
+ Require all granted
+
+ '';
+ };
+ phpFpm = rec {
+ preStart = ''
+ if [ ! -f "${varDir}/currentWebappDir" -o \
+ ! -f "${varDir}/currentKey" -o \
+ "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \
+ || ! sha512sum -c --status ${varDir}/currentKey; then
+ pushd ${webappDir} > /dev/null
+ /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear
+ rm -rf /var/lib/wallabag/var/cache/pro_
+ /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction
+ popd > /dev/null
+ echo -n "${webappDir}" > ${varDir}/currentWebappDir
+ sha512sum ${config.secrets.fullPaths."webapps/tools-wallabag"} > ${varDir}/currentKey
+ fi
+ '';
+ serviceDeps = [ "postgresql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" [ webappDir config.secrets.fullPaths."webapps/tools-wallabag" varDir ];
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "dynamic";
+ "pm.max_children" = "60";
+ "pm.start_servers" = "2";
+ "pm.min_spare_servers" = "1";
+ "pm.max_spare_servers" = "10";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "WallabagPHPSESSID";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Wallabag:'";
+ "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${basedir}:/tmp";
+ "php_value[max_execution_time]" = "300";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "wallabag website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/wallabag/" "Bienvenue sur wallabag"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "Wallabag";
+ _webstatus_url = "https://tools.immae.eu/wallabag/";
+ }
+ ];
+}
diff --git a/systems/eldiron/websites/tools/webhooks.nix b/systems/eldiron/websites/tools/webhooks.nix
new file mode 100644
index 0000000..337c8f8
--- /dev/null
+++ b/systems/eldiron/websites/tools/webhooks.nix
@@ -0,0 +1,25 @@
+{ lib, env, binEnv }:
+{
+ keys = lib.attrsets.mapAttrs' (k: v:
+ lib.nameValuePair "webapps/webhooks/${k}.php" {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v;
+ keyDependencies = [ binEnv ];
+ }) env // lib.attrsets.mapAttrs' (k: v:
+ lib.nameValuePair "webapps/webhooks/${k}/index.php" {
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0400";
+ text = builtins.replaceStrings ["{{webhooks-bin-env}}"] [ "${binEnv}" ] v;
+ keyDependencies = [ binEnv ];
+ }) env // {
+ "webapps/webhooks" = {
+ isDir = true;
+ user = "wwwrun";
+ group = "wwwrun";
+ permissions = "0500";
+ };
+ };
+}
diff --git a/systems/eldiron/websites/tools/ympd.nix b/systems/eldiron/websites/tools/ympd.nix
new file mode 100644
index 0000000..0d8d41d
--- /dev/null
+++ b/systems/eldiron/websites/tools/ympd.nix
@@ -0,0 +1,54 @@
+{ env, config }:
+let
+ ympd = rec {
+ config = {
+ webPort = "localhost:${toString env.listenPort}";
+ host = env.mpd.host;
+ port = env.mpd.port;
+ };
+ apache = {
+ modules = [
+ "proxy_wstunnel"
+ ];
+ vhostConf = ''
+
+ Use LDAPConnect
+ Require ldap-group cn=users,cn=mpd,ou=services,dc=immae,dc=eu
+
+
+ RedirectMatch permanent "^/mpd$" "/mpd/"
+
+ ProxyPass http://${config.webPort}/
+ ProxyPassReverse http://${config.webPort}/
+ ProxyPreserveHost on
+
+
+ ProxyPass ws://${config.webPort}/ws
+
+
+ ProxyPass unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3
+ ProxyPassReverse unix:///run/mpd/mp3.sock|http://tools.immae.eu/mpd/mp3
+
+
+ ProxyPass unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg
+ ProxyPassReverse unix:///run/mpd/ogg.sock|http://tools.immae.eu/mpd/ogg
+
+ '';
+ };
+ };
+in
+ ympd // {
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "mpd website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https_auth" "tools.immae.eu" "/mpd/" "ympd"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "MPD (YMPD)";
+ _webstatus_url = "https://tools.immae.eu/mpd/";
+ }
+ ];
+ }
diff --git a/systems/eldiron/websites/tools/yourls.nix b/systems/eldiron/websites/tools/yourls.nix
new file mode 100644
index 0000000..9e54b0d
--- /dev/null
+++ b/systems/eldiron/websites/tools/yourls.nix
@@ -0,0 +1,118 @@
+{ env, yourls, yourls-plugins, config }:
+rec {
+ keys."webapps/tools-yourls" = {
+ user = apache.user;
+ group = apache.group;
+ permissions = "0400";
+ text = ''
+
+
+ SetHandler "proxy:unix:${socket}|fcgi://localhost"
+
+
+ AllowOverride None
+ Require all granted
+
+ RewriteEngine On
+ RewriteBase /url/
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule ^.*$ /url/yourls-loader.php [L]
+
+ DirectoryIndex index.php
+
+ '';
+ };
+ phpFpm = rec {
+ serviceDeps = [ "mysql.service" "openldap.service" ];
+ basedir = builtins.concatStringsSep ":" (
+ [ webRoot config.secrets.fullPaths."webapps/tools-yourls" ]
+ ++ webRoot.plugins);
+ pool = {
+ "listen.owner" = apache.user;
+ "listen.group" = apache.group;
+ "pm" = "ondemand";
+ "pm.max_children" = "60";
+ "pm.process_idle_timeout" = "60";
+
+ # Needed to avoid clashes in browser cookies (same domain)
+ "php_value[session.name]" = "YourlsPHPSESSID";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:Yourls:'";
+ "php_admin_value[open_basedir]" = "${basedir}:/tmp";
+ };
+ };
+ monitoringPlugins = [ "http" ];
+ monitoringObjects.service = [
+ {
+ service_description = "yourl website is running on tools.immae.eu";
+ host_name = config.hostEnv.fqdn;
+ use = "external-web-service";
+ check_command = ["check_https" "tools.immae.eu" "/url/admin/" "YOURLS"];
+
+ servicegroups = "webstatus-webapps";
+ _webstatus_name = "YOURLS";
+ _webstatus_url = "https://tools.immae.eu/url/admin/";
+ }
+
+ ];
+}
diff --git a/systems/eldiron/websites/visio/default.nix b/systems/eldiron/websites/visio/default.nix
new file mode 100644
index 0000000..76d1960
--- /dev/null
+++ b/systems/eldiron/websites/visio/default.nix
@@ -0,0 +1,63 @@
+{ lib, pkgs, config, ... }:
+let
+ port = config.myEnv.ports.galene_port;
+ cfg = config.myServices.websites.tools.visio;
+in {
+ options.myServices.websites.tools.visio = {
+ enable = lib.mkEnableOption "enable visio website";
+ };
+
+ config = lib.mkIf cfg.enable {
+ myServices.dns.zones."immae.eu".subdomains.visio =
+ with config.myServices.dns.helpers; ips servers.eldiron.ips.main;
+
+ myServices.chatonsProperties.services.galene = {
+ file.datetime = "2022-08-21T22:45:00";
+ service = {
+ name = "Galene";
+ description = "The Galène videoconference server";
+ website = "https://visio.immae.eu/";
+ status.level = "OK";
+ status.description = "OK";
+ registration."" = ["NONE"];
+ registration.load = "OPEN";
+ install.type = "PACKAGE";
+ };
+ software = {
+ name = "Galene";
+ website = "https://galene.org/";
+ license.url = "https://github.com/jech/galene/blob/master/LICENCE";
+ license.name = "MIT License";
+ version = pkgs.galene.version;
+ source.url = "https://github.com/jech/galene";
+ };
+ };
+ services.galene = {
+ enable = true;
+ httpPort = port;
+ insecure = true;
+ # hack to bypass module's limitations
+ dataDir = "/var/lib/galene/data -http localhost:${builtins.toString port}";
+ };
+ systemd.services.galene.serviceConfig.RestrictAddressFamilies = lib.mkForce [ "AF_INET" "AF_INET6" "AF_NETLINK" ];
+ security.acme.certs.eldiron.extraDomainNames = [ "visio.immae.eu" ];
+ services.websites.env.tools.vhostConfs.visio = {
+ certName = "eldiron";
+ hosts = ["visio.immae.eu" ];
+ root = null;
+ extraConfig = [
+ ''
+ ProxyPass /ws ws://localhost:${builtins.toString port}/ws
+ ProxyPassReverse /ws ws://localhost:${builtins.toString port}/ws
+
+ ProxyPass / http://localhost:${builtins.toString port}/
+ ProxyPassReverse / http://localhost:${builtins.toString port}/
+
+ ProxyPreserveHost On
+ ''
+ ];
+ };
+
+ };
+}
+
diff --git a/systems/eldiron/websites/vpn/default.nix b/systems/eldiron/websites/vpn/default.nix
new file mode 100644
index 0000000..ea54691
--- /dev/null
+++ b/systems/eldiron/websites/vpn/default.nix
@@ -0,0 +1,13 @@
+{ lib, pkgs, config, ... }:
+let
+ cfg = config.myServices.vpn;
+in {
+ config = lib.mkIf cfg.enable {
+ security.acme.certs.eldiron.extraDomainNames = [ "vpn.immae.eu" ];
+ services.websites.env.tools.vhostConfs.vpn = {
+ certName = "eldiron";
+ hosts = [ "vpn.immae.eu" ];
+ root = ./www;
+ };
+ };
+}
diff --git a/systems/eldiron/websites/vpn/www/index.html b/systems/eldiron/websites/vpn/www/index.html
new file mode 100644
index 0000000..fc2618a
--- /dev/null
+++ b/systems/eldiron/websites/vpn/www/index.html
@@ -0,0 +1,91 @@
+
+
+
+ VPN configuration
+
+
+
+
+
+
+
Installation
+
+ Installer tinc
+ Créer un fichier /etc/tinc/Immae/tinc.conf sur ce modèle, en remplaçant la ligne A choisir
par un nom de la forme DomaineMachine. La machine sera accessible par machine.domaine.immae.eu
par la suite
+
+Name = A choisir
+Mode = switch
+Interface = vpn6
+ConnectTo = ImmaeEu
+
+# The tap device tinc will use.
+# Default is /dev/tap0 for ethertap or FreeBSD,
+# /dev/tun0 for Solaris and OpenBSD,
+# and /dev/net/tun for Linux tun/tap device.
+Device = /dev/net/tun
+LocalDiscovery = yes
+
+
+ Vérifier l'existence du device indiqué à la ligne "Device
" dans le système.
+ ls /dev/net/tun
+
+ Si tinc tourne déjà, l'arrêter !!
+ Générer les clés :
+ tincd -K -n Immae
+ Stocker la clé privée dans /etc/tinc/Immae/rsa_key.priv
et la clé publique dans un autre dossier
+ (pas /etc/tinc/Immae/hosts/
comme proposé par défaut ).
+ L'endroit importe peu, elle ne sera pas conservée.
+ M'envoyer le nom choisi dans tinc.conf
, et la clé publique
+ Cloner le dépôt des hôtes du réseau
+
+cd /etc/tinc/Immae
+git clone https://git.immae.eu/perso/Immae/Config/tinc/hosts
+
+
+ Une fois que j'ai confirmé avoir reçu la clé :
+
+cd /etc/tinc/Immae/hosts
+git pull origin master
+
+
+ Uniquement pour Debian/Ubuntu: Ajouter Immae
dans /etc/tinc/nets.boot
(créer le fichier si nécessaire).
+ Selon le système, démarrer tinc :
+
+/etc/init.d/tinc start
+
+ ou
+
+systemctl enable tincd@Immae.service
+systemctl start tincd@Immae.service
+
+
+
+
+
Choix d'ip
+
+
+
+
diff --git a/systems/eldiron/websites/vpn/www/style.css b/systems/eldiron/websites/vpn/www/style.css
new file mode 100644
index 0000000..b177fec
--- /dev/null
+++ b/systems/eldiron/websites/vpn/www/style.css
@@ -0,0 +1,61 @@
+* {
+ margin:0;
+ padding:0;
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ box-sizing: border-box;
+}
+
+html {
+ min-height:100%;
+ border-top:10px solid #ECEEF1;
+ border-bottom:10px solid #ECEEF1;
+ color:#61666c;
+ font-weight:400;
+ font-size:1em;
+ font-family:'Open Sans', sans-serif;
+ line-height:2em;
+}
+body {
+ padding:20px;
+ -webkit-backface-visibility:hidden;
+}
+code {
+ font-family:consolas,monospace;
+}
+a {
+ color:#61666c;
+ text-decoration:none;
+}
+a, img {
+ border:none;
+ outline:none
+}
+a:hover {
+ color:#2a2a2a;
+}
+
+.instructions {
+ margin:0 auto;
+ padding-top:20px;
+ max-width:80%;
+}
+
+.instructions a {
+ text-decoration: underline;
+}
+
+.instructions h2 {
+ margin-top: 10px;
+}
+.instructions em.important:before {
+ content: "⚠ Important ⚠ ";
+ color: red;
+}
+.instructions pre {
+ width: 50em;
+ padding: 10px 15px;
+ display: table;
+ border: 1px inset black;
+ line-height: 1em;
+}
diff --git a/systems/eldiron/webstats/default.nix b/systems/eldiron/webstats/default.nix
new file mode 100644
index 0000000..0057f64
--- /dev/null
+++ b/systems/eldiron/webstats/default.nix
@@ -0,0 +1,80 @@
+{ lib, pkgs, config, ... }:
+let
+ name = "goaccess";
+ cfg = config.services.webstats;
+in {
+ options.services.webstats = {
+ dataDir = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib/${name}";
+ description = ''
+ The directory where Goaccess stores its data.
+ '';
+ };
+ sites = lib.mkOption {
+ type = lib.types.listOf (lib.types.submodule {
+ options = {
+ conf = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ description = ''
+ use custom goaccess configuration file instead of the
+ default one.
+ '';
+ };
+ name = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ Domain name. Corresponds to the Apache file name and the
+ folder name in which the state will be saved.
+ '';
+ };
+ };
+ });
+ default = [];
+ description = "Sites to generate stats";
+ };
+ };
+
+ config = lib.mkIf (builtins.length cfg.sites > 0) {
+ environment.systemPackages = [
+ pkgs.goaccess
+ ];
+
+ services.cron = {
+ enable = true;
+ systemCronJobs = let
+ stats = domain: conf: let
+ config = if builtins.isNull conf
+ then pkgs.runCommand "goaccess.conf" {
+ dbPath = "${cfg.dataDir}/${domain}";
+ } "substituteAll ${./goaccess.conf} $out"
+ else conf;
+ d = pkgs.writeScriptBin "stats-${domain}" ''
+ #!${pkgs.stdenv.shell}
+ set -e
+ shopt -s nullglob
+ TMPFILE=$(mktemp)
+ trap "rm -f $TMPFILE" EXIT
+
+ mkdir -p ${cfg.dataDir}/${domain}
+ for i in /var/log/httpd/access-${domain}*.gz /var/log/httpd/*/access-${domain}*.gz; do
+ zcat "$i" >> $TMPFILE
+ done
+ cat /var/log/httpd/*access-${domain}.log /var/log/httpd/*/access-${domain}.log > $TMPFILE
+ ${pkgs.goaccess}/bin/goaccess $TMPFILE --no-progress -o ${cfg.dataDir}/${domain}/index.html -p ${config}
+ '';
+ in "${d}/bin/stats-${domain}";
+ allStats = sites: pkgs.writeScript "stats" ''
+ #!${pkgs.stdenv.shell}
+
+ mkdir -p ${cfg.dataDir}
+ ${builtins.concatStringsSep "\n" (map (v: stats v.name v.conf) sites)}
+ '';
+ in
+ [
+ "5 0 * * * root ${allStats cfg.sites}"
+ ];
+ };
+ };
+}
diff --git a/systems/eldiron/webstats/goaccess.conf b/systems/eldiron/webstats/goaccess.conf
new file mode 100644
index 0000000..c6c244a
--- /dev/null
+++ b/systems/eldiron/webstats/goaccess.conf
@@ -0,0 +1,100 @@
+time-format %H:%M:%S
+date-format %d/%b/%Y
+
+log-format VCOMBINED
+#= %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
+
+html-prefs {"theme":"bright","layout":"vertical"}
+
+# old
+exclude-ip 188.165.209.148
+exclude-ip 178.33.252.96
+exclude-ip 2001:41d0:2:9c94::1
+exclude-ip 2001:41d0:2:9c94::
+# eldiron
+exclude-ip 176.9.151.89
+exclude-ip 2a01:4f8:160:3445::
+# monitoring-1
+exclude-ip 95.216.164.150
+exclude-ip 2a01:4f9:c010:1c95::
+
+no-query-string true
+
+persist true
+restore true
+db-path @dbPath@
+
+ignore-panel REFERRERS
+ignore-panel KEYPHRASES
+
+static-file .css
+static-file .js
+static-file .jpg
+static-file .png
+static-file .gif
+static-file .ico
+static-file .jpeg
+static-file .pdf
+static-file .csv
+static-file .mpeg
+static-file .mpg
+static-file .swf
+static-file .woff
+static-file .woff2
+static-file .xls
+static-file .xlsx
+static-file .doc
+static-file .docx
+static-file .ppt
+static-file .pptx
+static-file .txt
+static-file .zip
+static-file .ogg
+static-file .mp3
+static-file .mp4
+static-file .exe
+static-file .iso
+static-file .gz
+static-file .rar
+static-file .svg
+static-file .bmp
+static-file .tar
+static-file .tgz
+static-file .tiff
+static-file .tif
+static-file .ttf
+static-file .flv
+#static-file .less
+#static-file .ac3
+#static-file .avi
+#static-file .bz2
+#static-file .class
+#static-file .cue
+#static-file .dae
+#static-file .dat
+#static-file .dts
+#static-file .ejs
+#static-file .eot
+#static-file .eps
+#static-file .img
+#static-file .jar
+#static-file .map
+#static-file .mid
+#static-file .midi
+#static-file .ogv
+#static-file .webm
+#static-file .mkv
+#static-file .odp
+#static-file .ods
+#static-file .odt
+#static-file .otf
+#static-file .pict
+#static-file .pls
+#static-file .ps
+#static-file .qt
+#static-file .rm
+#static-file .svgz
+#static-file .wav
+#static-file .webp
+
+
--
cgit v1.2.3